From 2e250cf98fba45fabb6075b5c5cb7df8594f3dd0 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Fri, 10 Jul 2026 13:43:17 +0200 Subject: [PATCH 01/88] Added code_of_conduct.md --- CODE_OF_CONDUCT.md | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..71a17e4 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,47 @@ +# Code of Conduct + +## Our Pledge + +We as contributors and maintainers pledge to make participation in our community a harassment-free experience for everyone. + +As this software focuses primarily on **accessibility**, we place great emphasis on ensuring that every person—regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation—can participate equally and without exclusion. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience +* Focusing on what is best not just for us as individuals, but for the larger community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and unwelcome sexual attention or advances +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Enforcement Responsibilities + +Project maintainers are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. + +Maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. + +## Scope + +This Code of Conduct applies within all project spaces (e.g., GitHub/GitLab repository), and it also applies in all official community communication channels, including our Discord server. It also applies when an individual is officially representing the community in public spaces. + +## Reporting and Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported directly to the project maintainers. Please use the following official communication channel to report an incident: + +* **Discord:** [Report an incident / Open a ticket here](https://discord.gg) + +All complaints will be reviewed and investigated promptly and fairly. Project maintainers are obligated to respect the privacy and security of the reporter of any incident. + +## Attribution + +This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at . -- 2.54.0 From 9f3be1f630cb4cc670a658930ae31d701e1895c6 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Fri, 10 Jul 2026 14:09:58 +0200 Subject: [PATCH 02/88] Created all necessary folders and moved CODE_OF_CONDUCT.md in the .github folder --- CODE_OF_CONDUCT.md => .github/CODE_OF_CONDUCT.md | 0 apps/.gitkeep | 0 docs/adr/.gitkeep | 0 docs/architecture/.gitkeep | 0 examples/.gitkeep | 0 packages/.gitkeep | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename CODE_OF_CONDUCT.md => .github/CODE_OF_CONDUCT.md (100%) create mode 100644 apps/.gitkeep create mode 100644 docs/adr/.gitkeep create mode 100644 docs/architecture/.gitkeep create mode 100644 examples/.gitkeep create mode 100644 packages/.gitkeep diff --git a/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md similarity index 100% rename from CODE_OF_CONDUCT.md rename to .github/CODE_OF_CONDUCT.md diff --git a/apps/.gitkeep b/apps/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/adr/.gitkeep b/docs/adr/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/architecture/.gitkeep b/docs/architecture/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/examples/.gitkeep b/examples/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/packages/.gitkeep b/packages/.gitkeep new file mode 100644 index 0000000..e69de29 -- 2.54.0 From e56c667b405bb100137f929ab2b692926fb1c3ad Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Fri, 10 Jul 2026 14:23:57 +0200 Subject: [PATCH 03/88] Installed pnpm and init a package.json. Furthermore set "runtime" and the necessary node version --- package.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 package.json diff --git a/package.json b/package.json new file mode 100644 index 0000000..d193bc9 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "LUNA-Charts", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devEngines": { + "runtime": { + "name": "node", + "version": ">=22.0.0" + }, + "packageManager": { + "name": "pnpm", + "version": "^11.11.0", + "onFail": "download" + } + }, + "type": "module" +} -- 2.54.0 From 0a732ab9a0e98f6d5d2d818b1ea3d89d528151ab Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Fri, 10 Jul 2026 14:34:06 +0200 Subject: [PATCH 04/88] Added pnpm-workspace.yaml. so project works as a monorepo --- pnpm-workspace.yaml | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 pnpm-workspace.yaml diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..e69de29 -- 2.54.0 From d8f67ff8aba3ff6cc51edf5ead5a2c29bafa36ae Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Fri, 10 Jul 2026 14:55:35 +0200 Subject: [PATCH 05/88] Updated pnpm-workspace.yaml --- pnpm-workspace.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e69de29..4998798 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - "packages/*" + - "apps/*" \ No newline at end of file -- 2.54.0 From a87e8bc803a040868841c9792f85c3b529e76d39 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Fri, 10 Jul 2026 15:03:42 +0200 Subject: [PATCH 06/88] Added tsconfig.base.yaml and set rules --- tsconfig.base.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 tsconfig.base.yaml diff --git a/tsconfig.base.yaml b/tsconfig.base.yaml new file mode 100644 index 0000000..33d81d1 --- /dev/null +++ b/tsconfig.base.yaml @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "Bundler", + "strict": true, + "noImplicitOverride": true, + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true, + "declaration": true, + "sourceMap": true, + "isolatedModules": true, + "skipLibCheck": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + } +} \ No newline at end of file -- 2.54.0 From b7be19cfc39bd60876459aecf6725948cb7348a8 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Fri, 10 Jul 2026 15:03:58 +0200 Subject: [PATCH 07/88] Set version of pnpm --- package.json | 2 +- pnpm-lock.yaml | 199 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 pnpm-lock.yaml diff --git a/package.json b/package.json index d193bc9..ab917dc 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ }, "packageManager": { "name": "pnpm", - "version": "^11.11.0", + "version": "11.11.0", "onFail": "download" } }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..d5ff9ee --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,199 @@ +--- +lockfileVersion: '9.0' + +importers: + + .: + configDependencies: {} + packageManagerDependencies: + '@pnpm/exe': + specifier: ^11.11.0 + version: 11.11.0 + pnpm: + specifier: ^11.11.0 + version: 11.11.0 + +packages: + + '@pnpm/exe@11.11.0': + resolution: {integrity: sha512-OpTrbkAU0Ur8gBwhAT6mbWwlA1bFU8zPcFNdp/img/RqFIc7Dn0j0crW9rz5hxTWo/UBQjy6Sb9jh+N5bRSd+g==} + hasBin: true + + '@pnpm/linux-arm64@11.11.0': + resolution: {integrity: sha512-62K/kQY3jaoQ96MNUi0NLcTSSDO2QrtziOA2IK5R/m+DxpSwXbxFSQHYx8oOg0r1+MFVqwuDkFjXe6DyW3y58g==} + cpu: [arm64] + os: [linux] + + '@pnpm/linux-x64@11.11.0': + resolution: {integrity: sha512-rwMbNJR+PstRu+ymWoApei1CWrAnsnW3tm+3H8qOxbp8duiaj6u7DxlMzhKbVpFwylxcJdeGwZ5tReBFOVpsdw==} + cpu: [x64] + os: [linux] + + '@pnpm/linuxstatic-arm64@11.11.0': + resolution: {integrity: sha512-OcmrMw1hxNee7KTBpE0yToTZziH/SCmJWwjB7YN2NmsxZVPKM2vtOWFdZufW0YN5JffKMaHbPZ2ulgYBM5qAQw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@pnpm/linuxstatic-x64@11.11.0': + resolution: {integrity: sha512-pWeAYeS+PPah6mXcJbOr+nPwEpyQau4iPcsqNUhTK9G5/qpG5dU1m8oHeIH83PuUUvvdJddLE1PXUkGM+QCI6g==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@pnpm/macos-arm64@11.11.0': + resolution: {integrity: sha512-62P8Pe4yvMkdl2nxswCjM5X835i9Judk68CZvv8OnWsm7CVCEZ61SEBnNTpjJ4kXzdayFjRpPwE/jfJSvPaWww==} + cpu: [arm64] + os: [darwin] + + '@pnpm/win-arm64@11.11.0': + resolution: {integrity: sha512-yYAx+A1oT+mSgrIzysuAvdYYMYEfAa+z3/UCGY3L5VC9oabs9qi71LbTan1cDui/AadrIvD177k9mV4V38KAJg==} + cpu: [arm64] + os: [win32] + + '@pnpm/win-x64@11.11.0': + resolution: {integrity: sha512-ehTuyM5Rrp4ye0SdtAJkUS+9ykfwdDY9SPqiK3+bxXPx3LD5aeDw2EBksTh/xRTgqFdYmoFR86cABFt9yBr0GA==} + cpu: [x64] + os: [win32] + + '@reflink/reflink-darwin-arm64@0.1.19': + resolution: {integrity: sha512-ruy44Lpepdk1FqDz38vExBY/PVUsjxZA+chd9wozjUH9JjuDT/HEaQYA6wYN9mf041l0yLVar6BCZuWABJvHSA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@reflink/reflink-darwin-x64@0.1.19': + resolution: {integrity: sha512-By85MSWrMZa+c26TcnAy8SDk0sTUkYlNnwknSchkhHpGXOtjNDUOxJE9oByBnGbeuIE1PiQsxDG3Ud+IVV9yuA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@reflink/reflink-linux-arm64-gnu@0.1.19': + resolution: {integrity: sha512-7P+er8+rP9iNeN+bfmccM4hTAaLP6PQJPKWSA4iSk2bNvo6KU6RyPgYeHxXmzNKzPVRcypZQTpFgstHam6maVg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@reflink/reflink-linux-arm64-musl@0.1.19': + resolution: {integrity: sha512-37iO/Dp6m5DDaC2sf3zPtx/hl9FV3Xze4xoYidrxxS9bgP3S8ALroxRK6xBG/1TtfXKTvolvp+IjrUU6ujIGmA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@reflink/reflink-linux-x64-gnu@0.1.19': + resolution: {integrity: sha512-jbI8jvuYCaA3MVUdu8vLoLAFqC+iNMpiSuLbxlAgg7x3K5bsS8nOpTRnkLF7vISJ+rVR8W+7ThXlXlUQ93ulkw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@reflink/reflink-linux-x64-musl@0.1.19': + resolution: {integrity: sha512-e9FBWDe+lv7QKAwtKOt6A2W/fyy/aEEfr0g6j/hWzvQcrzHCsz07BNQYlNOjTfeytrtLU7k449H1PI95jA4OjQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@reflink/reflink-win32-arm64-msvc@0.1.19': + resolution: {integrity: sha512-09PxnVIQcd+UOn4WAW73WU6PXL7DwGS6wPlkMhMg2zlHHG65F3vHepOw06HFCq+N42qkaNAc8AKIabWvtk6cIQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@reflink/reflink-win32-x64-msvc@0.1.19': + resolution: {integrity: sha512-E//yT4ni2SyhwP8JRjVGWr3cbnhWDiPLgnQ66qqaanjjnMiu3O/2tjCPQXlcGc/DEYofpDc9fvhv6tALQsMV9w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@reflink/reflink@0.1.19': + resolution: {integrity: sha512-DmCG8GzysnCZ15bres3N5AHCmwBwYgp0As6xjhQ47rAUTUXxJiK+lLUxaGsX3hd/30qUpVElh05PbGuxRPgJwA==} + engines: {node: '>= 10'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + pnpm@11.11.0: + resolution: {integrity: sha512-RGP2X9gO2A1pvB1L8WPulPYFxzgPwxi7Wy6+FfjNEtScUaTVnpUbQB52TTtsp1HL9RvFDtcAGmvLSTXmhMNIgg==} + engines: {node: '>=22.13'} + hasBin: true + +snapshots: + + '@pnpm/exe@11.11.0': + dependencies: + '@reflink/reflink': 0.1.19 + detect-libc: 2.1.2 + optionalDependencies: + '@pnpm/linux-arm64': 11.11.0 + '@pnpm/linux-x64': 11.11.0 + '@pnpm/linuxstatic-arm64': 11.11.0 + '@pnpm/linuxstatic-x64': 11.11.0 + '@pnpm/macos-arm64': 11.11.0 + '@pnpm/win-arm64': 11.11.0 + '@pnpm/win-x64': 11.11.0 + + '@pnpm/linux-arm64@11.11.0': + optional: true + + '@pnpm/linux-x64@11.11.0': + optional: true + + '@pnpm/linuxstatic-arm64@11.11.0': + optional: true + + '@pnpm/linuxstatic-x64@11.11.0': + optional: true + + '@pnpm/macos-arm64@11.11.0': + optional: true + + '@pnpm/win-arm64@11.11.0': + optional: true + + '@pnpm/win-x64@11.11.0': + optional: true + + '@reflink/reflink-darwin-arm64@0.1.19': + optional: true + + '@reflink/reflink-darwin-x64@0.1.19': + optional: true + + '@reflink/reflink-linux-arm64-gnu@0.1.19': + optional: true + + '@reflink/reflink-linux-arm64-musl@0.1.19': + optional: true + + '@reflink/reflink-linux-x64-gnu@0.1.19': + optional: true + + '@reflink/reflink-linux-x64-musl@0.1.19': + optional: true + + '@reflink/reflink-win32-arm64-msvc@0.1.19': + optional: true + + '@reflink/reflink-win32-x64-msvc@0.1.19': + optional: true + + '@reflink/reflink@0.1.19': + optionalDependencies: + '@reflink/reflink-darwin-arm64': 0.1.19 + '@reflink/reflink-darwin-x64': 0.1.19 + '@reflink/reflink-linux-arm64-gnu': 0.1.19 + '@reflink/reflink-linux-arm64-musl': 0.1.19 + '@reflink/reflink-linux-x64-gnu': 0.1.19 + '@reflink/reflink-linux-x64-musl': 0.1.19 + '@reflink/reflink-win32-arm64-msvc': 0.1.19 + '@reflink/reflink-win32-x64-msvc': 0.1.19 + + detect-libc@2.1.2: {} + + pnpm@11.11.0: {} + +--- -- 2.54.0 From 8513c987c9d265b108ad1615d78dde1e6ad1ce13 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Fri, 10 Jul 2026 15:55:44 +0200 Subject: [PATCH 08/88] Installed ESLint and Prettier --- .gitignore | 1 + .prettierignore | 4 + .prettierrc.json | 6 + eslint.config.js | 8 + package.json | 8 +- pnpm-lock.yaml | 563 +++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 589 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 .prettierignore create mode 100644 .prettierrc.json create mode 100644 eslint.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..26da0fb --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +dist +www +node_modules +.stencil \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..83311fa --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "singleQuote": true, + "semi": true, + "trailingComma": "es5", + "printWidth": 100 +} \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..03576f9 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,8 @@ +import js from '@eslint/js'; + +export default [ + js.configs.recommended, + { + ignores: ['**/dist/**', '**/www/**', '**/node_modules/**', '**/.stencil/**'], + }, +]; \ No newline at end of file diff --git a/package.json b/package.json index ab917dc..8b38155 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,8 @@ "description": "", "main": "index.js", "scripts": { + "lint": "eslint .", + "format": "prettier --write .", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], @@ -20,5 +22,9 @@ "onFail": "download" } }, - "type": "module" + "type": "module", + "devDependencies": { + "eslint": "^10.6.0", + "prettier": "^3.9.4" + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d5ff9ee..e347005 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -197,3 +197,566 @@ snapshots: pnpm@11.11.0: {} --- +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + eslint: + specifier: ^10.6.0 + version: 10.6.0 + prettier: + specifier: ^3.9.4 + version: 3.9.4 + +packages: + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/config-helpers@0.6.0': + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/plugin-kit@0.7.2': + resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + brace-expansion@5.0.7: + resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} + engines: {node: 18 || 20 || >=22} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.6.0: + resolution: {integrity: sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.9.4: + resolution: {integrity: sha512-yWG/o/4oJfo036EKAfK6ACAoDOfHeRHx4tuxkfBZiauURiaSmYwlpOr5LQqKtIkRD2z1PLteme2WoxEnj4tHTg==} + engines: {node: '>=14'} + hasBin: true + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0)': + dependencies: + eslint: 10.6.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.23.5': + dependencies: + '@eslint/object-schema': 3.0.5 + debug: 4.4.3 + minimatch: 10.2.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.6.0': + dependencies: + '@eslint/core': 1.2.1 + + '@eslint/core@1.2.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/object-schema@3.0.5': {} + + '@eslint/plugin-kit@0.7.2': + dependencies: + '@eslint/core': 1.2.1 + levn: 0.4.1 + + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@types/esrecurse@4.3.1': {} + + '@types/estree@1.0.9': {} + + '@types/json-schema@7.0.15': {} + + acorn-jsx@5.3.2(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + + acorn@8.17.0: {} + + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + balanced-match@4.0.4: {} + + brace-expansion@5.0.7: + dependencies: + balanced-match: 4.0.4 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + escape-string-regexp@4.0.0: {} + + eslint-scope@9.1.2: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.9 + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@10.6.0: + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.6.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.2 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@11.2.0: + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint-visitor-keys: 5.0.1 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.4.2 + keyv: 4.5.4 + + flatted@3.4.2: {} + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + ignore@5.3.2: {} + + imurmurhash@0.1.4: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + isexe@2.0.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.7 + + ms@2.1.3: {} + + natural-compare@1.4.0: {} + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + prelude-ls@1.2.1: {} + + prettier@3.9.4: {} + + punycode@2.3.1: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + yocto-queue@0.1.0: {} -- 2.54.0 From b722e113ab7990218f73b51a18c995498a633b8a Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Fri, 10 Jul 2026 16:15:35 +0200 Subject: [PATCH 09/88] Set configuration for changeset --- .changeset/README.md | 8 + .changeset/config.json | 11 + package.json | 6 +- pnpm-lock.yaml | 721 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 745 insertions(+), 1 deletion(-) create mode 100644 .changeset/README.md create mode 100644 .changeset/config.json diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 0000000..654c6d4 --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets). + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md). diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 0000000..3b48572 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.1.4/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [], + "linked": [], + "access": "restricted", + "baseBranch": "dev", + "updateInternalDependencies": "patch", + "ignore": ["apps/docs"] +} diff --git a/package.json b/package.json index 8b38155..0b8d1d9 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,10 @@ "scripts": { "lint": "eslint .", "format": "prettier --write .", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "changeset": "changeset", + "version": "changeset version", + "release": "changeset publish" }, "keywords": [], "author": "", @@ -24,6 +27,7 @@ }, "type": "module", "devDependencies": { + "@changesets/cli": "^2.31.0", "eslint": "^10.6.0", "prettier": "^3.9.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e347005..71b6f7c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -207,6 +207,9 @@ importers: .: devDependencies: + '@changesets/cli': + specifier: ^2.31.0 + version: 2.31.0 eslint: specifier: ^10.6.0 version: 10.6.0 @@ -216,6 +219,65 @@ importers: packages: + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} + engines: {node: '>=6.9.0'} + + '@changesets/apply-release-plan@7.1.1': + resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} + + '@changesets/assemble-release-plan@6.0.10': + resolution: {integrity: sha512-rSDcqdJ9KbVyjpBIuCidhvZNIiVt1XaIYp73ycVQRIA5n/j6wQaEk0ChRLMUQ1vkxZe51PTQ9OIhbg6HQMW45A==} + + '@changesets/changelog-git@0.2.1': + resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} + + '@changesets/cli@2.31.0': + resolution: {integrity: sha512-AhI4enNTgHu2IZr6K4WZyf0EPch4XVMn1yOMFmCD9gsfBGqMYaHXls5HyDv6/CL5axVQABz68eG30eCtbr2wFg==} + hasBin: true + + '@changesets/config@3.1.4': + resolution: {integrity: sha512-pf0bvD/v6WI2cRlZ6hzpjtZdSlXDXMAJ+Iz7xfFzV4ZxJ8OGGAON+1qYc99ZPrijnt4xp3VGG7eNvAOGS24V1Q==} + + '@changesets/errors@0.2.0': + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + + '@changesets/get-dependents-graph@2.1.4': + resolution: {integrity: sha512-ZsS00x6WvmHq3sQv8oCMwL0f/z3wbXCVuSVTJwCnnmbC/iBdNJGFx1EcbMG4PC6sXRyH69liM4A2WKXzn/kRPg==} + + '@changesets/get-release-plan@4.0.16': + resolution: {integrity: sha512-2K5Om6CrMPm45rtvckfzWo7e9jOVCKLCnXia5eUPaURH7/LWzri7pK1TycdzAuAtehLkW7VPbWLCSExTHmiI6g==} + + '@changesets/get-version-range-type@0.4.0': + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + + '@changesets/git@3.0.4': + resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==} + + '@changesets/logger@0.1.1': + resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} + + '@changesets/parse@0.4.3': + resolution: {integrity: sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==} + + '@changesets/pre@2.0.2': + resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} + + '@changesets/read@0.6.7': + resolution: {integrity: sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==} + + '@changesets/should-skip-package@0.1.2': + resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} + + '@changesets/types@4.1.0': + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + + '@changesets/types@6.1.0': + resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} + + '@changesets/write@0.4.0': + resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} + '@eslint-community/eslint-utils@4.9.1': resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -266,6 +328,33 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@manypkg/find-root@1.1.0': + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + + '@manypkg/get-packages@1.1.3': + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} @@ -275,6 +364,9 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -288,14 +380,43 @@ packages: ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + brace-expansion@5.0.7: resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} engines: {node: 18 || 20 || >=22} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + chardet@2.2.0: + resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -312,6 +433,18 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -342,6 +475,11 @@ packages: resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + esquery@1.7.0: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} @@ -358,19 +496,37 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -382,10 +538,37 @@ packages: flatted@3.4.2: resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + human-id@4.2.0: + resolution: {integrity: sha512-K3GbkIWqyvvlpfhBPlbEvD97TtqBpAYA4kt+cn2lD2x2HuohzZCibcA2nOlnJT6exqvJLggoB5nv2dNf192nEA==} + hasBin: true + + iconv-lite@0.7.3: + resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} + engines: {node: '>=0.10.0'} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -402,9 +585,29 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + js-yaml@3.15.0: + resolution: {integrity: sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==} + hasBin: true + + js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} + hasBin: true + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -414,6 +617,9 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -421,14 +627,33 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -439,14 +664,40 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-manager-detector@0.2.11: + resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -455,10 +706,30 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + prettier@3.9.4: resolution: {integrity: sha512-yWG/o/4oJfo036EKAfK6ACAoDOfHeRHx4tuxkfBZiauURiaSmYwlpOr5LQqKtIkRD2z1PLteme2WoxEnj4tHTg==} engines: {node: '>=14'} @@ -468,6 +739,35 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -476,10 +776,44 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + spawndamnit@3.0.1: + resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -498,6 +832,151 @@ packages: snapshots: + '@babel/runtime@7.29.7': {} + + '@changesets/apply-release-plan@7.1.1': + dependencies: + '@changesets/config': 3.1.4 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.4 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.8.5 + + '@changesets/assemble-release-plan@6.0.10': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.4 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + semver: 7.8.5 + + '@changesets/changelog-git@0.2.1': + dependencies: + '@changesets/types': 6.1.0 + + '@changesets/cli@2.31.0': + dependencies: + '@changesets/apply-release-plan': 7.1.1 + '@changesets/assemble-release-plan': 6.0.10 + '@changesets/changelog-git': 0.2.1 + '@changesets/config': 3.1.4 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.4 + '@changesets/get-release-plan': 4.0.16 + '@changesets/git': 3.0.4 + '@changesets/logger': 0.1.1 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.7 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@changesets/write': 0.4.0 + '@inquirer/external-editor': 1.0.3 + '@manypkg/get-packages': 1.1.3 + ansi-colors: 4.1.3 + enquirer: 2.4.1 + fs-extra: 7.0.1 + mri: 1.2.0 + package-manager-detector: 0.2.11 + picocolors: 1.1.1 + resolve-from: 5.0.0 + semver: 7.8.5 + spawndamnit: 3.0.1 + term-size: 2.2.1 + transitivePeerDependencies: + - '@types/node' + + '@changesets/config@3.1.4': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.4 + '@changesets/logger': 0.1.1 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.8 + + '@changesets/errors@0.2.0': + dependencies: + extendable-error: 0.1.7 + + '@changesets/get-dependents-graph@2.1.4': + dependencies: + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + picocolors: 1.1.1 + semver: 7.8.5 + + '@changesets/get-release-plan@4.0.16': + dependencies: + '@changesets/assemble-release-plan': 6.0.10 + '@changesets/config': 3.1.4 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.7 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/get-version-range-type@0.4.0': {} + + '@changesets/git@3.0.4': + dependencies: + '@changesets/errors': 0.2.0 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.8 + spawndamnit: 3.0.1 + + '@changesets/logger@0.1.1': + dependencies: + picocolors: 1.1.1 + + '@changesets/parse@0.4.3': + dependencies: + '@changesets/types': 6.1.0 + js-yaml: 4.3.0 + + '@changesets/pre@2.0.2': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + + '@changesets/read@0.6.7': + dependencies: + '@changesets/git': 3.0.4 + '@changesets/logger': 0.1.1 + '@changesets/parse': 0.4.3 + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + p-filter: 2.1.0 + picocolors: 1.1.1 + + '@changesets/should-skip-package@0.1.2': + dependencies: + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/types@4.1.0': {} + + '@changesets/types@6.1.0': {} + + '@changesets/write@0.4.0': + dependencies: + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + human-id: 4.2.0 + prettier: 2.8.8 + '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0)': dependencies: eslint: 10.6.0 @@ -544,12 +1023,47 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@inquirer/external-editor@1.0.3': + dependencies: + chardet: 2.2.0 + iconv-lite: 0.7.3 + + '@manypkg/find-root@1.1.0': + dependencies: + '@babel/runtime': 7.29.7 + '@types/node': 12.20.55 + find-up: 4.1.0 + fs-extra: 8.1.0 + + '@manypkg/get-packages@1.1.3': + dependencies: + '@babel/runtime': 7.29.7 + '@changesets/types': 4.1.0 + '@manypkg/find-root': 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + '@types/esrecurse@4.3.1': {} '@types/estree@1.0.9': {} '@types/json-schema@7.0.15': {} + '@types/node@12.20.55': {} + acorn-jsx@5.3.2(acorn@8.17.0): dependencies: acorn: 8.17.0 @@ -563,12 +1077,34 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ansi-colors@4.1.3: {} + + ansi-regex@5.0.1: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-union@2.1.0: {} + balanced-match@4.0.4: {} + better-path-resolve@1.0.0: + dependencies: + is-windows: 1.0.2 + brace-expansion@5.0.7: dependencies: balanced-match: 4.0.4 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + chardet@2.2.0: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -581,6 +1117,17 @@ snapshots: deep-is@0.1.4: {} + detect-indent@6.1.0: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + escape-string-regexp@4.0.0: {} eslint-scope@9.1.2: @@ -635,6 +1182,8 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 5.0.1 + esprima@4.0.1: {} + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -647,16 +1196,39 @@ snapshots: esutils@2.0.3: {} + extendable-error@0.1.7: {} + fast-deep-equal@3.1.3: {} + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -669,10 +1241,43 @@ snapshots: flatted@3.4.2: {} + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + graceful-fs@4.2.11: {} + + human-id@4.2.0: {} + + iconv-lite@0.7.3: + dependencies: + safer-buffer: 2.1.2 + ignore@5.3.2: {} imurmurhash@0.1.4: {} @@ -683,14 +1288,35 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-number@7.0.0: {} + + is-subdir@1.2.0: + dependencies: + better-path-resolve: 1.0.0 + + is-windows@1.0.2: {} + isexe@2.0.0: {} + js-yaml@3.15.0: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.3.0: + dependencies: + argparse: 2.0.1 + json-buffer@3.0.1: {} json-schema-traverse@0.4.1: {} json-stable-stringify-without-jsonify@1.0.1: {} + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -700,14 +1326,29 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 + lodash.startcase@4.4.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + minimatch@10.2.5: dependencies: brace-expansion: 5.0.7 + mri@1.2.0: {} + ms@2.1.3: {} natural-compare@1.4.0: {} @@ -721,34 +1362,114 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + outdent@0.5.0: {} + + p-filter@2.1.0: + dependencies: + p-map: 2.1.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + p-locate@5.0.0: dependencies: p-limit: 3.1.0 + p-map@2.1.0: {} + + p-try@2.2.0: {} + + package-manager-detector@0.2.11: + dependencies: + quansync: 0.2.11 + path-exists@4.0.0: {} path-key@3.1.1: {} + path-type@4.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + pify@4.0.1: {} + prelude-ls@1.2.1: {} + prettier@2.8.8: {} + prettier@3.9.4: {} punycode@2.3.1: {} + quansync@0.2.11: {} + + queue-microtask@1.2.3: {} + + read-yaml-file@1.1.0: + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.15.0 + pify: 4.0.1 + strip-bom: 3.0.0 + + resolve-from@5.0.0: {} + + reusify@1.1.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safer-buffer@2.1.2: {} + + semver@7.8.5: {} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 shebang-regex@3.0.0: {} + signal-exit@4.1.0: {} + + slash@3.0.0: {} + + spawndamnit@3.0.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + sprintf-js@1.0.3: {} + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: {} + + term-size@2.2.1: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 + universalify@0.1.2: {} + uri-js@4.4.1: dependencies: punycode: 2.3.1 -- 2.54.0 From bd7cd1030aed781e6260aa35a72487b92f7e343c Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 12 Jul 2026 01:15:50 +0200 Subject: [PATCH 10/88] Fixed all warnings --- LICENSE | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/LICENSE b/LICENSE index 5c83dc0..90fa3b7 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,5 @@ -GNU LESSER GENERAL PUBLIC LICENSE +# GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. @@ -7,7 +8,7 @@ Everyone is permitted to copy and distribute verbatim copies of this license doc This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. -0. Additional Definitions. +0.Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. @@ -101,7 +102,7 @@ The precise terms and conditions for copying, distribution and modification foll TERMS AND CONDITIONS -0. Definitions. +0.Definitions. “This License” refers to version 3 of the GNU General Public License. @@ -132,24 +133,24 @@ The Corresponding Source need not include anything that users can regenerate aut The Corresponding Source for a work in source code form is that same work. -2. Basic Permissions. +2.Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. -3. Protecting Users' Legal Rights From Anti-Circumvention Law. +3.Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. -4. Conveying Verbatim Copies. +4.Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. -5. Conveying Modified Source Versions. +5.Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. @@ -162,7 +163,7 @@ You may convey a work based on the Program, or the modifications to produce it f A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. -6. Conveying Non-Source Forms. +6.Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. @@ -187,7 +188,7 @@ The requirement to provide Installation Information does not include a requireme Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. -7. Additional Terms. +7.Additional Terms. “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. @@ -212,7 +213,7 @@ If you add terms to a covered work in accord with this section, you must place, Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. -8. Termination. +8.Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. @@ -221,17 +222,17 @@ Moreover, your license from a particular copyright holder is reinstated permanen Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. -9. Acceptance Not Required for Having Copies. +9.Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. -10. Automatic Licensing of Downstream Recipients. +10.Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. -11. Patents. +11.Patents. A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. @@ -248,13 +249,13 @@ A patent license is “discriminatory” if it does not include within the scope Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. -12. No Surrender of Others' Freedom. +12.No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. -13. Use with the GNU Affero General Public License. +13.Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. -14. Revised Versions of this License. +14.Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. @@ -263,13 +264,13 @@ If the Program specifies that a proxy can decide which future versions of the GN Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. -15. Disclaimer of Warranty. +15.Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. -16. Limitation of Liability. +16.Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -17. Interpretation of Sections 15 and 16. +17.Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS @@ -297,7 +298,7 @@ If the program does terminal interaction, make it output a short notice like thi This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. -The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. +The hypothetical commands `show w' and`show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . -- 2.54.0 From dbf4b550727a4d13080444738def3a9789b0efe7 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 12 Jul 2026 12:13:02 +0200 Subject: [PATCH 11/88] Added Introduction as README.md for the ADRs and defined a template for possibly new ADRs --- docs/adr/README.md | 190 +++++++++++++++++++++++++++++++++++++++++++ docs/adr/template.md | 117 ++++++++++++++++++++++++++ 2 files changed, 307 insertions(+) create mode 100644 docs/adr/README.md create mode 100644 docs/adr/template.md diff --git a/docs/adr/README.md b/docs/adr/README.md new file mode 100644 index 0000000..e2e36ee --- /dev/null +++ b/docs/adr/README.md @@ -0,0 +1,190 @@ +# Architecture Decision Records (ADRs) + +Architecture Wiki: [https://wiki.byting-pandas.ninja/en/Projects/LUNA-Charts/Introduction] + +## Purpose + +This directory contains the **Architecture Decision Records (ADRs)** for the LUNA Charts project. + +An Architecture Decision Record documents a significant architectural decision, the context in which it was made, the chosen solution, and its consequences. + +The goal is to preserve the reasoning behind architectural decisions so that future contributors and maintainers understand **why** a decision was made—not only **what** was implemented. + +ADRs complement the Architecture Development Method (ADM) documentation and serve as the primary record of architectural decisions throughout the project's lifecycle. + +--- + +## Architecture Documentation + +The complete software architecture of LUNA Charts is documented in the official Architecture Wiki. + +The wiki follows the **TOGAF Architecture Development Method (ADM)** and describes the project from the initial vision through implementation governance and long-term architecture evolution. + +### Architecture Wiki + +* Architecture Vision (Phase A) +* Business Architecture (Phase B) +* Information Systems Architecture (Phase C) +* Technology Architecture (Phase D) +* Opportunities & Solutions (Phase E) +* Migration Planning (Phase F) +* Implementation Governance (Phase G) +* Architecture Change Management (Phase H) + +The ADRs contained in this directory should always be read together with the Architecture Wiki. + +The wiki describes the architecture as a whole, whereas ADRs explain the reasoning behind individual architectural decisions. + +--- + +## Relationship to the Architecture Documentation + +| Architecture Wiki | Architecture Decision Records | +| -------------------------------------------- | --------------------------------------------------- | +| Describes the complete software architecture | Documents individual architectural decisions | +| Defines the overall system structure | Explains why a specific solution was selected | +| Organized according to TOGAF ADM phases | Organized chronologically by architectural decision | +| Updated when the architecture evolves | Added whenever a significant decision is made | + +ADRs do **not** replace the Architecture Wiki. + +Likewise, the Architecture Wiki should not duplicate ADRs. + +Instead, both artifacts complement each other. + +--- + +## When to Create an ADR + +An ADR should be created whenever a decision has a significant impact on the architecture of the project. + +Typical examples include: + +* Selecting a new technology +* Introducing or replacing an architectural pattern +* Changing the public API +* Introducing a new rendering strategy +* Changing accessibility principles +* Modifying the repository structure +* Changing release or governance processes + +Small implementation details, bug fixes, refactorings, or coding style decisions do **not** require an ADR. + +--- + +## ADR Lifecycle + +Every ADR has one of the following statuses: + +| Status | Description | +| ---------- | ------------------------------------------------------- | +| Proposed | The decision is under discussion. | +| Accepted | The decision has been approved and adopted. | +| Deprecated | The decision is no longer recommended but still exists. | +| Superseded | The decision has been replaced by another ADR. | +| Discarded | The proposal was rejected. | + +Only **Accepted** ADRs represent the current architecture. + +--- + +## ADR Structure + +Each ADR follows the same structure. + +```text +Title + +Status + +Context + +Decision Drivers + +Considered Alternatives + +Decision + +Rationale + +Consequences + Positive + Negative + +Related TOGAF Phases + +References +``` + +This structure ensures that every ADR answers the following questions: + +* **What** decision was made? +* **Why** was the decision necessary? +* **When** was it made? +* **Who** approved the decision? +* **What** are the expected consequences? + +--- + +## Naming Convention + +ADRs use sequential numbering. + +Examples: + +```text +0001-repository-structure.md +0002-technology-stack.md +0003-svg-rendering.md +``` + +The number is never reused. + +If an ADR becomes obsolete, its status changes instead of deleting the document. + +--- + +## Decision Process + +Architectural decisions follow the governance model defined in **Implementation Governance (Phase G)**. + +```text +Proposal + ↓ +Architecture Discussion + ↓ +Architecture Review + ↓ +Maintainer Decision + ↓ +ADR Update + ↓ +Implementation +``` + +Community members are encouraged to participate in discussions. + +Final architectural decisions are made by the project maintainers. + +--- + +## Relationship to Source Code + +Source code is expected to reflect accepted ADRs. + +If an implementation no longer follows an accepted ADR, one of the following actions should occur: + +* Update the implementation to match the ADR. +* Replace the ADR with a new architectural decision. +* Deprecate or supersede the ADR. + +Architectural changes should always be documented before or together with the implementation. + +--- + +## References + +* TOGAF Architecture Development Method (ADM) +* LUNA Charts Architecture Wiki +* LUNA Charts Implementation Governance (Phase G) +* LUNA Charts Architecture Change Management (Phase H) diff --git a/docs/adr/template.md b/docs/adr/template.md new file mode 100644 index 0000000..bd7a837 --- /dev/null +++ b/docs/adr/template.md @@ -0,0 +1,117 @@ +# ADR-XXXX: Title + +* **Status:** Proposed +* **Date:** YYYY-MM-DD +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +Describe the background that led to this decision. + +Questions that should be answered: + +* What problem needs to be solved? +* Which architectural constraints exist? +* Which project goals influence the decision? +* Which stakeholders are affected? + +--- + +## Decision Drivers + +List the primary factors that influenced the decision. + +Typical examples: + +* Accessibility +* Performance +* Developer Experience +* Maintainability +* Framework Agnosticism +* Type Safety +* Simplicity +* Scalability + +--- + +## Considered Alternatives + +Document all relevant alternatives. + +| Alternative | Description | +| ----------- | ----------- | +| Option A | Description | +| Option B | Description | +| Option C | Description | + +Briefly explain why the alternatives were not selected. + +--- + +## Decision + +Describe the selected solution. + +This section should clearly answer: + +> What has been decided? + +--- + +## Rationale + +Explain why the selected solution best satisfies the decision drivers. + +This section should justify the decision from an architectural perspective. + +--- + +## Consequences + +### Positive + +Describe the expected benefits. + +Examples: + +* Improved maintainability +* Better accessibility +* Easier onboarding +* Reduced complexity + +### Negative + +Describe possible drawbacks. + +Examples: + +* Increased implementation effort +* Additional maintenance +* Performance trade-offs + +--- + +## Related TOGAF Phases + +List all architecture phases that influenced this decision. + +Examples: + +* Architecture Vision (Phase A) +* Technology Architecture (Phase D) +* Implementation Governance (Phase G) + +--- + +## References + +Provide references to related documentation. + +Examples: + +* Architecture Wiki +* Other ADRs +* External standards +* Specifications -- 2.54.0 From 8e38146cb078281eaf5796701e3eba8ed1826a7c Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 12 Jul 2026 12:13:37 +0200 Subject: [PATCH 12/88] Added the first 5 ADRs, which are important for first Work package "Groundwork" --- docs/adr/000100-repository-structure.md | 142 ++++++++++++ docs/adr/000200-technology-stack.md | 211 ++++++++++++++++++ .../000300-web-components-as-public-api.md | 110 +++++++++ .../adr/000400-svg-as-rendering-technology.md | 129 +++++++++++ ...ccessibility-as-a-cross-cutting-concern.md | 139 ++++++++++++ 5 files changed, 731 insertions(+) create mode 100644 docs/adr/000100-repository-structure.md create mode 100644 docs/adr/000200-technology-stack.md create mode 100644 docs/adr/000300-web-components-as-public-api.md create mode 100644 docs/adr/000400-svg-as-rendering-technology.md create mode 100644 docs/adr/000500-accessibility-as-a-cross-cutting-concern.md diff --git a/docs/adr/000100-repository-structure.md b/docs/adr/000100-repository-structure.md new file mode 100644 index 0000000..2aecc30 --- /dev/null +++ b/docs/adr/000100-repository-structure.md @@ -0,0 +1,142 @@ +# ADR-0001: Repository Structure + +* **Status:** Accepted +* **Date:** 2026-07-12 +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +LUNA Charts is designed as an open-source charting library with a strong focus on accessibility, maintainability, and long-term evolution. + +The project consists of multiple concerns, including source code, documentation, examples, testing infrastructure, and continuous integration. + +A repository structure was required that supports collaborative development while keeping the project easy to understand for contributors and maintainers. + +The repository should also support future growth without requiring structural changes. + +--- + +## Decision Drivers + +The following factors influenced this decision: + +* Maintainability +* Developer Experience +* Open Source Collaboration +* Modular Architecture +* Shared Tooling +* Consistent Build Process +* Long-Term Evolution + +--- + +## Considered Alternatives + +| Alternative | Description | +| ------------------------------------ | ---------------------------------------------------------------------------------- | +| Multiple repositories | Separate repositories for documentation, examples, and library packages. | +| Single repository without workspaces | One repository containing all files without workspace separation. | +| **Monorepo using pnpm Workspaces** | One repository containing all project artifacts with logical workspace separation. | + +Multiple repositories were rejected because they increase maintenance effort, duplicate tooling, and complicate contribution workflows. + +A single repository without workspaces was rejected because the project is expected to grow over time and benefits from a clear modular organization. + +--- + +## Decision + +LUNA Charts is implemented as a **pnpm-based monorepo**. + +The repository contains all project artifacts, including: + +* Source code +* Documentation +* Storybook +* Examples +* Architecture documentation +* Architecture Decision Records (ADRs) +* CI/CD configuration + +The repository is organized into logical workspaces. + +```text +luna-charts/ +│ +├── packages/ +│ └── luna-charts/ +│ +├── apps/ +│ ├── storybook/ +│ └── docs/ +│ +├── docs/ +│ ├── architecture/ +│ └── adr/ +│ +├── examples/ +│ +└── .github/ +``` + +Internally, the library is organized into architectural modules such as: + +* Core +* Charts +* Themes +* Utilities + +These modules are implementation details and are **not** exposed as individual npm packages. + +--- + +## Rationale + +A monorepo provides a single source of truth for the entire project. + +All contributors work within the same repository using a shared toolchain, coding standards, testing infrastructure, and documentation. + +Using **pnpm Workspaces** enables clear separation of responsibilities while avoiding duplicated dependencies and configuration. + +This structure supports the project's architecture-first approach and simplifies future expansion. + +--- + +## Consequences + +### Positive + +* Single source of truth +* Simplified onboarding for contributors +* Shared tooling and configuration +* Consistent CI/CD pipeline +* Easier dependency management +* Centralized documentation +* Scalable project organization + +### Negative + +* Larger repository size +* Contributors clone the complete repository +* Workspace configuration introduces a small amount of additional complexity + +--- + +## Related TOGAF Phases + +* Architecture Vision (Phase A) +* Technology Architecture (Phase D) +* Opportunities & Solutions (Phase E) +* Migration Planning (Phase F) +* Implementation Governance (Phase G) +* Architecture Change Management (Phase H) + +--- + +## References + +* LUNA Charts Architecture Wiki +* ADR-0002: Technology Stack +* pnpm Workspaces Documentation diff --git a/docs/adr/000200-technology-stack.md b/docs/adr/000200-technology-stack.md new file mode 100644 index 0000000..6796d8e --- /dev/null +++ b/docs/adr/000200-technology-stack.md @@ -0,0 +1,211 @@ +# ADR-0002: Technology Stack + +* **Status:** Accepted +* **Date:** 2026-07-12 +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +LUNA Charts is an open-source charting library designed to provide accessible, framework-agnostic, and strongly typed chart components. + +The selected technology stack must support the architectural principles defined during the TOGAF Architecture Development Method (ADM), including: + +* Accessibility by Design +* Framework Agnosticism +* Strong Type Safety +* Component-Based Architecture +* High Developer Experience +* Open Source Collaboration +* Long-Term Maintainability + +Rather than selecting technologies based on popularity, each technology is evaluated according to its ability to support these architectural goals. + +--- + +## Decision Drivers + +The following factors influenced the decision: + +* Accessibility +* Framework Agnosticism +* Type Safety +* Developer Experience +* Maintainability +* Testability +* Documentation +* Open Source Collaboration +* Long-Term Evolution + +--- + +## Considered Alternatives + +| Technology Area | Considered Alternatives | Selected | +| ----------------------- | ----------------------------------------------- | ------------------ | +| Component Framework | React, Vue, Angular, Lit, StencilJS | **StencilJS** | +| Component Documentation | Storybook, Styleguidist | **Storybook** | +| Project Documentation | Docusaurus, VitePress, Starlight | **Starlight** | +| Package Manager | npm, Yarn, pnpm | **pnpm** | +| Unit Testing | Vitest, Jest | **Jest** | +| Browser Testing | Cypress, Playwright | **Playwright** | +| Accessibility Testing | Manual Testing Only, axe-core | **axe-core** | +| Code Formatting | Manual Formatting, Prettier | **Prettier** | +| Static Analysis | TSLint, ESLint | **ESLint** | +| Versioning | Manual Versioning, Semantic Release, Changesets | **Changesets** | +| Continuous Integration | GitLab CI, Azure Pipelines, GitHub Actions | **GitHub Actions** | + +The selected technologies best support the project's architectural goals while remaining broadly adopted and well documented. + +--- + +## Decision + +The following technology stack is adopted for the implementation of LUNA Charts. + +| Technology | Purpose | +| ------------------ | --------------------------------------------------- | +| **StencilJS** | Web Component development | +| **Storybook** | Interactive component documentation and development | +| **Starlight** | Project and architecture documentation | +| **TypeScript** | Strong typing and developer tooling | +| **pnpm** | Package management and workspace support | +| **Jest** | Unit testing | +| **Playwright** | Browser and interaction testing | +| **axe-core** | Accessibility validation | +| **ESLint** | Static code analysis | +| **Prettier** | Consistent code formatting | +| **Changesets** | Versioning and release management | +| **GitHub Actions** | Continuous Integration | + +The technology stack is considered part of the project's architecture and may only be changed through a new Architecture Decision Record. + +--- + +## Rationale + +Each technology has been selected because it directly supports one or more architectural principles. + +### StencilJS + +StencilJS enables the development of standards-based Web Components. + +This aligns with the project's goal of remaining framework agnostic while allowing framework-specific wrappers to be generated automatically during the build process. + +--- + +### Storybook + +Storybook provides an isolated environment for component development. + +It supports rapid development, interactive examples, accessibility validation, and visual review of chart components. + +--- + +### Starlight + +Starlight serves as the central documentation platform. + +It separates architectural documentation from component documentation and supports long-term maintainability of the project's knowledge base. + +--- + +### TypeScript + +TypeScript enables strong compile-time validation. + +It improves the developer experience by detecting integration errors early and providing comprehensive IDE support. + +--- + +### pnpm + +pnpm Workspaces enable a modular repository structure while maintaining a single source of truth for dependencies and tooling. + +--- + +### Jest + +Jest provides fast unit testing for business logic, utility functions, configuration handling, validation, and other non-browser-specific functionality. + +--- + +### Playwright + +Playwright validates component behavior inside real browsers. + +It is used to verify keyboard interaction, focus management, SVG rendering, and other browser-dependent accessibility features. + +--- + +### axe-core + +axe-core automatically validates accessibility requirements and complements manual accessibility reviews. + +--- + +### ESLint and Prettier + +Both tools ensure consistent coding standards across the project and reduce friction during code reviews. + +--- + +### Changesets + +Changesets manages package versioning and release notes while keeping release decisions under maintainer control. + +--- + +### GitHub Actions + +GitHub Actions automates testing, validation, and release workflows to ensure consistent software quality. + +--- + +## Consequences + +### Positive + +* Technology stack directly supports architectural principles. +* Strong accessibility support throughout development. +* Framework-independent component model. +* Excellent developer experience. +* Consistent documentation workflow. +* High maintainability. +* Modern testing strategy. +* Simplified contributor onboarding. +* Automated quality assurance. +* Scalable project foundation. + +### Negative + +* Initial project setup is more complex. +* Contributors must become familiar with multiple development tools. +* Toolchain maintenance requires periodic updates. +* CI configuration is more comprehensive than for smaller projects. + +--- + +## Related TOGAF Phases + +* Architecture Vision (Phase A) +* Information Systems Architecture (Phase C) +* Technology Architecture (Phase D) +* Opportunities & Solutions (Phase E) +* Migration Planning (Phase F) +* Implementation Governance (Phase G) + +--- + +## References + +* LUNA Charts Architecture Wiki +* ADR-0001: Repository Structure +* ADR-0003: Web Components as Public API +* StencilJS Documentation +* Storybook Documentation +* Starlight Documentation +* Playwright Documentation +* Jest Documentation +* pnpm Documentation diff --git a/docs/adr/000300-web-components-as-public-api.md b/docs/adr/000300-web-components-as-public-api.md new file mode 100644 index 0000000..09c9288 --- /dev/null +++ b/docs/adr/000300-web-components-as-public-api.md @@ -0,0 +1,110 @@ +# ADR-0003: Web Components as Public API + +* **Status:** Accepted +* **Date:** 2026-07-12 +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +LUNA Charts is intended to be an open-source charting library that can be integrated into applications regardless of the frontend framework used. + +A primary architectural objective defined during the Architecture Vision and Technology Architecture phases is **framework agnosticism**. Consumers should be able to use LUNA Charts in React, Angular, Vue, Svelte, or plain HTML applications without requiring framework-specific implementations of the chart components. + +The public API therefore had to be based on a stable and widely adopted web standard rather than a framework-specific component model. + +--- + +## Decision Drivers + +The following factors influenced this decision: + +* Framework Agnosticism +* Standards Compliance +* Long-Term Maintainability +* Accessibility +* Developer Experience +* Component Reusability +* Open Web Platform +* Future Compatibility + +--- + +## Considered Alternatives + +| Alternative | Description | +| -------------------------------------- | ----------------------------------------------------------------- | +| React Components | Components implemented exclusively for React. | +| Vue Components | Components implemented exclusively for Vue. | +| Angular Components | Components implemented exclusively for Angular. | +| Separate implementations per framework | Independent implementations for each supported framework. | +| **Web Components** | Standards-based custom elements implemented using Web Components. | + +Framework-specific implementations were rejected because they increase maintenance effort, duplicate functionality, and couple the architecture to individual frontend ecosystems. + +Maintaining multiple implementations would also increase the likelihood of inconsistent behavior across frameworks. + +--- + +## Decision + +LUNA Charts exposes its public API exclusively through **Web Components**. + +The project uses **StencilJS** to implement these components according to the Web Components standard. + +Framework integrations (e.g., React, Angular, Vue) are generated automatically during the build process and are considered **integration adapters**, not independent implementations. + +The architecture therefore consists of a single component model with multiple consumption options. + +--- + +## Rationale + +Web Components are an open web standard supported by all modern browsers. + +By building directly upon this standard, LUNA Charts remains independent of any frontend framework while still supporting popular ecosystems through automatically generated wrappers. + +This approach minimizes duplicated implementation effort and guarantees consistent functionality across all supported platforms. + +Using a single implementation also simplifies testing, documentation, maintenance, and accessibility validation. + +Framework wrappers remain lightweight integration layers and do not introduce architectural differences. + +--- + +## Consequences + +### Positive + +* Framework-independent public API. +* Single implementation for all supported platforms. +* Reduced maintenance effort. +* Consistent behavior across frameworks. +* Simplified testing and documentation. +* Better long-term stability. +* Supports future frontend frameworks without redesigning the library. + +### Negative + +* Developers unfamiliar with Web Components may require additional documentation. +* Framework wrappers depend on the capabilities provided by StencilJS. +* Some framework-specific features cannot be exposed without breaking framework independence. + +--- + +## Related TOGAF Phases + +* Architecture Vision (Phase A) +* Information Systems Architecture (Phase C) +* Technology Architecture (Phase D) +* Opportunities & Solutions (Phase E) + +--- + +## References + +* LUNA Charts Architecture Wiki +* ADR-0002: Technology Stack +* StencilJS Documentation +* Web Components Specification diff --git a/docs/adr/000400-svg-as-rendering-technology.md b/docs/adr/000400-svg-as-rendering-technology.md new file mode 100644 index 0000000..8cae9df --- /dev/null +++ b/docs/adr/000400-svg-as-rendering-technology.md @@ -0,0 +1,129 @@ +# ADR-0004: SVG as Rendering Technology + +* **Status:** Accepted +* **Date:** 2026-07-12 +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +One of the primary goals of LUNA Charts is to provide accessible chart components that support modern accessibility standards and assist developers in creating WCAG-compliant data visualizations. + +Charts are graphical user interfaces that contain meaningful information. Depending on the chart type, individual graphical elements such as bars, points, labels, legends, and axes may need to be discoverable by assistive technologies, focusable using the keyboard, or interactable by users. + +The rendering technology therefore has a direct impact on accessibility, developer experience, testing capabilities, maintainability, and future extensibility. + +A rendering technology had to be selected that supports these architectural goals while remaining compatible with modern browsers and Web Components. + +--- + +## Decision Drivers + +The following factors influenced this decision: + +* Accessibility +* WCAG Compliance +* Semantic Structure +* Keyboard Navigation +* Focus Management +* Screen Reader Support +* Developer Experience +* Maintainability +* Browser Compatibility +* Long-Term Evolution + +--- + +## Considered Alternatives + +| Alternative | Description | +| ---------------- | --------------------------------------------------------- | +| HTML Elements | Represent charts using standard HTML elements. | +| Canvas | Render graphics using the HTML Canvas API. | +| Hybrid Rendering | Combine Canvas and SVG depending on the chart type. | +| **SVG** | Render all chart graphics using Scalable Vector Graphics. | + +HTML was rejected because it is not designed to represent complex graphical visualizations. + +Canvas was rejected because graphical objects are rendered as pixels rather than DOM elements. This makes individual chart elements difficult to expose to assistive technologies and increases implementation complexity for keyboard interaction and accessibility. + +Hybrid rendering was rejected because it would introduce two rendering models, increasing architectural complexity, testing effort, and maintenance costs. + +--- + +## Decision + +All chart visualizations within LUNA Charts are rendered using **Scalable Vector Graphics (SVG)**. + +Each visual element (e.g., bars, lines, points, labels, legends, and axes) is represented as an individual SVG element within the DOM. + +Accessibility information, keyboard navigation, focus management, and interaction are implemented directly on these SVG elements. + +Canvas is not used as a rendering technology for chart components. + +--- + +## Rationale + +SVG integrates directly into the browser's Document Object Model (DOM), allowing every graphical element to be individually identified, styled, focused, and enriched with accessibility information. + +This capability aligns with the project's goal of supporting accessible chart implementations by design. + +Using SVG enables the library to: + +* associate semantic information with graphical elements, +* support keyboard navigation, +* expose meaningful structures to assistive technologies, +* apply standard web accessibility techniques, +* simplify automated accessibility testing, +* integrate naturally with Web Components. + +SVG also provides excellent scalability across different display resolutions without requiring additional rendering logic. + +Although Canvas may provide better rendering performance for extremely large datasets, accessibility and maintainability are considered higher architectural priorities for LUNA Charts. + +--- + +## Consequences + +### Positive + +* Native DOM representation of graphical elements. +* Improved accessibility support. +* Better compatibility with assistive technologies. +* Simplified keyboard navigation. +* Simplified focus management. +* Easier automated accessibility testing. +* Resolution-independent rendering. +* Consistent styling using CSS. +* Better integration with Web Components. +* Simplified debugging using browser developer tools. + +### Negative + +* Rendering performance may decrease for extremely large datasets. +* SVG documents become larger as chart complexity increases. +* Very large visualizations may require optimization techniques such as virtualization or data aggregation. + +These trade-offs are considered acceptable because accessibility and maintainability have higher architectural priority than maximum rendering performance. + +--- + +## Related TOGAF Phases + +* Architecture Vision (Phase A) +* Business Architecture (Phase B) +* Information Systems Architecture (Phase C) +* Technology Architecture (Phase D) +* Opportunities & Solutions (Phase E) + +--- + +## References + +* LUNA Charts Architecture Wiki +* ADR-0002: Technology Stack +* ADR-0003: Web Components as Public API +* Scalable Vector Graphics (SVG) Specification +* Web Content Accessibility Guidelines (WCAG) diff --git a/docs/adr/000500-accessibility-as-a-cross-cutting-concern.md b/docs/adr/000500-accessibility-as-a-cross-cutting-concern.md new file mode 100644 index 0000000..b07761b --- /dev/null +++ b/docs/adr/000500-accessibility-as-a-cross-cutting-concern.md @@ -0,0 +1,139 @@ +# ADR-000500: Accessibility as a Cross-Cutting Concern + +* **Status:** Accepted +* **Date:** 2026-07-12 +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +Accessibility is the primary quality attribute of LUNA Charts. + +The project's objective is not only to render charts but also to support developers in creating accessible data visualizations that align with the Web Content Accessibility Guidelines (WCAG). + +During the architectural design process, accessibility was initially considered as a separate subsystem responsible for validating and enforcing accessibility requirements. + +Further analysis revealed that accessibility affects nearly every architectural layer of the system. + +Rendering, component APIs, configuration, validation, interaction, keyboard navigation, documentation, and testing all contribute to the accessibility of the final chart. + +As a result, accessibility cannot be implemented as an isolated engine without introducing architectural inconsistencies. + +--- + +## Decision Drivers + +The following factors influenced this decision: + +* Accessibility by Design +* WCAG Compliance +* Separation of Concerns +* Maintainability +* Consistency +* Developer Experience +* Long-Term Evolution +* Testability + +--- + +## Considered Alternatives + +| Alternative | Description | +| ------------------------------ | ---------------------------------------------------------------------------------------------------------- | +| Dedicated Accessibility Engine | A centralized subsystem responsible for accessibility validation and enforcement. | +| Accessibility Utilities | A collection of reusable accessibility helper functions. | +| **Cross-Cutting Concern** | Accessibility is integrated into every architectural layer where accessibility-related decisions are made. | + +A dedicated accessibility engine was rejected because accessibility cannot be guaranteed after a chart has already been designed or rendered. + +Accessibility decisions must be made continuously throughout the rendering process and component lifecycle. + +Accessibility utilities remain part of the implementation but do not represent the architectural model. + +--- + +## Decision + +Accessibility is treated as a **cross-cutting concern** throughout the entire architecture of LUNA Charts. + +Accessibility responsibilities are distributed across multiple architectural modules rather than centralized in a single subsystem. + +Examples include: + +* Public component APIs +* TypeScript type definitions +* Validation +* Rendering +* SVG generation +* Keyboard interaction +* Focus management +* Documentation +* Automated testing + +Each architectural component is responsible for implementing the accessibility requirements relevant to its own responsibility. + +--- + +## Rationale + +Accessibility is not a feature that can be added after rendering has completed. + +Instead, accessibility emerges from many architectural decisions working together. + +Examples include: + +* selecting SVG instead of Canvas, +* designing semantic component APIs, +* exposing accessible keyboard interaction, +* generating meaningful DOM structures, +* providing strongly typed configuration, +* validating accessibility-related configuration, +* documenting accessibility behavior, +* verifying accessibility through automated testing. + +Treating accessibility as a cross-cutting concern ensures that accessibility remains an architectural responsibility rather than an isolated implementation detail. + +This approach also aligns with established software architecture principles, where quality attributes such as security, logging, and observability are commonly treated as cross-cutting concerns. + +--- + +## Consequences + +### Positive + +* Accessibility is considered throughout the entire development process. +* Architectural responsibilities remain clearly separated. +* Accessibility becomes part of every feature rather than an optional extension. +* Better support for WCAG-compliant chart implementations. +* Simplified long-term maintenance. +* Consistent accessibility behavior across all chart types. +* Accessibility can be validated at multiple architectural levels. + +### Negative + +* Accessibility responsibilities are distributed across multiple modules. +* Contributors must understand accessibility requirements beyond their immediate implementation. +* Architectural reviews must continuously consider accessibility implications. + +These trade-offs are acceptable because accessibility represents the primary quality objective of LUNA Charts. + +--- + +## Related TOGAF Phases + +* Architecture Vision (Phase A) +* Business Architecture (Phase B) +* Information Systems Architecture (Phase C) +* Technology Architecture (Phase D) +* Implementation Governance (Phase G) + +--- + +## References + +* LUNA Charts Architecture Wiki +* ADR-000300: Web Components as Public API +* ADR-000400: SVG as Rendering Technology +* Web Content Accessibility Guidelines (WCAG) +* WAI-ARIA Authoring Practices Guide -- 2.54.0 From ff9d18610cef0fc5a0cafa804c4cf8f92529b24f Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 12 Jul 2026 13:43:50 +0200 Subject: [PATCH 13/88] build(stencil): initialize stencil workspace --- packages/luna-charts/.editorconfig | 15 +++ packages/luna-charts/.gitignore | 26 ++++ packages/luna-charts/.prettierrc.json | 13 ++ packages/luna-charts/LICENSE | 21 ++++ packages/luna-charts/package.json | 50 ++++++++ packages/luna-charts/readme.md | 111 ++++++++++++++++++ packages/luna-charts/src/components.d.ts | 68 +++++++++++ .../my-component/my-component.cmp.test.tsx | 31 +++++ .../components/my-component/my-component.css | 3 + .../components/my-component/my-component.tsx | 32 +++++ .../src/components/my-component/readme.md | 19 +++ packages/luna-charts/src/index.html | 14 +++ packages/luna-charts/src/index.ts | 12 ++ packages/luna-charts/src/utils/utils.ts | 3 + .../luna-charts/src/utils/utils.unit.test.ts | 20 ++++ packages/luna-charts/stencil.config.ts | 23 ++++ packages/luna-charts/tsconfig.json | 30 +++++ packages/luna-charts/vitest-setup.ts | 3 + packages/luna-charts/vitest.config.ts | 32 +++++ 19 files changed, 526 insertions(+) create mode 100644 packages/luna-charts/.editorconfig create mode 100644 packages/luna-charts/.gitignore create mode 100644 packages/luna-charts/.prettierrc.json create mode 100644 packages/luna-charts/LICENSE create mode 100644 packages/luna-charts/package.json create mode 100644 packages/luna-charts/readme.md create mode 100644 packages/luna-charts/src/components.d.ts create mode 100644 packages/luna-charts/src/components/my-component/my-component.cmp.test.tsx create mode 100644 packages/luna-charts/src/components/my-component/my-component.css create mode 100644 packages/luna-charts/src/components/my-component/my-component.tsx create mode 100644 packages/luna-charts/src/components/my-component/readme.md create mode 100644 packages/luna-charts/src/index.html create mode 100644 packages/luna-charts/src/index.ts create mode 100644 packages/luna-charts/src/utils/utils.ts create mode 100644 packages/luna-charts/src/utils/utils.unit.test.ts create mode 100644 packages/luna-charts/stencil.config.ts create mode 100644 packages/luna-charts/tsconfig.json create mode 100644 packages/luna-charts/vitest-setup.ts create mode 100644 packages/luna-charts/vitest.config.ts diff --git a/packages/luna-charts/.editorconfig b/packages/luna-charts/.editorconfig new file mode 100644 index 0000000..f1cc3ad --- /dev/null +++ b/packages/luna-charts/.editorconfig @@ -0,0 +1,15 @@ +# http://editorconfig.org + +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/packages/luna-charts/.gitignore b/packages/luna-charts/.gitignore new file mode 100644 index 0000000..c3ea58a --- /dev/null +++ b/packages/luna-charts/.gitignore @@ -0,0 +1,26 @@ +dist/ +www/ +loader/ + +*~ +*.sw[mnpcod] +*.log +*.lock +*.tmp +*.tmp.* +log.txt +*.sublime-project +*.sublime-workspace + +.stencil/ +.idea/ +.vscode/ +.sass-cache/ +.versions/ +node_modules/ +$RECYCLE.BIN/ + +.DS_Store +Thumbs.db +UserInterfaceState.xcuserstate +.env diff --git a/packages/luna-charts/.prettierrc.json b/packages/luna-charts/.prettierrc.json new file mode 100644 index 0000000..7ca3a28 --- /dev/null +++ b/packages/luna-charts/.prettierrc.json @@ -0,0 +1,13 @@ +{ + "arrowParens": "avoid", + "bracketSpacing": true, + "jsxBracketSameLine": false, + "jsxSingleQuote": false, + "quoteProps": "consistent", + "printWidth": 180, + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "all", + "useTabs": false +} diff --git a/packages/luna-charts/LICENSE b/packages/luna-charts/LICENSE new file mode 100644 index 0000000..c13f991 --- /dev/null +++ b/packages/luna-charts/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/luna-charts/package.json b/packages/luna-charts/package.json new file mode 100644 index 0000000..da73be6 --- /dev/null +++ b/packages/luna-charts/package.json @@ -0,0 +1,50 @@ +{ + "name": "luna-charts", + "version": "0.0.1", + "description": "Stencil Component Starter", + "main": "dist/index.cjs.js", + "module": "dist/index.js", + "types": "dist/types/index.d.ts", + "collection": "dist/collection/collection-manifest.json", + "collection:main": "dist/collection/index.js", + "unpkg": "dist/luna-charts/luna-charts.esm.js", + "exports": { + ".": { + "import": "./dist/luna-charts/luna-charts.esm.js", + "require": "./dist/luna-charts/luna-charts.cjs.js" + }, + "./my-component": { + "import": "./dist/components/my-component.js", + "types": "./dist/components/my-component.d.ts" + }, + "./loader": { + "import": "./loader/index.js", + "require": "./loader/index.cjs", + "types": "./loader/index.d.ts" + } + }, + "repository": { + "type": "git", + "url": "https://github.com/stenciljs/component-starter.git" + }, + "files": [ + "dist/", + "loader/" + ], + "scripts": { + "build": "stencil build", + "start": "stencil build --dev --watch --serve", + "test": "stencil-test --prod", + "test:watch": "stencil-test --prod --watch", + "generate": "stencil generate" + }, + "devDependencies": { + "@stencil/core": "^4.27.1 || ^5.0.0-0", + "@stencil/vitest": "^1.8.3", + "@types/node": "^22.13.5", + "@vitest/browser-playwright": "^4.0.0", + "playwright": "^1.52.0", + "vitest": "^4.0.0" + }, + "license": "MIT" +} diff --git a/packages/luna-charts/readme.md b/packages/luna-charts/readme.md new file mode 100644 index 0000000..66e26f8 --- /dev/null +++ b/packages/luna-charts/readme.md @@ -0,0 +1,111 @@ +[![Built With Stencil](https://img.shields.io/badge/-Built%20With%20Stencil-16161d.svg?logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI%2BCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI%2BCgkuc3Qwe2ZpbGw6I0ZGRkZGRjt9Cjwvc3R5bGU%2BCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik00MjQuNywzNzMuOWMwLDM3LjYtNTUuMSw2OC42LTkyLjcsNjguNkgxODAuNGMtMzcuOSwwLTkyLjctMzAuNy05Mi43LTY4LjZ2LTMuNmgzMzYuOVYzNzMuOXoiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTQyNC43LDI5Mi4xSDE4MC40Yy0zNy42LDAtOTIuNy0zMS05Mi43LTY4LjZ2LTMuNkgzMzJjMzcuNiwwLDkyLjcsMzEsOTIuNyw2OC42VjI5Mi4xeiIvPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDI0LjcsMTQxLjdIODcuN3YtMy42YzAtMzcuNiw1NC44LTY4LjYsOTIuNy02OC42SDMzMmMzNy45LDAsOTIuNywzMC43LDkyLjcsNjguNlYxNDEuN3oiLz4KPC9zdmc%2BCg%3D%3D&colorA=16161d&style=flat-square)](https://stenciljs.com) + +# Stencil Component Starter + +> This is a starter project for building a standalone Web Components using Stencil. + +Stencil is a compiler for building fast web apps using Web Components. + +Stencil combines the best concepts of the most popular frontend frameworks into a compile-time rather than runtime tool. Stencil takes TypeScript, JSX, a tiny virtual DOM layer, efficient one-way data binding, an asynchronous rendering pipeline (similar to React Fiber), and lazy-loading out of the box, and generates 100% standards-based Web Components that run in any browser supporting the Custom Elements specification. + +Stencil components are just Web Components, so they work in any major framework or with no framework at all. + +## Getting Started + +To start building a new web component using Stencil, clone this repo to a new directory: + +```bash +git clone https://github.com/stenciljs/component-starter.git my-component +cd my-component +git remote rm origin +``` + +and run: + +```bash +npm install +npm start +``` + +To build the component for production, run: + +```bash +npm run build +``` + +To run the unit tests for the components, run: + +```bash +npm test +``` + +Need help? Check out our docs [here](https://stenciljs.com/docs/my-first-component). + +## Naming Components + +When creating new component tags, we recommend _not_ using `stencil` in the component name (ex: ``). This is because the generated component has little to nothing to do with Stencil; it's just a web component! + +Instead, use a prefix that fits your company or any name for a group of related components. For example, all of the [Ionic-generated](https://ionicframework.com/) web components use the prefix `ion`. + +## Using this component + +There are two strategies we recommend for using web components built with Stencil. + +The first step for all two of these strategies is to [publish to NPM](https://docs.npmjs.com/getting-started/publishing-npm-packages). + +You can read more about these different approaches in the [Stencil docs](https://stenciljs.com/docs/publishing). + +### Lazy Loading + +If your Stencil project is built with the [`dist`](https://stenciljs.com/docs/distribution) output target, you can import a small bootstrap script that registers all components and allows you to load individual component scripts lazily. + +For example, given your Stencil project namespace is called `my-design-system`, to use `my-component` on any website, inject this into your HTML: + +```html + + + +``` + +This will only load the necessary scripts needed to render ``. Once more components of this package are used, they will automatically be loaded lazily. + +You can also import the script as part of your `node_modules` in your applications entry file: + +```tsx +import 'foobar-design-system/dist/foobar-design-system/foobar-design-system.esm.js'; +``` + +Check out this [Live Demo](https://stackblitz.com/edit/vitejs-vite-y6v26a?file=src%2Fmain.tsx). + +### Standalone + +If you are using a Stencil component library with `dist-custom-elements`, we recommend importing Stencil components individually in those files where they are needed. + +To export Stencil components as standalone components make sure you have the [`dist-custom-elements`](https://stenciljs.com/docs/custom-elements) output target defined in your `stencil.config.ts`. + +For example, given you'd like to use `` as part of a React component, you can import the component directly via: + +```tsx +import 'foobar-design-system/my-component'; + +function App() { + return ( + <> +
+ +
+ + ); +} + +export default App; +``` + +Check out this [Live Demo](https://stackblitz.com/edit/vitejs-vite-b6zuds?file=src%2FApp.tsx). \ No newline at end of file diff --git a/packages/luna-charts/src/components.d.ts b/packages/luna-charts/src/components.d.ts new file mode 100644 index 0000000..fdfe7a8 --- /dev/null +++ b/packages/luna-charts/src/components.d.ts @@ -0,0 +1,68 @@ +/* eslint-disable */ +/* tslint:disable */ +/** + * This is an autogenerated file created by the Stencil compiler. + * It contains typing information for all components that exist in this project. + */ +import { HTMLStencilElement, JSXBase } from "@stencil/core/internal"; +export namespace Components { + interface MyComponent { + /** + * The first name + */ + "first": string; + /** + * The last name + */ + "last": string; + /** + * The middle name + */ + "middle": string; + } +} +declare global { + interface HTMLMyComponentElement extends Components.MyComponent, HTMLStencilElement { + } + var HTMLMyComponentElement: { + prototype: HTMLMyComponentElement; + new (): HTMLMyComponentElement; + }; + interface HTMLElementTagNameMap { + "my-component": HTMLMyComponentElement; + } +} +declare namespace LocalJSX { + interface MyComponent { + /** + * The first name + */ + "first"?: string; + /** + * The last name + */ + "last"?: string; + /** + * The middle name + */ + "middle"?: string; + } + + interface MyComponentAttributes { + "first": string; + "middle": string; + "last": string; + } + + interface IntrinsicElements { + "my-component": Omit & { [K in keyof MyComponent & keyof MyComponentAttributes]?: MyComponent[K] } & { [K in keyof MyComponent & keyof MyComponentAttributes as `attr:${K}`]?: MyComponentAttributes[K] } & { [K in keyof MyComponent & keyof MyComponentAttributes as `prop:${K}`]?: MyComponent[K] }; + } +} +export { LocalJSX as JSX }; +declare module "@stencil/core" { + export namespace JSX { + interface IntrinsicElements { + "my-component": LocalJSX.IntrinsicElements["my-component"] & JSXBase.HTMLAttributes; + } + } +} diff --git a/packages/luna-charts/src/components/my-component/my-component.cmp.test.tsx b/packages/luna-charts/src/components/my-component/my-component.cmp.test.tsx new file mode 100644 index 0000000..a3a2076 --- /dev/null +++ b/packages/luna-charts/src/components/my-component/my-component.cmp.test.tsx @@ -0,0 +1,31 @@ +import { render, h, describe, it, expect } from '@stencil/vitest'; + +describe('my-component', () => { + it('renders', async () => { + const { root } = await render(); + await expect(root).toEqualHtml(` + + +
+ Hello, World! I'm +
+
+
+ `); + }); + + it('renders with values', async () => { + const { root } = await render( + , + ); + await expect(root).toEqualHtml(` + + +
+ Hello, World! I'm Stencil 'Don't call me a framework' JS +
+
+
+ `); + }); +}); diff --git a/packages/luna-charts/src/components/my-component/my-component.css b/packages/luna-charts/src/components/my-component/my-component.css new file mode 100644 index 0000000..5d4e87f --- /dev/null +++ b/packages/luna-charts/src/components/my-component/my-component.css @@ -0,0 +1,3 @@ +:host { + display: block; +} diff --git a/packages/luna-charts/src/components/my-component/my-component.tsx b/packages/luna-charts/src/components/my-component/my-component.tsx new file mode 100644 index 0000000..5dd72b8 --- /dev/null +++ b/packages/luna-charts/src/components/my-component/my-component.tsx @@ -0,0 +1,32 @@ +import { Component, Prop, h } from '@stencil/core'; +import { format } from '../../utils/utils'; + +@Component({ + tag: 'my-component', + styleUrl: 'my-component.css', + shadow: true, +}) +export class MyComponent { + /** + * The first name + */ + @Prop() first?: string; + + /** + * The middle name + */ + @Prop() middle?: string; + + /** + * The last name + */ + @Prop() last?: string; + + private getText(): string { + return format(this.first, this.middle, this.last); + } + + render() { + return
Hello, World! I'm {this.getText()}
; + } +} diff --git a/packages/luna-charts/src/components/my-component/readme.md b/packages/luna-charts/src/components/my-component/readme.md new file mode 100644 index 0000000..06b5864 --- /dev/null +++ b/packages/luna-charts/src/components/my-component/readme.md @@ -0,0 +1,19 @@ +# my-component + + + + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| -------- | --------- | --------------- | -------- | ----------- | +| `first` | `first` | The first name | `string` | `undefined` | +| `last` | `last` | The last name | `string` | `undefined` | +| `middle` | `middle` | The middle name | `string` | `undefined` | + + +---------------------------------------------- + +*Built with [StencilJS](https://stenciljs.com/)* diff --git a/packages/luna-charts/src/index.html b/packages/luna-charts/src/index.html new file mode 100644 index 0000000..0653289 --- /dev/null +++ b/packages/luna-charts/src/index.html @@ -0,0 +1,14 @@ + + + + + + Stencil Component Starter + + + + + + + + diff --git a/packages/luna-charts/src/index.ts b/packages/luna-charts/src/index.ts new file mode 100644 index 0000000..fc07dff --- /dev/null +++ b/packages/luna-charts/src/index.ts @@ -0,0 +1,12 @@ +/** + * @fileoverview entry point for your component library + * + * This is the entry point for your component library. Use this file to export utilities, + * constants or data structure that accompany your components. + * + * DO NOT use this file to export your components. Instead, use the recommended approaches + * to consume components of this package as outlined in the `README.md`. + */ + +export { format } from './utils/utils'; +export type * from './components.d.ts'; diff --git a/packages/luna-charts/src/utils/utils.ts b/packages/luna-charts/src/utils/utils.ts new file mode 100644 index 0000000..b1a0b3d --- /dev/null +++ b/packages/luna-charts/src/utils/utils.ts @@ -0,0 +1,3 @@ +export function format(first?: string, middle?: string, last?: string): string { + return (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : ''); +} diff --git a/packages/luna-charts/src/utils/utils.unit.test.ts b/packages/luna-charts/src/utils/utils.unit.test.ts new file mode 100644 index 0000000..4cc0dde --- /dev/null +++ b/packages/luna-charts/src/utils/utils.unit.test.ts @@ -0,0 +1,20 @@ +import { describe, it, expect } from 'vitest'; +import { format } from './utils'; + +describe('format', () => { + it('returns empty string for no names defined', () => { + expect(format(undefined, undefined, undefined)).toEqual(''); + }); + + it('formats just first names', () => { + expect(format('Joseph', undefined, undefined)).toEqual('Joseph'); + }); + + it('formats first and last names', () => { + expect(format('Joseph', undefined, 'Publique')).toEqual('Joseph Publique'); + }); + + it('formats first, middle and last names', () => { + expect(format('Joseph', 'Quincy', 'Publique')).toEqual('Joseph Quincy Publique'); + }); +}); diff --git a/packages/luna-charts/stencil.config.ts b/packages/luna-charts/stencil.config.ts new file mode 100644 index 0000000..251b97d --- /dev/null +++ b/packages/luna-charts/stencil.config.ts @@ -0,0 +1,23 @@ +import { Config } from '@stencil/core'; + +export const config: Config = { + namespace: 'luna-charts', + outputTargets: [ + { + type: 'dist', + esmLoaderPath: '../loader', + }, + { + type: 'dist-custom-elements', + customElementsExportBehavior: 'auto-define-custom-elements', + externalRuntime: false, + }, + { + type: 'docs-readme', + }, + { + type: 'www', + serviceWorker: null, // disable service workers + }, + ], +}; diff --git a/packages/luna-charts/tsconfig.json b/packages/luna-charts/tsconfig.json new file mode 100644 index 0000000..cf248d6 --- /dev/null +++ b/packages/luna-charts/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "allowUnreachableCode": false, + "declaration": false, + "experimentalDecorators": true, + "lib": [ + "dom", + "es2022" + ], + "moduleResolution": "bundler", + "module": "esnext", + "target": "es2022", + "noUnusedLocals": true, + "noUnusedParameters": true, + "rootDir": "./", + "jsx": "react", + "jsxFactory": "h", + "jsxFragmentFactory": "h.Fragment", + "types": [ + "@stencil/vitest/globals" + ] + }, + "include": [ + "src" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/packages/luna-charts/vitest-setup.ts b/packages/luna-charts/vitest-setup.ts new file mode 100644 index 0000000..1c397f3 --- /dev/null +++ b/packages/luna-charts/vitest-setup.ts @@ -0,0 +1,3 @@ +import { defineCustomElements } from "./loader"; + +defineCustomElements(); \ No newline at end of file diff --git a/packages/luna-charts/vitest.config.ts b/packages/luna-charts/vitest.config.ts new file mode 100644 index 0000000..1a41f9d --- /dev/null +++ b/packages/luna-charts/vitest.config.ts @@ -0,0 +1,32 @@ +import { defineVitestConfig } from '@stencil/vitest/config'; +import { playwright } from '@vitest/browser-playwright'; + +export default defineVitestConfig({ + stencilConfig: './stencil.config.ts', + test: { + projects: [ + // Unit tests - stencil environment for component logic + { + test: { + name: 'unit', + include: ['src/**/*.unit.test.{ts,tsx}'], + environment: 'stencil', + }, + }, + // Component browser tests - real browser via Playwright + { + test: { + name: 'browser', + include: ['src/**/*.cmp.test.{ts,tsx}'], + setupFiles: ['./vitest-setup.ts'], + browser: { + enabled: true, + provider: playwright(), + headless: true, + instances: [{ browser: 'chromium' }], + }, + }, + }, + ], + }, +}); -- 2.54.0 From a11bbcf6f7943345c6638f90092b14839307a4a2 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 12 Jul 2026 13:47:25 +0200 Subject: [PATCH 14/88] Testing(stencil): First testing stencil workspace --- packages/luna-charts/src/components.d.ts | 6 +- pnpm-lock.yaml | 1122 +++++++++++++++++++++- 2 files changed, 1116 insertions(+), 12 deletions(-) diff --git a/packages/luna-charts/src/components.d.ts b/packages/luna-charts/src/components.d.ts index fdfe7a8..896f526 100644 --- a/packages/luna-charts/src/components.d.ts +++ b/packages/luna-charts/src/components.d.ts @@ -10,15 +10,15 @@ export namespace Components { /** * The first name */ - "first": string; + "first"?: string; /** * The last name */ - "last": string; + "last"?: string; /** * The middle name */ - "middle": string; + "middle"?: string; } } declare global { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 71b6f7c..74038ab 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -209,20 +209,44 @@ importers: devDependencies: '@changesets/cli': specifier: ^2.31.0 - version: 2.31.0 + version: 2.31.0(@types/node@22.20.1) eslint: specifier: ^10.6.0 - version: 10.6.0 + version: 10.6.0(jiti@2.7.0) prettier: specifier: ^3.9.4 version: 3.9.4 + packages/luna-charts: + devDependencies: + '@stencil/core': + specifier: ^4.27.1 || ^5.0.0-0 + version: 4.43.5 + '@stencil/vitest': + specifier: ^1.8.3 + version: 1.13.3(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.61.1)(vitest@4.1.10) + '@types/node': + specifier: ^22.13.5 + version: 22.20.1 + '@vitest/browser-playwright': + specifier: ^4.0.0 + version: 4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10) + playwright: + specifier: ^1.52.0 + version: 1.61.1 + vitest: + specifier: ^4.0.0 + version: 4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + packages: '@babel/runtime@7.29.7': resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} engines: {node: '>=6.9.0'} + '@blazediff/core@1.9.1': + resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==} + '@changesets/apply-release-plan@7.1.1': resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} @@ -278,6 +302,15 @@ packages: '@changesets/write@0.4.0': resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + '@eslint-community/eslint-utils@4.9.1': resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -337,12 +370,21 @@ packages: '@types/node': optional: true + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -355,6 +397,207 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@oxc-project/types@0.139.0': + resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} + + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + + '@rolldown/binding-android-arm64@1.1.5': + resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.1.5': + resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.1.5': + resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.1.5': + resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.1.5': + resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.1.5': + resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.1.5': + resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.1.5': + resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.1.5': + resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.1.5': + resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.1.5': + resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.1.5': + resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.1.5': + resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@rollup/rollup-darwin-arm64@4.44.0': + resolution: {integrity: sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.44.0': + resolution: {integrity: sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm64-gnu@4.44.0': + resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.44.0': + resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-x64-gnu@4.44.0': + resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.44.0': + resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-win32-arm64-msvc@4.44.0': + resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.44.0': + resolution: {integrity: sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==} + cpu: [x64] + os: [win32] + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@stencil/core@4.43.5': + resolution: {integrity: sha512-cgWD+GeuvJpTe1WQn40p02+BJ2j0j1YJ17GdkF2qKIQ23s2e3Zivq5yISXS3dcuV6oUJFN93jprdk+nk/sq99Q==} + engines: {node: '>=16.0.0', npm: '>=7.10.0'} + hasBin: true + + '@stencil/vitest@1.13.3': + resolution: {integrity: sha512-dWpmN9KPRLZpA6wGJ+46z8wjxrAErqbKEmgKLUIC/Ke/VURMzM1Oh/8F03tmC1qVba3KqAjnO6gpuxMOt/90yw==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@playwright/test': '*' + '@stencil/core': ^4.0.0 || ^5.0.0-0 + '@stencil/mock-doc': '*' + '@vitest/browser-playwright': '*' + '@vitest/browser-preview': '*' + '@vitest/browser-webdriverio': '*' + '@wdio/globals': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + vitest: ^4.0.0 || ^3.0.0 || ^2.0.0 + peerDependenciesMeta: + '@playwright/test': + optional: true + '@stencil/mock-doc': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@wdio/globals': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} @@ -367,6 +610,49 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@types/node@22.20.1': + resolution: {integrity: sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==} + + '@vitest/browser-playwright@4.1.10': + resolution: {integrity: sha512-nMoXGEiRpT7m3W7NsbvrM2aKNwiNHZf+zEpUCvMteGjZFvfT96Q9fh7QyB98dvDWXiKvrLxA7bJ1mCOOv+JQPw==} + peerDependencies: + playwright: '*' + vitest: 4.1.10 + + '@vitest/browser@4.1.10': + resolution: {integrity: sha512-UDwuWGwXj646CBx/bQHOaJSX7np0I8JL/UKQYa1e4QrVHH8VdWtx8eaOuf8sy0ShwDgR6NjJAsp5eF6vjF6qng==} + peerDependencies: + vitest: 4.1.10 + + '@vitest/expect@4.1.10': + resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} + + '@vitest/mocker@4.1.10': + resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.1.10': + resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==} + + '@vitest/runner@4.1.10': + resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==} + + '@vitest/snapshot@4.1.10': + resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==} + + '@vitest/spy@4.1.10': + resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==} + + '@vitest/utils@4.1.10': + resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -398,6 +684,10 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} @@ -414,9 +704,22 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} + chardet@2.2.0: resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.4: + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -437,6 +740,10 @@ packages: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -445,6 +752,9 @@ packages: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} + es-module-lexer@2.3.0: + resolution: {integrity: sha512-KLdwQm2NvGLDkQDCGvmiQrhkd0JbMzXthwQAUgWjQuQdBLFa3eiBP5arXZyA+f8x+x7OXgud6bq2rxjGtHV2tw==} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -492,10 +802,20 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} + engines: {node: '>=12.0.0'} + + exsolve@1.1.0: + resolution: {integrity: sha512-D+42+T12DdIlJM3uepa55qGiL3sYdLBOxIl2ifQCzCHz4c7eiolaHsi3BIqEr7JxBzxv2pYZQX9kw16ziMcEmw==} + extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} @@ -515,6 +835,15 @@ packages: fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -546,6 +875,16 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -600,6 +939,10 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + js-yaml@3.15.0: resolution: {integrity: sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==} hasBin: true @@ -627,6 +970,84 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + local-pkg@1.2.1: + resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==} + engines: {node: '>=14'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -638,6 +1059,9 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -650,16 +1074,32 @@ packages: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + nanoid@3.3.15: + resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + obug@2.1.3: + resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} + engines: {node: '>=12.20.0'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -710,6 +1150,9 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -717,10 +1160,38 @@ packages: resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + engines: {node: '>=12'} + pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.1: + resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} + + playwright-core@1.61.1: + resolution: {integrity: sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.61.1: + resolution: {integrity: sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==} + engines: {node: '>=18'} + hasBin: true + + pngjs@7.0.0: + resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} + engines: {node: '>=14.19.0'} + + postcss@8.5.16: + resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -757,6 +1228,11 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rolldown@1.1.5: + resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -776,20 +1252,37 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@4.2.0: + resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -802,14 +1295,42 @@ packages: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + engines: {node: '>=18'} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} + engines: {node: '>=14.0.0'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -817,15 +1338,121 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + vite@8.1.4: + resolution: {integrity: sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.3.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.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 + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest-environment-stencil@1.13.3: + resolution: {integrity: sha512-dOCA04cVraAJLjCPx6jWAdjoFK/KaMeCAdUkS/K8O8aC869GTy3gJi7WaRKB4NCYaCRLtf9GIlJNVtCegVhwNQ==} + peerDependencies: + '@stencil/core': ^4.0.0 || ^5.0.0-0 + + vitest@4.1.10: + resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.10 + '@vitest/browser-preview': 4.1.10 + '@vitest/browser-webdriverio': 4.1.10 + '@vitest/coverage-istanbul': 4.1.10 + '@vitest/coverage-v8': 4.1.10 + '@vitest/ui': 4.1.10 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -834,6 +1461,8 @@ snapshots: '@babel/runtime@7.29.7': {} + '@blazediff/core@1.9.1': {} + '@changesets/apply-release-plan@7.1.1': dependencies: '@changesets/config': 3.1.4 @@ -863,7 +1492,7 @@ snapshots: dependencies: '@changesets/types': 6.1.0 - '@changesets/cli@2.31.0': + '@changesets/cli@2.31.0(@types/node@22.20.1)': dependencies: '@changesets/apply-release-plan': 7.1.1 '@changesets/assemble-release-plan': 6.0.10 @@ -879,7 +1508,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.3 + '@inquirer/external-editor': 1.0.3(@types/node@22.20.1) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 enquirer: 2.4.1 @@ -977,9 +1606,25 @@ snapshots: human-id: 4.2.0 prettier: 2.8.8 - '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0)': + '@emnapi/core@1.11.1': dependencies: - eslint: 10.6.0 + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0(jiti@2.7.0))': + dependencies: + eslint: 10.6.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -1023,10 +1668,14 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@inquirer/external-editor@1.0.3': + '@inquirer/external-editor@1.0.3(@types/node@22.20.1)': dependencies: chardet: 2.2.0 iconv-lite: 0.7.3 + optionalDependencies: + '@types/node': 22.20.1 + + '@jridgewell/sourcemap-codec@1.5.5': {} '@manypkg/find-root@1.1.0': dependencies: @@ -1044,6 +1693,13 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.3 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -1056,6 +1712,121 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 + '@oxc-project/types@0.139.0': {} + + '@polka/url@1.0.0-next.29': {} + + '@rolldown/binding-android-arm64@1.1.5': + optional: true + + '@rolldown/binding-darwin-arm64@1.1.5': + optional: true + + '@rolldown/binding-darwin-x64@1.1.5': + optional: true + + '@rolldown/binding-freebsd-x64@1.1.5': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.1.5': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-x64-musl@1.1.5': + optional: true + + '@rolldown/binding-openharmony-arm64@1.1.5': + optional: true + + '@rolldown/binding-wasm32-wasi@1.1.5': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.1.5': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.1.5': + optional: true + + '@rolldown/pluginutils@1.0.1': {} + + '@rollup/rollup-darwin-arm64@4.44.0': + optional: true + + '@rollup/rollup-darwin-x64@4.44.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.44.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.44.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.44.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.44.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.44.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.44.0': + optional: true + + '@standard-schema/spec@1.1.0': {} + + '@stencil/core@4.43.5': + optionalDependencies: + '@rollup/rollup-darwin-arm64': 4.44.0 + '@rollup/rollup-darwin-x64': 4.44.0 + '@rollup/rollup-linux-arm64-gnu': 4.44.0 + '@rollup/rollup-linux-arm64-musl': 4.44.0 + '@rollup/rollup-linux-x64-gnu': 4.44.0 + '@rollup/rollup-linux-x64-musl': 4.44.0 + '@rollup/rollup-win32-arm64-msvc': 4.44.0 + '@rollup/rollup-win32-x64-msvc': 4.44.0 + + '@stencil/vitest@1.13.3(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.61.1)(vitest@4.1.10)': + dependencies: + '@stencil/core': 4.43.5 + jiti: 2.7.0 + local-pkg: 1.2.1 + vitest: 4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + vitest-environment-stencil: 1.13.3(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.61.1)(vitest@4.1.10) + optionalDependencies: + '@vitest/browser-playwright': 4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10) + playwright: 1.61.1 + + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + '@types/esrecurse@4.3.1': {} '@types/estree@1.0.9': {} @@ -1064,6 +1835,81 @@ snapshots: '@types/node@12.20.55': {} + '@types/node@22.20.1': + dependencies: + undici-types: 6.21.0 + + '@vitest/browser-playwright@4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10)': + dependencies: + '@vitest/browser': 4.1.10(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10) + '@vitest/mocker': 4.1.10(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + playwright: 1.61.1 + tinyrainbow: 3.1.0 + vitest: 4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/browser@4.1.10(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10)': + dependencies: + '@blazediff/core': 1.9.1 + '@vitest/mocker': 4.1.10(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + '@vitest/utils': 4.1.10 + magic-string: 0.30.21 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.1.0 + vitest: 4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + ws: 8.21.0 + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/expect@4.1.10': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 + chai: 6.2.2 + tinyrainbow: 3.1.0 + + '@vitest/mocker@4.1.10(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))': + dependencies: + '@vitest/spy': 4.1.10 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.1.4(@types/node@22.20.1)(jiti@2.7.0) + + '@vitest/pretty-format@4.1.10': + dependencies: + tinyrainbow: 3.1.0 + + '@vitest/runner@4.1.10': + dependencies: + '@vitest/utils': 4.1.10 + pathe: 2.0.3 + + '@vitest/snapshot@4.1.10': + dependencies: + '@vitest/pretty-format': 4.1.10 + '@vitest/utils': 4.1.10 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.1.10': {} + + '@vitest/utils@4.1.10': + dependencies: + '@vitest/pretty-format': 4.1.10 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 + acorn-jsx@5.3.2(acorn@8.17.0): dependencies: acorn: 8.17.0 @@ -1089,6 +1935,8 @@ snapshots: array-union@2.1.0: {} + assertion-error@2.0.1: {} + balanced-match@4.0.4: {} better-path-resolve@1.0.0: @@ -1103,8 +1951,16 @@ snapshots: dependencies: fill-range: 7.1.1 + chai@6.2.2: {} + chardet@2.2.0: {} + confbox@0.1.8: {} + + confbox@0.2.4: {} + + convert-source-map@2.0.0: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -1119,6 +1975,8 @@ snapshots: detect-indent@6.1.0: {} + detect-libc@2.1.2: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -1128,6 +1986,8 @@ snapshots: ansi-colors: 4.1.3 strip-ansi: 6.0.1 + es-module-lexer@2.3.0: {} + escape-string-regexp@4.0.0: {} eslint-scope@9.1.2: @@ -1141,9 +2001,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.6.0: + eslint@10.6.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.6.0 @@ -1173,6 +2033,8 @@ snapshots: minimatch: 10.2.5 natural-compare: 1.4.0 optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -1194,8 +2056,16 @@ snapshots: estraverse@5.3.0: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.9 + esutils@2.0.3: {} + expect-type@1.4.0: {} + + exsolve@1.1.0: {} + extendable-error@0.1.7: {} fast-deep-equal@3.1.3: {} @@ -1216,6 +2086,10 @@ snapshots: dependencies: reusify: 1.1.0 + fdir@6.5.0(picomatch@4.0.5): + optionalDependencies: + picomatch: 4.0.5 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -1253,6 +2127,12 @@ snapshots: jsonfile: 4.0.0 universalify: 0.1.2 + fsevents@2.3.2: + optional: true + + fsevents@2.3.3: + optional: true + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -1298,6 +2178,8 @@ snapshots: isexe@2.0.0: {} + jiti@2.7.0: {} + js-yaml@3.15.0: dependencies: argparse: 1.0.10 @@ -1326,6 +2208,61 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + local-pkg@1.2.1: + dependencies: + mlly: 1.8.2 + pkg-types: 2.3.1 + quansync: 0.2.11 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -1336,6 +2273,10 @@ snapshots: lodash.startcase@4.4.0: {} + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + merge2@1.4.1: {} micromatch@4.0.8: @@ -1347,12 +2288,25 @@ snapshots: dependencies: brace-expansion: 5.0.7 + mlly@1.8.2: + dependencies: + acorn: 8.17.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.4 + mri@1.2.0: {} + mrmime@2.0.1: {} + ms@2.1.3: {} + nanoid@3.3.15: {} + natural-compare@1.4.0: {} + obug@2.1.3: {} + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -1398,12 +2352,44 @@ snapshots: path-type@4.0.0: {} + pathe@2.0.3: {} + picocolors@1.1.1: {} picomatch@2.3.2: {} + picomatch@4.0.5: {} + pify@4.0.1: {} + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.2 + pathe: 2.0.3 + + pkg-types@2.3.1: + dependencies: + confbox: 0.2.4 + exsolve: 1.1.0 + pathe: 2.0.3 + + playwright-core@1.61.1: {} + + playwright@1.61.1: + dependencies: + playwright-core: 1.61.1 + optionalDependencies: + fsevents: 2.3.2 + + pngjs@7.0.0: {} + + postcss@8.5.16: + dependencies: + nanoid: 3.3.15 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prelude-ls@1.2.1: {} prettier@2.8.8: {} @@ -1427,6 +2413,27 @@ snapshots: reusify@1.1.0: {} + rolldown@1.1.5: + dependencies: + '@oxc-project/types': 0.139.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.1.5 + '@rolldown/binding-darwin-arm64': 1.1.5 + '@rolldown/binding-darwin-x64': 1.1.5 + '@rolldown/binding-freebsd-x64': 1.1.5 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 + '@rolldown/binding-linux-arm64-gnu': 1.1.5 + '@rolldown/binding-linux-arm64-musl': 1.1.5 + '@rolldown/binding-linux-ppc64-gnu': 1.1.5 + '@rolldown/binding-linux-s390x-gnu': 1.1.5 + '@rolldown/binding-linux-x64-gnu': 1.1.5 + '@rolldown/binding-linux-x64-musl': 1.1.5 + '@rolldown/binding-openharmony-arm64': 1.1.5 + '@rolldown/binding-wasm32-wasi': 1.1.5 + '@rolldown/binding-win32-arm64-msvc': 1.1.5 + '@rolldown/binding-win32-x64-msvc': 1.1.5 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -1441,10 +2448,20 @@ snapshots: shebang-regex@3.0.0: {} + siginfo@2.0.0: {} + signal-exit@4.1.0: {} + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + slash@3.0.0: {} + source-map-js@1.2.1: {} + spawndamnit@3.0.1: dependencies: cross-spawn: 7.0.6 @@ -1452,6 +2469,10 @@ snapshots: sprintf-js@1.0.3: {} + stackback@0.0.2: {} + + std-env@4.2.0: {} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -1460,24 +2481,107 @@ snapshots: term-size@2.2.1: {} + tinybench@2.9.0: {} + + tinyexec@1.2.4: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 + + tinyrainbow@3.1.0: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + totalist@3.0.1: {} + + tslib@2.8.1: + optional: true + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 + ufo@1.6.4: {} + + undici-types@6.21.0: {} + universalify@0.1.2: {} uri-js@4.4.1: dependencies: punycode: 2.3.1 + vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.5 + postcss: 8.5.16 + rolldown: 1.1.5 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 22.20.1 + fsevents: 2.3.3 + jiti: 2.7.0 + + vitest-environment-stencil@1.13.3(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.61.1)(vitest@4.1.10): + dependencies: + '@stencil/core': 4.43.5 + '@stencil/vitest': 1.13.3(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.61.1)(vitest@4.1.10) + transitivePeerDependencies: + - '@playwright/test' + - '@stencil/mock-doc' + - '@vitest/browser-playwright' + - '@vitest/browser-preview' + - '@vitest/browser-webdriverio' + - '@wdio/globals' + - happy-dom + - jsdom + - playwright + - vitest + + vitest@4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)): + dependencies: + '@vitest/expect': 4.1.10 + '@vitest/mocker': 4.1.10(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + '@vitest/pretty-format': 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/snapshot': 4.1.10 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 + es-module-lexer: 2.3.0 + expect-type: 1.4.0 + magic-string: 0.30.21 + obug: 2.1.3 + pathe: 2.0.3 + picomatch: 4.0.5 + std-env: 4.2.0 + tinybench: 2.9.0 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vite: 8.1.4(@types/node@22.20.1)(jiti@2.7.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.20.1 + '@vitest/browser-playwright': 4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10) + transitivePeerDependencies: + - msw + which@2.0.2: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + word-wrap@1.2.5: {} + ws@8.21.0: {} + yocto-queue@0.1.0: {} -- 2.54.0 From 193ce2b241c2a6f1af190ab8b1f2ffcb71c74b73 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 12 Jul 2026 15:42:20 +0200 Subject: [PATCH 15/88] renamed tsconfig.base.yaml to tsconfig.base.json --- tsconfig.base.yaml | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 tsconfig.base.yaml diff --git a/tsconfig.base.yaml b/tsconfig.base.yaml deleted file mode 100644 index 33d81d1..0000000 --- a/tsconfig.base.yaml +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2022", - "module": "ESNext", - "moduleResolution": "Bundler", - "strict": true, - "noImplicitOverride": true, - "noUncheckedIndexedAccess": true, - "exactOptionalPropertyTypes": true, - "declaration": true, - "sourceMap": true, - "isolatedModules": true, - "skipLibCheck": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true - } -} \ No newline at end of file -- 2.54.0 From 54255b453a049bc76d8a10531e026c99d25b7dc3 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 12 Jul 2026 15:43:41 +0200 Subject: [PATCH 16/88] tsconfig.json extends from tsconfig.base.json --- packages/luna-charts/tsconfig.json | 1 + tsconfig.base.json | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 tsconfig.base.json diff --git a/packages/luna-charts/tsconfig.json b/packages/luna-charts/tsconfig.json index cf248d6..7d136f0 100644 --- a/packages/luna-charts/tsconfig.json +++ b/packages/luna-charts/tsconfig.json @@ -1,4 +1,5 @@ { + "extends": "../../tsconfig.base.json", "compilerOptions": { "allowSyntheticDefaultImports": true, "allowUnreachableCode": false, diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..33d81d1 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "Bundler", + "strict": true, + "noImplicitOverride": true, + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true, + "declaration": true, + "sourceMap": true, + "isolatedModules": true, + "skipLibCheck": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + } +} \ No newline at end of file -- 2.54.0 From 15b92fa27ef33877c133e27bac23f290374597c8 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 12 Jul 2026 15:44:12 +0200 Subject: [PATCH 17/88] Added storybook with example in thw preview.tsx --- eslint.config.js | 12 +- packages/luna-charts/.storybook/main.ts | 9 + packages/luna-charts/.storybook/preview.tsx | 15 + packages/luna-charts/custom-elements.d.ts | 480 +++++ packages/luna-charts/custom-elements.json | 101 ++ packages/luna-charts/package.json | 16 +- .../my-component/my-component.stories.tsx | 41 + packages/luna-charts/stencil.config.ts | 4 + pnpm-lock.yaml | 1594 ++++++++++++++++- pnpm-workspace.yaml | 4 +- 10 files changed, 2261 insertions(+), 15 deletions(-) create mode 100644 packages/luna-charts/.storybook/main.ts create mode 100644 packages/luna-charts/.storybook/preview.tsx create mode 100644 packages/luna-charts/custom-elements.d.ts create mode 100644 packages/luna-charts/custom-elements.json create mode 100644 packages/luna-charts/src/components/my-component/my-component.stories.tsx diff --git a/eslint.config.js b/eslint.config.js index 03576f9..5fd53cd 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,8 +1,8 @@ +// For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format +import storybook from "eslint-plugin-storybook"; + import js from '@eslint/js'; -export default [ - js.configs.recommended, - { - ignores: ['**/dist/**', '**/www/**', '**/node_modules/**', '**/.stencil/**'], - }, -]; \ No newline at end of file +export default [js.configs.recommended, { + ignores: ['**/dist/**', '**/www/**', '**/node_modules/**', '**/.stencil/**'], +}, ...storybook.configs["flat/recommended"]]; \ No newline at end of file diff --git a/packages/luna-charts/.storybook/main.ts b/packages/luna-charts/.storybook/main.ts new file mode 100644 index 0000000..e5ee77d --- /dev/null +++ b/packages/luna-charts/.storybook/main.ts @@ -0,0 +1,9 @@ +const config = { + stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'], + addons: ['@storybook/addon-links', '@storybook/addon-docs'], + framework: { + name: '@stencil/storybook-plugin', + }, +}; + +export default config; \ No newline at end of file diff --git a/packages/luna-charts/.storybook/preview.tsx b/packages/luna-charts/.storybook/preview.tsx new file mode 100644 index 0000000..2e504bc --- /dev/null +++ b/packages/luna-charts/.storybook/preview.tsx @@ -0,0 +1,15 @@ +// .storybook/preview.tsx +import { defineCustomElements } from '../loader/index.js'; +import { setCustomElementsManifest } from '@stencil/storybook-plugin'; +import customElements from '../custom-elements.json'; + +/** + * Registers all custom elements in the Storybook preview. + */ +defineCustomElements(); + +/** + * Loads and registers component metadata for Storybook. + * This enables automatic generation of props, methods, events, slots, shadow parts, and CSS variables tables. + */ +setCustomElementsManifest(customElements); \ No newline at end of file diff --git a/packages/luna-charts/custom-elements.d.ts b/packages/luna-charts/custom-elements.d.ts new file mode 100644 index 0000000..66d9c08 --- /dev/null +++ b/packages/luna-charts/custom-elements.d.ts @@ -0,0 +1,480 @@ + +/** + * This is an autogenerated file created by the Stencil compiler. + * DO NOT MODIFY IT MANUALLY + */ +interface ComponentCompilerPropertyComplexType { + /** + * The string of the original type annotation in the Stencil source code + */ + original: string; + /** + * A 'resolved' type, where e.g. imported types have been resolved and inlined + * + * For instance, an annotation like `(foo: Foo) => string;` will be + * converted to `(foo: { foo: string }) => string;`. + */ + resolved: string; + /** + * A record of the types which were referenced in the assorted type + * annotation in the original source file. + */ + references: ComponentCompilerTypeReferences; +} +type ComponentCompilerTypeReferences = Record; +interface ComponentCompilerTypeReference { + /** + * A type may be defined: + * - locally (in the same file as the component that uses it) + * - globally + * - by importing it into a file (and is defined elsewhere) + */ + location: "local" | "global" | "import"; + /** + * The path to the type reference, if applicable (global types should not need a path associated with them) + */ + path?: string; + /** + * An ID for this type which is unique within a Stencil project. + */ + id: string; + /** + * Whether this type was imported as a default import (e.g., `import MyEnum from './my-enum'`) + * vs a named import (e.g., `import { MyType } from './my-type'`) + */ + isDefault?: boolean; + /** + * The name used in the import statement (before any user-defined alias). + * For `import { XAxisOption as moo }`, this would be "XAxisOption". + * This is the name exported by the source module. + */ + referenceLocation?: string; +} +interface ComponentCompilerReferencedType { + /** + * The path to the module where the type is declared. + */ + path: string; + /** + * The string of the original type annotation in the Stencil source code + */ + declaration: string; + /** + * An extracted docstring + */ + docstring: string; +} +interface ComponentCompilerEventComplexType { + original: string; + resolved: string; + references: ComponentCompilerTypeReferences; +} +interface ComponentCompilerMethodComplexType { + signature: string; + parameters: JsonDocMethodParameter[]; + references: ComponentCompilerTypeReferences; + return: string; +} +/** + * The Type Library holds information about the types which are used in a + * Stencil project. During compilation, Stencil gathers information about the + * types which form part of a component's public API, such as properties + * decorated with `@Prop`, `@Event`, `@Watch`, etc. This type information is + * then added to the Type Library, where it can be accessed later on for + * generating documentation. + * + * This information is included in the file written by the `docs-json` output + * target (see {@link JsonDocs.typeLibrary}). + */ +export type JsonDocsTypeLibrary = Record; +/** + * A container for JSDoc metadata for a project + */ +export interface JsonDocs { + /** + * The metadata for the JSDocs for each component in a Stencil project + */ + components: JsonDocsComponent[]; + /** + * The timestamp at which the metadata was generated, in the format YYYY-MM-DDThh:mm:ss + */ + timestamp: string; + compiler: { + /** + * The name of the compiler that generated the metadata + */ + name: string; + /** + * The version of the Stencil compiler that generated the metadata + */ + version: string; + /** + * The version of TypeScript that was used to generate the metadata + */ + typescriptVersion: string; + }; + typeLibrary: JsonDocsTypeLibrary; +} +/** + * Container for JSDoc metadata for a single Stencil component + */ +export interface JsonDocsComponent { + /** + * The directory containing the Stencil component, minus the file name. + * + * @example /workspaces/stencil-project/src/components/my-component + */ + dirPath?: string; + /** + * The name of the file containing the Stencil component, with no path + * + * @example my-component.tsx + */ + fileName?: string; + /** + * The full path of the file containing the Stencil component + * + * @example /workspaces/stencil-project/src/components/my-component/my-component.tsx + */ + filePath?: string; + /** + * The path to the component's `readme.md` file, including the filename + * + * @example /workspaces/stencil-project/src/components/my-component/readme.md + */ + readmePath?: string; + /** + * The path to the component's `usage` directory + * + * @example /workspaces/stencil-project/src/components/my-component/usage/ + */ + usagesDir?: string; + /** + * The encapsulation strategy for a component + */ + encapsulation: "shadow" | "scoped" | "none"; + /** + * The tag name for the component, for use in HTML + */ + tag: string; + /** + * The contents of a component's `readme.md` that are user generated. + * + * Auto-generated contents are not stored in this reference. + */ + readme: string; + /** + * The description of a Stencil component, found in the JSDoc that sits above the component's declaration + */ + docs: string; + /** + * JSDoc tags found in the JSDoc comment written atop a component's declaration + */ + docsTags: JsonDocsTag[]; + /** + * The text from the class-level JSDoc for a Stencil component, if present. + */ + overview?: string; + /** + * A mapping of usage example file names to their contents for the component. + */ + usage: JsonDocsUsage; + /** + * Array of metadata for a component's `@Prop`s + */ + props: JsonDocsProp[]; + /** + * Array of metadata for a component's `@Method`s + */ + methods: JsonDocsMethod[]; + /** + * Array of metadata for a component's `@Event`s + */ + events: JsonDocsEvent[]; + /** + * Array of metadata for a component's `@Listen` handlers + */ + listeners: JsonDocsListener[]; + /** + * Array of metadata for a component's CSS styling information + */ + styles: JsonDocsStyle[]; + /** + * Array of component Slot information, generated from `@slot` tags + */ + slots: JsonDocsSlot[]; + /** + * Array of component Parts information, generate from `@part` tags + */ + parts: JsonDocsPart[]; + /** + * Array of custom states defined via @AttachInternals({ states: {...} }) + */ + customStates: JsonDocsCustomState[]; + /** + * Array of metadata describing where the current component is used + */ + dependents: string[]; + /** + * Array of metadata listing the components which are used in current component + */ + dependencies: string[]; + /** + * Describes a tree of components coupling + */ + dependencyGraph: JsonDocsDependencyGraph; + /** + * A deprecation reason/description found following a `@deprecated` tag + */ + deprecation?: string; +} +export interface JsonDocsDependencyGraph { + [tagName: string]: string[]; +} +/** + * A descriptor for a single JSDoc tag found in a block comment + */ +export interface JsonDocsTag { + /** + * The tag name (immediately following the '@') + */ + name: string; + /** + * The description that immediately follows the tag name + */ + text?: string; +} +export interface JsonDocsValue { + value?: string; + type: string; +} +/** + * A mapping of file names to their contents. + * + * This type is meant to be used when reading one or more usage markdown files associated with a component. For the + * given directory structure: + * ``` + * src/components/my-component + * ├── my-component.tsx + * └── usage + * ├── bar.md + * └── foo.md + * ``` + * an instance of this type would include the name of the markdown file, mapped to its contents: + * ```ts + * { + * 'bar': STRING_CONTENTS_OF_BAR.MD + * 'foo': STRING_CONTENTS_OF_FOO.MD + * } + * ``` + */ +export interface JsonDocsUsage { + [key: string]: string; +} +/** + * An intermediate representation of a `@Prop` decorated member's JSDoc + */ +export interface JsonDocsProp { + /** + * the name of the prop + */ + name: string; + complexType?: ComponentCompilerPropertyComplexType; + /** + * the type of the prop, in terms of the TypeScript type system (as opposed to JavaScript's or HTML's) + */ + type: string; + /** + * `true` if the prop was configured as "mutable" where it was declared, `false` otherwise + */ + mutable: boolean; + /** + * The name of the attribute that is exposed to configure a compiled web component + */ + attr?: string; + /** + * `true` if the prop was configured to "reflect" back to HTML where it (the prop) was declared, `false` otherwise + */ + reflectToAttr: boolean; + /** + * the JSDoc description text associated with the prop + */ + docs: string; + /** + * JSDoc tags associated with the prop + */ + docsTags: JsonDocsTag[]; + /** + * The default value of the prop + */ + default?: string; + /** + * Deprecation text associated with the prop. This is the text that immediately follows a `@deprecated` tag + */ + deprecation?: string; + values: JsonDocsValue[]; + /** + * `true` if a component is declared with a '?', `false` otherwise + * + * @example + * ```tsx + * @Prop() componentProps?: any; + * ``` + */ + optional: boolean; + /** + * `true` if a component is declared with a '!', `false` otherwise + * + * @example + * ```tsx + * @Prop() componentProps!: any; + * ``` + */ + required: boolean; + /** + * `true` if the prop has a `get()`. `false` otherwise + */ + getter: boolean; + /** + * `true` if the prop has a `set()`. `false` otherwise + */ + setter: boolean; +} +export interface JsonDocsMethod { + name: string; + docs: string; + docsTags: JsonDocsTag[]; + deprecation?: string; + signature: string; + returns: JsonDocsMethodReturn; + parameters: JsonDocMethodParameter[]; + complexType: ComponentCompilerMethodComplexType; +} +export interface JsonDocsMethodReturn { + type: string; + docs: string; +} +export interface JsonDocMethodParameter { + name: string; + type: string; + docs: string; +} +export interface JsonDocsEvent { + event: string; + bubbles: boolean; + cancelable: boolean; + composed: boolean; + complexType: ComponentCompilerEventComplexType; + docs: string; + docsTags: JsonDocsTag[]; + deprecation?: string; + detail: string; +} +/** + * Type describing a CSS Style, as described by a JSDoc-style comment + */ +export interface JsonDocsStyle { + /** + * The name of the style + */ + name: string; + /** + * The type/description associated with the style + */ + docs: string; + /** + * The annotation used in the JSDoc of the style (e.g. `@prop`) + */ + annotation: string; + /** + * The mode associated with the style + */ + mode: string | undefined; +} +export interface JsonDocsListener { + event: string; + target?: string; + capture: boolean; + passive: boolean; +} +/** + * A descriptor for a slot + * + * Objects of this type are translated from the JSDoc tag, `@slot` + */ +export interface JsonDocsSlot { + /** + * The name of the slot. Defaults to an empty string for an unnamed slot. + */ + name: string; + /** + * A textual description of the slot. + */ + docs: string; +} +/** + * A descriptor of a CSS Shadow Part + * + * Objects of this type are translated from the JSDoc tag, `@part`, or the 'part' + * attribute on a component in TSX + */ +export interface JsonDocsPart { + /** + * The name of the Shadow part + */ + name: string; + /** + * A textual description of the Shadow part. + */ + docs: string; +} +/** + * A descriptor for a Custom State defined via @AttachInternals({ states: {...} }) + * + * Custom states are exposed via the ElementInternals.states CustomStateSet + * and can be targeted with the CSS `:state()` pseudo-class. + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/CustomStateSet + */ +export interface JsonDocsCustomState { + /** + * The name of the custom state (without dashes) + */ + name: string; + /** + * The initial/default value of the state + */ + initialValue: boolean; + /** + * A textual description of the custom state + */ + docs: string; +} +/** + * Represents a parsed block comment in a CSS, Sass, etc. file for a custom property. + */ +export interface StyleDoc { + /** + * The name of the CSS property + */ + name: string; + /** + * The user-defined description of the CSS property + */ + docs: string; + /** + * The JSDoc-style annotation (e.g. `@prop`) that was used in the block comment to detect the comment. + * Used to inform Stencil where the start of a new property's description starts (and where the previous description + * ends). + */ + annotation: "prop"; + /** + * The Stencil style-mode that is associated with this property. + */ + mode: string | undefined; +} + +export {}; + +declare const _default: JsonDocs; +export default _default; diff --git a/packages/luna-charts/custom-elements.json b/packages/luna-charts/custom-elements.json new file mode 100644 index 0000000..b7c7052 --- /dev/null +++ b/packages/luna-charts/custom-elements.json @@ -0,0 +1,101 @@ +{ + "timestamp": "2026-07-12T12:51:52", + "compiler": { + "name": "@stencil/core", + "version": "4.43.5", + "typescriptVersion": "5.8.3" + }, + "components": [ + { + "filePath": "src/components/my-component/my-component.tsx", + "encapsulation": "shadow", + "tag": "my-component", + "readme": "# my-component\n\n\n", + "docs": "", + "docsTags": [], + "usage": {}, + "props": [ + { + "name": "first", + "type": "string", + "complexType": { + "original": "string", + "resolved": "string", + "references": {} + }, + "mutable": false, + "attr": "first", + "reflectToAttr": false, + "docs": "The first name", + "docsTags": [], + "values": [ + { + "type": "string" + } + ], + "optional": true, + "required": false, + "getter": false, + "setter": false + }, + { + "name": "last", + "type": "string", + "complexType": { + "original": "string", + "resolved": "string", + "references": {} + }, + "mutable": false, + "attr": "last", + "reflectToAttr": false, + "docs": "The last name", + "docsTags": [], + "values": [ + { + "type": "string" + } + ], + "optional": true, + "required": false, + "getter": false, + "setter": false + }, + { + "name": "middle", + "type": "string", + "complexType": { + "original": "string", + "resolved": "string", + "references": {} + }, + "mutable": false, + "attr": "middle", + "reflectToAttr": false, + "docs": "The middle name", + "docsTags": [], + "values": [ + { + "type": "string" + } + ], + "optional": true, + "required": false, + "getter": false, + "setter": false + } + ], + "methods": [], + "events": [], + "listeners": [], + "styles": [], + "slots": [], + "parts": [], + "states": [], + "dependents": [], + "dependencies": [], + "dependencyGraph": {} + } + ], + "typeLibrary": {} +} \ No newline at end of file diff --git a/packages/luna-charts/package.json b/packages/luna-charts/package.json index da73be6..ab4fda6 100644 --- a/packages/luna-charts/package.json +++ b/packages/luna-charts/package.json @@ -18,9 +18,9 @@ "types": "./dist/components/my-component.d.ts" }, "./loader": { + "types": "./loader/index.d.ts", "import": "./loader/index.js", - "require": "./loader/index.cjs", - "types": "./loader/index.d.ts" + "require": "./loader/index.cjs" } }, "repository": { @@ -36,15 +36,21 @@ "start": "stencil build --dev --watch --serve", "test": "stencil-test --prod", "test:watch": "stencil-test --prod --watch", - "generate": "stencil generate" + "generate": "stencil generate", + "storybook": "storybook dev -p 6006 --no-open" }, "devDependencies": { - "@stencil/core": "^4.27.1 || ^5.0.0-0", + "@stencil/core": "^4.43.5", + "@stencil/storybook-plugin": "^0.7.0", "@stencil/vitest": "^1.8.3", + "@storybook/addon-links": "^10.5.0", "@types/node": "^22.13.5", "@vitest/browser-playwright": "^4.0.0", "playwright": "^1.52.0", - "vitest": "^4.0.0" + "storybook": "^10.5.0", + "vitest": "^4.0.0", + "eslint-plugin-storybook": "10.5.0", + "@storybook/addon-docs": "^10.5.0" }, "license": "MIT" } diff --git a/packages/luna-charts/src/components/my-component/my-component.stories.tsx b/packages/luna-charts/src/components/my-component/my-component.stories.tsx new file mode 100644 index 0000000..429ad0d --- /dev/null +++ b/packages/luna-charts/src/components/my-component/my-component.stories.tsx @@ -0,0 +1,41 @@ +import type { Meta, StoryObj } from '@stencil/storybook-plugin'; +import { h } from '@stencil/core'; +import { MyComponent } from './my-component'; + +const meta: Meta = { + title: 'MyComponent', + component: MyComponent, + parameters: { + layout: 'centered', + }, + argTypes: { + first: { control: 'text' }, + last: { control: 'text' }, + middle: { control: 'text' }, + }, + args: { first: 'John', last: 'Doe', middle: 'Michael' }, +}; + +export default meta; + +type Story = StoryObj; + +export const Primary: Story = { + args: { + first: 'John', + last: 'Doe', + middle: 'Michael', + }, + render: (props) => , +}; + +/** + * Storybook story without custom render function + */ +export const Secondary: Story = { + args: { + first: 'Jane', + last: 'Smith', + middle: 'Marie', + }, +}; \ No newline at end of file diff --git a/packages/luna-charts/stencil.config.ts b/packages/luna-charts/stencil.config.ts index 251b97d..c78ce55 100644 --- a/packages/luna-charts/stencil.config.ts +++ b/packages/luna-charts/stencil.config.ts @@ -19,5 +19,9 @@ export const config: Config = { type: 'www', serviceWorker: null, // disable service workers }, + { + type: 'docs-json', + file: './custom-elements.json', + }, ], }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74038ab..01f4bb9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -220,26 +220,52 @@ importers: packages/luna-charts: devDependencies: '@stencil/core': - specifier: ^4.27.1 || ^5.0.0-0 + specifier: ^4.43.5 version: 4.43.5 + '@stencil/storybook-plugin': + specifier: ^0.7.0 + version: 0.7.0(@stencil/core@4.43.5)(preact@10.29.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(typescript@5.9.3)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) '@stencil/vitest': specifier: ^1.8.3 version: 1.13.3(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.61.1)(vitest@4.1.10) + '@storybook/addon-docs': + specifier: ^10.5.0 + version: 10.5.0(@types/react@19.2.17)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + '@storybook/addon-links': + specifier: ^10.5.0 + version: 10.5.0(@types/react@19.2.17)(react@19.2.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7)) '@types/node': specifier: ^22.13.5 version: 22.20.1 '@vitest/browser-playwright': specifier: ^4.0.0 version: 4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10) + eslint-plugin-storybook: + specifier: 10.5.0 + version: 10.5.0(eslint@10.6.0(jiti@2.7.0))(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(typescript@5.9.3) playwright: specifier: ^1.52.0 version: 1.61.1 + storybook: + specifier: ^10.5.0 + version: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) vitest: specifier: ^4.0.0 version: 4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) packages: + '@adobe/css-tools@4.5.0': + resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} + + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + '@babel/runtime@7.29.7': resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} engines: {node: '>=6.9.0'} @@ -305,12 +331,177 @@ packages: '@emnapi/core@1.11.1': resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + '@emnapi/core@1.9.2': + resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + '@emnapi/runtime@1.11.1': resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + '@emnapi/runtime@1.9.2': + resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@emnapi/wasi-threads@1.2.2': resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.9.1': resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -370,15 +561,34 @@ packages: '@types/node': optional: true + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@mdx-js/react@3.1.1': + resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + '@napi-rs/wasm-runtime@1.1.6': resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} peerDependencies: @@ -397,9 +607,242 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@oxc-parser/binding-android-arm-eabi@0.127.0': + resolution: {integrity: sha512-0LC7ye4hvqbIKxAzThzvswgHLFu2AURKzYLeSVvLdu2TBOYWQDmHnTqPLeA597BcUCxiLqLsS4CJ5uoI5WYWCQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-parser/binding-android-arm64@0.127.0': + resolution: {integrity: sha512-b5jtVTH6AU5CJXHNdj7Jj9IEiR9yVjjnwHzPJhGyHGPdcsZSzBCkS9GBbV33niRMvKthDwQRFRJfI4a+k4PvYg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-parser/binding-darwin-arm64@0.127.0': + resolution: {integrity: sha512-obCE8B7ISKkJidjlhv9xRGJPOSDG2Yu6PRga9Ruaz35uintHxbp1Ki/Yc71wx4rj3Edrm0a1kzG1TAwit0wFpg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.127.0': + resolution: {integrity: sha512-JL6Xb5IwPQT8rUzlpsX7E+AgfcdNklXNPFp8pjCQQ5MQOQo5rtEB2ui+3Hgg9Sn7Y9Egj6YOLLiHhLpdAe12Aw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-freebsd-x64@0.127.0': + resolution: {integrity: sha512-SDQ/3MQFw58fqQz3Z1PhSKFF3JoCF4gmlNjziDm8X02tTahCw0qJbd7FGPDKw1i4VTBZene9JPyC3mHtSvi+wA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0': + resolution: {integrity: sha512-Av+D1MIqzV0YMGPT9we2SIZaMKD7Cxs4CvXSx/yxaWHewZjYEjScpOf5igc8IILASViw4WTnjlwUdI1KzVtDHQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.127.0': + resolution: {integrity: sha512-Cs2fdJ8cPpFdeebj6p4dag8A4+56hPvZ0AhQQzlaLswGz1tz7bXt1nETLeorrM9+AMcWFFkqxcXwDGfTVidY8g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm64-gnu@0.127.0': + resolution: {integrity: sha512-qdOfTcT6SY8gsJrrV92uyEUyjqMGPpIB5JZUG6QN5dukYd+7/j0kX6MwK1DgQj39jtUYixxPiaRUiEN1+0CXgQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-arm64-musl@0.127.0': + resolution: {integrity: sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': + resolution: {integrity: sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': + resolution: {integrity: sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-musl@0.127.0': + resolution: {integrity: sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-s390x-gnu@0.127.0': + resolution: {integrity: sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-gnu@0.127.0': + resolution: {integrity: sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-musl@0.127.0': + resolution: {integrity: sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-openharmony-arm64@0.127.0': + resolution: {integrity: sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-parser/binding-wasm32-wasi@0.127.0': + resolution: {integrity: sha512-T6KVD7rhLzFlwGRXMnxUFfkCZD8FHnb968wVXW1mXzgRFc5RNXOBY2mPPDZ77x5Ln76ltLMgtPg0cOkU1NSrEQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@oxc-parser/binding-win32-arm64-msvc@0.127.0': + resolution: {integrity: sha512-Ujvw4X+LD1CCGULcsQcvb4YNVoBGqt+JHgNNzGGaCImELiZLk477ifUH53gIbE7EKd933NdTi25JWEr9K2HwXw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-ia32-msvc@0.127.0': + resolution: {integrity: sha512-0cwxKO7KHQQQfo4Uf4B2SQrhgm+cJaP9OvFFhx52Tkg4bezsacu83GB2/In5bC415Ueeym+kXdnge/57rbSfTw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.127.0': + resolution: {integrity: sha512-rOrnSQSCbhI2kowr9XxE7m9a8oQXnBHjnS6j95LxxAnEZ0+Fz20WlRXG4ondQb+ejjt2KOsa65sE6++L6kUd+w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-project/types@0.127.0': + resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} + '@oxc-project/types@0.139.0': resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} + '@oxc-resolver/binding-android-arm-eabi@11.23.0': + resolution: {integrity: sha512-8IJyWRLVAyhTfe9/TIEbQqSQnl5rUqYJrUOS6Dkr+Mq9FGHMxDGeiEmwkBqCvDP5KckpPh/GYSgbag66O6JsCw==} + cpu: [arm] + os: [android] + + '@oxc-resolver/binding-android-arm64@11.23.0': + resolution: {integrity: sha512-pprVojnNhHxupwTT2gdeUlkxll6XEvWWBk3oVicOSNVWQC99OBnDhMQDoirqnzrE1bScQSMS2JgPpqdlrhz/Fg==} + cpu: [arm64] + os: [android] + + '@oxc-resolver/binding-darwin-arm64@11.23.0': + resolution: {integrity: sha512-mbIrWIMAJeytyee36OyUP5XH92TP7FaKaQ2m5AjokKy7STgjrhRt7SMXqpqLjhGm6Xn721Xmsg6H3Rtd9YQETw==} + cpu: [arm64] + os: [darwin] + + '@oxc-resolver/binding-darwin-x64@11.23.0': + resolution: {integrity: sha512-UnIphmZ1LazUCr9DXWaKYWtKDefPMbgLsywaoYxRqVCNHhq4MM6d2q1Nz1i9Vzxt5i+cE2nRUYpAUHr/lijNYA==} + cpu: [x64] + os: [darwin] + + '@oxc-resolver/binding-freebsd-x64@11.23.0': + resolution: {integrity: sha512-aaZ/cSEYFkSxgS2hOrobT6RQcsWNviOX8dW6CEkVx2/UYkAf9MeHbjl3W0usWV53rVV//ndBdn2nb1y7jsu4lw==} + cpu: [x64] + os: [freebsd] + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.23.0': + resolution: {integrity: sha512-IoJLvO5SjLSVMaq83BNTrPCb1FppvoJc1IhZ5CoUVl3PykUBku7D+LK1j0GSurhJcIc6zfjghsvaZNpq5ev6Mg==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm-musleabihf@11.23.0': + resolution: {integrity: sha512-vskFpwg44T/LFsfjSCnVZ5ygcuqzPC1yUzVEiKa8BgHAQz0+QLQQW3EGWLPVi8EXFghzjR4EtgPBtOhCjU4jdw==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-gnu@11.23.0': + resolution: {integrity: sha512-//TcHVhrChyw5RYtgts6WO7KcWq9387c1Z5Zvhqpk/ktAbyaRYgBZrpSY1GDCFq50ASt6B6jhh+JxB1rB45IAg==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-arm64-musl@11.23.0': + resolution: {integrity: sha512-ZFqlwiTf7CXLLSGyAR9tYiO33LiaeIEXW+xm42d8mnUGpDgPltyrCGYtQezyMMEXvjhOgCz1X+i7sbDTJEx+bg==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-ppc64-gnu@11.23.0': + resolution: {integrity: sha512-oZ5LeN5+H1R19dRjTAxKrxQguH+AsemHcnthEfFxf4OjmBSty2doHLeSmMunKy3zpTHJQ3lh3Af+dNS+W6dYeA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-gnu@11.23.0': + resolution: {integrity: sha512-O4ciFDyX5ebQd0qkb1bjAIg8IEfiLT03GbSeylwlwlUMK9KwBWaALwrxSbc0Msaz4U6iPj+T9eRXpD5mxBfmvA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-musl@11.23.0': + resolution: {integrity: sha512-P3o8Y9kISYjcxadmbO+94ThRwLhwGuDAbA7dcdd4+YLpfeF+mmobz8fXf4NmSdfSqjyRSkceJDBRZha9NVYkiQ==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-s390x-gnu@11.23.0': + resolution: {integrity: sha512-oj03m1E3RmTFczKhcKJDzHaEDKJnPIsDcQFVxBJsSdXGSuIPdt5TvcM332FfMQgzI6yDJqyl4InrnFfXrmUTKQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-gnu@11.23.0': + resolution: {integrity: sha512-BqJxbSC8FdP7mSuSpRePTGHm0hXWV+dfz//f7SjsteZncLaBgWTBmi/OZNv7sX6CyG/Pt/eJkPorP+DkMOhMwQ==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-musl@11.23.0': + resolution: {integrity: sha512-utmw+VmUrW4K8LI5/6jhg4aGYKJHOIjQ9syYOOA6pF3w7haKu4r4enTe2U0C04/HbUvkq/Zif43xFsKW1Pnq9w==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-openharmony-arm64@11.23.0': + resolution: {integrity: sha512-V6lbRrthHa4TbvsLjPtg+EkXT1tRY+s4I8rYLXUfiHlZzGx3sLv1EH9CEOOevjvUYHLsbe/gqCIc73XnQfPb9A==} + cpu: [arm64] + os: [openharmony] + + '@oxc-resolver/binding-wasm32-wasi@11.23.0': + resolution: {integrity: sha512-gRoOxQPdnAmIAjxcuQNBxfihvx+wjTaQM/9/eP12xwnGNawOG/+Zz9RHN4WNSxT45b5CrscK4NB8aPh+oZQXAQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-resolver/binding-win32-arm64-msvc@11.23.0': + resolution: {integrity: sha512-CgTGMYsJVe1eUiCdJTpGw21svXw79ITsemN1h0hcNkiswasDbN5MoibSLY+gRMWP5syfEz5iffrjZnwEP8xeUA==} + cpu: [arm64] + os: [win32] + + '@oxc-resolver/binding-win32-x64-msvc@11.23.0': + resolution: {integrity: sha512-gUGJpr+Rn6zMxm5juApV0K3U845i8t47o8k+rbO0BHbi4PoJIfSPeQmrE2dgohQm2g5k6iviNFyXCGqvmaYUpw==} + cpu: [x64] + os: [win32] + '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} @@ -548,11 +991,42 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@stencil-community/unplugin-stencil@0.5.2': + resolution: {integrity: sha512-5MN8Kbovtv7Rz2tj4u+V+E+4KYI98aj1pHBWKNxtzFYaR63ONa3KZ7BgIezzt6RZiHZ9z1WrUpnRF6x7ZiRCTg==} + peerDependencies: + '@nuxt/kit': ^3 + '@nuxt/schema': ^3 + '@stencil/core': ^4.29.3 + esbuild: '*' + rollup: ^3 + vite: '>=3' + webpack: ^4 || ^5 + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@nuxt/schema': + optional: true + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: + optional: true + '@stencil/core@4.43.5': resolution: {integrity: sha512-cgWD+GeuvJpTe1WQn40p02+BJ2j0j1YJ17GdkF2qKIQ23s2e3Zivq5yISXS3dcuV6oUJFN93jprdk+nk/sq99Q==} engines: {node: '>=16.0.0', npm: '>=7.10.0'} hasBin: true + '@stencil/storybook-plugin@0.7.0': + resolution: {integrity: sha512-JSymJSjE4EdJWSTKCXAAzG8ZTFunPsBrb1JAUDsqsoyfnKQkxfqhUhsxU3BgTWJx1ISYCwmfnfWnc+2igegHsw==} + engines: {node: '>=20'} + peerDependencies: + '@stencil/core': ^4.30.0 + storybook: ^10.0.0 + '@stencil/vitest@1.13.3': resolution: {integrity: sha512-dWpmN9KPRLZpA6wGJ+46z8wjxrAErqbKEmgKLUIC/Ke/VURMzM1Oh/8F03tmC1qVba3KqAjnO6gpuxMOt/90yw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -589,9 +1063,98 @@ packages: playwright: optional: true + '@storybook/addon-docs@10.5.0': + resolution: {integrity: sha512-kbZGdX+mysiY4xezhpcFEwzQ1zSXcMhSS3u09Qt8+w5XetCAMMSv/yAxzpi6z+YoH+EdQ53e1q3MFtPUkzkfUA==} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.5.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@storybook/addon-links@10.5.0': + resolution: {integrity: sha512-pZlBqBjJc9Lo3LbcPx2ch0+BXD/efFQ0x9v7w+siCTs4IfqiePBuMK6ZSBQfxai+x/zHm0vKNTmOikEvP8j1wA==} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.5.0 + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + + '@storybook/builder-vite@10.5.0': + resolution: {integrity: sha512-KXlifNIThDgS84KqVAJXyilool8OLTWp6DGoO9h5bHM2IPLe7UcdKfOzMUBkQ807mWBk4aW1yGEekj7kC2dvmg==} + peerDependencies: + storybook: ^10.5.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@storybook/csf-plugin@10.5.0': + resolution: {integrity: sha512-R7VFw6FnDZTWct0ekOcFnTfDgdHnnAuQW+AbGG9A9IZPvyH9uLJivK7L86+r9MITRrO2+v81HaFDsT/OFk6ZkQ==} + peerDependencies: + esbuild: '*' + rollup: '*' + storybook: ^10.5.0 + vite: '*' + webpack: '*' + peerDependenciesMeta: + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: + optional: true + + '@storybook/global@5.0.0': + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + + '@storybook/html@10.5.0': + resolution: {integrity: sha512-buj/0N+mhsDTIqaEGxa9q6Q7mDCDbZJkBUmABwMep77FOP9eH/TFuUmDYhHK4/o9sNTCrROG6Df/Q/A+fiO0zQ==} + peerDependencies: + storybook: ^10.5.0 + + '@storybook/icons@2.1.0': + resolution: {integrity: sha512-Fxh9vYpX9bQqFeHRiY8h2ApeRGDzRSMLwJwNZ/AIRqnyOKHxRKL+yFe+ctEkVJmuptRE9u1Hrn8ZZNHyfDKKNg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@storybook/react-dom-shim@10.5.0': + resolution: {integrity: sha512-GwGA6zDj4Cfw6vGsdfPKfF39L0W6solNbbnjdjGa57m2ooASkidLhrXo2wgC9wh3o/jcfonmYPDRGY6sEhGDtg==} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.5.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + engines: {node: '>=18'} + + '@testing-library/jest-dom@6.9.1': + resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + '@tybys/wasm-util@0.10.3': resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -607,12 +1170,55 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/mdx@2.0.14': + resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} + '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} '@types/node@22.20.1': resolution: {integrity: sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==} + '@types/react@19.2.17': + resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==} + + '@typescript-eslint/project-service@8.63.0': + resolution: {integrity: sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/scope-manager@8.63.0': + resolution: {integrity: sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.63.0': + resolution: {integrity: sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/types@8.63.0': + resolution: {integrity: sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.63.0': + resolution: {integrity: sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/utils@8.63.0': + resolution: {integrity: sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/visitor-keys@8.63.0': + resolution: {integrity: sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vitest/browser-playwright@4.1.10': resolution: {integrity: sha512-nMoXGEiRpT7m3W7NsbvrM2aKNwiNHZf+zEpUCvMteGjZFvfT96Q9fh7QyB98dvDWXiKvrLxA7bJ1mCOOv+JQPw==} peerDependencies: @@ -624,6 +1230,9 @@ packages: peerDependencies: vitest: 4.1.10 + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@vitest/expect@4.1.10': resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} @@ -638,6 +1247,9 @@ packages: vite: optional: true + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/pretty-format@4.1.10': resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==} @@ -647,12 +1259,21 @@ packages: '@vitest/snapshot@4.1.10': resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + '@vitest/spy@4.1.10': resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vitest/utils@4.1.10': resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} + '@webcontainer/env@1.1.1': + resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -674,12 +1295,23 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -688,6 +1320,10 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} @@ -704,6 +1340,14 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} @@ -711,6 +1355,10 @@ packages: chardet@2.2.0: resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -724,6 +1372,12 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -733,9 +1387,29 @@ packages: supports-color: optional: true + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -748,6 +1422,12 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -755,10 +1435,21 @@ packages: es-module-lexer@2.3.0: resolution: {integrity: sha512-KLdwQm2NvGLDkQDCGvmiQrhkd0JbMzXthwQAUgWjQuQdBLFa3eiBP5arXZyA+f8x+x7OXgud6bq2rxjGtHV2tw==} + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + eslint-plugin-storybook@10.5.0: + resolution: {integrity: sha512-UyhbK11baKAYqzyDUHlwDlm1aP/wxPMR0vFmsxA5984BGaPwarhoXUWng1Xa0cd9BdPbQ+zr/y8ADk6XxtwkYg==} + peerDependencies: + eslint: '>=8' + storybook: ^10.5.0 + eslint-scope@9.1.2: resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -916,6 +1607,15 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -924,6 +1624,11 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -936,6 +1641,10 @@ packages: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -943,6 +1652,9 @@ packages: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-yaml@3.15.0: resolution: {integrity: sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==} hasBin: true @@ -960,6 +1672,9 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} @@ -1059,6 +1774,13 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -1070,6 +1792,10 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -1100,6 +1826,10 @@ packages: resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} engines: {node: '>=12.20.0'} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -1107,6 +1837,13 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + oxc-parser@0.127.0: + resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==} + engines: {node: ^20.19.0 || >=22.12.0} + + oxc-resolver@11.23.0: + resolution: {integrity: sha512-f0+l598CJMOLnYPXsXxttJALH0ljtivdRMKtvHhxRuWa5FYmw5+qODARl8oYjMC/brpzKcrpdORsOBrTqhBZ9A==} + p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} @@ -1153,6 +1890,10 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1192,6 +1933,19 @@ packages: resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} engines: {node: ^10 || ^12 || >=14} + preact-render-to-string@6.7.0: + resolution: {integrity: sha512-Z4WR8fmLMRpdYqJ9i7vrlXSsSrxVJydwrkEXHapexfARbWfGb7vGcnvNQnIzN0cXciMVOlz/XLoiMCi9gUsy9Q==} + peerDependencies: + preact: '>=10 || >= 11.0.0-0' + + preact@10.29.7: + resolution: {integrity: sha512-DCHYrK/B10yUD3ZjLfhZ3WIE/9Vf9VFUODcRE2dRomTYDpJk6z6L9wecSfhfE6M9ZTHUdyQkoC46arIDhEV84Q==} + peerDependencies: + preact-render-to-string: '>=5' + peerDependenciesMeta: + preact-render-to-string: + optional: true + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -1206,6 +1960,10 @@ packages: engines: {node: '>=14'} hasBin: true + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -1216,10 +1974,35 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + react-docgen-typescript@2.4.0: + resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} + peerDependencies: + typescript: '>= 4.3.x' + + react-dom@19.2.7: + resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} + peerDependencies: + react: ^19.2.7 + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react@19.2.7: + resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} + engines: {node: '>=0.10.0'} + read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} + recast@0.23.12: + resolution: {integrity: sha512-dEWRjcINDu/F4l2dYx57ugBtD7HV9KXESyxhzw/MqWLeglJrsjJKqACPyUPg+6AF8mIgm+Zi0dZ3ACoIg+QtpA==} + engines: {node: '>= 4'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -1233,12 +2016,19 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + semver@7.8.5: resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} @@ -1271,6 +2061,10 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} @@ -1283,6 +2077,21 @@ packages: std-env@4.2.0: resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} + storybook@10.5.0: + resolution: {integrity: sha512-dRhM/kSSvHQR8DmZO41v5sJuz9U6zDjjR2gRBTgZN2RBSXbmF0Brvgszrvvxyx2VfxuYKzhB+xumKwWkwlBtig==} + hasBin: true + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + prettier: ^2 || ^3 + vite-plus: ^0.1.15 || ^0.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + prettier: + optional: true + vite-plus: + optional: true + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1291,10 +2100,17 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -1306,10 +2122,18 @@ packages: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + tinyrainbow@3.1.0: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -1318,6 +2142,16 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-dedent@2.3.0: + resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==} + engines: {node: '>=6.10'} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -1325,6 +2159,11 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + ufo@1.6.4: resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} @@ -1335,9 +2174,18 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} + unplugin@2.3.11: + resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} + engines: {node: '>=18.12.0'} + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + vite@8.1.4: resolution: {integrity: sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1427,6 +2275,9 @@ packages: jsdom: optional: true + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -1453,12 +2304,26 @@ packages: utf-8-validate: optional: true + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} snapshots: + '@adobe/css-tools@4.5.0': {} + + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.29.7': {} + '@babel/runtime@7.29.7': {} '@blazediff/core@1.9.1': {} @@ -1612,16 +2477,110 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/core@1.9.2': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.11.1': dependencies: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.9.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.2.2': dependencies: tslib: 2.8.1 optional: true + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0(jiti@2.7.0))': dependencies: eslint: 10.6.0(jiti@2.7.0) @@ -1675,8 +2634,25 @@ snapshots: optionalDependencies: '@types/node': 22.20.1 + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.29.7 @@ -1693,6 +2669,12 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 + '@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7)': + dependencies: + '@types/mdx': 2.0.14 + '@types/react': 19.2.17 + react: 19.2.7 + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: '@emnapi/core': 1.11.1 @@ -1700,6 +2682,13 @@ snapshots: '@tybys/wasm-util': 0.10.3 optional: true + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@tybys/wasm-util': 0.10.3 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -1712,8 +2701,135 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 + '@oxc-parser/binding-android-arm-eabi@0.127.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.127.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.127.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.127.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.127.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.127.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.127.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.127.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.127.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.127.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.127.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.127.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.127.0': + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.127.0': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.127.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.127.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.127.0': + optional: true + + '@oxc-project/types@0.127.0': {} + '@oxc-project/types@0.139.0': {} + '@oxc-resolver/binding-android-arm-eabi@11.23.0': + optional: true + + '@oxc-resolver/binding-android-arm64@11.23.0': + optional: true + + '@oxc-resolver/binding-darwin-arm64@11.23.0': + optional: true + + '@oxc-resolver/binding-darwin-x64@11.23.0': + optional: true + + '@oxc-resolver/binding-freebsd-x64@11.23.0': + optional: true + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.23.0': + optional: true + + '@oxc-resolver/binding-linux-arm-musleabihf@11.23.0': + optional: true + + '@oxc-resolver/binding-linux-arm64-gnu@11.23.0': + optional: true + + '@oxc-resolver/binding-linux-arm64-musl@11.23.0': + optional: true + + '@oxc-resolver/binding-linux-ppc64-gnu@11.23.0': + optional: true + + '@oxc-resolver/binding-linux-riscv64-gnu@11.23.0': + optional: true + + '@oxc-resolver/binding-linux-riscv64-musl@11.23.0': + optional: true + + '@oxc-resolver/binding-linux-s390x-gnu@11.23.0': + optional: true + + '@oxc-resolver/binding-linux-x64-gnu@11.23.0': + optional: true + + '@oxc-resolver/binding-linux-x64-musl@11.23.0': + optional: true + + '@oxc-resolver/binding-openharmony-arm64@11.23.0': + optional: true + + '@oxc-resolver/binding-wasm32-wasi@11.23.0': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optional: true + + '@oxc-resolver/binding-win32-arm64-msvc@11.23.0': + optional: true + + '@oxc-resolver/binding-win32-x64-msvc@11.23.0': + optional: true + '@polka/url@1.0.0-next.29': {} '@rolldown/binding-android-arm64@1.1.5': @@ -1793,6 +2909,15 @@ snapshots: '@standard-schema/spec@1.1.0': {} + '@stencil-community/unplugin-stencil@0.5.2(@stencil/core@4.43.5)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))': + dependencies: + '@stencil/core': 4.43.5 + mlly: 1.8.2 + typescript: 5.9.3 + unplugin: 2.3.11 + optionalDependencies: + vite: 8.1.4(@types/node@22.20.1)(jiti@2.7.0) + '@stencil/core@4.43.5': optionalDependencies: '@rollup/rollup-darwin-arm64': 4.44.0 @@ -1804,6 +2929,26 @@ snapshots: '@rollup/rollup-win32-arm64-msvc': 4.44.0 '@rollup/rollup-win32-x64-msvc': 4.44.0 + '@stencil/storybook-plugin@0.7.0(@stencil/core@4.43.5)(preact@10.29.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(typescript@5.9.3)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))': + dependencies: + '@stencil-community/unplugin-stencil': 0.5.2(@stencil/core@4.43.5)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + '@stencil/core': 4.43.5 + '@storybook/builder-vite': 10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + '@storybook/global': 5.0.0 + '@storybook/html': 10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7)) + preact-render-to-string: 6.7.0(preact@10.29.7) + react-docgen-typescript: 2.4.0(typescript@5.9.3) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + transitivePeerDependencies: + - '@nuxt/kit' + - '@nuxt/schema' + - esbuild + - preact + - rollup + - typescript + - vite + - webpack + '@stencil/vitest@1.13.3(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.61.1)(vitest@4.1.10)': dependencies: '@stencil/core': 4.43.5 @@ -1815,11 +2960,102 @@ snapshots: '@vitest/browser-playwright': 4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10) playwright: 1.61.1 + '@storybook/addon-docs@10.5.0(@types/react@19.2.17)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))': + dependencies: + '@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.7) + '@storybook/csf-plugin': 10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + '@storybook/icons': 2.1.0(react@19.2.7) + '@storybook/react-dom-shim': 10.5.0(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7)) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + ts-dedent: 2.3.0 + optionalDependencies: + '@types/react': 19.2.17 + transitivePeerDependencies: + - '@types/react-dom' + - esbuild + - rollup + - vite + - webpack + + '@storybook/addon-links@10.5.0(@types/react@19.2.17)(react@19.2.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + optionalDependencies: + '@types/react': 19.2.17 + react: 19.2.7 + + '@storybook/builder-vite@10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))': + dependencies: + '@storybook/csf-plugin': 10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + ts-dedent: 2.3.0 + vite: 8.1.4(@types/node@22.20.1)(jiti@2.7.0) + transitivePeerDependencies: + - esbuild + - rollup + - webpack + + '@storybook/csf-plugin@10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))': + dependencies: + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + unplugin: 2.3.11 + optionalDependencies: + vite: 8.1.4(@types/node@22.20.1)(jiti@2.7.0) + + '@storybook/global@5.0.0': {} + + '@storybook/html@10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + ts-dedent: 2.3.0 + + '@storybook/icons@2.1.0(react@19.2.7)': + dependencies: + react: 19.2.7 + + '@storybook/react-dom-shim@10.5.0(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))': + dependencies: + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + optionalDependencies: + '@types/react': 19.2.17 + + '@testing-library/dom@10.4.1': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/runtime': 7.29.7 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + picocolors: 1.1.1 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.9.1': + dependencies: + '@adobe/css-tools': 4.5.0 + aria-query: 5.3.2 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': + dependencies: + '@testing-library/dom': 10.4.1 + '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 optional: true + '@types/aria-query@5.0.4': {} + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -1833,12 +3069,69 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/mdx@2.0.14': {} + '@types/node@12.20.55': {} '@types/node@22.20.1': dependencies: undici-types: 6.21.0 + '@types/react@19.2.17': + dependencies: + csstype: 3.2.3 + + '@typescript-eslint/project-service@8.63.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@5.9.3) + '@typescript-eslint/types': 8.63.0 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.63.0': + dependencies: + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/visitor-keys': 8.63.0 + + '@typescript-eslint/tsconfig-utils@8.63.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/types@8.63.0': {} + + '@typescript-eslint/typescript-estree@8.63.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.63.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@5.9.3) + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/visitor-keys': 8.63.0 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.8.5 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.63.0 + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) + eslint: 10.6.0(jiti@2.7.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.63.0': + dependencies: + '@typescript-eslint/types': 8.63.0 + eslint-visitor-keys: 5.0.1 + '@vitest/browser-playwright@4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10)': dependencies: '@vitest/browser': 4.1.10(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10) @@ -1869,6 +3162,14 @@ snapshots: - utf-8-validate - vite + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 + '@vitest/expect@4.1.10': dependencies: '@standard-schema/spec': 1.1.0 @@ -1886,6 +3187,10 @@ snapshots: optionalDependencies: vite: 8.1.4(@types/node@22.20.1)(jiti@2.7.0) + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + '@vitest/pretty-format@4.1.10': dependencies: tinyrainbow: 3.1.0 @@ -1902,14 +3207,26 @@ snapshots: magic-string: 0.30.21 pathe: 2.0.3 + '@vitest/spy@3.2.4': + dependencies: + tinyspy: 4.0.4 + '@vitest/spy@4.1.10': {} + '@vitest/utils@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + '@vitest/utils@4.1.10': dependencies: '@vitest/pretty-format': 4.1.10 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 + '@webcontainer/env@1.1.1': {} + acorn-jsx@5.3.2(acorn@8.17.0): dependencies: acorn: 8.17.0 @@ -1927,16 +3244,28 @@ snapshots: ansi-regex@5.0.1: {} + ansi-styles@5.2.0: {} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 argparse@2.0.1: {} + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + aria-query@5.3.2: {} + array-union@2.1.0: {} assertion-error@2.0.1: {} + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + balanced-match@4.0.4: {} better-path-resolve@1.0.0: @@ -1951,10 +3280,24 @@ snapshots: dependencies: fill-range: 7.1.1 + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.3 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + chai@6.2.2: {} chardet@2.2.0: {} + check-error@2.1.3: {} + confbox@0.1.8: {} confbox@0.2.4: {} @@ -1967,12 +3310,29 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + css.escape@1.5.1: {} + + csstype@3.2.3: {} + debug@4.4.3: dependencies: ms: 2.1.3 + deep-eql@5.0.2: {} + deep-is@0.1.4: {} + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + define-lazy-prop@3.0.0: {} + + dequal@2.0.3: {} + detect-indent@6.1.0: {} detect-libc@2.1.2: {} @@ -1981,6 +3341,10 @@ snapshots: dependencies: path-type: 4.0.0 + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.6.3: {} + enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 @@ -1988,8 +3352,47 @@ snapshots: es-module-lexer@2.3.0: {} + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + escape-string-regexp@4.0.0: {} + eslint-plugin-storybook@10.5.0(eslint@10.6.0(jiti@2.7.0))(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(typescript@5.9.3): + dependencies: + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.6.0(jiti@2.7.0) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + transitivePeerDependencies: + - supports-color + - typescript + eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 @@ -2162,12 +3565,20 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + + is-docker@3.0.0: {} + is-extglob@2.1.1: {} is-glob@4.0.3: dependencies: is-extglob: 2.1.1 + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-number@7.0.0: {} is-subdir@1.2.0: @@ -2176,10 +3587,16 @@ snapshots: is-windows@1.0.2: {} + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 + isexe@2.0.0: {} jiti@2.7.0: {} + js-tokens@4.0.0: {} + js-yaml@3.15.0: dependencies: argparse: 1.0.10 @@ -2195,6 +3612,8 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + jsonc-parser@3.3.1: {} + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 @@ -2273,6 +3692,10 @@ snapshots: lodash.startcase@4.4.0: {} + loupe@3.2.1: {} + + lz-string@1.5.0: {} + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -2284,6 +3707,8 @@ snapshots: braces: 3.0.3 picomatch: 2.3.2 + min-indent@1.0.1: {} + minimatch@10.2.5: dependencies: brace-expansion: 5.0.7 @@ -2307,6 +3732,13 @@ snapshots: obug@2.1.3: {} + open@10.2.0: + dependencies: + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -2318,6 +3750,53 @@ snapshots: outdent@0.5.0: {} + oxc-parser@0.127.0: + dependencies: + '@oxc-project/types': 0.127.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.127.0 + '@oxc-parser/binding-android-arm64': 0.127.0 + '@oxc-parser/binding-darwin-arm64': 0.127.0 + '@oxc-parser/binding-darwin-x64': 0.127.0 + '@oxc-parser/binding-freebsd-x64': 0.127.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.127.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.127.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.127.0 + '@oxc-parser/binding-linux-arm64-musl': 0.127.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.127.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.127.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.127.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.127.0 + '@oxc-parser/binding-linux-x64-gnu': 0.127.0 + '@oxc-parser/binding-linux-x64-musl': 0.127.0 + '@oxc-parser/binding-openharmony-arm64': 0.127.0 + '@oxc-parser/binding-wasm32-wasi': 0.127.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.127.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.127.0 + '@oxc-parser/binding-win32-x64-msvc': 0.127.0 + + oxc-resolver@11.23.0: + optionalDependencies: + '@oxc-resolver/binding-android-arm-eabi': 11.23.0 + '@oxc-resolver/binding-android-arm64': 11.23.0 + '@oxc-resolver/binding-darwin-arm64': 11.23.0 + '@oxc-resolver/binding-darwin-x64': 11.23.0 + '@oxc-resolver/binding-freebsd-x64': 11.23.0 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.23.0 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.23.0 + '@oxc-resolver/binding-linux-arm64-gnu': 11.23.0 + '@oxc-resolver/binding-linux-arm64-musl': 11.23.0 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.23.0 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.23.0 + '@oxc-resolver/binding-linux-riscv64-musl': 11.23.0 + '@oxc-resolver/binding-linux-s390x-gnu': 11.23.0 + '@oxc-resolver/binding-linux-x64-gnu': 11.23.0 + '@oxc-resolver/binding-linux-x64-musl': 11.23.0 + '@oxc-resolver/binding-openharmony-arm64': 11.23.0 + '@oxc-resolver/binding-wasm32-wasi': 11.23.0 + '@oxc-resolver/binding-win32-arm64-msvc': 11.23.0 + '@oxc-resolver/binding-win32-x64-msvc': 11.23.0 + p-filter@2.1.0: dependencies: p-map: 2.1.0 @@ -2354,6 +3833,8 @@ snapshots: pathe@2.0.3: {} + pathval@2.0.1: {} + picocolors@1.1.1: {} picomatch@2.3.2: {} @@ -2390,18 +3871,45 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + preact-render-to-string@6.7.0(preact@10.29.7): + dependencies: + preact: 10.29.7(preact-render-to-string@6.7.0) + + preact@10.29.7(preact-render-to-string@6.7.0): + optionalDependencies: + preact-render-to-string: 6.7.0(preact@10.29.7) + prelude-ls@1.2.1: {} prettier@2.8.8: {} prettier@3.9.4: {} + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + punycode@2.3.1: {} quansync@0.2.11: {} queue-microtask@1.2.3: {} + react-docgen-typescript@2.4.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + react-dom@19.2.7(react@19.2.7): + dependencies: + react: 19.2.7 + scheduler: 0.27.0 + + react-is@17.0.2: {} + + react@19.2.7: {} + read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -2409,6 +3917,19 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 + recast@0.23.12: + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + resolve-from@5.0.0: {} reusify@1.1.0: {} @@ -2434,12 +3955,16 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.1.5 '@rolldown/binding-win32-x64-msvc': 1.1.5 + run-applescript@7.1.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 safer-buffer@2.1.2: {} + scheduler@0.27.0: {} + semver@7.8.5: {} shebang-command@2.0.0: @@ -2462,6 +3987,8 @@ snapshots: source-map-js@1.2.1: {} + source-map@0.6.1: {} + spawndamnit@3.0.1: dependencies: cross-spawn: 7.0.6 @@ -2473,14 +4000,47 @@ snapshots: std-env@4.2.0: {} + storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7): + dependencies: + '@storybook/global': 5.0.0 + '@storybook/icons': 2.1.0(react@19.2.7) + '@testing-library/dom': 10.4.1 + '@testing-library/jest-dom': 6.9.1 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) + '@vitest/expect': 3.2.4 + '@vitest/spy': 3.2.4 + '@webcontainer/env': 1.1.1 + esbuild: 0.25.12 + jsonc-parser: 3.3.1 + open: 10.2.0 + oxc-parser: 0.127.0 + oxc-resolver: 11.23.0 + recast: 0.23.12 + semver: 7.8.5 + use-sync-external-store: 1.6.0(react@19.2.7) + ws: 8.21.0 + optionalDependencies: + '@types/react': 19.2.17 + prettier: 3.9.4 + transitivePeerDependencies: + - bufferutil + - react + - utf-8-validate + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 strip-bom@3.0.0: {} + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + term-size@2.2.1: {} + tiny-invariant@1.3.3: {} + tinybench@2.9.0: {} tinyexec@1.2.4: {} @@ -2490,31 +4050,53 @@ snapshots: fdir: 6.5.0(picomatch@4.0.5) picomatch: 4.0.5 + tinyrainbow@2.0.0: {} + tinyrainbow@3.1.0: {} + tinyspy@4.0.4: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 totalist@3.0.1: {} - tslib@2.8.1: - optional: true + ts-api-utils@2.5.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + ts-dedent@2.3.0: {} + + tslib@2.8.1: {} type-check@0.4.0: dependencies: prelude-ls: 1.2.1 + typescript@5.9.3: {} + ufo@1.6.4: {} undici-types@6.21.0: {} universalify@0.1.2: {} + unplugin@2.3.11: + dependencies: + '@jridgewell/remapping': 2.3.5 + acorn: 8.17.0 + picomatch: 4.0.5 + webpack-virtual-modules: 0.6.2 + uri-js@4.4.1: dependencies: punycode: 2.3.1 + use-sync-external-store@1.6.0(react@19.2.7): + dependencies: + react: 19.2.7 + vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0): dependencies: lightningcss: 1.32.0 @@ -2571,6 +4153,8 @@ snapshots: transitivePeerDependencies: - msw + webpack-virtual-modules@0.6.2: {} + which@2.0.2: dependencies: isexe: 2.0.0 @@ -2584,4 +4168,8 @@ snapshots: ws@8.21.0: {} + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 + yocto-queue@0.1.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 4998798..0eecc15 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,5 @@ packages: - "packages/*" - - "apps/*" \ No newline at end of file + - "apps/*" +allowBuilds: + esbuild: false -- 2.54.0 From e23bd8e7213c79cd58cabc9a14f96fb5287d65e2 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 13:58:55 +0200 Subject: [PATCH 18/88] Removed folder apps, because of new decision. Starlight doc tool will stored in docs folder --- apps/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/.gitkeep diff --git a/apps/.gitkeep b/apps/.gitkeep deleted file mode 100644 index e69de29..0000000 -- 2.54.0 From c112b44a0eb9f3ce572709b617173f6c95e73f38 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 14:04:03 +0200 Subject: [PATCH 19/88] Moved actually docs in folder docs back. needed to move them away, for creating starlight project --- docs/adr/.gitkeep | 0 docs/adr/000100-repository-structure.md | 142 ------------ docs/adr/000200-technology-stack.md | 211 ------------------ .../000300-web-components-as-public-api.md | 110 --------- .../adr/000400-svg-as-rendering-technology.md | 129 ----------- ...ccessibility-as-a-cross-cutting-concern.md | 139 ------------ docs/adr/README.md | 190 ---------------- docs/adr/template.md | 117 ---------- docs/architecture/.gitkeep | 0 9 files changed, 1038 deletions(-) delete mode 100644 docs/adr/.gitkeep delete mode 100644 docs/adr/000100-repository-structure.md delete mode 100644 docs/adr/000200-technology-stack.md delete mode 100644 docs/adr/000300-web-components-as-public-api.md delete mode 100644 docs/adr/000400-svg-as-rendering-technology.md delete mode 100644 docs/adr/000500-accessibility-as-a-cross-cutting-concern.md delete mode 100644 docs/adr/README.md delete mode 100644 docs/adr/template.md delete mode 100644 docs/architecture/.gitkeep diff --git a/docs/adr/.gitkeep b/docs/adr/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/docs/adr/000100-repository-structure.md b/docs/adr/000100-repository-structure.md deleted file mode 100644 index 2aecc30..0000000 --- a/docs/adr/000100-repository-structure.md +++ /dev/null @@ -1,142 +0,0 @@ -# ADR-0001: Repository Structure - -* **Status:** Accepted -* **Date:** 2026-07-12 -* **Decision Makers:** LUNA Charts Maintainers - ---- - -## Context - -LUNA Charts is designed as an open-source charting library with a strong focus on accessibility, maintainability, and long-term evolution. - -The project consists of multiple concerns, including source code, documentation, examples, testing infrastructure, and continuous integration. - -A repository structure was required that supports collaborative development while keeping the project easy to understand for contributors and maintainers. - -The repository should also support future growth without requiring structural changes. - ---- - -## Decision Drivers - -The following factors influenced this decision: - -* Maintainability -* Developer Experience -* Open Source Collaboration -* Modular Architecture -* Shared Tooling -* Consistent Build Process -* Long-Term Evolution - ---- - -## Considered Alternatives - -| Alternative | Description | -| ------------------------------------ | ---------------------------------------------------------------------------------- | -| Multiple repositories | Separate repositories for documentation, examples, and library packages. | -| Single repository without workspaces | One repository containing all files without workspace separation. | -| **Monorepo using pnpm Workspaces** | One repository containing all project artifacts with logical workspace separation. | - -Multiple repositories were rejected because they increase maintenance effort, duplicate tooling, and complicate contribution workflows. - -A single repository without workspaces was rejected because the project is expected to grow over time and benefits from a clear modular organization. - ---- - -## Decision - -LUNA Charts is implemented as a **pnpm-based monorepo**. - -The repository contains all project artifacts, including: - -* Source code -* Documentation -* Storybook -* Examples -* Architecture documentation -* Architecture Decision Records (ADRs) -* CI/CD configuration - -The repository is organized into logical workspaces. - -```text -luna-charts/ -│ -├── packages/ -│ └── luna-charts/ -│ -├── apps/ -│ ├── storybook/ -│ └── docs/ -│ -├── docs/ -│ ├── architecture/ -│ └── adr/ -│ -├── examples/ -│ -└── .github/ -``` - -Internally, the library is organized into architectural modules such as: - -* Core -* Charts -* Themes -* Utilities - -These modules are implementation details and are **not** exposed as individual npm packages. - ---- - -## Rationale - -A monorepo provides a single source of truth for the entire project. - -All contributors work within the same repository using a shared toolchain, coding standards, testing infrastructure, and documentation. - -Using **pnpm Workspaces** enables clear separation of responsibilities while avoiding duplicated dependencies and configuration. - -This structure supports the project's architecture-first approach and simplifies future expansion. - ---- - -## Consequences - -### Positive - -* Single source of truth -* Simplified onboarding for contributors -* Shared tooling and configuration -* Consistent CI/CD pipeline -* Easier dependency management -* Centralized documentation -* Scalable project organization - -### Negative - -* Larger repository size -* Contributors clone the complete repository -* Workspace configuration introduces a small amount of additional complexity - ---- - -## Related TOGAF Phases - -* Architecture Vision (Phase A) -* Technology Architecture (Phase D) -* Opportunities & Solutions (Phase E) -* Migration Planning (Phase F) -* Implementation Governance (Phase G) -* Architecture Change Management (Phase H) - ---- - -## References - -* LUNA Charts Architecture Wiki -* ADR-0002: Technology Stack -* pnpm Workspaces Documentation diff --git a/docs/adr/000200-technology-stack.md b/docs/adr/000200-technology-stack.md deleted file mode 100644 index 6796d8e..0000000 --- a/docs/adr/000200-technology-stack.md +++ /dev/null @@ -1,211 +0,0 @@ -# ADR-0002: Technology Stack - -* **Status:** Accepted -* **Date:** 2026-07-12 -* **Decision Makers:** LUNA Charts Maintainers - ---- - -## Context - -LUNA Charts is an open-source charting library designed to provide accessible, framework-agnostic, and strongly typed chart components. - -The selected technology stack must support the architectural principles defined during the TOGAF Architecture Development Method (ADM), including: - -* Accessibility by Design -* Framework Agnosticism -* Strong Type Safety -* Component-Based Architecture -* High Developer Experience -* Open Source Collaboration -* Long-Term Maintainability - -Rather than selecting technologies based on popularity, each technology is evaluated according to its ability to support these architectural goals. - ---- - -## Decision Drivers - -The following factors influenced the decision: - -* Accessibility -* Framework Agnosticism -* Type Safety -* Developer Experience -* Maintainability -* Testability -* Documentation -* Open Source Collaboration -* Long-Term Evolution - ---- - -## Considered Alternatives - -| Technology Area | Considered Alternatives | Selected | -| ----------------------- | ----------------------------------------------- | ------------------ | -| Component Framework | React, Vue, Angular, Lit, StencilJS | **StencilJS** | -| Component Documentation | Storybook, Styleguidist | **Storybook** | -| Project Documentation | Docusaurus, VitePress, Starlight | **Starlight** | -| Package Manager | npm, Yarn, pnpm | **pnpm** | -| Unit Testing | Vitest, Jest | **Jest** | -| Browser Testing | Cypress, Playwright | **Playwright** | -| Accessibility Testing | Manual Testing Only, axe-core | **axe-core** | -| Code Formatting | Manual Formatting, Prettier | **Prettier** | -| Static Analysis | TSLint, ESLint | **ESLint** | -| Versioning | Manual Versioning, Semantic Release, Changesets | **Changesets** | -| Continuous Integration | GitLab CI, Azure Pipelines, GitHub Actions | **GitHub Actions** | - -The selected technologies best support the project's architectural goals while remaining broadly adopted and well documented. - ---- - -## Decision - -The following technology stack is adopted for the implementation of LUNA Charts. - -| Technology | Purpose | -| ------------------ | --------------------------------------------------- | -| **StencilJS** | Web Component development | -| **Storybook** | Interactive component documentation and development | -| **Starlight** | Project and architecture documentation | -| **TypeScript** | Strong typing and developer tooling | -| **pnpm** | Package management and workspace support | -| **Jest** | Unit testing | -| **Playwright** | Browser and interaction testing | -| **axe-core** | Accessibility validation | -| **ESLint** | Static code analysis | -| **Prettier** | Consistent code formatting | -| **Changesets** | Versioning and release management | -| **GitHub Actions** | Continuous Integration | - -The technology stack is considered part of the project's architecture and may only be changed through a new Architecture Decision Record. - ---- - -## Rationale - -Each technology has been selected because it directly supports one or more architectural principles. - -### StencilJS - -StencilJS enables the development of standards-based Web Components. - -This aligns with the project's goal of remaining framework agnostic while allowing framework-specific wrappers to be generated automatically during the build process. - ---- - -### Storybook - -Storybook provides an isolated environment for component development. - -It supports rapid development, interactive examples, accessibility validation, and visual review of chart components. - ---- - -### Starlight - -Starlight serves as the central documentation platform. - -It separates architectural documentation from component documentation and supports long-term maintainability of the project's knowledge base. - ---- - -### TypeScript - -TypeScript enables strong compile-time validation. - -It improves the developer experience by detecting integration errors early and providing comprehensive IDE support. - ---- - -### pnpm - -pnpm Workspaces enable a modular repository structure while maintaining a single source of truth for dependencies and tooling. - ---- - -### Jest - -Jest provides fast unit testing for business logic, utility functions, configuration handling, validation, and other non-browser-specific functionality. - ---- - -### Playwright - -Playwright validates component behavior inside real browsers. - -It is used to verify keyboard interaction, focus management, SVG rendering, and other browser-dependent accessibility features. - ---- - -### axe-core - -axe-core automatically validates accessibility requirements and complements manual accessibility reviews. - ---- - -### ESLint and Prettier - -Both tools ensure consistent coding standards across the project and reduce friction during code reviews. - ---- - -### Changesets - -Changesets manages package versioning and release notes while keeping release decisions under maintainer control. - ---- - -### GitHub Actions - -GitHub Actions automates testing, validation, and release workflows to ensure consistent software quality. - ---- - -## Consequences - -### Positive - -* Technology stack directly supports architectural principles. -* Strong accessibility support throughout development. -* Framework-independent component model. -* Excellent developer experience. -* Consistent documentation workflow. -* High maintainability. -* Modern testing strategy. -* Simplified contributor onboarding. -* Automated quality assurance. -* Scalable project foundation. - -### Negative - -* Initial project setup is more complex. -* Contributors must become familiar with multiple development tools. -* Toolchain maintenance requires periodic updates. -* CI configuration is more comprehensive than for smaller projects. - ---- - -## Related TOGAF Phases - -* Architecture Vision (Phase A) -* Information Systems Architecture (Phase C) -* Technology Architecture (Phase D) -* Opportunities & Solutions (Phase E) -* Migration Planning (Phase F) -* Implementation Governance (Phase G) - ---- - -## References - -* LUNA Charts Architecture Wiki -* ADR-0001: Repository Structure -* ADR-0003: Web Components as Public API -* StencilJS Documentation -* Storybook Documentation -* Starlight Documentation -* Playwright Documentation -* Jest Documentation -* pnpm Documentation diff --git a/docs/adr/000300-web-components-as-public-api.md b/docs/adr/000300-web-components-as-public-api.md deleted file mode 100644 index 09c9288..0000000 --- a/docs/adr/000300-web-components-as-public-api.md +++ /dev/null @@ -1,110 +0,0 @@ -# ADR-0003: Web Components as Public API - -* **Status:** Accepted -* **Date:** 2026-07-12 -* **Decision Makers:** LUNA Charts Maintainers - ---- - -## Context - -LUNA Charts is intended to be an open-source charting library that can be integrated into applications regardless of the frontend framework used. - -A primary architectural objective defined during the Architecture Vision and Technology Architecture phases is **framework agnosticism**. Consumers should be able to use LUNA Charts in React, Angular, Vue, Svelte, or plain HTML applications without requiring framework-specific implementations of the chart components. - -The public API therefore had to be based on a stable and widely adopted web standard rather than a framework-specific component model. - ---- - -## Decision Drivers - -The following factors influenced this decision: - -* Framework Agnosticism -* Standards Compliance -* Long-Term Maintainability -* Accessibility -* Developer Experience -* Component Reusability -* Open Web Platform -* Future Compatibility - ---- - -## Considered Alternatives - -| Alternative | Description | -| -------------------------------------- | ----------------------------------------------------------------- | -| React Components | Components implemented exclusively for React. | -| Vue Components | Components implemented exclusively for Vue. | -| Angular Components | Components implemented exclusively for Angular. | -| Separate implementations per framework | Independent implementations for each supported framework. | -| **Web Components** | Standards-based custom elements implemented using Web Components. | - -Framework-specific implementations were rejected because they increase maintenance effort, duplicate functionality, and couple the architecture to individual frontend ecosystems. - -Maintaining multiple implementations would also increase the likelihood of inconsistent behavior across frameworks. - ---- - -## Decision - -LUNA Charts exposes its public API exclusively through **Web Components**. - -The project uses **StencilJS** to implement these components according to the Web Components standard. - -Framework integrations (e.g., React, Angular, Vue) are generated automatically during the build process and are considered **integration adapters**, not independent implementations. - -The architecture therefore consists of a single component model with multiple consumption options. - ---- - -## Rationale - -Web Components are an open web standard supported by all modern browsers. - -By building directly upon this standard, LUNA Charts remains independent of any frontend framework while still supporting popular ecosystems through automatically generated wrappers. - -This approach minimizes duplicated implementation effort and guarantees consistent functionality across all supported platforms. - -Using a single implementation also simplifies testing, documentation, maintenance, and accessibility validation. - -Framework wrappers remain lightweight integration layers and do not introduce architectural differences. - ---- - -## Consequences - -### Positive - -* Framework-independent public API. -* Single implementation for all supported platforms. -* Reduced maintenance effort. -* Consistent behavior across frameworks. -* Simplified testing and documentation. -* Better long-term stability. -* Supports future frontend frameworks without redesigning the library. - -### Negative - -* Developers unfamiliar with Web Components may require additional documentation. -* Framework wrappers depend on the capabilities provided by StencilJS. -* Some framework-specific features cannot be exposed without breaking framework independence. - ---- - -## Related TOGAF Phases - -* Architecture Vision (Phase A) -* Information Systems Architecture (Phase C) -* Technology Architecture (Phase D) -* Opportunities & Solutions (Phase E) - ---- - -## References - -* LUNA Charts Architecture Wiki -* ADR-0002: Technology Stack -* StencilJS Documentation -* Web Components Specification diff --git a/docs/adr/000400-svg-as-rendering-technology.md b/docs/adr/000400-svg-as-rendering-technology.md deleted file mode 100644 index 8cae9df..0000000 --- a/docs/adr/000400-svg-as-rendering-technology.md +++ /dev/null @@ -1,129 +0,0 @@ -# ADR-0004: SVG as Rendering Technology - -* **Status:** Accepted -* **Date:** 2026-07-12 -* **Decision Makers:** LUNA Charts Maintainers - ---- - -## Context - -One of the primary goals of LUNA Charts is to provide accessible chart components that support modern accessibility standards and assist developers in creating WCAG-compliant data visualizations. - -Charts are graphical user interfaces that contain meaningful information. Depending on the chart type, individual graphical elements such as bars, points, labels, legends, and axes may need to be discoverable by assistive technologies, focusable using the keyboard, or interactable by users. - -The rendering technology therefore has a direct impact on accessibility, developer experience, testing capabilities, maintainability, and future extensibility. - -A rendering technology had to be selected that supports these architectural goals while remaining compatible with modern browsers and Web Components. - ---- - -## Decision Drivers - -The following factors influenced this decision: - -* Accessibility -* WCAG Compliance -* Semantic Structure -* Keyboard Navigation -* Focus Management -* Screen Reader Support -* Developer Experience -* Maintainability -* Browser Compatibility -* Long-Term Evolution - ---- - -## Considered Alternatives - -| Alternative | Description | -| ---------------- | --------------------------------------------------------- | -| HTML Elements | Represent charts using standard HTML elements. | -| Canvas | Render graphics using the HTML Canvas API. | -| Hybrid Rendering | Combine Canvas and SVG depending on the chart type. | -| **SVG** | Render all chart graphics using Scalable Vector Graphics. | - -HTML was rejected because it is not designed to represent complex graphical visualizations. - -Canvas was rejected because graphical objects are rendered as pixels rather than DOM elements. This makes individual chart elements difficult to expose to assistive technologies and increases implementation complexity for keyboard interaction and accessibility. - -Hybrid rendering was rejected because it would introduce two rendering models, increasing architectural complexity, testing effort, and maintenance costs. - ---- - -## Decision - -All chart visualizations within LUNA Charts are rendered using **Scalable Vector Graphics (SVG)**. - -Each visual element (e.g., bars, lines, points, labels, legends, and axes) is represented as an individual SVG element within the DOM. - -Accessibility information, keyboard navigation, focus management, and interaction are implemented directly on these SVG elements. - -Canvas is not used as a rendering technology for chart components. - ---- - -## Rationale - -SVG integrates directly into the browser's Document Object Model (DOM), allowing every graphical element to be individually identified, styled, focused, and enriched with accessibility information. - -This capability aligns with the project's goal of supporting accessible chart implementations by design. - -Using SVG enables the library to: - -* associate semantic information with graphical elements, -* support keyboard navigation, -* expose meaningful structures to assistive technologies, -* apply standard web accessibility techniques, -* simplify automated accessibility testing, -* integrate naturally with Web Components. - -SVG also provides excellent scalability across different display resolutions without requiring additional rendering logic. - -Although Canvas may provide better rendering performance for extremely large datasets, accessibility and maintainability are considered higher architectural priorities for LUNA Charts. - ---- - -## Consequences - -### Positive - -* Native DOM representation of graphical elements. -* Improved accessibility support. -* Better compatibility with assistive technologies. -* Simplified keyboard navigation. -* Simplified focus management. -* Easier automated accessibility testing. -* Resolution-independent rendering. -* Consistent styling using CSS. -* Better integration with Web Components. -* Simplified debugging using browser developer tools. - -### Negative - -* Rendering performance may decrease for extremely large datasets. -* SVG documents become larger as chart complexity increases. -* Very large visualizations may require optimization techniques such as virtualization or data aggregation. - -These trade-offs are considered acceptable because accessibility and maintainability have higher architectural priority than maximum rendering performance. - ---- - -## Related TOGAF Phases - -* Architecture Vision (Phase A) -* Business Architecture (Phase B) -* Information Systems Architecture (Phase C) -* Technology Architecture (Phase D) -* Opportunities & Solutions (Phase E) - ---- - -## References - -* LUNA Charts Architecture Wiki -* ADR-0002: Technology Stack -* ADR-0003: Web Components as Public API -* Scalable Vector Graphics (SVG) Specification -* Web Content Accessibility Guidelines (WCAG) diff --git a/docs/adr/000500-accessibility-as-a-cross-cutting-concern.md b/docs/adr/000500-accessibility-as-a-cross-cutting-concern.md deleted file mode 100644 index b07761b..0000000 --- a/docs/adr/000500-accessibility-as-a-cross-cutting-concern.md +++ /dev/null @@ -1,139 +0,0 @@ -# ADR-000500: Accessibility as a Cross-Cutting Concern - -* **Status:** Accepted -* **Date:** 2026-07-12 -* **Decision Makers:** LUNA Charts Maintainers - ---- - -## Context - -Accessibility is the primary quality attribute of LUNA Charts. - -The project's objective is not only to render charts but also to support developers in creating accessible data visualizations that align with the Web Content Accessibility Guidelines (WCAG). - -During the architectural design process, accessibility was initially considered as a separate subsystem responsible for validating and enforcing accessibility requirements. - -Further analysis revealed that accessibility affects nearly every architectural layer of the system. - -Rendering, component APIs, configuration, validation, interaction, keyboard navigation, documentation, and testing all contribute to the accessibility of the final chart. - -As a result, accessibility cannot be implemented as an isolated engine without introducing architectural inconsistencies. - ---- - -## Decision Drivers - -The following factors influenced this decision: - -* Accessibility by Design -* WCAG Compliance -* Separation of Concerns -* Maintainability -* Consistency -* Developer Experience -* Long-Term Evolution -* Testability - ---- - -## Considered Alternatives - -| Alternative | Description | -| ------------------------------ | ---------------------------------------------------------------------------------------------------------- | -| Dedicated Accessibility Engine | A centralized subsystem responsible for accessibility validation and enforcement. | -| Accessibility Utilities | A collection of reusable accessibility helper functions. | -| **Cross-Cutting Concern** | Accessibility is integrated into every architectural layer where accessibility-related decisions are made. | - -A dedicated accessibility engine was rejected because accessibility cannot be guaranteed after a chart has already been designed or rendered. - -Accessibility decisions must be made continuously throughout the rendering process and component lifecycle. - -Accessibility utilities remain part of the implementation but do not represent the architectural model. - ---- - -## Decision - -Accessibility is treated as a **cross-cutting concern** throughout the entire architecture of LUNA Charts. - -Accessibility responsibilities are distributed across multiple architectural modules rather than centralized in a single subsystem. - -Examples include: - -* Public component APIs -* TypeScript type definitions -* Validation -* Rendering -* SVG generation -* Keyboard interaction -* Focus management -* Documentation -* Automated testing - -Each architectural component is responsible for implementing the accessibility requirements relevant to its own responsibility. - ---- - -## Rationale - -Accessibility is not a feature that can be added after rendering has completed. - -Instead, accessibility emerges from many architectural decisions working together. - -Examples include: - -* selecting SVG instead of Canvas, -* designing semantic component APIs, -* exposing accessible keyboard interaction, -* generating meaningful DOM structures, -* providing strongly typed configuration, -* validating accessibility-related configuration, -* documenting accessibility behavior, -* verifying accessibility through automated testing. - -Treating accessibility as a cross-cutting concern ensures that accessibility remains an architectural responsibility rather than an isolated implementation detail. - -This approach also aligns with established software architecture principles, where quality attributes such as security, logging, and observability are commonly treated as cross-cutting concerns. - ---- - -## Consequences - -### Positive - -* Accessibility is considered throughout the entire development process. -* Architectural responsibilities remain clearly separated. -* Accessibility becomes part of every feature rather than an optional extension. -* Better support for WCAG-compliant chart implementations. -* Simplified long-term maintenance. -* Consistent accessibility behavior across all chart types. -* Accessibility can be validated at multiple architectural levels. - -### Negative - -* Accessibility responsibilities are distributed across multiple modules. -* Contributors must understand accessibility requirements beyond their immediate implementation. -* Architectural reviews must continuously consider accessibility implications. - -These trade-offs are acceptable because accessibility represents the primary quality objective of LUNA Charts. - ---- - -## Related TOGAF Phases - -* Architecture Vision (Phase A) -* Business Architecture (Phase B) -* Information Systems Architecture (Phase C) -* Technology Architecture (Phase D) -* Implementation Governance (Phase G) - ---- - -## References - -* LUNA Charts Architecture Wiki -* ADR-000300: Web Components as Public API -* ADR-000400: SVG as Rendering Technology -* Web Content Accessibility Guidelines (WCAG) -* WAI-ARIA Authoring Practices Guide diff --git a/docs/adr/README.md b/docs/adr/README.md deleted file mode 100644 index e2e36ee..0000000 --- a/docs/adr/README.md +++ /dev/null @@ -1,190 +0,0 @@ -# Architecture Decision Records (ADRs) - -Architecture Wiki: [https://wiki.byting-pandas.ninja/en/Projects/LUNA-Charts/Introduction] - -## Purpose - -This directory contains the **Architecture Decision Records (ADRs)** for the LUNA Charts project. - -An Architecture Decision Record documents a significant architectural decision, the context in which it was made, the chosen solution, and its consequences. - -The goal is to preserve the reasoning behind architectural decisions so that future contributors and maintainers understand **why** a decision was made—not only **what** was implemented. - -ADRs complement the Architecture Development Method (ADM) documentation and serve as the primary record of architectural decisions throughout the project's lifecycle. - ---- - -## Architecture Documentation - -The complete software architecture of LUNA Charts is documented in the official Architecture Wiki. - -The wiki follows the **TOGAF Architecture Development Method (ADM)** and describes the project from the initial vision through implementation governance and long-term architecture evolution. - -### Architecture Wiki - -* Architecture Vision (Phase A) -* Business Architecture (Phase B) -* Information Systems Architecture (Phase C) -* Technology Architecture (Phase D) -* Opportunities & Solutions (Phase E) -* Migration Planning (Phase F) -* Implementation Governance (Phase G) -* Architecture Change Management (Phase H) - -The ADRs contained in this directory should always be read together with the Architecture Wiki. - -The wiki describes the architecture as a whole, whereas ADRs explain the reasoning behind individual architectural decisions. - ---- - -## Relationship to the Architecture Documentation - -| Architecture Wiki | Architecture Decision Records | -| -------------------------------------------- | --------------------------------------------------- | -| Describes the complete software architecture | Documents individual architectural decisions | -| Defines the overall system structure | Explains why a specific solution was selected | -| Organized according to TOGAF ADM phases | Organized chronologically by architectural decision | -| Updated when the architecture evolves | Added whenever a significant decision is made | - -ADRs do **not** replace the Architecture Wiki. - -Likewise, the Architecture Wiki should not duplicate ADRs. - -Instead, both artifacts complement each other. - ---- - -## When to Create an ADR - -An ADR should be created whenever a decision has a significant impact on the architecture of the project. - -Typical examples include: - -* Selecting a new technology -* Introducing or replacing an architectural pattern -* Changing the public API -* Introducing a new rendering strategy -* Changing accessibility principles -* Modifying the repository structure -* Changing release or governance processes - -Small implementation details, bug fixes, refactorings, or coding style decisions do **not** require an ADR. - ---- - -## ADR Lifecycle - -Every ADR has one of the following statuses: - -| Status | Description | -| ---------- | ------------------------------------------------------- | -| Proposed | The decision is under discussion. | -| Accepted | The decision has been approved and adopted. | -| Deprecated | The decision is no longer recommended but still exists. | -| Superseded | The decision has been replaced by another ADR. | -| Discarded | The proposal was rejected. | - -Only **Accepted** ADRs represent the current architecture. - ---- - -## ADR Structure - -Each ADR follows the same structure. - -```text -Title - -Status - -Context - -Decision Drivers - -Considered Alternatives - -Decision - -Rationale - -Consequences - Positive - Negative - -Related TOGAF Phases - -References -``` - -This structure ensures that every ADR answers the following questions: - -* **What** decision was made? -* **Why** was the decision necessary? -* **When** was it made? -* **Who** approved the decision? -* **What** are the expected consequences? - ---- - -## Naming Convention - -ADRs use sequential numbering. - -Examples: - -```text -0001-repository-structure.md -0002-technology-stack.md -0003-svg-rendering.md -``` - -The number is never reused. - -If an ADR becomes obsolete, its status changes instead of deleting the document. - ---- - -## Decision Process - -Architectural decisions follow the governance model defined in **Implementation Governance (Phase G)**. - -```text -Proposal - ↓ -Architecture Discussion - ↓ -Architecture Review - ↓ -Maintainer Decision - ↓ -ADR Update - ↓ -Implementation -``` - -Community members are encouraged to participate in discussions. - -Final architectural decisions are made by the project maintainers. - ---- - -## Relationship to Source Code - -Source code is expected to reflect accepted ADRs. - -If an implementation no longer follows an accepted ADR, one of the following actions should occur: - -* Update the implementation to match the ADR. -* Replace the ADR with a new architectural decision. -* Deprecate or supersede the ADR. - -Architectural changes should always be documented before or together with the implementation. - ---- - -## References - -* TOGAF Architecture Development Method (ADM) -* LUNA Charts Architecture Wiki -* LUNA Charts Implementation Governance (Phase G) -* LUNA Charts Architecture Change Management (Phase H) diff --git a/docs/adr/template.md b/docs/adr/template.md deleted file mode 100644 index bd7a837..0000000 --- a/docs/adr/template.md +++ /dev/null @@ -1,117 +0,0 @@ -# ADR-XXXX: Title - -* **Status:** Proposed -* **Date:** YYYY-MM-DD -* **Decision Makers:** LUNA Charts Maintainers - ---- - -## Context - -Describe the background that led to this decision. - -Questions that should be answered: - -* What problem needs to be solved? -* Which architectural constraints exist? -* Which project goals influence the decision? -* Which stakeholders are affected? - ---- - -## Decision Drivers - -List the primary factors that influenced the decision. - -Typical examples: - -* Accessibility -* Performance -* Developer Experience -* Maintainability -* Framework Agnosticism -* Type Safety -* Simplicity -* Scalability - ---- - -## Considered Alternatives - -Document all relevant alternatives. - -| Alternative | Description | -| ----------- | ----------- | -| Option A | Description | -| Option B | Description | -| Option C | Description | - -Briefly explain why the alternatives were not selected. - ---- - -## Decision - -Describe the selected solution. - -This section should clearly answer: - -> What has been decided? - ---- - -## Rationale - -Explain why the selected solution best satisfies the decision drivers. - -This section should justify the decision from an architectural perspective. - ---- - -## Consequences - -### Positive - -Describe the expected benefits. - -Examples: - -* Improved maintainability -* Better accessibility -* Easier onboarding -* Reduced complexity - -### Negative - -Describe possible drawbacks. - -Examples: - -* Increased implementation effort -* Additional maintenance -* Performance trade-offs - ---- - -## Related TOGAF Phases - -List all architecture phases that influenced this decision. - -Examples: - -* Architecture Vision (Phase A) -* Technology Architecture (Phase D) -* Implementation Governance (Phase G) - ---- - -## References - -Provide references to related documentation. - -Examples: - -* Architecture Wiki -* Other ADRs -* External standards -* Specifications diff --git a/docs/architecture/.gitkeep b/docs/architecture/.gitkeep deleted file mode 100644 index e69de29..0000000 -- 2.54.0 From db35cc2b976b3f6a91018a4ef6ae4bf94c6a4323 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 14:04:21 +0200 Subject: [PATCH 20/88] Created Starlight project --- docs/.gitignore | 21 + docs/.vscode/extensions.json | 4 + docs/.vscode/launch.json | 11 + docs/AGENTS.md | 22 + docs/CLAUDE.md | 1 + docs/README.md | 49 + docs/astro.config.mjs | 26 + docs/package.json | 17 + docs/pnpm-lock.yaml | 4323 +++++++++++++++++ docs/pnpm-workspace.yaml | 3 + docs/public/favicon.svg | 1 + docs/src/assets/houston.webp | Bin 0 -> 98506 bytes docs/src/content.config.ts | 7 + docs/src/content/adr/.gitkeep | 0 .../adr/000100-repository-structure.md | 142 + .../content/adr/000200-technology-stack.md | 211 + .../000300-web-components-as-public-api.md | 110 + .../adr/000400-svg-as-rendering-technology.md | 129 + ...ccessibility-as-a-cross-cutting-concern.md | 139 + docs/src/content/adr/README.md | 190 + docs/src/content/adr/template.md | 117 + docs/src/content/architecture/.gitkeep | 0 docs/src/content/docs/guides/example.md | 11 + docs/src/content/docs/index.mdx | 40 + docs/src/content/docs/reference/example.md | 11 + docs/tsconfig.json | 5 + 26 files changed, 5590 insertions(+) create mode 100644 docs/.gitignore create mode 100644 docs/.vscode/extensions.json create mode 100644 docs/.vscode/launch.json create mode 100644 docs/AGENTS.md create mode 120000 docs/CLAUDE.md create mode 100644 docs/README.md create mode 100644 docs/astro.config.mjs create mode 100644 docs/package.json create mode 100644 docs/pnpm-lock.yaml create mode 100644 docs/pnpm-workspace.yaml create mode 100644 docs/public/favicon.svg create mode 100644 docs/src/assets/houston.webp create mode 100644 docs/src/content.config.ts create mode 100644 docs/src/content/adr/.gitkeep create mode 100644 docs/src/content/adr/000100-repository-structure.md create mode 100644 docs/src/content/adr/000200-technology-stack.md create mode 100644 docs/src/content/adr/000300-web-components-as-public-api.md create mode 100644 docs/src/content/adr/000400-svg-as-rendering-technology.md create mode 100644 docs/src/content/adr/000500-accessibility-as-a-cross-cutting-concern.md create mode 100644 docs/src/content/adr/README.md create mode 100644 docs/src/content/adr/template.md create mode 100644 docs/src/content/architecture/.gitkeep create mode 100644 docs/src/content/docs/guides/example.md create mode 100644 docs/src/content/docs/index.mdx create mode 100644 docs/src/content/docs/reference/example.md create mode 100644 docs/tsconfig.json diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..6240da8 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,21 @@ +# build output +dist/ +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store diff --git a/docs/.vscode/extensions.json b/docs/.vscode/extensions.json new file mode 100644 index 0000000..22a1505 --- /dev/null +++ b/docs/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + "recommendations": ["astro-build.astro-vscode"], + "unwantedRecommendations": [] +} diff --git a/docs/.vscode/launch.json b/docs/.vscode/launch.json new file mode 100644 index 0000000..d642209 --- /dev/null +++ b/docs/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "command": "./node_modules/.bin/astro dev", + "name": "Development server", + "request": "launch", + "type": "node-terminal" + } + ] +} diff --git a/docs/AGENTS.md b/docs/AGENTS.md new file mode 100644 index 0000000..c5ff429 --- /dev/null +++ b/docs/AGENTS.md @@ -0,0 +1,22 @@ +## Development + +When starting the dev server, use background mode: + +``` +astro dev --background +``` + +Manage the background server with `astro dev stop`, `astro dev status`, and `astro dev logs`. + +## Documentation + +Full documentation: https://docs.astro.build + +Consult these guides before working on related tasks: + +- [Adding pages, dynamic routes, or middleware](https://docs.astro.build/en/guides/routing/) +- [Working with Astro components](https://docs.astro.build/en/basics/astro-components/) +- [Using React, Vue, Svelte, or other framework components](https://docs.astro.build/en/guides/framework-components/) +- [Adding or managing content](https://docs.astro.build/en/guides/content-collections/) +- [Adding styles or using Tailwind](https://docs.astro.build/en/guides/styling/) +- [Supporting multiple languages](https://docs.astro.build/en/guides/internationalization/) diff --git a/docs/CLAUDE.md b/docs/CLAUDE.md new file mode 120000 index 0000000..47dc3e3 --- /dev/null +++ b/docs/CLAUDE.md @@ -0,0 +1 @@ +AGENTS.md \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..909d737 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,49 @@ +# Starlight Starter Kit: Basics + +[![Built with Starlight](https://astro.badg.es/v2/built-with-starlight/tiny.svg)](https://starlight.astro.build) + +``` +pnpm create astro@latest -- --template starlight +``` + +> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun! + +## 🚀 Project Structure + +Inside of your Astro + Starlight project, you'll see the following folders and files: + +``` +. +├── public/ +├── src/ +│ ├── assets/ +│ ├── content/ +│ │ └── docs/ +│ └── content.config.ts +├── astro.config.mjs +├── package.json +└── tsconfig.json +``` + +Starlight looks for `.md` or `.mdx` files in the `src/content/docs/` directory. Each file is exposed as a route based on its file name. + +Images can be added to `src/assets/` and embedded in Markdown with a relative link. + +Static assets, like favicons, can be placed in the `public/` directory. + +## 🧞 Commands + +All commands are run from the root of the project, from a terminal: + +| Command | Action | +| :------------------------ | :----------------------------------------------- | +| `pnpm install` | Installs dependencies | +| `pnpm dev` | Starts local dev server at `localhost:4321` | +| `pnpm build` | Build your production site to `./dist/` | +| `pnpm preview` | Preview your build locally, before deploying | +| `pnpm astro ...` | Run CLI commands like `astro add`, `astro check` | +| `pnpm astro -- --help` | Get help using the Astro CLI | + +## 👀 Want to learn more? + +Check out [Starlight’s docs](https://starlight.astro.build/), read [the Astro documentation](https://docs.astro.build), or jump into the [Astro Discord server](https://astro.build/chat). diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs new file mode 100644 index 0000000..69b83b3 --- /dev/null +++ b/docs/astro.config.mjs @@ -0,0 +1,26 @@ +// @ts-check +import { defineConfig } from 'astro/config'; +import starlight from '@astrojs/starlight'; + +// https://astro.build/config +export default defineConfig({ + integrations: [ + starlight({ + title: 'My Docs', + social: [{ icon: 'github', label: 'GitHub', href: 'https://github.com/withastro/starlight' }], + sidebar: [ + { + label: 'Guides', + items: [ + // Each item here is one entry in the navigation menu. + { label: 'Example Guide', slug: 'guides/example' }, + ], + }, + { + label: 'Reference', + items: [{ autogenerate: { directory: 'reference' } }], + }, + ], + }), + ], +}); diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..b84c7d1 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,17 @@ +{ + "name": "docs", + "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/starlight": "^0.41.3", + "astro": "^7.0.2", + "sharp": "^0.34.5" + } +} \ No newline at end of file diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml new file mode 100644 index 0000000..6ee097b --- /dev/null +++ b/docs/pnpm-lock.yaml @@ -0,0 +1,4323 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@astrojs/starlight': + specifier: ^0.41.3 + version: 0.41.3(@astrojs/markdown-remark@7.2.1)(astro@7.0.7(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3)) + astro: + specifier: ^7.0.2 + version: 7.0.7(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3) + sharp: + specifier: ^0.34.5 + version: 0.34.5 + +packages: + + '@astrojs/compiler-binding-darwin-arm64@0.3.1': + resolution: {integrity: sha512-IEmEF2fUIlTHtpeE/isyEGVOB14cEyh/LZOFYt6wn3jNyVpdC8aR5OZ+RzFUR/f+8ZDM1LaMwZKvoA7eMyJeFw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@astrojs/compiler-binding-darwin-x64@0.3.1': + resolution: {integrity: sha512-GF2kIxjpPDLsn94zbZNMsxEmkU828QqnmM7kiQJnaooS3jmI+I7kk6+oI6EpwOsK3femCMdcm+wmOsEqtGrmjQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@astrojs/compiler-binding-linux-arm64-gnu@0.3.1': + resolution: {integrity: sha512-XJL3SDmOtVrqFhCirNcHwE91+IesJqlgNo23I4qW9QUYfwzm/TBZuH61fgqsb1ttgR1mMYz6ooPWs0JDhwMqpQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@astrojs/compiler-binding-linux-arm64-musl@0.3.1': + resolution: {integrity: sha512-xqE8BVbDoBueK/B47w30PtkVofUWJKGkwoMVE+EOMLf11rnoANxIAdA9FPqY+rng4oNI5ndHGsri1yPj2k8vZQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@astrojs/compiler-binding-linux-x64-gnu@0.3.1': + resolution: {integrity: sha512-1y0StU1qiCuDFH3rmbRJXcxdfHxFPrES1Rd+RLffosvUR7I2cH5SF5SFnBN9vXpzpkmyElZm3Yr47iJBPN7vVA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@astrojs/compiler-binding-linux-x64-musl@0.3.1': + resolution: {integrity: sha512-16q0fYf7kpbmdObZEeZJEup8hQv/whgNwVjrSvT8umrKwLDSnNIWiQpm09lQQu6bweZB0XyIvHwlPitvJhC+hg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@astrojs/compiler-binding-wasm32-wasi@0.3.1': + resolution: {integrity: sha512-cB456shIwDv/PrVT+2QG7LFndpHkVge5HjqADKZgGaAc9JHVktCtjSrcdkRQ+3tbkPazNKaTLRjXLIiz2NIx9g==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@astrojs/compiler-binding-win32-arm64-msvc@0.3.1': + resolution: {integrity: sha512-ur/9+If/yTE69mmeX5MqSZndL0HOyx67GeNZUy3N7wVdWpLz9UTJXwyWS4UR2PUQHitghjsM5xoX0Ge56WRVQQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@astrojs/compiler-binding-win32-x64-msvc@0.3.1': + resolution: {integrity: sha512-k0W+kDBzDkNZOqu4kElDvCOIbKw5Ut9S1WZ1Krj3KTgNuBERNKXsMMsRLLcbgfdMdbe7bTekQLshZrrvmYpmwA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@astrojs/compiler-binding@0.3.1': + resolution: {integrity: sha512-DaAUj29AIBU2XdJ8uwcab8lW5O2pk9pY8AXkcMw0sw77nVa3oeTYRcO+Dvbbpoexf6ThMc0FMWYCQ/wN1/T7oQ==} + engines: {node: ^20.19.0 || >=22.12.0} + + '@astrojs/compiler-rs@0.3.1': + resolution: {integrity: sha512-aT7xkgsbNoS6nriY5qKpbihK43slFHO41iqgHCTdOvn1ifaQxLCc5yXy+6GzAtiafoaC1zA7OwVXCXMsvUZOkg==} + engines: {node: '>=22.12.0'} + + '@astrojs/internal-helpers@0.10.1': + resolution: {integrity: sha512-5phcroT/vmOOrYuuAxtkbPixy5hePtlz9i8K4OeDv3dNK6/UQRuXPOSRTxIOBbUY5Sonw2UaxjbuVc43Mcir6Q==} + + '@astrojs/markdown-remark@7.2.1': + resolution: {integrity: sha512-jPVNIqTvk+yKviikszv/Y1U4jGUSKpp/Nw48QZV4qjWgp70j4Lkq3lhSDRbWwCfgKvEyO9GHuVbV1dM2WYXy1w==} + + '@astrojs/markdown-satteri@0.3.3': + resolution: {integrity: sha512-Lje33Ittd8UQGgbIIWQvhPkj5X5c4b1sZnZWX3JQV/AWpfbuQGxVi2ONt6+ScydcwfR4egilslEWyczMclrJ1g==} + + '@astrojs/mdx@7.0.2': + resolution: {integrity: sha512-l+sJY5U1KkGZUdr+bIL4Y6BefeS549qoSHVSkUSs6A9INwdCND+/0+vN0NroPBXwl5Vcg5u78t7VQRsJjePxbw==} + engines: {node: '>=22.12.0'} + peerDependencies: + '@astrojs/markdown-satteri': ^0.3.1 + astro: ^7.0.0 + peerDependenciesMeta: + '@astrojs/markdown-satteri': + optional: true + + '@astrojs/prism@4.0.2': + resolution: {integrity: sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==} + engines: {node: '>=22.12.0'} + + '@astrojs/sitemap@3.7.3': + resolution: {integrity: sha512-f8euLVsyeAmAkSm/1M2Kb8sL8byQmfgbvBNaHFItCheTj/IpiJYSEWVcqDHZ/yEHxiS7+w87mQkzwZaPHmk5GA==} + + '@astrojs/starlight@0.41.3': + resolution: {integrity: sha512-8xsG6UpK581TJmtOc7/pnxHKEbP16rV06VLWaVa7FOyE/VEwnaHOsLtL+miifCEfuiuv0Wn+j8u3JSluRQesMQ==} + peerDependencies: + '@astrojs/markdown-remark': ^7.2.0 + astro: ^7.0.2 + peerDependenciesMeta: + '@astrojs/markdown-remark': + optional: true + + '@astrojs/telemetry@3.3.3': + resolution: {integrity: sha512-C1TLn5sPJr0x4vk56piHWKbnqlEB8BKyte5Y45V02U+D7BGO5eMqZDH5aPjnkXQWJggvmsTXxH03QMZ9NgWLzQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + + '@bruits/satteri-darwin-arm64@0.9.5': + resolution: {integrity: sha512-iw4nZgx9v30lWo/MTngQqi1pI78KI0DnkSm+lVJGYdmPLgAyDNJigVhpG42/Iq55A6c1Ll8q66ljyyRiQUxwow==} + cpu: [arm64] + os: [darwin] + + '@bruits/satteri-darwin-x64@0.9.5': + resolution: {integrity: sha512-6T26Z5Kf3cFW2PSlk9p7zT7yVxvuBSiJvYyz9u8KjYwMTqZyIDOj2wDyNpxKV4+6yUVG7rddq2QwvG/8LJA2+Q==} + cpu: [x64] + os: [darwin] + + '@bruits/satteri-linux-arm64-gnu@0.9.5': + resolution: {integrity: sha512-u51id17uJwNEMK9nBlICsq6U31c+XVqQueVBkwRIzZG+gMpS8TOJctt5h5Wz33Z8xnMdTd+adtACVz0yHgGuOA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@bruits/satteri-linux-arm64-musl@0.9.5': + resolution: {integrity: sha512-v39HxiwGC5Rqm01HksP6+5Y+xKLPlsuVFgIgpEAo+SiQ22c+mJVhS3u7Z6ePAKdhL5NJoK1xq70kLz3L13AhpQ==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@bruits/satteri-linux-x64-gnu@0.9.5': + resolution: {integrity: sha512-F3uO8uFp3pAP5ZGXttwvh57GS7s0lL953tnNdyI2gRyP4kOOkp6pyGojNJzCjkDvWI2Cvb9iNrKok3aqQPauAw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@bruits/satteri-linux-x64-musl@0.9.5': + resolution: {integrity: sha512-bicEqglLlz++mWyADaZoP0JY20s4vDfLjaPYgQqC+NI4zZLTOOg1T4GB8aqtc822Pqji8SQBmSrTb7CrP8i08Q==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@bruits/satteri-wasm32-wasi@0.9.5': + resolution: {integrity: sha512-zauAuMwfPnKPUkd4AFixRFpXdgKwP2mKgxrIIo2gJzW0/ZneF9dbHnLkojSpaBnCCp7VUL1hIi5WWZvB1CqmAQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@bruits/satteri-win32-arm64-msvc@0.9.5': + resolution: {integrity: sha512-SrfE7NEsgZjBvU3c+RR6oQRu0ToXY5uVJEbieXEF0YTctIV2zAVlbaMjWLts074QCgh3a+XHWkR/lWh2VH2LUg==} + cpu: [arm64] + os: [win32] + + '@bruits/satteri-win32-x64-msvc@0.9.5': + resolution: {integrity: sha512-5Kw9ZAtTGS8WHizyn+CJhjjfIQrw+7jcZodpmpXJjefnO15M8UexIi6JR2E5thyvsmHyhL6ZDDMUNR4bKJPd4g==} + cpu: [x64] + os: [win32] + + '@capsizecss/unpack@4.0.1': + resolution: {integrity: sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==} + engines: {node: '>=18'} + + '@clack/core@1.4.3': + resolution: {integrity: sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==} + engines: {node: '>= 20.12.0'} + + '@clack/prompts@1.7.0': + resolution: {integrity: sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==} + engines: {node: '>= 20.12.0'} + + '@ctrl/tinycolor@4.2.0': + resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} + engines: {node: '>=14'} + + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} + + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@expressive-code/core@0.44.0': + resolution: {integrity: sha512-xgiF2P6tYUbrhi3+x0S8xHZWT1t3Bvb3U91tAtRbLb9HLejLvYc5GZUqKICKLaUN4iSGhhNJu2fM/aH8e5yCMg==} + + '@expressive-code/plugin-frames@0.44.0': + resolution: {integrity: sha512-V6M6+zVc1GzqCvXkQHc2m5rcFOIVzJgMq5gnfrMnVf2gwtj/sg4H93c1f/mGeqHycubwkHFUDyParAOiGeDZeA==} + + '@expressive-code/plugin-shiki@0.44.0': + resolution: {integrity: sha512-RZsdaqlbGqyAQKuoX4myQXxjmiE2l5KBpJ/gKPh62tCdIdpWyjbzVqSo8+5XsezZxkfi8AJ/J6EUaBTPROFX/Q==} + + '@expressive-code/plugin-text-markers@0.44.0': + resolution: {integrity: sha512-0/m3A5b+lz2upyNq+wzZ1S69HRoJmyFs5LsR42lVZ9pmGRlBiSBYQpvqlji4DBj1+Riamxc0AvcCr5kuzOQeWA==} + + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@oslojs/encoding@1.1.0': + resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + + '@oxc-project/types@0.139.0': + resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} + + '@pagefind/darwin-arm64@1.5.2': + resolution: {integrity: sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ==} + cpu: [arm64] + os: [darwin] + + '@pagefind/darwin-x64@1.5.2': + resolution: {integrity: sha512-IojxFWMEJe0RQ7PQ3KXQsPIImNsbpPYpoZ+QUDrL8fAl/O27IX+LVLs74/UzEZy5uA2LD8Nz1AiwKr72vrkZQw==} + cpu: [x64] + os: [darwin] + + '@pagefind/default-ui@1.5.2': + resolution: {integrity: sha512-pm1LMnQg8N2B3n2TnjKlhaFihpz6zTiA4HiGQ6/slKO/+8K9CAU5kcjdSSPgpuk1PMuuN4hxLipUIifnrkl3Sg==} + + '@pagefind/freebsd-x64@1.5.2': + resolution: {integrity: sha512-7EVzo9+0w+2cbe671BtMj10UlNo83I+HrLVLfRxO731svHRJKUfJ/mo05gU14pe9PCfpKNQT8FS3Xc/oDN6pOA==} + cpu: [x64] + os: [freebsd] + + '@pagefind/linux-arm64@1.5.2': + resolution: {integrity: sha512-Ovt9+K35sqzn8H3ZMXGwls4TD/wMJuvRtShHIsmUQREmaxjrDEX7gHckRCrwYJ4XE1H1p6HkLz3wukrAnsfXQw==} + cpu: [arm64] + os: [linux] + + '@pagefind/linux-x64@1.5.2': + resolution: {integrity: sha512-V+tFqHKXhQKq/WqPBD67AFy7scn1/aZID00ws4fSDd+1daSi5UHR9VVlRrOUYKxn3VuFQYRD7lYXdZK1WED1YA==} + cpu: [x64] + os: [linux] + + '@pagefind/windows-arm64@1.5.2': + resolution: {integrity: sha512-hN9Nh90fNW61nNRCW9ZyQrAj/mD0eRvmJ8NlTUzkbuW8kIzGJUi3cxjFkEcMZ5h/8FsKWD/VcouZl4yo1F7B6g==} + cpu: [arm64] + os: [win32] + + '@pagefind/windows-x64@1.5.2': + resolution: {integrity: sha512-Fa2Iyw7kaDRzGMfNYNUXNW2zbL5FQVDgSOcbDHdzBrDEdpqOqg8TcZ68F22ol6NJ9IGzvUdmeyZypLW5dyhqsg==} + cpu: [x64] + os: [win32] + + '@rolldown/binding-android-arm64@1.1.5': + resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.1.5': + resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.1.5': + resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.1.5': + resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.1.5': + resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.1.5': + resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.1.5': + resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.1.5': + resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.1.5': + resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.1.5': + resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.1.5': + resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.1.5': + resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.1.5': + resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@rollup/pluginutils@5.4.0': + resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@shikijs/core@4.3.1': + resolution: {integrity: sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA==} + engines: {node: '>=20'} + + '@shikijs/engine-javascript@4.3.1': + resolution: {integrity: sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ==} + engines: {node: '>=20'} + + '@shikijs/engine-oniguruma@4.3.1': + resolution: {integrity: sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg==} + engines: {node: '>=20'} + + '@shikijs/langs@4.3.1': + resolution: {integrity: sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ==} + engines: {node: '>=20'} + + '@shikijs/primitive@4.3.1': + resolution: {integrity: sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A==} + engines: {node: '>=20'} + + '@shikijs/themes@4.3.1': + resolution: {integrity: sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA==} + engines: {node: '>=20'} + + '@shikijs/types@4.3.1': + resolution: {integrity: sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g==} + engines: {node: '>=20'} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} + + '@types/js-yaml@4.0.9': + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdx@2.0.14': + resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/nlcst@2.0.3': + resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} + + '@types/node@24.13.3': + resolution: {integrity: sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==} + + '@types/sax@1.2.7': + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@ungap/structured-clone@1.3.3': + resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + + am-i-vibing@0.4.0: + resolution: {integrity: sha512-MxT4XZL7pzLHpuvhDKdMaQHMGGkJDLluKBLsbstn+8wv9sWcFT6h+0ve9qkml95amVTZtZV83gQe2hY+ojgHLg==} + hasBin: true + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-iterate@2.0.1: + resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + + astro-expressive-code@0.44.0: + resolution: {integrity: sha512-b1wN/ZvbJprzxlGKIpIes2kQrCY5KRLwys2tWbZAZyjGZcW5ZtgneZnBwzNRiBna9/48d4mQl19KLjcRuhO1hw==} + peerDependencies: + astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta || ^7.0.0 + + astro@7.0.7: + resolution: {integrity: sha512-swqrKDSI/B83GFroYPZYMFcxqbSe9+tkynu1WDBk3GLgBfV9++qVM4Z+2uFT6uu9A53Q0TROnxLketfMEENuqQ==} + engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'} + hasBin: true + peerDependencies: + '@astrojs/markdown-remark': 7.2.1 + peerDependenciesMeta: + '@astrojs/markdown-remark': + optional: true + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + bcp-47-match@2.0.3: + resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} + + bcp-47@2.1.1: + resolution: {integrity: sha512-KLw+H/gd2p4zly1X7Yh/qziuyae5/w/QFnvTng9eZL5fvszL7Whl3MBoWF8yxL7ksUjBfOD+OxkytiqbBpG+Fw==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + common-ancestor-path@2.0.0: + resolution: {integrity: sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==} + engines: {node: '>= 18'} + + cookie-es@1.2.3: + resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==} + + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + + crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-selector-parser@3.3.0: + resolution: {integrity: sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + devalue@5.8.1: + resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + diff@8.0.4: + resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} + engines: {node: '>=0.3.1'} + + direction@2.0.1: + resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} + hasBin: true + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + es-module-lexer@2.3.1: + resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} + + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} + engines: {node: '>=18'} + hasBin: true + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + + estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + + estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + + expressive-code@0.44.0: + resolution: {integrity: sha512-JXVWVNCKlLuZLMQH8cOiDUSosT0Bb+elwE/dbAkpwFwDFmyFyWlECoWZIohh2FkIF1iI67TQJ+Ts9k7oNDh2qA==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + + fast-wrap-ansi@0.2.2: + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + flattie@1.1.1: + resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} + engines: {node: '>=8'} + + fontace@0.4.1: + resolution: {integrity: sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==} + + fontkitten@1.0.3: + resolution: {integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==} + engines: {node: '>=20'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-tsconfig@5.0.0-beta.4: + resolution: {integrity: sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==} + engines: {node: '>=20.20.0'} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + + h3@1.15.11: + resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==} + + hast-util-embedded@3.0.0: + resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} + + hast-util-format@1.1.0: + resolution: {integrity: sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==} + + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + + hast-util-has-property@3.0.0: + resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + + hast-util-is-body-ok-link@3.0.1: + resolution: {integrity: sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==} + + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + + hast-util-minify-whitespace@1.0.1: + resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-phrasing@3.0.1: + resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==} + + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + + hast-util-select@6.0.4: + resolution: {integrity: sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==} + + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-to-parse5@8.0.1: + resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} + + hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + + html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + html-whitespace-sensitive-tag-names@3.0.1: + resolution: {integrity: sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + i18next@26.3.6: + resolution: {integrity: sha512-Bu5Z2nAXgfVyM8xvW3jk9EKRIuX37PudsrBViThNFx7CR7aaYTpP01cxNB/E4c4UUzTDiAZRstEhsRfPOL/8xA==} + peerDependencies: + typescript: ^5 || ^6 || ^7 + peerDependenciesMeta: + typescript: + optional: true + + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + + iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-docker@4.0.0: + resolution: {integrity: sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==} + engines: {node: '>=20'} + hasBin: true + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} + hasBin: true + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + lru-cache@11.5.2: + resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} + engines: {node: 20 || >=22} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + magicast@0.5.3: + resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} + + markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + mdast-util-definitions@6.0.0: + resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} + + mdast-util-directive@3.1.0: + resolution: {integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-directive@4.0.0: + resolution: {integrity: sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + neotraverse@0.6.18: + resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} + engines: {node: '>= 10'} + + nlcst-to-string@4.0.0: + resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} + + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + node-mock-http@1.0.4: + resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + obug@2.1.3: + resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} + engines: {node: '>=12.20.0'} + + ofetch@1.5.1: + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + + oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + + p-limit@7.3.0: + resolution: {integrity: sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==} + engines: {node: '>=20'} + + p-queue@9.3.1: + resolution: {integrity: sha512-POWdiIPmsUPGwb4FeQ4OBg46aqmcInSWe45CKDsGHiOBiVQM9chqfQTuqhuTzcg2Vz9faTI65at0KkVyVEiCHw==} + engines: {node: '>=20'} + + p-timeout@7.0.1: + resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==} + engines: {node: '>=20'} + + package-manager-detector@1.7.0: + resolution: {integrity: sha512-xg1eHpwYL/D/HEdWw2goFZP6vV0FH7W+PZ5rFkGjdIDLtxq7EkzBUeT3m+lndYCt8wKbmofUu1MUdMCXkCk9ZQ==} + + pagefind@1.5.2: + resolution: {integrity: sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q==} + hasBin: true + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + parse-latin@7.0.0: + resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + piccolore@0.1.3: + resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + engines: {node: '>=12'} + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.4: + resolution: {integrity: sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==} + engines: {node: '>=4'} + + postcss@8.5.19: + resolution: {integrity: sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==} + engines: {node: ^10 || ^12 || >=14} + + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + process-ancestry@0.1.0: + resolution: {integrity: sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg==} + engines: {node: '>=18.0.0'} + + property-information@7.2.0: + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} + + radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + + rehype-expressive-code@0.44.0: + resolution: {integrity: sha512-5r74C5F2sMR3X+QJH8OKWgZBO/cqRw5W1fLT6GVlSfLqepk+4j8tGFkyPqZYWjwntsBHzKPDH2zI68sZ7ScLfA==} + + rehype-format@5.0.1: + resolution: {integrity: sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==} + + rehype-parse@9.0.1: + resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + + rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + + rehype@13.0.2: + resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} + + remark-directive@4.0.0: + resolution: {integrity: sha512-7sxn4RfF1o3izevPV1DheyGDD6X4c9hrGpfdUpm7uC++dqrnJxIZVkk7CoKqcLm0VUMAuOol7Mno3m6g8cfMuA==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-smartypants@3.0.2: + resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} + engines: {node: '>=16.0.0'} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + retext-latin@4.0.0: + resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} + + retext-smartypants@6.2.0: + resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} + + retext-stringify@4.0.0: + resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} + + retext@9.0.0: + resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} + + rolldown@1.1.5: + resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + satteri@0.9.5: + resolution: {integrity: sha512-ZuWVl+vnM64y+/TtX8Kosv2c00W+hLQiiwnEL6H0UKVVrxFqMw4D2CJHHQaouVd89OAhtBBfjWLqhKi3TVUV4w==} + + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} + engines: {node: '>=11.0.0'} + + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shiki@4.3.1: + resolution: {integrity: sha512-oR+qDVi2OjX1tmDpyv+3KviX01KzO6Af+0NNnKnsp9491UEGz2YpxTuJboS/6VhYpTdqzmuJBuiTlrAWWJAssw==} + engines: {node: '>=20'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + sitemap@9.0.1: + resolution: {integrity: sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==} + engines: {node: '>=20.19.5', npm: '>=10.8.2'} + hasBin: true + + smol-toml@1.7.0: + resolution: {integrity: sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==} + engines: {node: '>= 18'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + stream-replace-string@2.0.0: + resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + + svgo@4.0.2: + resolution: {integrity: sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng==} + engines: {node: '>=16'} + hasBin: true + + tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + + tinyclip@0.1.15: + resolution: {integrity: sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==} + engines: {node: ^16.14.0 || >= 17.3.0} + + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + engines: {node: '>=18'} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + + ultrahtml@1.7.0: + resolution: {integrity: sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==} + + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unifont@0.7.4: + resolution: {integrity: sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==} + + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-modify-children@4.0.0: + resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-children@3.0.0: + resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + + unstorage@1.17.5: + resolution: {integrity: sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==} + 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 + + url-extras@0.1.0: + resolution: {integrity: sha512-8tzwTeXFPuX/5PHuCDQE5Dd9Ts4rwoq2t9aIT+HS4iAVpmj5l4Ao7Q+BuuFjvWRqrLswBhQDk8O96ZicgCqQqw==} + engines: {node: '>=20'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@8.1.4: + resolution: {integrity: sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.3.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.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 + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitefu@1.1.3: + resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + vite: + optional: true + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + xxhash-wasm@1.1.0: + resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} + + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} + engines: {node: '>=12.20'} + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@astrojs/compiler-binding-darwin-arm64@0.3.1': + optional: true + + '@astrojs/compiler-binding-darwin-x64@0.3.1': + optional: true + + '@astrojs/compiler-binding-linux-arm64-gnu@0.3.1': + optional: true + + '@astrojs/compiler-binding-linux-arm64-musl@0.3.1': + optional: true + + '@astrojs/compiler-binding-linux-x64-gnu@0.3.1': + optional: true + + '@astrojs/compiler-binding-linux-x64-musl@0.3.1': + optional: true + + '@astrojs/compiler-binding-wasm32-wasi@0.3.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + '@astrojs/compiler-binding-win32-arm64-msvc@0.3.1': + optional: true + + '@astrojs/compiler-binding-win32-x64-msvc@0.3.1': + optional: true + + '@astrojs/compiler-binding@0.3.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)': + optionalDependencies: + '@astrojs/compiler-binding-darwin-arm64': 0.3.1 + '@astrojs/compiler-binding-darwin-x64': 0.3.1 + '@astrojs/compiler-binding-linux-arm64-gnu': 0.3.1 + '@astrojs/compiler-binding-linux-arm64-musl': 0.3.1 + '@astrojs/compiler-binding-linux-x64-gnu': 0.3.1 + '@astrojs/compiler-binding-linux-x64-musl': 0.3.1 + '@astrojs/compiler-binding-wasm32-wasi': 0.3.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2) + '@astrojs/compiler-binding-win32-arm64-msvc': 0.3.1 + '@astrojs/compiler-binding-win32-x64-msvc': 0.3.1 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + '@astrojs/compiler-rs@0.3.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)': + dependencies: + '@astrojs/compiler-binding': 0.3.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + '@astrojs/internal-helpers@0.10.1': + dependencies: + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + js-yaml: 4.3.0 + picomatch: 4.0.5 + retext-smartypants: 6.2.0 + shiki: 4.3.1 + smol-toml: 1.7.0 + unified: 11.0.5 + + '@astrojs/markdown-remark@7.2.1': + dependencies: + '@astrojs/internal-helpers': 0.10.1 + '@astrojs/prism': 4.0.2 + github-slugger: 2.0.0 + hast-util-from-html: 2.0.3 + hast-util-to-text: 4.0.2 + 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 + 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 + transitivePeerDependencies: + - supports-color + + '@astrojs/markdown-satteri@0.3.3': + dependencies: + '@astrojs/internal-helpers': 0.10.1 + '@astrojs/prism': 4.0.2 + github-slugger: 2.0.0 + satteri: 0.9.5 + + '@astrojs/mdx@7.0.2(@astrojs/markdown-satteri@0.3.3)(astro@7.0.7(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3))': + dependencies: + '@astrojs/internal-helpers': 0.10.1 + '@astrojs/markdown-remark': 7.2.1 + '@mdx-js/mdx': 3.1.1 + acorn: 8.17.0 + astro: 7.0.7(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3) + es-module-lexer: 2.3.1 + 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 + optionalDependencies: + '@astrojs/markdown-satteri': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@astrojs/prism@4.0.2': + dependencies: + prismjs: 1.30.0 + + '@astrojs/sitemap@3.7.3': + dependencies: + sitemap: 9.0.1 + stream-replace-string: 2.0.0 + zod: 4.4.3 + + '@astrojs/starlight@0.41.3(@astrojs/markdown-remark@7.2.1)(astro@7.0.7(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3))': + dependencies: + '@astrojs/markdown-satteri': 0.3.3 + '@astrojs/mdx': 7.0.2(@astrojs/markdown-satteri@0.3.3)(astro@7.0.7(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3)) + '@astrojs/sitemap': 3.7.3 + '@pagefind/default-ui': 1.5.2 + '@types/hast': 3.0.5 + '@types/js-yaml': 4.0.9 + '@types/mdast': 4.0.4 + astro: 7.0.7(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3) + astro-expressive-code: 0.44.0(astro@7.0.7(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3)) + bcp-47: 2.1.1 + hast-util-from-html: 2.0.3 + hast-util-select: 6.0.4 + hast-util-to-string: 3.0.1 + hastscript: 9.0.1 + i18next: 26.3.6 + js-yaml: 4.3.0 + klona: 2.0.6 + magic-string: 0.30.21 + mdast-util-directive: 3.1.0 + mdast-util-to-markdown: 2.1.2 + mdast-util-to-string: 4.0.0 + pagefind: 1.5.2 + rehype: 13.0.2 + rehype-format: 5.0.1 + remark-directive: 4.0.0 + satteri: 0.9.5 + ultrahtml: 1.7.0 + unified: 11.0.5 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + optionalDependencies: + '@astrojs/markdown-remark': 7.2.1 + transitivePeerDependencies: + - supports-color + - typescript + + '@astrojs/telemetry@3.3.3': + dependencies: + ci-info: 4.4.0 + dset: 3.1.4 + is-docker: 4.0.0 + package-manager-detector: 1.7.0 + + '@babel/helper-string-parser@7.29.7': {} + + '@babel/helper-validator-identifier@7.29.7': {} + + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@bruits/satteri-darwin-arm64@0.9.5': + optional: true + + '@bruits/satteri-darwin-x64@0.9.5': + optional: true + + '@bruits/satteri-linux-arm64-gnu@0.9.5': + optional: true + + '@bruits/satteri-linux-arm64-musl@0.9.5': + optional: true + + '@bruits/satteri-linux-x64-gnu@0.9.5': + optional: true + + '@bruits/satteri-linux-x64-musl@0.9.5': + optional: true + + '@bruits/satteri-wasm32-wasi@0.9.5': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optional: true + + '@bruits/satteri-win32-arm64-msvc@0.9.5': + optional: true + + '@bruits/satteri-win32-x64-msvc@0.9.5': + optional: true + + '@capsizecss/unpack@4.0.1': + dependencies: + fontkitten: 1.0.3 + + '@clack/core@1.4.3': + dependencies: + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 + + '@clack/prompts@1.7.0': + dependencies: + '@clack/core': 1.4.3 + fast-string-width: 3.0.2 + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 + + '@ctrl/tinycolor@4.2.0': {} + + '@emnapi/core@1.11.1': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.28.1': + optional: true + + '@esbuild/android-arm64@0.28.1': + optional: true + + '@esbuild/android-arm@0.28.1': + optional: true + + '@esbuild/android-x64@0.28.1': + optional: true + + '@esbuild/darwin-arm64@0.28.1': + optional: true + + '@esbuild/darwin-x64@0.28.1': + optional: true + + '@esbuild/freebsd-arm64@0.28.1': + optional: true + + '@esbuild/freebsd-x64@0.28.1': + optional: true + + '@esbuild/linux-arm64@0.28.1': + optional: true + + '@esbuild/linux-arm@0.28.1': + optional: true + + '@esbuild/linux-ia32@0.28.1': + optional: true + + '@esbuild/linux-loong64@0.28.1': + optional: true + + '@esbuild/linux-mips64el@0.28.1': + optional: true + + '@esbuild/linux-ppc64@0.28.1': + optional: true + + '@esbuild/linux-riscv64@0.28.1': + optional: true + + '@esbuild/linux-s390x@0.28.1': + optional: true + + '@esbuild/linux-x64@0.28.1': + optional: true + + '@esbuild/netbsd-arm64@0.28.1': + optional: true + + '@esbuild/netbsd-x64@0.28.1': + optional: true + + '@esbuild/openbsd-arm64@0.28.1': + optional: true + + '@esbuild/openbsd-x64@0.28.1': + optional: true + + '@esbuild/openharmony-arm64@0.28.1': + optional: true + + '@esbuild/sunos-x64@0.28.1': + optional: true + + '@esbuild/win32-arm64@0.28.1': + optional: true + + '@esbuild/win32-ia32@0.28.1': + optional: true + + '@esbuild/win32-x64@0.28.1': + optional: true + + '@expressive-code/core@0.44.0': + dependencies: + '@ctrl/tinycolor': 4.2.0 + hast-util-select: 6.0.4 + hast-util-to-html: 9.0.5 + hast-util-to-text: 4.0.2 + hastscript: 9.0.1 + postcss: 8.5.19 + postcss-nested: 6.2.0(postcss@8.5.19) + unist-util-visit: 5.1.0 + unist-util-visit-parents: 6.0.2 + + '@expressive-code/plugin-frames@0.44.0': + dependencies: + '@expressive-code/core': 0.44.0 + + '@expressive-code/plugin-shiki@0.44.0': + dependencies: + '@expressive-code/core': 0.44.0 + shiki: 4.3.1 + + '@expressive-code/plugin-text-markers@0.44.0': + dependencies: + '@expressive-code/core': 0.44.0 + + '@img/colour@1.1.0': {} + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.11.2 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@mdx-js/mdx@3.1.1': + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdx': 2.0.14 + acorn: 8.17.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.17.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.3 + optional: true + + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.2 + '@tybys/wasm-util': 0.10.3 + optional: true + + '@oslojs/encoding@1.1.0': {} + + '@oxc-project/types@0.139.0': {} + + '@pagefind/darwin-arm64@1.5.2': + optional: true + + '@pagefind/darwin-x64@1.5.2': + optional: true + + '@pagefind/default-ui@1.5.2': {} + + '@pagefind/freebsd-x64@1.5.2': + optional: true + + '@pagefind/linux-arm64@1.5.2': + optional: true + + '@pagefind/linux-x64@1.5.2': + optional: true + + '@pagefind/windows-arm64@1.5.2': + optional: true + + '@pagefind/windows-x64@1.5.2': + optional: true + + '@rolldown/binding-android-arm64@1.1.5': + optional: true + + '@rolldown/binding-darwin-arm64@1.1.5': + optional: true + + '@rolldown/binding-darwin-x64@1.1.5': + optional: true + + '@rolldown/binding-freebsd-x64@1.1.5': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.1.5': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-x64-musl@1.1.5': + optional: true + + '@rolldown/binding-openharmony-arm64@1.1.5': + optional: true + + '@rolldown/binding-wasm32-wasi@1.1.5': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.1.5': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.1.5': + optional: true + + '@rolldown/pluginutils@1.0.1': {} + + '@rollup/pluginutils@5.4.0': + dependencies: + '@types/estree': 1.0.9 + estree-walker: 2.0.2 + picomatch: 4.0.5 + + '@shikijs/core@4.3.1': + dependencies: + '@shikijs/primitive': 4.3.1 + '@shikijs/types': 4.3.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@4.3.1': + dependencies: + '@shikijs/types': 4.3.1 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 + + '@shikijs/engine-oniguruma@4.3.1': + dependencies: + '@shikijs/types': 4.3.1 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@4.3.1': + dependencies: + '@shikijs/types': 4.3.1 + + '@shikijs/primitive@4.3.1': + dependencies: + '@shikijs/types': 4.3.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/themes@4.3.1': + dependencies: + '@shikijs/types': 4.3.1 + + '@shikijs/types@4.3.1': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 + + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.9 + + '@types/estree@1.0.9': {} + + '@types/hast@3.0.5': + dependencies: + '@types/unist': 3.0.3 + + '@types/js-yaml@4.0.9': {} + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdx@2.0.14': {} + + '@types/ms@2.1.0': {} + + '@types/nlcst@2.0.3': + dependencies: + '@types/unist': 3.0.3 + + '@types/node@24.13.3': + dependencies: + undici-types: 7.18.2 + + '@types/sax@1.2.7': + dependencies: + '@types/node': 24.13.3 + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@ungap/structured-clone@1.3.3': {} + + acorn-jsx@5.3.2(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + + acorn@8.17.0: {} + + am-i-vibing@0.4.0: + dependencies: + process-ancestry: 0.1.0 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.2 + + arg@5.0.2: {} + + argparse@2.0.1: {} + + aria-query@5.3.2: {} + + array-iterate@2.0.1: {} + + astring@1.9.0: {} + + astro-expressive-code@0.44.0(astro@7.0.7(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3)): + dependencies: + astro: 7.0.7(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3) + rehype-expressive-code: 0.44.0 + url-extras: 0.1.0 + + astro@7.0.7(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3): + dependencies: + '@astrojs/compiler-rs': 0.3.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2) + '@astrojs/internal-helpers': 0.10.1 + '@astrojs/markdown-satteri': 0.3.3 + '@astrojs/telemetry': 3.3.3 + '@capsizecss/unpack': 4.0.1 + '@clack/prompts': 1.7.0 + '@oslojs/encoding': 1.1.0 + '@rollup/pluginutils': 5.4.0 + am-i-vibing: 0.4.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.8.1 + diff: 8.0.4 + dset: 3.1.4 + es-module-lexer: 2.3.1 + esbuild: 0.28.1 + flattie: 1.1.1 + fontace: 0.4.1 + get-tsconfig: 5.0.0-beta.4 + github-slugger: 2.0.0 + html-escaper: 3.0.3 + http-cache-semantics: 4.2.0 + js-yaml: 4.3.0 + jsonc-parser: 3.3.1 + magic-string: 0.30.21 + magicast: 0.5.3 + mrmime: 2.0.1 + neotraverse: 0.6.18 + obug: 2.1.3 + p-limit: 7.3.0 + p-queue: 9.3.1 + package-manager-detector: 1.7.0 + piccolore: 0.1.3 + picomatch: 4.0.5 + semver: 7.8.5 + shiki: 4.3.1 + smol-toml: 1.7.0 + svgo: 4.0.2 + tinyclip: 0.1.15 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + ultrahtml: 1.7.0 + unifont: 0.7.4 + unstorage: 1.17.5 + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1) + vitefu: 1.1.3(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)) + xxhash-wasm: 1.1.0 + yargs-parser: 22.0.0 + zod: 4.4.3 + optionalDependencies: + '@astrojs/markdown-remark': 7.2.1 + sharp: 0.34.5 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@emnapi/core' + - '@emnapi/runtime' + - '@netlify/blobs' + - '@planetscale/database' + - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@vitejs/devtools' + - aws4fetch + - db0 + - idb-keyval + - ioredis + - jiti + - less + - rollup + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - uploadthing + - yaml + + axobject-query@4.1.0: {} + + bail@2.0.2: {} + + bcp-47-match@2.0.3: {} + + bcp-47@2.1.1: + dependencies: + is-alphabetical: 2.0.1 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + + boolbase@1.0.0: {} + + ccount@2.0.1: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + ci-info@4.4.0: {} + + clsx@2.1.1: {} + + collapse-white-space@2.1.0: {} + + comma-separated-tokens@2.0.3: {} + + commander@11.1.0: {} + + common-ancestor-path@2.0.0: {} + + cookie-es@1.2.3: {} + + cookie@1.1.1: {} + + crossws@0.3.5: + dependencies: + uncrypto: 0.1.3 + + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-selector-parser@3.3.0: {} + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.1 + + css-what@6.2.2: {} + + cssesc@3.0.0: {} + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + + defu@6.1.7: {} + + dequal@2.0.3: {} + + destr@2.0.5: {} + + detect-libc@2.1.2: {} + + devalue@5.8.1: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + diff@8.0.4: {} + + direction@2.0.1: {} + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dset@3.1.4: {} + + entities@4.5.0: {} + + entities@6.0.1: {} + + es-module-lexer@2.3.1: {} + + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.17.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + + esbuild@0.28.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 + + escape-string-regexp@5.0.0: {} + + estree-util-attach-comments@3.0.0: + dependencies: + '@types/estree': 1.0.9 + + estree-util-build-jsx@3.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + + estree-util-is-identifier-name@3.0.0: {} + + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + + estree-util-to-js@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 + + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.9 + + eventemitter3@5.0.4: {} + + expressive-code@0.44.0: + dependencies: + '@expressive-code/core': 0.44.0 + '@expressive-code/plugin-frames': 0.44.0 + '@expressive-code/plugin-shiki': 0.44.0 + '@expressive-code/plugin-text-markers': 0.44.0 + + extend@3.0.2: {} + + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + + fast-wrap-ansi@0.2.2: + dependencies: + fast-string-width: 3.0.2 + + fdir@6.5.0(picomatch@4.0.5): + optionalDependencies: + picomatch: 4.0.5 + + flattie@1.1.1: {} + + fontace@0.4.1: + dependencies: + fontkitten: 1.0.3 + + fontkitten@1.0.3: + dependencies: + tiny-inflate: 1.0.3 + + fsevents@2.3.3: + optional: true + + get-tsconfig@5.0.0-beta.4: + dependencies: + resolve-pkg-maps: 1.0.0 + + github-slugger@2.0.0: {} + + h3@1.15.11: + dependencies: + cookie-es: 1.2.3 + crossws: 0.3.5 + defu: 6.1.7 + destr: 2.0.5 + iron-webcrypto: 1.2.1 + node-mock-http: 1.0.4 + radix3: 1.1.2 + ufo: 1.6.4 + uncrypto: 0.1.3 + + hast-util-embedded@3.0.0: + dependencies: + '@types/hast': 3.0.5 + hast-util-is-element: 3.0.0 + + hast-util-format@1.1.0: + dependencies: + '@types/hast': 3.0.5 + hast-util-embedded: 3.0.0 + hast-util-minify-whitespace: 1.0.1 + hast-util-phrasing: 3.0.1 + hast-util-whitespace: 3.0.0 + html-whitespace-sensitive-tag-names: 3.0.1 + unist-util-visit-parents: 6.0.2 + + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.5 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 + vfile: 6.0.3 + vfile-message: 4.0.3 + + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.2.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-has-property@3.0.0: + dependencies: + '@types/hast': 3.0.5 + + hast-util-is-body-ok-link@3.0.1: + dependencies: + '@types/hast': 3.0.5 + + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.5 + + hast-util-minify-whitespace@1.0.1: + dependencies: + '@types/hast': 3.0.5 + hast-util-embedded: 3.0.0 + hast-util-is-element: 3.0.0 + hast-util-whitespace: 3.0.0 + unist-util-is: 6.0.1 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.5 + + hast-util-phrasing@3.0.1: + dependencies: + '@types/hast': 3.0.5 + hast-util-embedded: 3.0.0 + hast-util-has-property: 3.0.0 + hast-util-is-body-ok-link: 3.0.1 + hast-util-is-element: 3.0.0 + + hast-util-raw@9.1.0: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.3.3 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.1 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-select@6.0.4: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + bcp-47-match: 2.0.3 + comma-separated-tokens: 2.0.3 + css-selector-parser: 3.3.0 + devlop: 1.1.0 + direction: 2.0.1 + hast-util-has-property: 3.0.0 + hast-util-to-string: 3.0.1 + hast-util-whitespace: 3.0.0 + nth-check: 2.1.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + hast-util-to-estree@3.1.3: + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + devlop: 1.1.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.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + hast-util-to-parse5@8.0.1: + dependencies: + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-string@3.0.1: + dependencies: + '@types/hast': 3.0.5 + + hast-util-to-text@4.0.2: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.5 + + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + + html-escaper@3.0.3: {} + + html-void-elements@3.0.0: {} + + html-whitespace-sensitive-tag-names@3.0.1: {} + + http-cache-semantics@4.2.0: {} + + i18next@26.3.6: {} + + inline-style-parser@0.2.7: {} + + iron-webcrypto@1.2.1: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-decimal@2.0.1: {} + + is-docker@4.0.0: {} + + is-hexadecimal@2.0.1: {} + + is-plain-obj@4.1.0: {} + + js-yaml@4.3.0: + dependencies: + argparse: 2.0.1 + + jsonc-parser@3.3.1: {} + + klona@2.0.6: {} + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + longest-streak@3.1.0: {} + + lru-cache@11.5.2: {} + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + magicast@0.5.3: + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + source-map-js: 1.2.1 + + markdown-extensions@2.0.0: {} + + markdown-table@3.0.4: {} + + mdast-util-definitions@6.0.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + + mdast-util-directive@3.1.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-visit-parents: 6.0.2 + transitivePeerDependencies: + - supports-color + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.3: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.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.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.3 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + mdn-data@2.0.28: {} + + mdn-data@2.27.1: {} + + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-directive@4.0.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + parse-entities: 4.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-events-to-acorn@2.0.3: + dependencies: + '@types/estree': 1.0.9 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + mrmime@2.0.1: {} + + ms@2.1.3: {} + + nanoid@3.3.16: {} + + neotraverse@0.6.18: {} + + nlcst-to-string@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + + node-fetch-native@1.6.7: {} + + node-mock-http@1.0.4: {} + + normalize-path@3.0.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + obug@2.1.3: {} + + ofetch@1.5.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.4 + + ohash@2.0.11: {} + + oniguruma-parser@0.12.2: {} + + oniguruma-to-es@4.3.6: + dependencies: + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 + + p-limit@7.3.0: + dependencies: + yocto-queue: 1.2.2 + + p-queue@9.3.1: + dependencies: + eventemitter3: 5.0.4 + p-timeout: 7.0.1 + + p-timeout@7.0.1: {} + + package-manager-detector@1.7.0: {} + + pagefind@1.5.2: + optionalDependencies: + '@pagefind/darwin-arm64': 1.5.2 + '@pagefind/darwin-x64': 1.5.2 + '@pagefind/freebsd-x64': 1.5.2 + '@pagefind/linux-arm64': 1.5.2 + '@pagefind/linux-x64': 1.5.2 + '@pagefind/windows-arm64': 1.5.2 + '@pagefind/windows-x64': 1.5.2 + + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.3.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + parse-latin@7.0.0: + dependencies: + '@types/nlcst': 2.0.3 + '@types/unist': 3.0.3 + nlcst-to-string: 4.0.0 + unist-util-modify-children: 4.0.0 + unist-util-visit-children: 3.0.0 + vfile: 6.0.3 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + piccolore@0.1.3: {} + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + picomatch@4.0.5: {} + + postcss-nested@6.2.0(postcss@8.5.19): + dependencies: + postcss: 8.5.19 + postcss-selector-parser: 6.1.4 + + postcss-selector-parser@6.1.4: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss@8.5.19: + dependencies: + nanoid: 3.3.16 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prismjs@1.30.0: {} + + process-ancestry@0.1.0: {} + + property-information@7.2.0: {} + + radix3@1.1.2: {} + + readdirp@5.0.0: {} + + recma-build-jsx@1.0.0: + dependencies: + '@types/estree': 1.0.9 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + + recma-jsx@1.0.1(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.9 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.9 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + + rehype-expressive-code@0.44.0: + dependencies: + expressive-code: 0.44.0 + + rehype-format@5.0.1: + dependencies: + '@types/hast': 3.0.5 + hast-util-format: 1.1.0 + + rehype-parse@9.0.1: + dependencies: + '@types/hast': 3.0.5 + hast-util-from-html: 2.0.3 + unified: 11.0.5 + + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.5 + hast-util-raw: 9.1.0 + vfile: 6.0.3 + + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.5 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color + + rehype-stringify@10.0.1: + dependencies: + '@types/hast': 3.0.5 + hast-util-to-html: 9.0.5 + unified: 11.0.5 + + rehype@13.0.2: + dependencies: + '@types/hast': 3.0.5 + rehype-parse: 9.0.1 + rehype-stringify: 10.0.1 + unified: 11.0.5 + + remark-directive@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-directive: 3.1.0 + micromark-extension-directive: 4.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-mdx@3.1.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + + remark-smartypants@3.0.2: + dependencies: + retext: 9.0.0 + retext-smartypants: 6.2.0 + unified: 11.0.5 + unist-util-visit: 5.1.0 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + resolve-pkg-maps@1.0.0: {} + + retext-latin@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + parse-latin: 7.0.0 + unified: 11.0.5 + + retext-smartypants@6.2.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unist-util-visit: 5.1.0 + + retext-stringify@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unified: 11.0.5 + + retext@9.0.0: + dependencies: + '@types/nlcst': 2.0.3 + retext-latin: 4.0.0 + retext-stringify: 4.0.0 + unified: 11.0.5 + + rolldown@1.1.5: + dependencies: + '@oxc-project/types': 0.139.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.1.5 + '@rolldown/binding-darwin-arm64': 1.1.5 + '@rolldown/binding-darwin-x64': 1.1.5 + '@rolldown/binding-freebsd-x64': 1.1.5 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 + '@rolldown/binding-linux-arm64-gnu': 1.1.5 + '@rolldown/binding-linux-arm64-musl': 1.1.5 + '@rolldown/binding-linux-ppc64-gnu': 1.1.5 + '@rolldown/binding-linux-s390x-gnu': 1.1.5 + '@rolldown/binding-linux-x64-gnu': 1.1.5 + '@rolldown/binding-linux-x64-musl': 1.1.5 + '@rolldown/binding-openharmony-arm64': 1.1.5 + '@rolldown/binding-wasm32-wasi': 1.1.5 + '@rolldown/binding-win32-arm64-msvc': 1.1.5 + '@rolldown/binding-win32-x64-msvc': 1.1.5 + + satteri@0.9.5: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + optionalDependencies: + '@bruits/satteri-darwin-arm64': 0.9.5 + '@bruits/satteri-darwin-x64': 0.9.5 + '@bruits/satteri-linux-arm64-gnu': 0.9.5 + '@bruits/satteri-linux-arm64-musl': 0.9.5 + '@bruits/satteri-linux-x64-gnu': 0.9.5 + '@bruits/satteri-linux-x64-musl': 0.9.5 + '@bruits/satteri-wasm32-wasi': 0.9.5 + '@bruits/satteri-win32-arm64-msvc': 0.9.5 + '@bruits/satteri-win32-x64-msvc': 0.9.5 + + sax@1.6.0: {} + + semver@7.8.5: {} + + sharp@0.34.5: + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 + 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 + + shiki@4.3.1: + dependencies: + '@shikijs/core': 4.3.1 + '@shikijs/engine-javascript': 4.3.1 + '@shikijs/engine-oniguruma': 4.3.1 + '@shikijs/langs': 4.3.1 + '@shikijs/themes': 4.3.1 + '@shikijs/types': 4.3.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + sisteransi@1.0.5: {} + + sitemap@9.0.1: + dependencies: + '@types/node': 24.13.3 + '@types/sax': 1.2.7 + arg: 5.0.2 + sax: 1.6.0 + + smol-toml@1.7.0: {} + + source-map-js@1.2.1: {} + + source-map@0.7.6: {} + + space-separated-tokens@2.0.2: {} + + stream-replace-string@2.0.0: {} + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + style-to-js@1.1.21: + dependencies: + style-to-object: 1.0.14 + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + + svgo@4.0.2: + dependencies: + commander: 11.1.0 + css-select: 5.2.2 + css-tree: 3.2.1 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.6.0 + + tiny-inflate@1.0.3: {} + + tinyclip@0.1.15: {} + + tinyexec@1.2.4: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 + + trim-lines@3.0.1: {} + + trough@2.2.0: {} + + tslib@2.8.1: + optional: true + + ufo@1.6.4: {} + + ultrahtml@1.7.0: {} + + uncrypto@0.1.3: {} + + undici-types@7.18.2: {} + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unifont@0.7.4: + dependencies: + css-tree: 3.2.1 + ofetch: 1.5.1 + ohash: 2.0.11 + + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-modify-children@4.0.0: + dependencies: + '@types/unist': 3.0.3 + array-iterate: 2.0.1 + + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-children@3.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + unstorage@1.17.5: + dependencies: + anymatch: 3.1.3 + chokidar: 5.0.0 + destr: 2.0.5 + h3: 1.15.11 + lru-cache: 11.5.2 + node-fetch-native: 1.6.7 + ofetch: 1.5.1 + ufo: 1.6.4 + + url-extras@0.1.0: {} + + util-deprecate@1.0.2: {} + + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.5 + postcss: 8.5.19 + rolldown: 1.1.5 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 24.13.3 + esbuild: 0.28.1 + fsevents: 2.3.3 + + vitefu@1.1.3(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)): + optionalDependencies: + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1) + + web-namespaces@2.0.1: {} + + xxhash-wasm@1.1.0: {} + + yargs-parser@22.0.0: {} + + yocto-queue@1.2.2: {} + + zod@4.4.3: {} + + zwitch@2.0.4: {} diff --git a/docs/pnpm-workspace.yaml b/docs/pnpm-workspace.yaml new file mode 100644 index 0000000..dbb26c8 --- /dev/null +++ b/docs/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +allowBuilds: + esbuild: true + sharp: true diff --git a/docs/public/favicon.svg b/docs/public/favicon.svg new file mode 100644 index 0000000..cba5ac1 --- /dev/null +++ b/docs/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/src/assets/houston.webp b/docs/src/assets/houston.webp new file mode 100644 index 0000000000000000000000000000000000000000..930c164974ad8eb528878f15a98016249b8cf546 GIT binary patch literal 98506 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 b6~t;_wBcJ3AWgga7~Sz~izoKbpAY~5r|m$8 literal 0 HcmV?d00001 diff --git a/docs/src/content.config.ts b/docs/src/content.config.ts new file mode 100644 index 0000000..d9ee8c9 --- /dev/null +++ b/docs/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/docs/src/content/adr/.gitkeep b/docs/src/content/adr/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/src/content/adr/000100-repository-structure.md b/docs/src/content/adr/000100-repository-structure.md new file mode 100644 index 0000000..2aecc30 --- /dev/null +++ b/docs/src/content/adr/000100-repository-structure.md @@ -0,0 +1,142 @@ +# ADR-0001: Repository Structure + +* **Status:** Accepted +* **Date:** 2026-07-12 +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +LUNA Charts is designed as an open-source charting library with a strong focus on accessibility, maintainability, and long-term evolution. + +The project consists of multiple concerns, including source code, documentation, examples, testing infrastructure, and continuous integration. + +A repository structure was required that supports collaborative development while keeping the project easy to understand for contributors and maintainers. + +The repository should also support future growth without requiring structural changes. + +--- + +## Decision Drivers + +The following factors influenced this decision: + +* Maintainability +* Developer Experience +* Open Source Collaboration +* Modular Architecture +* Shared Tooling +* Consistent Build Process +* Long-Term Evolution + +--- + +## Considered Alternatives + +| Alternative | Description | +| ------------------------------------ | ---------------------------------------------------------------------------------- | +| Multiple repositories | Separate repositories for documentation, examples, and library packages. | +| Single repository without workspaces | One repository containing all files without workspace separation. | +| **Monorepo using pnpm Workspaces** | One repository containing all project artifacts with logical workspace separation. | + +Multiple repositories were rejected because they increase maintenance effort, duplicate tooling, and complicate contribution workflows. + +A single repository without workspaces was rejected because the project is expected to grow over time and benefits from a clear modular organization. + +--- + +## Decision + +LUNA Charts is implemented as a **pnpm-based monorepo**. + +The repository contains all project artifacts, including: + +* Source code +* Documentation +* Storybook +* Examples +* Architecture documentation +* Architecture Decision Records (ADRs) +* CI/CD configuration + +The repository is organized into logical workspaces. + +```text +luna-charts/ +│ +├── packages/ +│ └── luna-charts/ +│ +├── apps/ +│ ├── storybook/ +│ └── docs/ +│ +├── docs/ +│ ├── architecture/ +│ └── adr/ +│ +├── examples/ +│ +└── .github/ +``` + +Internally, the library is organized into architectural modules such as: + +* Core +* Charts +* Themes +* Utilities + +These modules are implementation details and are **not** exposed as individual npm packages. + +--- + +## Rationale + +A monorepo provides a single source of truth for the entire project. + +All contributors work within the same repository using a shared toolchain, coding standards, testing infrastructure, and documentation. + +Using **pnpm Workspaces** enables clear separation of responsibilities while avoiding duplicated dependencies and configuration. + +This structure supports the project's architecture-first approach and simplifies future expansion. + +--- + +## Consequences + +### Positive + +* Single source of truth +* Simplified onboarding for contributors +* Shared tooling and configuration +* Consistent CI/CD pipeline +* Easier dependency management +* Centralized documentation +* Scalable project organization + +### Negative + +* Larger repository size +* Contributors clone the complete repository +* Workspace configuration introduces a small amount of additional complexity + +--- + +## Related TOGAF Phases + +* Architecture Vision (Phase A) +* Technology Architecture (Phase D) +* Opportunities & Solutions (Phase E) +* Migration Planning (Phase F) +* Implementation Governance (Phase G) +* Architecture Change Management (Phase H) + +--- + +## References + +* LUNA Charts Architecture Wiki +* ADR-0002: Technology Stack +* pnpm Workspaces Documentation diff --git a/docs/src/content/adr/000200-technology-stack.md b/docs/src/content/adr/000200-technology-stack.md new file mode 100644 index 0000000..6796d8e --- /dev/null +++ b/docs/src/content/adr/000200-technology-stack.md @@ -0,0 +1,211 @@ +# ADR-0002: Technology Stack + +* **Status:** Accepted +* **Date:** 2026-07-12 +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +LUNA Charts is an open-source charting library designed to provide accessible, framework-agnostic, and strongly typed chart components. + +The selected technology stack must support the architectural principles defined during the TOGAF Architecture Development Method (ADM), including: + +* Accessibility by Design +* Framework Agnosticism +* Strong Type Safety +* Component-Based Architecture +* High Developer Experience +* Open Source Collaboration +* Long-Term Maintainability + +Rather than selecting technologies based on popularity, each technology is evaluated according to its ability to support these architectural goals. + +--- + +## Decision Drivers + +The following factors influenced the decision: + +* Accessibility +* Framework Agnosticism +* Type Safety +* Developer Experience +* Maintainability +* Testability +* Documentation +* Open Source Collaboration +* Long-Term Evolution + +--- + +## Considered Alternatives + +| Technology Area | Considered Alternatives | Selected | +| ----------------------- | ----------------------------------------------- | ------------------ | +| Component Framework | React, Vue, Angular, Lit, StencilJS | **StencilJS** | +| Component Documentation | Storybook, Styleguidist | **Storybook** | +| Project Documentation | Docusaurus, VitePress, Starlight | **Starlight** | +| Package Manager | npm, Yarn, pnpm | **pnpm** | +| Unit Testing | Vitest, Jest | **Jest** | +| Browser Testing | Cypress, Playwright | **Playwright** | +| Accessibility Testing | Manual Testing Only, axe-core | **axe-core** | +| Code Formatting | Manual Formatting, Prettier | **Prettier** | +| Static Analysis | TSLint, ESLint | **ESLint** | +| Versioning | Manual Versioning, Semantic Release, Changesets | **Changesets** | +| Continuous Integration | GitLab CI, Azure Pipelines, GitHub Actions | **GitHub Actions** | + +The selected technologies best support the project's architectural goals while remaining broadly adopted and well documented. + +--- + +## Decision + +The following technology stack is adopted for the implementation of LUNA Charts. + +| Technology | Purpose | +| ------------------ | --------------------------------------------------- | +| **StencilJS** | Web Component development | +| **Storybook** | Interactive component documentation and development | +| **Starlight** | Project and architecture documentation | +| **TypeScript** | Strong typing and developer tooling | +| **pnpm** | Package management and workspace support | +| **Jest** | Unit testing | +| **Playwright** | Browser and interaction testing | +| **axe-core** | Accessibility validation | +| **ESLint** | Static code analysis | +| **Prettier** | Consistent code formatting | +| **Changesets** | Versioning and release management | +| **GitHub Actions** | Continuous Integration | + +The technology stack is considered part of the project's architecture and may only be changed through a new Architecture Decision Record. + +--- + +## Rationale + +Each technology has been selected because it directly supports one or more architectural principles. + +### StencilJS + +StencilJS enables the development of standards-based Web Components. + +This aligns with the project's goal of remaining framework agnostic while allowing framework-specific wrappers to be generated automatically during the build process. + +--- + +### Storybook + +Storybook provides an isolated environment for component development. + +It supports rapid development, interactive examples, accessibility validation, and visual review of chart components. + +--- + +### Starlight + +Starlight serves as the central documentation platform. + +It separates architectural documentation from component documentation and supports long-term maintainability of the project's knowledge base. + +--- + +### TypeScript + +TypeScript enables strong compile-time validation. + +It improves the developer experience by detecting integration errors early and providing comprehensive IDE support. + +--- + +### pnpm + +pnpm Workspaces enable a modular repository structure while maintaining a single source of truth for dependencies and tooling. + +--- + +### Jest + +Jest provides fast unit testing for business logic, utility functions, configuration handling, validation, and other non-browser-specific functionality. + +--- + +### Playwright + +Playwright validates component behavior inside real browsers. + +It is used to verify keyboard interaction, focus management, SVG rendering, and other browser-dependent accessibility features. + +--- + +### axe-core + +axe-core automatically validates accessibility requirements and complements manual accessibility reviews. + +--- + +### ESLint and Prettier + +Both tools ensure consistent coding standards across the project and reduce friction during code reviews. + +--- + +### Changesets + +Changesets manages package versioning and release notes while keeping release decisions under maintainer control. + +--- + +### GitHub Actions + +GitHub Actions automates testing, validation, and release workflows to ensure consistent software quality. + +--- + +## Consequences + +### Positive + +* Technology stack directly supports architectural principles. +* Strong accessibility support throughout development. +* Framework-independent component model. +* Excellent developer experience. +* Consistent documentation workflow. +* High maintainability. +* Modern testing strategy. +* Simplified contributor onboarding. +* Automated quality assurance. +* Scalable project foundation. + +### Negative + +* Initial project setup is more complex. +* Contributors must become familiar with multiple development tools. +* Toolchain maintenance requires periodic updates. +* CI configuration is more comprehensive than for smaller projects. + +--- + +## Related TOGAF Phases + +* Architecture Vision (Phase A) +* Information Systems Architecture (Phase C) +* Technology Architecture (Phase D) +* Opportunities & Solutions (Phase E) +* Migration Planning (Phase F) +* Implementation Governance (Phase G) + +--- + +## References + +* LUNA Charts Architecture Wiki +* ADR-0001: Repository Structure +* ADR-0003: Web Components as Public API +* StencilJS Documentation +* Storybook Documentation +* Starlight Documentation +* Playwright Documentation +* Jest Documentation +* pnpm Documentation diff --git a/docs/src/content/adr/000300-web-components-as-public-api.md b/docs/src/content/adr/000300-web-components-as-public-api.md new file mode 100644 index 0000000..09c9288 --- /dev/null +++ b/docs/src/content/adr/000300-web-components-as-public-api.md @@ -0,0 +1,110 @@ +# ADR-0003: Web Components as Public API + +* **Status:** Accepted +* **Date:** 2026-07-12 +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +LUNA Charts is intended to be an open-source charting library that can be integrated into applications regardless of the frontend framework used. + +A primary architectural objective defined during the Architecture Vision and Technology Architecture phases is **framework agnosticism**. Consumers should be able to use LUNA Charts in React, Angular, Vue, Svelte, or plain HTML applications without requiring framework-specific implementations of the chart components. + +The public API therefore had to be based on a stable and widely adopted web standard rather than a framework-specific component model. + +--- + +## Decision Drivers + +The following factors influenced this decision: + +* Framework Agnosticism +* Standards Compliance +* Long-Term Maintainability +* Accessibility +* Developer Experience +* Component Reusability +* Open Web Platform +* Future Compatibility + +--- + +## Considered Alternatives + +| Alternative | Description | +| -------------------------------------- | ----------------------------------------------------------------- | +| React Components | Components implemented exclusively for React. | +| Vue Components | Components implemented exclusively for Vue. | +| Angular Components | Components implemented exclusively for Angular. | +| Separate implementations per framework | Independent implementations for each supported framework. | +| **Web Components** | Standards-based custom elements implemented using Web Components. | + +Framework-specific implementations were rejected because they increase maintenance effort, duplicate functionality, and couple the architecture to individual frontend ecosystems. + +Maintaining multiple implementations would also increase the likelihood of inconsistent behavior across frameworks. + +--- + +## Decision + +LUNA Charts exposes its public API exclusively through **Web Components**. + +The project uses **StencilJS** to implement these components according to the Web Components standard. + +Framework integrations (e.g., React, Angular, Vue) are generated automatically during the build process and are considered **integration adapters**, not independent implementations. + +The architecture therefore consists of a single component model with multiple consumption options. + +--- + +## Rationale + +Web Components are an open web standard supported by all modern browsers. + +By building directly upon this standard, LUNA Charts remains independent of any frontend framework while still supporting popular ecosystems through automatically generated wrappers. + +This approach minimizes duplicated implementation effort and guarantees consistent functionality across all supported platforms. + +Using a single implementation also simplifies testing, documentation, maintenance, and accessibility validation. + +Framework wrappers remain lightweight integration layers and do not introduce architectural differences. + +--- + +## Consequences + +### Positive + +* Framework-independent public API. +* Single implementation for all supported platforms. +* Reduced maintenance effort. +* Consistent behavior across frameworks. +* Simplified testing and documentation. +* Better long-term stability. +* Supports future frontend frameworks without redesigning the library. + +### Negative + +* Developers unfamiliar with Web Components may require additional documentation. +* Framework wrappers depend on the capabilities provided by StencilJS. +* Some framework-specific features cannot be exposed without breaking framework independence. + +--- + +## Related TOGAF Phases + +* Architecture Vision (Phase A) +* Information Systems Architecture (Phase C) +* Technology Architecture (Phase D) +* Opportunities & Solutions (Phase E) + +--- + +## References + +* LUNA Charts Architecture Wiki +* ADR-0002: Technology Stack +* StencilJS Documentation +* Web Components Specification diff --git a/docs/src/content/adr/000400-svg-as-rendering-technology.md b/docs/src/content/adr/000400-svg-as-rendering-technology.md new file mode 100644 index 0000000..8cae9df --- /dev/null +++ b/docs/src/content/adr/000400-svg-as-rendering-technology.md @@ -0,0 +1,129 @@ +# ADR-0004: SVG as Rendering Technology + +* **Status:** Accepted +* **Date:** 2026-07-12 +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +One of the primary goals of LUNA Charts is to provide accessible chart components that support modern accessibility standards and assist developers in creating WCAG-compliant data visualizations. + +Charts are graphical user interfaces that contain meaningful information. Depending on the chart type, individual graphical elements such as bars, points, labels, legends, and axes may need to be discoverable by assistive technologies, focusable using the keyboard, or interactable by users. + +The rendering technology therefore has a direct impact on accessibility, developer experience, testing capabilities, maintainability, and future extensibility. + +A rendering technology had to be selected that supports these architectural goals while remaining compatible with modern browsers and Web Components. + +--- + +## Decision Drivers + +The following factors influenced this decision: + +* Accessibility +* WCAG Compliance +* Semantic Structure +* Keyboard Navigation +* Focus Management +* Screen Reader Support +* Developer Experience +* Maintainability +* Browser Compatibility +* Long-Term Evolution + +--- + +## Considered Alternatives + +| Alternative | Description | +| ---------------- | --------------------------------------------------------- | +| HTML Elements | Represent charts using standard HTML elements. | +| Canvas | Render graphics using the HTML Canvas API. | +| Hybrid Rendering | Combine Canvas and SVG depending on the chart type. | +| **SVG** | Render all chart graphics using Scalable Vector Graphics. | + +HTML was rejected because it is not designed to represent complex graphical visualizations. + +Canvas was rejected because graphical objects are rendered as pixels rather than DOM elements. This makes individual chart elements difficult to expose to assistive technologies and increases implementation complexity for keyboard interaction and accessibility. + +Hybrid rendering was rejected because it would introduce two rendering models, increasing architectural complexity, testing effort, and maintenance costs. + +--- + +## Decision + +All chart visualizations within LUNA Charts are rendered using **Scalable Vector Graphics (SVG)**. + +Each visual element (e.g., bars, lines, points, labels, legends, and axes) is represented as an individual SVG element within the DOM. + +Accessibility information, keyboard navigation, focus management, and interaction are implemented directly on these SVG elements. + +Canvas is not used as a rendering technology for chart components. + +--- + +## Rationale + +SVG integrates directly into the browser's Document Object Model (DOM), allowing every graphical element to be individually identified, styled, focused, and enriched with accessibility information. + +This capability aligns with the project's goal of supporting accessible chart implementations by design. + +Using SVG enables the library to: + +* associate semantic information with graphical elements, +* support keyboard navigation, +* expose meaningful structures to assistive technologies, +* apply standard web accessibility techniques, +* simplify automated accessibility testing, +* integrate naturally with Web Components. + +SVG also provides excellent scalability across different display resolutions without requiring additional rendering logic. + +Although Canvas may provide better rendering performance for extremely large datasets, accessibility and maintainability are considered higher architectural priorities for LUNA Charts. + +--- + +## Consequences + +### Positive + +* Native DOM representation of graphical elements. +* Improved accessibility support. +* Better compatibility with assistive technologies. +* Simplified keyboard navigation. +* Simplified focus management. +* Easier automated accessibility testing. +* Resolution-independent rendering. +* Consistent styling using CSS. +* Better integration with Web Components. +* Simplified debugging using browser developer tools. + +### Negative + +* Rendering performance may decrease for extremely large datasets. +* SVG documents become larger as chart complexity increases. +* Very large visualizations may require optimization techniques such as virtualization or data aggregation. + +These trade-offs are considered acceptable because accessibility and maintainability have higher architectural priority than maximum rendering performance. + +--- + +## Related TOGAF Phases + +* Architecture Vision (Phase A) +* Business Architecture (Phase B) +* Information Systems Architecture (Phase C) +* Technology Architecture (Phase D) +* Opportunities & Solutions (Phase E) + +--- + +## References + +* LUNA Charts Architecture Wiki +* ADR-0002: Technology Stack +* ADR-0003: Web Components as Public API +* Scalable Vector Graphics (SVG) Specification +* Web Content Accessibility Guidelines (WCAG) diff --git a/docs/src/content/adr/000500-accessibility-as-a-cross-cutting-concern.md b/docs/src/content/adr/000500-accessibility-as-a-cross-cutting-concern.md new file mode 100644 index 0000000..b07761b --- /dev/null +++ b/docs/src/content/adr/000500-accessibility-as-a-cross-cutting-concern.md @@ -0,0 +1,139 @@ +# ADR-000500: Accessibility as a Cross-Cutting Concern + +* **Status:** Accepted +* **Date:** 2026-07-12 +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +Accessibility is the primary quality attribute of LUNA Charts. + +The project's objective is not only to render charts but also to support developers in creating accessible data visualizations that align with the Web Content Accessibility Guidelines (WCAG). + +During the architectural design process, accessibility was initially considered as a separate subsystem responsible for validating and enforcing accessibility requirements. + +Further analysis revealed that accessibility affects nearly every architectural layer of the system. + +Rendering, component APIs, configuration, validation, interaction, keyboard navigation, documentation, and testing all contribute to the accessibility of the final chart. + +As a result, accessibility cannot be implemented as an isolated engine without introducing architectural inconsistencies. + +--- + +## Decision Drivers + +The following factors influenced this decision: + +* Accessibility by Design +* WCAG Compliance +* Separation of Concerns +* Maintainability +* Consistency +* Developer Experience +* Long-Term Evolution +* Testability + +--- + +## Considered Alternatives + +| Alternative | Description | +| ------------------------------ | ---------------------------------------------------------------------------------------------------------- | +| Dedicated Accessibility Engine | A centralized subsystem responsible for accessibility validation and enforcement. | +| Accessibility Utilities | A collection of reusable accessibility helper functions. | +| **Cross-Cutting Concern** | Accessibility is integrated into every architectural layer where accessibility-related decisions are made. | + +A dedicated accessibility engine was rejected because accessibility cannot be guaranteed after a chart has already been designed or rendered. + +Accessibility decisions must be made continuously throughout the rendering process and component lifecycle. + +Accessibility utilities remain part of the implementation but do not represent the architectural model. + +--- + +## Decision + +Accessibility is treated as a **cross-cutting concern** throughout the entire architecture of LUNA Charts. + +Accessibility responsibilities are distributed across multiple architectural modules rather than centralized in a single subsystem. + +Examples include: + +* Public component APIs +* TypeScript type definitions +* Validation +* Rendering +* SVG generation +* Keyboard interaction +* Focus management +* Documentation +* Automated testing + +Each architectural component is responsible for implementing the accessibility requirements relevant to its own responsibility. + +--- + +## Rationale + +Accessibility is not a feature that can be added after rendering has completed. + +Instead, accessibility emerges from many architectural decisions working together. + +Examples include: + +* selecting SVG instead of Canvas, +* designing semantic component APIs, +* exposing accessible keyboard interaction, +* generating meaningful DOM structures, +* providing strongly typed configuration, +* validating accessibility-related configuration, +* documenting accessibility behavior, +* verifying accessibility through automated testing. + +Treating accessibility as a cross-cutting concern ensures that accessibility remains an architectural responsibility rather than an isolated implementation detail. + +This approach also aligns with established software architecture principles, where quality attributes such as security, logging, and observability are commonly treated as cross-cutting concerns. + +--- + +## Consequences + +### Positive + +* Accessibility is considered throughout the entire development process. +* Architectural responsibilities remain clearly separated. +* Accessibility becomes part of every feature rather than an optional extension. +* Better support for WCAG-compliant chart implementations. +* Simplified long-term maintenance. +* Consistent accessibility behavior across all chart types. +* Accessibility can be validated at multiple architectural levels. + +### Negative + +* Accessibility responsibilities are distributed across multiple modules. +* Contributors must understand accessibility requirements beyond their immediate implementation. +* Architectural reviews must continuously consider accessibility implications. + +These trade-offs are acceptable because accessibility represents the primary quality objective of LUNA Charts. + +--- + +## Related TOGAF Phases + +* Architecture Vision (Phase A) +* Business Architecture (Phase B) +* Information Systems Architecture (Phase C) +* Technology Architecture (Phase D) +* Implementation Governance (Phase G) + +--- + +## References + +* LUNA Charts Architecture Wiki +* ADR-000300: Web Components as Public API +* ADR-000400: SVG as Rendering Technology +* Web Content Accessibility Guidelines (WCAG) +* WAI-ARIA Authoring Practices Guide diff --git a/docs/src/content/adr/README.md b/docs/src/content/adr/README.md new file mode 100644 index 0000000..e2e36ee --- /dev/null +++ b/docs/src/content/adr/README.md @@ -0,0 +1,190 @@ +# Architecture Decision Records (ADRs) + +Architecture Wiki: [https://wiki.byting-pandas.ninja/en/Projects/LUNA-Charts/Introduction] + +## Purpose + +This directory contains the **Architecture Decision Records (ADRs)** for the LUNA Charts project. + +An Architecture Decision Record documents a significant architectural decision, the context in which it was made, the chosen solution, and its consequences. + +The goal is to preserve the reasoning behind architectural decisions so that future contributors and maintainers understand **why** a decision was made—not only **what** was implemented. + +ADRs complement the Architecture Development Method (ADM) documentation and serve as the primary record of architectural decisions throughout the project's lifecycle. + +--- + +## Architecture Documentation + +The complete software architecture of LUNA Charts is documented in the official Architecture Wiki. + +The wiki follows the **TOGAF Architecture Development Method (ADM)** and describes the project from the initial vision through implementation governance and long-term architecture evolution. + +### Architecture Wiki + +* Architecture Vision (Phase A) +* Business Architecture (Phase B) +* Information Systems Architecture (Phase C) +* Technology Architecture (Phase D) +* Opportunities & Solutions (Phase E) +* Migration Planning (Phase F) +* Implementation Governance (Phase G) +* Architecture Change Management (Phase H) + +The ADRs contained in this directory should always be read together with the Architecture Wiki. + +The wiki describes the architecture as a whole, whereas ADRs explain the reasoning behind individual architectural decisions. + +--- + +## Relationship to the Architecture Documentation + +| Architecture Wiki | Architecture Decision Records | +| -------------------------------------------- | --------------------------------------------------- | +| Describes the complete software architecture | Documents individual architectural decisions | +| Defines the overall system structure | Explains why a specific solution was selected | +| Organized according to TOGAF ADM phases | Organized chronologically by architectural decision | +| Updated when the architecture evolves | Added whenever a significant decision is made | + +ADRs do **not** replace the Architecture Wiki. + +Likewise, the Architecture Wiki should not duplicate ADRs. + +Instead, both artifacts complement each other. + +--- + +## When to Create an ADR + +An ADR should be created whenever a decision has a significant impact on the architecture of the project. + +Typical examples include: + +* Selecting a new technology +* Introducing or replacing an architectural pattern +* Changing the public API +* Introducing a new rendering strategy +* Changing accessibility principles +* Modifying the repository structure +* Changing release or governance processes + +Small implementation details, bug fixes, refactorings, or coding style decisions do **not** require an ADR. + +--- + +## ADR Lifecycle + +Every ADR has one of the following statuses: + +| Status | Description | +| ---------- | ------------------------------------------------------- | +| Proposed | The decision is under discussion. | +| Accepted | The decision has been approved and adopted. | +| Deprecated | The decision is no longer recommended but still exists. | +| Superseded | The decision has been replaced by another ADR. | +| Discarded | The proposal was rejected. | + +Only **Accepted** ADRs represent the current architecture. + +--- + +## ADR Structure + +Each ADR follows the same structure. + +```text +Title + +Status + +Context + +Decision Drivers + +Considered Alternatives + +Decision + +Rationale + +Consequences + Positive + Negative + +Related TOGAF Phases + +References +``` + +This structure ensures that every ADR answers the following questions: + +* **What** decision was made? +* **Why** was the decision necessary? +* **When** was it made? +* **Who** approved the decision? +* **What** are the expected consequences? + +--- + +## Naming Convention + +ADRs use sequential numbering. + +Examples: + +```text +0001-repository-structure.md +0002-technology-stack.md +0003-svg-rendering.md +``` + +The number is never reused. + +If an ADR becomes obsolete, its status changes instead of deleting the document. + +--- + +## Decision Process + +Architectural decisions follow the governance model defined in **Implementation Governance (Phase G)**. + +```text +Proposal + ↓ +Architecture Discussion + ↓ +Architecture Review + ↓ +Maintainer Decision + ↓ +ADR Update + ↓ +Implementation +``` + +Community members are encouraged to participate in discussions. + +Final architectural decisions are made by the project maintainers. + +--- + +## Relationship to Source Code + +Source code is expected to reflect accepted ADRs. + +If an implementation no longer follows an accepted ADR, one of the following actions should occur: + +* Update the implementation to match the ADR. +* Replace the ADR with a new architectural decision. +* Deprecate or supersede the ADR. + +Architectural changes should always be documented before or together with the implementation. + +--- + +## References + +* TOGAF Architecture Development Method (ADM) +* LUNA Charts Architecture Wiki +* LUNA Charts Implementation Governance (Phase G) +* LUNA Charts Architecture Change Management (Phase H) diff --git a/docs/src/content/adr/template.md b/docs/src/content/adr/template.md new file mode 100644 index 0000000..bd7a837 --- /dev/null +++ b/docs/src/content/adr/template.md @@ -0,0 +1,117 @@ +# ADR-XXXX: Title + +* **Status:** Proposed +* **Date:** YYYY-MM-DD +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +Describe the background that led to this decision. + +Questions that should be answered: + +* What problem needs to be solved? +* Which architectural constraints exist? +* Which project goals influence the decision? +* Which stakeholders are affected? + +--- + +## Decision Drivers + +List the primary factors that influenced the decision. + +Typical examples: + +* Accessibility +* Performance +* Developer Experience +* Maintainability +* Framework Agnosticism +* Type Safety +* Simplicity +* Scalability + +--- + +## Considered Alternatives + +Document all relevant alternatives. + +| Alternative | Description | +| ----------- | ----------- | +| Option A | Description | +| Option B | Description | +| Option C | Description | + +Briefly explain why the alternatives were not selected. + +--- + +## Decision + +Describe the selected solution. + +This section should clearly answer: + +> What has been decided? + +--- + +## Rationale + +Explain why the selected solution best satisfies the decision drivers. + +This section should justify the decision from an architectural perspective. + +--- + +## Consequences + +### Positive + +Describe the expected benefits. + +Examples: + +* Improved maintainability +* Better accessibility +* Easier onboarding +* Reduced complexity + +### Negative + +Describe possible drawbacks. + +Examples: + +* Increased implementation effort +* Additional maintenance +* Performance trade-offs + +--- + +## Related TOGAF Phases + +List all architecture phases that influenced this decision. + +Examples: + +* Architecture Vision (Phase A) +* Technology Architecture (Phase D) +* Implementation Governance (Phase G) + +--- + +## References + +Provide references to related documentation. + +Examples: + +* Architecture Wiki +* Other ADRs +* External standards +* Specifications diff --git a/docs/src/content/architecture/.gitkeep b/docs/src/content/architecture/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/src/content/docs/guides/example.md b/docs/src/content/docs/guides/example.md new file mode 100644 index 0000000..ebd0f3b --- /dev/null +++ b/docs/src/content/docs/guides/example.md @@ -0,0 +1,11 @@ +--- +title: Example Guide +description: A guide in my new Starlight docs site. +--- + +Guides lead a user through a specific task they want to accomplish, often with a sequence of steps. +Writing a good guide requires thinking about what your users are trying to do. + +## Further reading + +- Read [about how-to guides](https://diataxis.fr/how-to-guides/) in the Diátaxis framework diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx new file mode 100644 index 0000000..e6ed51f --- /dev/null +++ b/docs/src/content/docs/index.mdx @@ -0,0 +1,40 @@ +--- +title: Welcome to Starlight +description: Get started building your docs site with Starlight. +template: splash # Remove or comment out this line to display the site sidebar on this page. +hero: + tagline: Congrats on setting up a new Starlight project! + image: + file: ../../assets/houston.webp + actions: + - text: Example Guide + link: /guides/example/ + icon: right-arrow + - text: Read the Starlight docs + link: https://starlight.astro.build + icon: external + variant: minimal +--- + +import { Card, CardGrid } from '@astrojs/starlight/components'; + +## Next steps + + + + Edit `src/content/docs/index.mdx` to see this page change. + + + Delete `template: splash` in `src/content/docs/index.mdx` to display a + sidebar on this page. + + + Add Markdown or MDX files to `src/content/docs` to create new pages. + + + Edit your `sidebar` and other config in `astro.config.mjs`. + + + Learn more in [the Starlight Docs](https://starlight.astro.build/). + + diff --git a/docs/src/content/docs/reference/example.md b/docs/src/content/docs/reference/example.md new file mode 100644 index 0000000..0224f09 --- /dev/null +++ b/docs/src/content/docs/reference/example.md @@ -0,0 +1,11 @@ +--- +title: Example Reference +description: A reference page in my new Starlight docs site. +--- + +Reference pages are ideal for outlining how things work in terse and clear terms. +Less concerned with telling a story or addressing a specific use case, they should give a comprehensive outline of what you're documenting. + +## Further reading + +- Read [about reference](https://diataxis.fr/reference/) in the Diátaxis framework diff --git a/docs/tsconfig.json b/docs/tsconfig.json new file mode 100644 index 0000000..8bf91d3 --- /dev/null +++ b/docs/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"] +} -- 2.54.0 From 6221e4c2deb624996a552ee9b4bfb9c29dfbeaa7 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 15:23:23 +0200 Subject: [PATCH 21/88] Removed unused image --- docs/src/assets/houston.webp | Bin 98506 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/src/assets/houston.webp diff --git a/docs/src/assets/houston.webp b/docs/src/assets/houston.webp deleted file mode 100644 index 930c164974ad8eb528878f15a98016249b8cf546..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98506 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 b6~t;_wBcJ3AWgga7~Sz~izoKbpAY~5r|m$8 -- 2.54.0 From 0071faa18a189f1391f30c0f0efd16f1d23123ef Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:04:18 +0200 Subject: [PATCH 22/88] Changed favicon --- docs/public/favicon.png | Bin 0 -> 67851 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/public/favicon.png diff --git a/docs/public/favicon.png b/docs/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..1e8e30b6855ad483f9565697d29520db3b27e068 GIT binary patch literal 67851 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�jON(^DzDEQKn$Al^{c0U{5x*(TQ{ zs~$)uT$iO1MEQM35wuX#RgC~y<`|%G4OceJ0H#^T+jDkxS{U~4MQ&&VxJnN_%@4ho zsbV4;=&<&h-ei7xWU#LV)2S!%Qb^_3s3~`kv^X~7_^kH=*~0!-5IdLmgdH5*<*+ioL;N5bEf}i*J17L}I@#9~+hh#Ngzr^kI zdasT55&dW59Dmu+jdR`GM`nb%N>+?QMKigNB{S^bI3BYD{glg_own@$OqpznSx-VGQ611slh;kGjoDCB$?ugx^-;pF0C0l?A&uLUF8aHnDvW_2J> zuO{G%7>35Gd35Z_qz9(hAKVBA!H|4FD~$I_z-&>%^W=$unWQAr|A-X-H2zik`|G1! z)7$XuSTZgESkH~}3kzW3ev))Gx8su#WMH#G?>2V*N=L_?=T(J|uPp)CFX$T>9Q&E& zel3>Bj!{7IH8>;bP7e<@2cE^z(UBsXf`5m+EM~1~<`0_{jLzyba)v5Wv-Rd49fk~v zrwSt^Q0w%;QmjLD^m2vNv{-L;{P5m3ql-QPdcIm`luOTxJ zkZ%)$=ckr;k{%;f)zu+7Md}BkB5`SVhMtmNkZ39xkIV}Y-PVdWSjd6g?~dx>clI6i zfp-(jQ&k;&+CfYL7X+qZ9|l#u>fQDJkylxy-*#YNAl>sGwSwq{*=n-`Mo(`dxxZWKu6axRb;kDdVQBKjETWB!=YlyO{oBhy zf^V}aYs<3eLrQ?TGO8LHmJSXjwnGuKx%V}JOua@`28X`DmwqH|KM}J7xq+~V2$07` zBay65PEI-FcCQ?kcS}oDirJJx0Mj~2z_I3j8y&SEe2A|BG6YaAk85=K0;3?D03g}E zIvHO4%G~cVOwfdZ`s3ohV?Oe)H)8GEEf0{7JX*=1d=lSfh3-V<;xTiJ3AuQ(u3yWP zLPcM6D_+0Fu})xl+=933G$7PIj7Yi1#DbLpDU;yFRZ+TDB^NBhfl>Q;Wo+K=jPUId zm*MC?WQ4(3;pExD-cjBXq1`qr00<)GWb9D^xGW*2-6tjU^k{P}Hi_@RcfA)=RZY#e zr9Kc|frr(t5E}TF{_eN*E_Lb{s~KS82ViKQ+vEORM0c4{LuGq=EPzz9&`{AykcgD5 ztUf@E8jv5X^5y7~XVfq9SAaCo3bnbpsXQ<%^hz|*)0XtY&bweiT5(??e;j(hx^iE2 z|C#<;H3R38xrzW_Tbr7M)EIIZ@A69UWTocS`9($l>;>*7xB ze*YC5sM%}A)t4)nBkO*1f#dStXV5}y9@U-HjN(3^PUy!kIfYP7tm4;t8Y(HVs&cBh zsUEw>mNB{p%Rr$7*zCZm%=td5Cz#V|F^Kk`>D%zy$#w0q0PU&jSWYR*KkGCo1RkENdt(b?@gv5=SA*PF|t1Fa|u6!F$}4dROF zp+HmZhXrpNr=OHnQLn!=F>5jyYj6;XPl8ZWt#LsMjYWef$%oNn=f51MB z3sXDq_@rIKElIgfJ+mDqYLnn*IL)vz8j8+=38KTrrcm8)b;Bfzj@a*l+60{^3!6v5 zng#YK%3w_>N{lSS4|F@Th=p z@(RDXpua{JERPrri0E;nZyepE@Y&X)T4q+}0Ek)_%rUym2*V&RLq$~OU~<#<$C;uV z^6_Mr+25z8UVUHgS7Sm46tyO)@W7~-XBYdUurSl-H9KyMc-UVT4usV+#iu7T?Z|{1 zzUpvQl;=@(xVB{Hi~2NZVrQ=gu@Z*YC4 zu>5gK`-t{$QKk7S@#uwo}xEm~Ow;yIrZ+sBw{=uCO^~2&oTL zQvk|(fw!~Lyo^v^zq zc;Nyi9Vr}5PpX1|sQpWc*_*2E%Swl<>%qT8Cy~Wr0YY&p_!*AErMOMWQ8s4@M`|Z%5X$1 zJQ<>lsbf(jgdlqi3%_b?-8TnFX(R$^@IG@oJFJm_fhylmcCE|e2=>7i8R58tg@eynos%G-yw9pEj+1L4Oy;Ue|Kp5k-sILRo=$qz` zPi^U+r?J9`$fC40u@#?ZqvqXUPd{r$4RTzqPCq4vG=?VcLYsx(nx_T2xm8*uks4a@ z_W{V$|98N}u&sw>qyuvk3y#grk5k^>|Ei=njQ7W`cUi)Lk*E}VGe7wP-{}`rK0W>_ zsIs3#i8=b(*a0Zf78GspL5ZXJxwyFC+L3@65e`0nsCHx?%&CMV%k#5gekM6^6Qd_v z#q*ueF!Ub%lg$wPaB(gu!Cj4wt)g#Y60S*QkbLeFdq{=|w+0#Wapu-R5zuiE^AyXI zIw&KR?|66bKRzB4(GREFbUi=Zhz&^ze zs=X!}BICsll>@==J<+=j~pU2+9|eKpYnF)Xl-`_hHUqkaO1McIp7$~_ka>{%oH&gSe z^O?=>!&KJ1bUZScgNksHVRezp&tCXNTGR_Kc~jvd*;A-!ATpSm0Ygz(A7oLMpI7`Bm^{ocJ5@5R?= zeo-Omsy&~kH4OQ^Nc-dHD?~-YuoKwea<3y-{~d4G38JmupkaV>X(pO*fclF>|H-a6 z%)BkyfWBj>%)-}`)PCmd=u=g}iFXXWZO3dC!zTy3JkHKUVB{Hvtf2v7H7tZE{L``d z8^0}xdR7YbmHpkC5C#PdP+1xIb6`&i%5Z&CK!oX{)^g@rn}gDm3BS_90lO)AgXAo! za{onTj;i{4-Om}mh}`R;pnKba{ZOhH7L&Qh?KA+mK0mW*Ey|V2k%{AT|Ls+0KJZkS zV4o+WRpCz%6$DURiEclxq?1tsi>Uj0SWuSHA|M7xfM%+r169$XA^k~rEKP@r;M~7| zdEm9g<(@%LN?$H0Z45~r&WVhOO$egawbxsxGOLMID?|d8I5Zkkp5V}7v;tVCC>PKBTC)c+vxS`d%%bP_YOlq6kKi`^`vi0(sd5EQs!}pIJZ}E#o z8&}{xIJ(`f=E2BeRVLW$Q11l)gEYAU~}gSRduBw~5G0@|!i8m!$DsHBy{g(bsj zCD~P+$nL)RYcS=RC!~Y~o?sS3GDehFXKwYPK$w@q{H@YN{diL-MIRmk!>eFBupPMU z&2U<@r91u0w8G{7r-*rsOmg6V@r#Hw9BF5^8w@NPEgd?qCIT9a)XH4Ms{c)Q zT*e78&i|2+l}#+~ZhjWh)8%O**2mP0w;%ACik|**mA!UgTsv3?WeOl;KeK#d?*@{c zo#2eUO0~(U0b`h3*80o=<=@&*lDwb+oTr=6Ojtdb+lEGijvAen%6hz*!kpb61*yq^ zcpfUpfjyCghKjqUAGfd3Y^BBjIF`Q!i!F=?Ho| z65yPcF5O)|k_Y=c?^tm)Wt*bD;&SS9G$>I9s{8x*G&`X4hy#=n;3QzO`1lbbeYPfa z6e*U1-%5*1oX3lKIG^!fc-{Y(P?YMgPi>+Br4dd~Gr-dzD;T40GK`=QX37E7pC?W@ zt4lG93s4<|rI=-K8gBhLCi(s;~ zy~m&2-?X0zX1!nMnn1`7LP}G?1WW2e@xC)I?u)1l6Yrjc0rV@@j!w>4eXfjw+1Hz= z%S$F0R7E%Fk{6hakB*S}13!1Z{g1l9mjE1>?!pN32MVUs(Jl557r|fQwSTvB zhkowvI-pW$sH=x~9Hyd=G@1Seij)XITu4mqn4W`pu7s)P^eo~KhvcL+G_k1YcnFCt z%I`}Pg9z0`RTr8FW2)f+X|mRmn9)#B)Ayy;6#YH>jxFka$koTDz#Ytuj6gCJb4ce#W!LSrLy2LIoW%3_o z%|L?cb3U#2uJG{7HamvghaMVNwECwv=)UHmPFETJfA%J#FO|YFe*<3}yTXWU zBoRUYTbahF*0Y(<(FUHpide6jWOuus!mJf{b}DbsM6img#anTprBPDFpiLmWrIfj! zu%5=6s{j@}m_Rh=R)Yy*7afIVP`_~!gdO0n%;v6rw4Ja+X5At?I7iIZj0V88bQz^V3 zBnN!?XfFXR#!(z@_zo?YZj-S8shI{s>dN-Xbx1|TgRaY zv~8T8&``x1v{%UdS&TudC4n0(?OvEhIiY@8tZ${&NhDQ(_!3)@ik39cFn zW_V>{EuPs=udmT)o$8Ei`WIwtXdB1<^uTn02A3ts_M(wO)3zeV=j|q2z(>9x@GlMn zDtl|dLft?znkc9uH_W78v|_!4@tC$deJ2CQ{Gd8Vq4mw`_p6l(5hMqwjimlPY2HW( zK$ntgF4_qK^sJUrjGv@Mmy#BV{+l;vhW0IGvug%u0~k3_s}|IxhR<_o5XCkBG)n#@ z1X>P9qXnNbrY6~#HQ2)0gF#I>!^qjHs~WMrk`GTi&{CBs1G5vcd4+@urQ z%=3^3+bmx+jb~Q{t{94wwd>Vu!lBXpB=TS+32>9U-CcVwHhVgn3gX$}NG1)6wna#o(7Qo zCsBz2Qg;Z224k%NE_9C@1xrjsfTUN=yp9c0bn~JNqx`9r-W2S9P{vgCm&JS1MoQ5( zfjl+cB*RrU40 zk;3xk`=pCN#tc1tVD6dk2@Al0#R1Q?@@qekP8`2+#hZ4^`*5-A@l1KOw6W^%&E|MK z$o_Ge23fp_C)>!{=Id>OAEwVM1&rhJA9*m)+AIqhzZThTEx z?cHsCzkgfFhxAkthw<5|0zNFQ4yRu)_BOb zD|Tk%#pifsS=dHdDVBz ze?B{VNeMlCMY5IJ!YQH7AX_U?n#Ps$0^M*+q4~MQb1n7_aJt;V{Z9wl#bsJ-3y>TJ zklp}S&=Y`7R>;~Wkn=e}T|My_q)UrhWkpFDX&>WwGj-So}@w&cD- z)${S(HR5H(tDftb{Q$TCvopq)By}j z+(=3*EOuqUFx6AUl~ZGX1Dtmg0~Cy!3i_f7=hdgM=sME6z?>IG_}Z`KqGC}UC+Mt2 zHzYS+JnWfY*9O=JKBP3NSBbc~={ReSs49^aA&jsFnEX=XNn5|&&xhDBC-TaMbJ zs<{F#n^0_G!&|cLH6V#gqXMfyhsw0wZ%P28qtlkRNmz+mG|bHGYg$cSpuJtP0E2*` z0#Xbjsy}NN069b1z!8K^=(m3DSmk`Q0c3;-;1*<#$Yd@(APfO>x#A4&qm%EvKXg=$ z?IC?Do@|<=v}Rp0%ho}_U=(oGQfc{5P<8E)p}BT$N$qkDtBliWZ#|Bo)s&aNYvV(< zxF^;Z9^;aa(h_9S@0Q$RQF#CfRPX*i*RszBE^xsw%=*kcn53w;&6*8a_3|1wpQ*Q| zJ;L)&ej!hqg5yRYPSNP_wi;C4d!M!lEAB5ngzenFgLD-7yfF`yUE_a@*%uR#JLAD()U(+*Y^ z>*siVVGR4jQ3Qf_b;-Uz%cuXI`qXyJNw{s)Rys!)-3*`?0cs0SzAm`tPdmIml+fcG ztDrkGi5ROHHI5{I`nbKt0Y4Yct=TI7s^&@D$+sh}yn@iUDquq9tLp;`Ae&kbz<$m^ zo^|>C`**B`t&ux`wYRRqGVPHHa&h7Lw-i`sW5lN&%b#BtIu(m0Q5)mEsXO#5K!tP} zXB>3g13eVMW^o6=1Y=Fj%N$vLm6>?e9B)~T?H2@=mGh7VgE){E=LUu)*xDllw= zH(djj1rc1i;b6zv!5RoaJG7@Ec@SEs(BAR#Xnpu z7BjMvNr!c+R<=qk7jOYBog*{kE2qH=A zq?6T4DP*{|!-)xWO0%Q^T39$+CNbvg(HhsffjS$2-1f*bE4|px#LsvjU3F&BYrwsO z_Lsj$`PaRA!B3EQI0U1AC=(U#4l83wf)Zh|s-Ot$;(U?*Lx=ZDR<*-YMd{vHz(k_2 zErjORAd&VHG}Rl>nZ3cqG&^O_(3a z7(~F+Xqsp;>MmDex7pL47S-3cWjv0X;fJwEYdl3$Ke66oYLyQDp=2dAB8F|Qydq` zDr(K}%6l)|tM&G!zt7?*(_%iz%h+uM7-zR?P&d{wIlUtquZ!LebiKsI0lgiQF{-s1 zcXn!>zF0{3be-pKUzb+FGHg(BjROB6VfeQ)d_{shnU6^)W5TaFv1NY4f8-9*lsG+) zf((eT&Aqb+wPQ3lj(^(Kl|5O@vZV3%0xEw%P(FRE?me;QVEpP~4Fco{eUOGL1E8^{ zq5Yiu4M5|U>3&PFD4S*aaG87KTPF$bx}$Lg2DVyAjy3umGZi36u_UYIT2>hgUKCC4 zn8&O)?V;M7AJuRH6LjM>EFnvUU_H~Cs;b~>F8`5j0GI>wK3i~XK`Bcib%4foI>{5H z@Rtm0dEseaKE!jL-jLHyOYUbiyR$=Q#vf()KZGNB24N6wOP!B|a7%>e2XvWdy+XvI zUIrZDf@;TemT_x97i?fYapYX{4NOf3|1S-Jho|!+$Umr?bpuR;BP*Tt_jXt$~ugT!pn@jt+H>rRFStXKNyPChxQzDKRe88kC^#a~$lQ3QpO z##sGA1YyP7n&<-u*W~2n!{_c?VC0gdTJ+1{`8(OKb^5FzW-QewmT0`#G6+opkvivY zx@ti~=koHHAE2}I{*VBlVif<~-5Kr2TI&7Pw)^fB2SB3+ZONpngp1dBvD*!D*DSg; zxNr2~KAs~Wqc{#?-xu}d%9L2V+Xm%oFB$E8x$m3ZD0rlI&`ALl5vcV}#G;Ld2`~J9 zjjfkL0;NWLk|J_aTp`C~Oj1H(uixe$Revn)qX9eW*I);jon1>~X@#qWM-8ssVBzOZ z7AZ*G2lwL!REHe(^Bw~&u~81}xpxLh5An1zo*#TB-h0h8=To!usOdDh zm^FR4*c7A3qe%SYBT~(!VKXd`(G6q?A{z8^1esp^EaCbP6$_`g$SNusIqxTb$#%@$ z2WLoSW+0ZIJN8X|dD~v{Isu6@XoABXG+Ob>t($5)N2n!(h7v1K-4FrnD ztL6R0w$L>-Uo1+os{b%iIXVBNT9NrqQ3P5ZSw~l?7^(jDiO^EYzoV|_n8;J`n#etX z9!v%!A);d1&(=S~`|<4e0q)ag#56p+*(dvTw2yBVo4YOObbFL>)Sdh7hW&hW{*lQ{ z@$taRGAC!}5cfE6Yl7BqBjv@b?gf|5eSg=bl>@{CL$zNT7uyvQ}zuvA!O`@6*I zY{WHkoqIeU;>$*>3bG}~4S^QoM~PKWOMOCOoBwU&1NDnPKgngk{E|zx3dqCCK!E_}f@Q;RC!9Vp5T|ld^yhS6JWCuv1PpxO?uY_CHvSk;c&1^}w~a7vQ$1oXSRP{3 z_&b1MJRWulAOZ^tWWv865Tv1XVe;_tkq&x3VlHxi$Ab?$L@?r%3{CckSwu2*eQfC4%crV{!aM$=?&WAo?M=kaj=yV(V@_uVqU z(#f!TSC5l}_s}%TD=B#coim>sAm|1KeNyWY^WQRP`A_D~t7qYOAX|%ni zovS%>-Ieyu_oH?!WAcAovHR#Vz!m$G0+|X4TC6)BeVB$r%ZLX0pD+kOvVqOSrQ@2V z<9gU-9SjI0PJ$b(Sg$4C_x?9CFsNsWn9uR+&HHHFQci1x7ka6Gkgh7<)gzXdcZUuf zNK+tCNd+vHaO_Ii#K>T*IXU%kX;}0hmz0z^)e4}Fkvw?da_7UrXj_FOK^Qz=u(CPk zE3)b^M?P*g2C%K#{AQJ{ASh>rr@$wt?R`x0;vrs#ScTr%649Aq-YMr$I1}chuE;RG z7*OD|)uw|L)g957D}gJjeo$0b8nUp*+bIEz6KJ(JwlQNSB))?|=vdBcUg6CE&3UtQ zO-V_4`WHSH9>j|_A}W>zG~*v{i`Sk$eR`jU`=JbzKB1>@nlzPk_z(;6$4ladXCA_q zAN{8dL*}-SIIAXuxg0JJ)})v--GL?1eCS0IQ#a6w09hDwrc_{ub~eGX3xb4*`=u## z2#g1DV4>HV#>1J$W0Ry*mMF)tpNRUQWYu+0mNr~n2AxpckN zaLc@GpXFsi``EcDzCef0c>s7LtN=Y#%Wfv-FwW-LX0KwdDtB!ehn{?f>(cVM8! z#5=R<$#J>?3PSF_r#%uOBM6vK4o zF~anu{oMFd5WDF%iZ=o*rUJoBxg4rM)OMqmY`Ky?%n}A68AC$=N^Cdd0jU0qSsp2= z_&VK}#?FGKzMG>DvQ)G9K3^y`y4T`rvTei>v|H~t-eZp>TLy(eIwtuCmPwO==UadR zw>s^h>l36WbQxetST)#B5&@NXlhwJ)Fl`umf})+iyP;jIS-$H)w1HsRmj2iOvKU89 zrlCw#Csj+w>Z`*U#!pK;k7l%|!Y?*`9t)eq{n_N>MGBJich09L1msI5%XsELe-ImW z2lc{qy*sT;72F^FFFHTj_Ai}S?x8Sy*3EJCd=;9xS#si0aoe!>YOnB zx5GU^`RG2mq==OcH+(tJ%^l~tUO0~%CPLMSWWR>jfX8LASEFxa?Fg))2C3KXJ6IXL zpVdDS3dSNHjY!Av0= z7nWBaM9Az78*_A(I6ou0+8Mng4%qezG=13PzWeIN=a=wRMglcbe7Pk+H9j6M1cJ(n z#f15#0pq<1`H}@`6uIG%LfjRMtb9FkYZ<5+0oG$=C?~&L>Kvx83Bzc+n0NT&A?EM@ z+9Y~YykkS0ZC>+Wcm0HL+55gc&`H555}G$whqBQn&DiVCEn%}44%e&k!j_crN<7>? zG&sbFm3E8yVAs^}b9MC_cd`((O9>dp*4EbDhB=mvx9ya$b68dZ1z|MQ78S0Y*RWiN zU5UqSeEvWnM_WkXK_*-dnAdZ=i6SYdce=E$5wMMpGmk7$ceEFujmx}4TAVdz<*VR) z784X^F=_7QOc*GIKN5L@bYj^@C1a)T3Z!N_?;5Ii4Zc+u zAle5RCM(>c?=R)o@<@EI%e!tRk#lv;p48ID^EwbcrL8` zLPf|WeyX0?r6_fy^>|2EGr?$kJFitzrhpL)$seSx=THT46)=nl^b8PQc*oOmx5@qB zM&xHE8>r#JkpZ1Q~c1mPE04EdVzD2y6zqzSNksZ>VW(+#2Z`VRr)-}%l0p+iU$V0bg4r2*F3mfYLTs%&?B<(F#2$ddoOiA?=nF7sL}LAwOi{U zwX_Ku*JzP**mu(N?4_ZeE{(4p3+~#VkgXw^>H9e{a>0Xa$clp}z#}Av^(5QZ$sZGw zPH@cm?U?gsBMK|eRh;yG6t1*)GhWqOvQp&?q;o#%^WJ;0rFGZE%5o~B_K{v>58vBX zb6L0>DUTJ^V}Ca&dBF?jGesWB034VybV$xij2cw8FL@zoB|np9Os?ZO%)e3K*m({K{;ji>9sqla3?O&Z%a8|mmNj$ z6rbU@hR6}^G*6xkfVkD89&BziAO-v2gO7vb?StPXghpVMNr#c!02{Z<8~@#O_A~kF zKJfl| z$QqX6;QHEHg4YHUR_jWC1Xc4e`oX>fME{zQlGoV9^0OtqM^SEFE~{Ko^eu0odaxlX zLpWNc9f`-k1FP%BgC^RcQ|DKQ2mb<~;{-H5*_J>Y?RD_e%-WjN&>{1gFR9Il1Rjih ze!uY&g>#5dzQiepCMrZ52@c%#$SS`f@{}bS>gx|Ty$?o#n>P8M4MD5vi7I5VcYk*- z9;wbLHE_^n2vjU3CC}VR|4Hm|@Y7YXZ>){HO|=4waichQz^Km(YqB{7Mqco7@W!Dj zoqnyVP!$lfC&mKw78|nu@cWH&PPcpW%vocdE|7cxN<~d`GvE5&Q>mz&+w1E7ekk~8&6`lU z94VsEc3aWOoC&du7?ejDpV%U_h2bX}H9e`tgY(#%{3Y!PT--h$&MtIndWfF8LrU6;*vd+)3%u z0m|AG*|(~fk>r&E+VWQw=<)#UeJV8KH0^H*&Ob`ARZ-A&}&{qhvpf?SL?2EN>8 zYwN5o*>6LmCtg1|Z54B3I-VfXw7*;qq9}G8SWl)Sl{=52qM^IUV+H=Y7-k zdx@)R|?=JuG3Yt?n|SOAlH%IkoA}MOv>-XioK!%<+grzeG1i1{R;D{h~I__;-70!q?qKVyQlg*as47|Q|mX)?Lv21K?i zE!<#$P$@b}S|Wrx1GO9NNnT=D;dtA-cP%zIT1zG-hb`5obMbezv|c$zU&|e=-?g~t z?YmTc*#S!&s{Aj1-7c&gUfu>MiO5&444lbfuUsAe6TKTVeONeFh+*PnSl?%~bv6eR zUEr{2eCQX&$3cn=wTZ`VP6h!1j4AZfo)yWTK0WDFhQL71&iBanmCZy0UL6ZFpWRjui7ztMUz&IT;{`T?ke6D#rkRPK z$H!22^0hfibN4_SGfLRv%2%>+A!BwnT`M5;*Q>0qW*p)J_uD%nXB!2|^yjU!deu$K zOR0sw9P=mtN;@FI$hYFNx-1W`*a{^=q0A!uYKx}g%1mAiSY1ylcI}O3LHfVS$0NL~iS2GQ7W{DGq!HvOC7_)vGdi6w#6stH#)KsTI4|Ao`ne%l(JKTintLef28s zI=((NQXwjPY&^JtkE5ZXp305G+3De%Ya#t^W_Ey=s#;R#!-L=?g_U&WNIuK5dL-FA z;jei{-IZ9YtOhRH*Ot+TTJR|u7fpStk5aN>7>~VKu7u3YqmLzbVIQXa{=GgjEOj+= z9?NL;+ak`t@7(`Zj&&)O4Rt4aVr{%8NK5)D=dmg=9rW}X#$@{1w~J?h!|L>(9EjGz zqz7&R>Ve6^aaa0~u?=B}4*zRr)DD;NyH0;I$IO$7buBGf&%k$7aASxZL=;&vn? z(!R^;5LJmkjL7=@P{UyXF~90rq#a(76(%b?)Idhm(pdDH)#P&IaG27PqF1=oi@LLq z#HjVqJ@?;Zbzw=Ua1OfgYvXb(ZN0GsIuA3L5%Cs{od5;2qTI7od2*^+2ZrG?{QKlv zP;mGDE6%XR^pC}5oi1R=PyC3we1A~VC90@JY%9dlB^n9Ag3m3t*2w9TdaoZV9)||r ze^Q!SclN_rF;f}#(PZEFq3$&lT;udkK-wdd!k77pvzCrZ9yHns+qm-cl2Z;9F=7*L zpMisBKE3>VYesp!ttOvS>;0)irC&WgA(-Q~2r8i=LAF81XeZjz1ktVR6+Gq~78Mdj zdM}!q1*)GWD^dkfPHpCx`@T#rm4;!znT9n)@extX_J*VB>xH5*B7_TwIzkamf}rkN z+k=(~3E{zB|6U~Du=ae7C4bt={7Pv!HU`n_}nDs2V z@K7DJA`}rD1mcck%7-iw8%AYuxLADW-;30E(vm((W^(g6X^h|>*=C3BfBKKzAMcd^ zat}CE1G_LV4{mN+XpL-mDj#zciGji^iD_A1+QCUk-~P>FqZswKa=vin3B9QK=7V=C ziFvUS>kuOG7U2m=c$;Y}-O62&Nn+4&JSBq?F&CMBJ_l+HGumSoVyvPO{}0SCsN2@h zCl14jh`B&eq~iWZ|_VKrioS6i^85wbDSrR@Im-|#KJtMPrfct|*&0i70 zT<@;jFzDOTNw*e6!rh&mdbjAtmr~$ImU4Yf3H7=6!6CPACO z5SxZ3uSKU!m{Y!5uF8t~gAaY1_%QI{1?_v608pUNxbX7=sug=YI|pWBODHV|$l=l#7xv%HoBd+q>`~Tj-7P|;MRU>j|17Sd{(Oha=8iFbvsTSLlKw4G@CBU!o!z`{e$Ve3 z0xVn3sYJEX_t;1ZJAJSuyOQ6&hxtBEmD`yaeZixG>1=mbjNhOy(sp56L$aB`x$ z&vV=WUGwGWrX%X&DFvTWZAUF)8Hqq%aG?H~{0DNy8X3HFmWzo5?E(%I5sf@$O=H&n4cqY7;ed@R# z(J(9jEz!)2&tpwg1t|C{6YI&>7bS%wpM8QBJ*tnN>W{=B2e~Z%6deS(wY{YZYya=x zg&K06hq1f+tYOz}lYeDY+J{5v7%Xte$Sbl@mjp1vlcbqRywiW(%EcGiUAq#*{}s_R zOcJ{4XznDb;|Q)Zp#sw2=)AuJk3bb83tJK+WT7ZZU+m=kFdNI?l$&! zM=-Q33@9pwaEb>30sbW(??)q@dbB)Z0KI@F`V}<`963zJAw)(t_BgHcAX`YGv1ern ze2il#be=Bx@SAdP6$}wn8lT@iql2Ol<@w;q3O*|J*y!?+P^89W%9Lk*R1)t=NN>A#qfaY7QpK!l>Y{YalF z$f#D7ldx?POou=e@>oMFiIXbLV>}1_Zapt6RFT~-dAF$)k+~^O^h{pg+=zjU8BPyTadArG zH%be%W4eoc={PO;5Hxv&qK5CP1&#Od+QlRg3!;mtNL)MFEM!6*;_$wCW904*xicl7lt?q#q0<@}8SyaxY9T#{kz4CdfGCcL zWsTsWT)QUEB~*s5I0#UPfK{5BBrn^wKS9>npPAsxsIY>JKl^yzPN}0;>>sdvvNLjI z(ltwbO{4gREZU?P1}q4)ip^WIZtoe;Rkf8iG3Lp2es)Pd-GeX`)plck-&$QR3BUyv z^!*|DdeLbCzTQA-<*gIr?YjnZlLx|aRZ}PO+GkIPhlkAtId$omHmK>13=CvI`OPCi zc$5w3wKfmhtK~9vy$oq+h@F47_WiW6cmaGL=Y=m?P0P#6m$1{rs+0%W8PsU+f*yp{(+~biG}i1w!oV=3y=D|O=hFFD)R2wnJ3pI>xkP>{$sQf`>41Ds~@UZr@UkZyZ z4D0HNdV140?*?ki4*3eU3UwwIkq+4;m-0g0;~E+S>lgOt-PJWTX4|IW+6cVgXAB)c zX#tGB`|Hy0%GeJ9;HlFH)uTns*b9HWZ|9%Tw|o9(V$Xrvs#qNZT%{fSAv$A9`;C)P z%@c`*)ZQNA{$I32D+Hbp&C)VqVv>P%11=}j%5^exJ$52zrSKjwFah`asGXa=L1{6_ z8W?t3nxl~lXw!Gih4T%3ipkgBa`E&Pl`BGkP&&KGagt8RNjQcm>>C#bO-N>C*WDB1 zx+PLx-SX*v>23RCj>>r_b|D?dwBNNs`>&5b?3CCL;9swmv8sq|$?cJF%flEB4$YgE z{Y+RlKVUHM@F}`nLEP4Q!VSMAxgQMOuofvz5`T4BxnL`rd8Db4;b^G5&RcS_Kd_2X zV4Y)E^ES@b z4p65zrQmG z1xk@{zHG>4orr;jIFMqqw`Vf^g*ViYeB6a0r1AU#Z&v7JTjMZHS{G~S6>SXjn98TI z4>~;g6HkuE$RJ2Nm1f3KI&2wyq80)6ljxJrFCwcOaq;xY%Q9mbvU;a;VNqaj6{*`Q zeNmYHLUO&AM3=#CY1Hi(CER2IdXyWmAFoFKs-w@<)*lCKPsXN40n^T@H2Dci5HOjW z{>6Np7?u>qdWQ4M*}xh>y-dwotZW>mSz(-!j{=@K~t+Y^TLXn*Kp`d+I23r3BcF%wG6?xE<~Iqvkr{FNQJ zTP}HfAHezGVJ7W#Q9|w%1-hIrpQ7t>I?|O3be|*~)v?|~(ZhPBp9g9n?(NY@{Kzf# zaqoo6uNVU#KR7PPW*idf!&{BV_~X0hbVF~X#}>E9!CQXXS^x2~4~hzF9{l?>gQfpr z(z{VxrDSJIeBFS3#vc_9YxiIq1kE-mcag}#U_mq3=bPf_@>GV>XG1Hxyd1c|p2sbr zex~O)a}>;UNyp9!+aFmJS#Ehd6e(x}O5GCHouU)FJbQSR+N2Q)Jj~@4)m>C%d(hPf z?Mc*vU$)Y$ykfuqwpbyEzjTioHJtnFVgC?0B!gV~^esrD{NPRpTAAQk(?I{RRAli@ zaryiUPj2mAwNC0 z?)lX3vK17{0^x5_QITpBi}TMBAs~+$*KZ<54=1>s)qX>J^T}r~`X@RnWh*$xMi5dt%@< z1I=7F`KhR#^W=IXf;4M5NY0UUhy{on&wzbK*e=1J)K2wk2g$Fgc5VhSMC#Um*jzwq4LbVnYHK*V|L6Q_JH*;ui(I!JU@{fghTp zMPAU8o#xO`jk{uxyC(bE@B%dE=Dq`eHvH)r&&MCk!?dJDoH$l3)rhNLvaYx;)KdAn zdGWT@WUDG4OXTFQJmVoNZEO#{Nlw6ExlcIoddV!fNp=8ffK?97Y!Lae_S=u8g0<#g@W;=%pc|APtC_xEj8s?wECUWJ2;RJNpJvh=6LE5=tKt*G8mJH_1Lb|K3IsZ1i`h+Eu>SZHA_^c=?b_}aB@~U#W_79?l zwLzMe{xbc>>c&{vB&J6&I78;;bBNfd>Z&SwWkOQ}A>*aL9i3p$&%Or3fL$;-M6gTu z9SjkkJ8l1|*H~}n+b1KPfjq-SY93(CFfix_9ihl}Lw0KnGab(l!*rpe#naIZBHG)* z7aJM0%JX@>z}(=-ZZjYrzjj2Ew%bT0ujRGN@;M!%_78{`&) zWquAM2M0DIuM{!ftG7nlNZnr3#=G2&&67p09<7d?M6f`+F=7;Biv{J)6LN|fA_JxS zdO6GU^0zv&)6%4qm;&g(<&Y>p&UN!Q0!7kKCg_lY+ow2GysUx>%!~M_B(_A1=fhpFUw} zb;H2J7t5j{SECF2j!u{Ed^+RiJk4vfFGB@C7y7brwEL=hyW)-F{egLxGwuX6f%v;K zC}3agEn%#vB{+IoHx`J@?9!^XoS{faShiRLgv9dU7y2tN3lm>1JvmOmcY`Al1~CNj zy}w8x$t592OoB5Ue(ff5FV$4Ja_!Xq@p;33aOf?EH+$ss7lr(eM7nw;B5JOu1F@^C zulo?Q`6dT-99&aj(Ac_($FI%tr~C(|eb+~ZD!S{%{GK-wp98FqJfW$MLyNdyNSpK& z8=YyS;R7LzPHoaGU~*hF)9H_dZMEf=xD^#>_jBP!=L}r&1o*zb%jS6YsL8k|m0^?IGfoCuku|n>G%ZUs%lp9<`+<8iXJ?knxH5u@(J13<^3zF(kTMqYa?Q zxtf!TZngzy(Yftrr(!HUsFtbY{1!z|kABqMl!S!WBey2wF(?Rl6j#PX!kfj_gI}&J z28G2n+Y#Ja90*r7#GGP#$l1C^Q5M#xefz#TpMr9L2y9pj`wVJ28Y9MnHsG5(IU&5c zcTVtPk?sO1$TqmP^0|crK$Le}FnWi7JoN;$FCRPaNKCJFPNONZiRX<8@UOS(uk8x% zCK+}hu+^S$Y#>yU*Gfa#_3g^q=|$TIW5&v%Y;u!;LX2=sNzO42JjKp|rRaODAH>A6 zM;!^SU1%3AF-l+5=TO}q5zvW0!kYAY%=9A!ja3jX)JVzB?r`<*@HS3qj6wMWLQv;} zr4;O&CXo?>OaQE}iLfCbs!1&G*e7Y>R|sDPQfnRH7@c>aW2}#y2YX$fW%9|e4$fHH z%*sBO>yr&GZk!t$F;&T{zyg$ArhCq9QNvmDz}nkR;Kv`RS5CU>eE7j$4F)5kfQBVq zxVF+{gxv!ZLJ>wGLcpo;KOa9+FjHV?r6Psx-!&$e=EmaoWU{h?#JL#r(Y#~{9w^tC zp(W5OfD0-#;;*k3quIL!q~f%$+oJwc|GuVbf_d)}wR(yKJv+9Plp|3ymrF!t)^LS_ zHT(qbwxf_|FI9ZUv>Ka&WF10OpoMm5KPa!39uD!35(6*zkGVboDxz^|M=F8d4l~^B~@)XFvx^5j*f1ogja0VH&~u3t~ZOp&a+2><@3l z_vE+z-9*dG4UFY1RGgbd6CElA% z{?ZE9mc)NOhaudv3M@g5Pt6P+F7`MOd(bY!c%(BLwG5HlU%5#C$kdB;@T7jW!!Ur- zN8On6U2OvsRpWW@TYK3XbvyORsS>rlew%TU-(giHBHIAj0MObpG2ljXIpCln5K37xDX3@0<21D=32Juibq1hyeBa zVQrEt)%$euqKjL91nE>OH#3FRKjVy#Y+jX-u>V1v)~JfDn)Kh?2I5-L^e{~&)|y{- zk)h5}pBTGS7v*Kwq9WVK=Y0OMB_k?4(N>@**VGGlA}d0)g;Yscc(zc%w_l>8)5 zjN_e(YBbX_5zdRDGEvQ+#{U%43P_cEJu}6<@M0AT^n=XPYg`UjSJSJAc+OfxfpZgU zKI)Qz!Ga^oP=xmVMYfeT<^p_4m-9vbkvy8O*3z)Q#SGO*vj(O2X37hoTtQZDc9d)I~Dn_m~%zyf`+!e(m=K6rDLn$B%3!Hu1C`PALo4XxjP2qjuu#g}_L6xQmk3k4RD?|uZNOcvMKvB_6&<^6Q z$Rx1B!v5`PxwmHjplL-417JOfC?b&80zI8VfmW+c8023zTQt`27VzqcgV=+>O?1hd zwZOCeV_e^47k8?V-uFc*jVy);g;ZEx5qdeii=uH%!$)W)4z7zJuH8{cQHV)u4~9(N z1q!$8?u^>T$iXRZvk8jYgGN!fQyZSG-fB;e8wW>bl#eZerP4?UCZ2WcM+aM0wE(Lg zM4rkjCj>a~?#QU1ZU`i&wFwM3?A`_CeyY~V&U;L`90!VckWp*e^c&v5G33Xs{$j4M zAwrip!-!e(m_6s_x1!XEPGW95svPrvf(4+=w*~3+z2Zn%-SggSkz~ffN#uiHRRb{D z0ud1=*cJ0=AOb#5L>RiLe{Zv>qz5u?5DuHI$+t<$m2#zd2AVF+-dC;Mgs-$h8-62< zD=46i*$Z|>DOe3>nMC5*2(&K9v~j3vs<>^BP#ZVD>3{LIMa7Oxh%>s!i&|49ubd6= z27V{A0l0~|@=2t}EN=G$48*lMxij0GZ~hV!9gsvyF0U!x{oj)R`- zOCrOluVy}9bDG>Qi;yMTV9aaN&Hy4+)gi&jMIL7Gt_7Uvl=(b-nc>ziU;XOh4%{P> z0@eK{a3J~T{mb5U2$ecVrq3Y1=|guls!b4t8Q`DHV_2&k4H?>tF$0#=EaF>fqS$z3 z))+(kiau1LB!78+S2japbnw7uNoUkhmZkzhcfc|i$gb|Gk>$h0PC z(>}m{TeX-^!8bi4BQtHHnL)-7QE> z|DC8_9UR_xo}_I5V={DFtUi~*>t5?0UT~l&g#AEN5UdyS6qnNhkwG*ig8>Y0;({Kd z%7?&Id_NjlA%(9hXsf5UOs2*fUdM5~=stRVxb5S7I%XSt22+KYtS5f3;SD?^hcbc< z0@hDnS7WDI1(CK^=Zm4SF)aU3+wV#Ah`g?sJ*fE*lYr6!GHelJ@;TUk!_pgH)i?o4IZ}L(ex&({dwwO0=@#In#q!f!S)fMF@*LL)**u5T+%&*Bt zEMXWxEC&)J_VpA?q~lmBiP_z0 zIB#XdGyfZb$J7yEjO_VxyBMyBSwt68uyl~W@HdqCNiITBN?GQlEGZf{oJRV)3-`tb&q|0CiTYzqhjrcqM%TXO6Hz68kADhy^>36o# zdGbByUs)%SaLiXs-lzKzOY4h1)0<+Ko3W5mHb{B*CqYpr;vc?;axvn{l+M_j9iA!K zpPT5ImLuPXMJ}OHiDrHJ1cXO2ohz3kJ8#eD%Hcd4BK*&AA*j|#BJE=4FjXPbD7uUQK^SE+NU2UwC_ z9vsdPrY}OVWTDPo*$rksr&1fxfrp1cD2S?9??w*)Io$0({EcJ?^oB(K6hVokxD>^^xMWfR)j9t=FVS2*RQK43+NuFUklYdw zOJC`wUN}FV<)`ofj9&&bX)o$g}11JrQ`Q2(4oBrtRs6_#RFZ znqp4$#s6HblXXTpf8G7S?pKw@D9iZah3jU+EC@LYW^$U=wVqVYJs}{W z$HdqGP}DWqs~*!^mk#lhaNaajf=EcUNjusAA=CR`O(qRSeUehaxSv+-DNjIPRA;9+ z2{l!OYpD)p#_*Pq_D)aX=lj^&9R#69v6pRc(e(^uRB<6_NohwVY^u^K3AUz0$8>be z7?#!@tX3EqyJFI@+!Pr6e>vcm?*7Q5omYhV`ZEAJ(j*S&PIa4k1}-!xB%Q(Oc`h_K z@Dx4gJ<2{kgT9x7*}ti4n~n>IPPBYBpd{`2^sJ%(_DyGU{gJz(im}Loo_|E)W{qBu zeMZKY=H}+5iLe$4wMpcu-*w7ozM{~LwDfGWJcaf#1Y3(i?I*3seHU5;E>50!CJWo2 zxlb6T(q;&;Y>9r@C}XiAsyuOCZVP9B@fn6}7E@5kR%q9&f66behlydXG=VclTv6fV zx1;lb|8Gs|DzS+`;^$ilJQ)-OV^@+=jD6^c1DLe$FDMu=aL$Hx_YQ8IvA{pRv?7m z3eOQloUj>p`e3h|nmoAuMz;(iKZrp<0P*amHP6J+w{i&3%?N0Blpqn(krk3z@pI{T-m<=m>u7?m??ufQZx06;Zr_`zdiOQRn{v^c_{e9 z{{Kx?!gm#c=i6=biA8$!+Ccpb=97j8#^gR6G_*z)=yTwlUx#4 zz~*cAa}HmQ%8_szmI<(mUyd`doJiKa>y&CgRNy3OH~?8rFzg~@e9ZzrZHO&r;+r_< zud$zgDI2$Wlk!g{k3r~E=2cp~ALQCnD9>oDzXb$*f+0d8%1r_2Pr|WeA|p@eaVrXL zXpC{F{F-tD2S$WpJO-YAC+mPnlrUd^~%U&e|z zL_6hOJjfWi=uGywW-~H!`7D=7*`?E9g=|GXMYy7g$V1v978v$G!>scv^%#&K@+4ozB=8n%;oOg*7$Q7yI<&TA9zUhgGdA-52D@{o^ec zD)WdbKE!4~r~4xy1OATt^?)&UiKU0Y|8>bl&IT~FzEnaybKkt;GE5sR`UEB%6fBr- zTK1<^kBxW0}iZ?{kWdP5zU53?iHy_i?C@Dod z_$v#2*mo)4`z?l={;3sbXdD-04L%Cab2BCtM`+8 zyyR)eWd}M6%c62+zNR>CQWjqHR&XCJ>c+j)!SB~sr(=r4{@iEU;@>uE>g#p+PnjE^ z_@=Xr8OlUs1qtPi7Ze=d>4vbrx^Sk$@rXHHaBs*ifo~0ofULCNq;TF97bP~#tAJH$q+mgr!H3+tC;B0GlZ<s9 zR;h)0D#TV{(xVV1<4U|a5GZDOicpmoCSd*5Q1*p|N0Ym^UYx|f+2LnK<@tn&b#@V_ zw?cxi{EHw>ZvF%nlo{V{nJ1=7ZD3GaC*Lc3D||`{IPY(t_orku-Pfnvu76K(+fI+& z-5yrZqgrkIgxZdJR7)L21|WQI;~l(@^R}Yryk2wS1Y*(q{rOUN{gMmCdu+9Zdul+2 zUEm9Ger0aaV=$@P?{AO3U?yezjyHOGGHgN2R9F=IRa~E6HOG0D;2)vT5gXclao4dp z87^&)xUbGn@RW9`%NuH6ai*qr=E{ZtHI{)EPSJ%0AAzVqT5#(Iw|dRevBfee(-+z$ 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 Date: Tue, 14 Jul 2026 16:04:31 +0200 Subject: [PATCH 23/88] Added LUNA-Charts logo --- docs/src/assets/luna_charts_logo_doc.png | Bin 0 -> 67851 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/src/assets/luna_charts_logo_doc.png diff --git a/docs/src/assets/luna_charts_logo_doc.png b/docs/src/assets/luna_charts_logo_doc.png new file mode 100644 index 0000000000000000000000000000000000000000..1e8e30b6855ad483f9565697d29520db3b27e068 GIT binary patch literal 67851 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�jON(^DzDEQKn$Al^{c0U{5x*(TQ{ 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%0AAzVqT5#(Iw|dRevBfee(-+z$ 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 Date: Tue, 14 Jul 2026 16:05:20 +0200 Subject: [PATCH 24/88] Removed old favicon --- docs/public/favicon.svg | 1 - 1 file changed, 1 deletion(-) delete mode 100644 docs/public/favicon.svg diff --git a/docs/public/favicon.svg b/docs/public/favicon.svg deleted file mode 100644 index cba5ac1..0000000 --- a/docs/public/favicon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file -- 2.54.0 From e6e7218750a7c604a04aaa50f5c4cb36c6cb60ed Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:05:38 +0200 Subject: [PATCH 25/88] Updated content --- docs/src/content/docs/index.mdx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx index e6ed51f..61eeca9 100644 --- a/docs/src/content/docs/index.mdx +++ b/docs/src/content/docs/index.mdx @@ -1,24 +1,24 @@ --- -title: Welcome to Starlight -description: Get started building your docs site with Starlight. +title: Welcome to LUNA dogumentation 🐾 +description: LUNA Charts is a reusable, developer-friendly charting library designed to make accessible, WCAG-oriented data visualization the default rather than an afterthought. template: splash # Remove or comment out this line to display the site sidebar on this page. hero: - tagline: Congrats on setting up a new Starlight project! + tagline: Architecture, ADRs and classes. Everything you should now! image: - file: ../../assets/houston.webp + file: ../../assets/luna_charts_logo_doc.png actions: - - text: Example Guide - link: /guides/example/ + - text: Start here + link: /getting-started/ icon: right-arrow - - text: Read the Starlight docs - link: https://starlight.astro.build + - text: Our Git-Repo + link: https://git.byting-pandas.ninja/Ninosaurier/LUNA-Charts icon: external variant: minimal --- import { Card, CardGrid } from '@astrojs/starlight/components'; -## Next steps +## The Topics -- 2.54.0 From 33778acc0919fc65ea6db2dea309cab7902dc3e1 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:05:56 +0200 Subject: [PATCH 26/88] Removed because it is unnecessary --- docs/src/content/adr/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/src/content/adr/.gitkeep diff --git a/docs/src/content/adr/.gitkeep b/docs/src/content/adr/.gitkeep deleted file mode 100644 index e69de29..0000000 -- 2.54.0 From 21cc6560d03df77fa8ab4f2d7ab569a358fd9c79 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:06:16 +0200 Subject: [PATCH 27/88] Removed unused files --- docs/src/content/docs/guides/example.md | 11 ----------- docs/src/content/docs/reference/example.md | 11 ----------- 2 files changed, 22 deletions(-) delete mode 100644 docs/src/content/docs/guides/example.md delete mode 100644 docs/src/content/docs/reference/example.md diff --git a/docs/src/content/docs/guides/example.md b/docs/src/content/docs/guides/example.md deleted file mode 100644 index ebd0f3b..0000000 --- a/docs/src/content/docs/guides/example.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Example Guide -description: A guide in my new Starlight docs site. ---- - -Guides lead a user through a specific task they want to accomplish, often with a sequence of steps. -Writing a good guide requires thinking about what your users are trying to do. - -## Further reading - -- Read [about how-to guides](https://diataxis.fr/how-to-guides/) in the Diátaxis framework diff --git a/docs/src/content/docs/reference/example.md b/docs/src/content/docs/reference/example.md deleted file mode 100644 index 0224f09..0000000 --- a/docs/src/content/docs/reference/example.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Example Reference -description: A reference page in my new Starlight docs site. ---- - -Reference pages are ideal for outlining how things work in terse and clear terms. -Less concerned with telling a story or addressing a specific use case, they should give a comprehensive outline of what you're documenting. - -## Further reading - -- Read [about reference](https://diataxis.fr/reference/) in the Diátaxis framework -- 2.54.0 From 042d9f9252d3f97342621a3c4eb6a8f02b7ad75c Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:07:51 +0200 Subject: [PATCH 28/88] Moved files in the docs/src/content of Astro JS --- .../adr/000100-repository-structure.md | 142 ------------ .../content/adr/000200-technology-stack.md | 211 ------------------ .../000300-web-components-as-public-api.md | 110 --------- .../adr/000400-svg-as-rendering-technology.md | 129 ----------- ...ccessibility-as-a-cross-cutting-concern.md | 139 ------------ docs/src/content/adr/README.md | 190 ---------------- docs/src/content/adr/template.md | 117 ---------- 7 files changed, 1038 deletions(-) delete mode 100644 docs/src/content/adr/000100-repository-structure.md delete mode 100644 docs/src/content/adr/000200-technology-stack.md delete mode 100644 docs/src/content/adr/000300-web-components-as-public-api.md delete mode 100644 docs/src/content/adr/000400-svg-as-rendering-technology.md delete mode 100644 docs/src/content/adr/000500-accessibility-as-a-cross-cutting-concern.md delete mode 100644 docs/src/content/adr/README.md delete mode 100644 docs/src/content/adr/template.md diff --git a/docs/src/content/adr/000100-repository-structure.md b/docs/src/content/adr/000100-repository-structure.md deleted file mode 100644 index 2aecc30..0000000 --- a/docs/src/content/adr/000100-repository-structure.md +++ /dev/null @@ -1,142 +0,0 @@ -# ADR-0001: Repository Structure - -* **Status:** Accepted -* **Date:** 2026-07-12 -* **Decision Makers:** LUNA Charts Maintainers - ---- - -## Context - -LUNA Charts is designed as an open-source charting library with a strong focus on accessibility, maintainability, and long-term evolution. - -The project consists of multiple concerns, including source code, documentation, examples, testing infrastructure, and continuous integration. - -A repository structure was required that supports collaborative development while keeping the project easy to understand for contributors and maintainers. - -The repository should also support future growth without requiring structural changes. - ---- - -## Decision Drivers - -The following factors influenced this decision: - -* Maintainability -* Developer Experience -* Open Source Collaboration -* Modular Architecture -* Shared Tooling -* Consistent Build Process -* Long-Term Evolution - ---- - -## Considered Alternatives - -| Alternative | Description | -| ------------------------------------ | ---------------------------------------------------------------------------------- | -| Multiple repositories | Separate repositories for documentation, examples, and library packages. | -| Single repository without workspaces | One repository containing all files without workspace separation. | -| **Monorepo using pnpm Workspaces** | One repository containing all project artifacts with logical workspace separation. | - -Multiple repositories were rejected because they increase maintenance effort, duplicate tooling, and complicate contribution workflows. - -A single repository without workspaces was rejected because the project is expected to grow over time and benefits from a clear modular organization. - ---- - -## Decision - -LUNA Charts is implemented as a **pnpm-based monorepo**. - -The repository contains all project artifacts, including: - -* Source code -* Documentation -* Storybook -* Examples -* Architecture documentation -* Architecture Decision Records (ADRs) -* CI/CD configuration - -The repository is organized into logical workspaces. - -```text -luna-charts/ -│ -├── packages/ -│ └── luna-charts/ -│ -├── apps/ -│ ├── storybook/ -│ └── docs/ -│ -├── docs/ -│ ├── architecture/ -│ └── adr/ -│ -├── examples/ -│ -└── .github/ -``` - -Internally, the library is organized into architectural modules such as: - -* Core -* Charts -* Themes -* Utilities - -These modules are implementation details and are **not** exposed as individual npm packages. - ---- - -## Rationale - -A monorepo provides a single source of truth for the entire project. - -All contributors work within the same repository using a shared toolchain, coding standards, testing infrastructure, and documentation. - -Using **pnpm Workspaces** enables clear separation of responsibilities while avoiding duplicated dependencies and configuration. - -This structure supports the project's architecture-first approach and simplifies future expansion. - ---- - -## Consequences - -### Positive - -* Single source of truth -* Simplified onboarding for contributors -* Shared tooling and configuration -* Consistent CI/CD pipeline -* Easier dependency management -* Centralized documentation -* Scalable project organization - -### Negative - -* Larger repository size -* Contributors clone the complete repository -* Workspace configuration introduces a small amount of additional complexity - ---- - -## Related TOGAF Phases - -* Architecture Vision (Phase A) -* Technology Architecture (Phase D) -* Opportunities & Solutions (Phase E) -* Migration Planning (Phase F) -* Implementation Governance (Phase G) -* Architecture Change Management (Phase H) - ---- - -## References - -* LUNA Charts Architecture Wiki -* ADR-0002: Technology Stack -* pnpm Workspaces Documentation diff --git a/docs/src/content/adr/000200-technology-stack.md b/docs/src/content/adr/000200-technology-stack.md deleted file mode 100644 index 6796d8e..0000000 --- a/docs/src/content/adr/000200-technology-stack.md +++ /dev/null @@ -1,211 +0,0 @@ -# ADR-0002: Technology Stack - -* **Status:** Accepted -* **Date:** 2026-07-12 -* **Decision Makers:** LUNA Charts Maintainers - ---- - -## Context - -LUNA Charts is an open-source charting library designed to provide accessible, framework-agnostic, and strongly typed chart components. - -The selected technology stack must support the architectural principles defined during the TOGAF Architecture Development Method (ADM), including: - -* Accessibility by Design -* Framework Agnosticism -* Strong Type Safety -* Component-Based Architecture -* High Developer Experience -* Open Source Collaboration -* Long-Term Maintainability - -Rather than selecting technologies based on popularity, each technology is evaluated according to its ability to support these architectural goals. - ---- - -## Decision Drivers - -The following factors influenced the decision: - -* Accessibility -* Framework Agnosticism -* Type Safety -* Developer Experience -* Maintainability -* Testability -* Documentation -* Open Source Collaboration -* Long-Term Evolution - ---- - -## Considered Alternatives - -| Technology Area | Considered Alternatives | Selected | -| ----------------------- | ----------------------------------------------- | ------------------ | -| Component Framework | React, Vue, Angular, Lit, StencilJS | **StencilJS** | -| Component Documentation | Storybook, Styleguidist | **Storybook** | -| Project Documentation | Docusaurus, VitePress, Starlight | **Starlight** | -| Package Manager | npm, Yarn, pnpm | **pnpm** | -| Unit Testing | Vitest, Jest | **Jest** | -| Browser Testing | Cypress, Playwright | **Playwright** | -| Accessibility Testing | Manual Testing Only, axe-core | **axe-core** | -| Code Formatting | Manual Formatting, Prettier | **Prettier** | -| Static Analysis | TSLint, ESLint | **ESLint** | -| Versioning | Manual Versioning, Semantic Release, Changesets | **Changesets** | -| Continuous Integration | GitLab CI, Azure Pipelines, GitHub Actions | **GitHub Actions** | - -The selected technologies best support the project's architectural goals while remaining broadly adopted and well documented. - ---- - -## Decision - -The following technology stack is adopted for the implementation of LUNA Charts. - -| Technology | Purpose | -| ------------------ | --------------------------------------------------- | -| **StencilJS** | Web Component development | -| **Storybook** | Interactive component documentation and development | -| **Starlight** | Project and architecture documentation | -| **TypeScript** | Strong typing and developer tooling | -| **pnpm** | Package management and workspace support | -| **Jest** | Unit testing | -| **Playwright** | Browser and interaction testing | -| **axe-core** | Accessibility validation | -| **ESLint** | Static code analysis | -| **Prettier** | Consistent code formatting | -| **Changesets** | Versioning and release management | -| **GitHub Actions** | Continuous Integration | - -The technology stack is considered part of the project's architecture and may only be changed through a new Architecture Decision Record. - ---- - -## Rationale - -Each technology has been selected because it directly supports one or more architectural principles. - -### StencilJS - -StencilJS enables the development of standards-based Web Components. - -This aligns with the project's goal of remaining framework agnostic while allowing framework-specific wrappers to be generated automatically during the build process. - ---- - -### Storybook - -Storybook provides an isolated environment for component development. - -It supports rapid development, interactive examples, accessibility validation, and visual review of chart components. - ---- - -### Starlight - -Starlight serves as the central documentation platform. - -It separates architectural documentation from component documentation and supports long-term maintainability of the project's knowledge base. - ---- - -### TypeScript - -TypeScript enables strong compile-time validation. - -It improves the developer experience by detecting integration errors early and providing comprehensive IDE support. - ---- - -### pnpm - -pnpm Workspaces enable a modular repository structure while maintaining a single source of truth for dependencies and tooling. - ---- - -### Jest - -Jest provides fast unit testing for business logic, utility functions, configuration handling, validation, and other non-browser-specific functionality. - ---- - -### Playwright - -Playwright validates component behavior inside real browsers. - -It is used to verify keyboard interaction, focus management, SVG rendering, and other browser-dependent accessibility features. - ---- - -### axe-core - -axe-core automatically validates accessibility requirements and complements manual accessibility reviews. - ---- - -### ESLint and Prettier - -Both tools ensure consistent coding standards across the project and reduce friction during code reviews. - ---- - -### Changesets - -Changesets manages package versioning and release notes while keeping release decisions under maintainer control. - ---- - -### GitHub Actions - -GitHub Actions automates testing, validation, and release workflows to ensure consistent software quality. - ---- - -## Consequences - -### Positive - -* Technology stack directly supports architectural principles. -* Strong accessibility support throughout development. -* Framework-independent component model. -* Excellent developer experience. -* Consistent documentation workflow. -* High maintainability. -* Modern testing strategy. -* Simplified contributor onboarding. -* Automated quality assurance. -* Scalable project foundation. - -### Negative - -* Initial project setup is more complex. -* Contributors must become familiar with multiple development tools. -* Toolchain maintenance requires periodic updates. -* CI configuration is more comprehensive than for smaller projects. - ---- - -## Related TOGAF Phases - -* Architecture Vision (Phase A) -* Information Systems Architecture (Phase C) -* Technology Architecture (Phase D) -* Opportunities & Solutions (Phase E) -* Migration Planning (Phase F) -* Implementation Governance (Phase G) - ---- - -## References - -* LUNA Charts Architecture Wiki -* ADR-0001: Repository Structure -* ADR-0003: Web Components as Public API -* StencilJS Documentation -* Storybook Documentation -* Starlight Documentation -* Playwright Documentation -* Jest Documentation -* pnpm Documentation diff --git a/docs/src/content/adr/000300-web-components-as-public-api.md b/docs/src/content/adr/000300-web-components-as-public-api.md deleted file mode 100644 index 09c9288..0000000 --- a/docs/src/content/adr/000300-web-components-as-public-api.md +++ /dev/null @@ -1,110 +0,0 @@ -# ADR-0003: Web Components as Public API - -* **Status:** Accepted -* **Date:** 2026-07-12 -* **Decision Makers:** LUNA Charts Maintainers - ---- - -## Context - -LUNA Charts is intended to be an open-source charting library that can be integrated into applications regardless of the frontend framework used. - -A primary architectural objective defined during the Architecture Vision and Technology Architecture phases is **framework agnosticism**. Consumers should be able to use LUNA Charts in React, Angular, Vue, Svelte, or plain HTML applications without requiring framework-specific implementations of the chart components. - -The public API therefore had to be based on a stable and widely adopted web standard rather than a framework-specific component model. - ---- - -## Decision Drivers - -The following factors influenced this decision: - -* Framework Agnosticism -* Standards Compliance -* Long-Term Maintainability -* Accessibility -* Developer Experience -* Component Reusability -* Open Web Platform -* Future Compatibility - ---- - -## Considered Alternatives - -| Alternative | Description | -| -------------------------------------- | ----------------------------------------------------------------- | -| React Components | Components implemented exclusively for React. | -| Vue Components | Components implemented exclusively for Vue. | -| Angular Components | Components implemented exclusively for Angular. | -| Separate implementations per framework | Independent implementations for each supported framework. | -| **Web Components** | Standards-based custom elements implemented using Web Components. | - -Framework-specific implementations were rejected because they increase maintenance effort, duplicate functionality, and couple the architecture to individual frontend ecosystems. - -Maintaining multiple implementations would also increase the likelihood of inconsistent behavior across frameworks. - ---- - -## Decision - -LUNA Charts exposes its public API exclusively through **Web Components**. - -The project uses **StencilJS** to implement these components according to the Web Components standard. - -Framework integrations (e.g., React, Angular, Vue) are generated automatically during the build process and are considered **integration adapters**, not independent implementations. - -The architecture therefore consists of a single component model with multiple consumption options. - ---- - -## Rationale - -Web Components are an open web standard supported by all modern browsers. - -By building directly upon this standard, LUNA Charts remains independent of any frontend framework while still supporting popular ecosystems through automatically generated wrappers. - -This approach minimizes duplicated implementation effort and guarantees consistent functionality across all supported platforms. - -Using a single implementation also simplifies testing, documentation, maintenance, and accessibility validation. - -Framework wrappers remain lightweight integration layers and do not introduce architectural differences. - ---- - -## Consequences - -### Positive - -* Framework-independent public API. -* Single implementation for all supported platforms. -* Reduced maintenance effort. -* Consistent behavior across frameworks. -* Simplified testing and documentation. -* Better long-term stability. -* Supports future frontend frameworks without redesigning the library. - -### Negative - -* Developers unfamiliar with Web Components may require additional documentation. -* Framework wrappers depend on the capabilities provided by StencilJS. -* Some framework-specific features cannot be exposed without breaking framework independence. - ---- - -## Related TOGAF Phases - -* Architecture Vision (Phase A) -* Information Systems Architecture (Phase C) -* Technology Architecture (Phase D) -* Opportunities & Solutions (Phase E) - ---- - -## References - -* LUNA Charts Architecture Wiki -* ADR-0002: Technology Stack -* StencilJS Documentation -* Web Components Specification diff --git a/docs/src/content/adr/000400-svg-as-rendering-technology.md b/docs/src/content/adr/000400-svg-as-rendering-technology.md deleted file mode 100644 index 8cae9df..0000000 --- a/docs/src/content/adr/000400-svg-as-rendering-technology.md +++ /dev/null @@ -1,129 +0,0 @@ -# ADR-0004: SVG as Rendering Technology - -* **Status:** Accepted -* **Date:** 2026-07-12 -* **Decision Makers:** LUNA Charts Maintainers - ---- - -## Context - -One of the primary goals of LUNA Charts is to provide accessible chart components that support modern accessibility standards and assist developers in creating WCAG-compliant data visualizations. - -Charts are graphical user interfaces that contain meaningful information. Depending on the chart type, individual graphical elements such as bars, points, labels, legends, and axes may need to be discoverable by assistive technologies, focusable using the keyboard, or interactable by users. - -The rendering technology therefore has a direct impact on accessibility, developer experience, testing capabilities, maintainability, and future extensibility. - -A rendering technology had to be selected that supports these architectural goals while remaining compatible with modern browsers and Web Components. - ---- - -## Decision Drivers - -The following factors influenced this decision: - -* Accessibility -* WCAG Compliance -* Semantic Structure -* Keyboard Navigation -* Focus Management -* Screen Reader Support -* Developer Experience -* Maintainability -* Browser Compatibility -* Long-Term Evolution - ---- - -## Considered Alternatives - -| Alternative | Description | -| ---------------- | --------------------------------------------------------- | -| HTML Elements | Represent charts using standard HTML elements. | -| Canvas | Render graphics using the HTML Canvas API. | -| Hybrid Rendering | Combine Canvas and SVG depending on the chart type. | -| **SVG** | Render all chart graphics using Scalable Vector Graphics. | - -HTML was rejected because it is not designed to represent complex graphical visualizations. - -Canvas was rejected because graphical objects are rendered as pixels rather than DOM elements. This makes individual chart elements difficult to expose to assistive technologies and increases implementation complexity for keyboard interaction and accessibility. - -Hybrid rendering was rejected because it would introduce two rendering models, increasing architectural complexity, testing effort, and maintenance costs. - ---- - -## Decision - -All chart visualizations within LUNA Charts are rendered using **Scalable Vector Graphics (SVG)**. - -Each visual element (e.g., bars, lines, points, labels, legends, and axes) is represented as an individual SVG element within the DOM. - -Accessibility information, keyboard navigation, focus management, and interaction are implemented directly on these SVG elements. - -Canvas is not used as a rendering technology for chart components. - ---- - -## Rationale - -SVG integrates directly into the browser's Document Object Model (DOM), allowing every graphical element to be individually identified, styled, focused, and enriched with accessibility information. - -This capability aligns with the project's goal of supporting accessible chart implementations by design. - -Using SVG enables the library to: - -* associate semantic information with graphical elements, -* support keyboard navigation, -* expose meaningful structures to assistive technologies, -* apply standard web accessibility techniques, -* simplify automated accessibility testing, -* integrate naturally with Web Components. - -SVG also provides excellent scalability across different display resolutions without requiring additional rendering logic. - -Although Canvas may provide better rendering performance for extremely large datasets, accessibility and maintainability are considered higher architectural priorities for LUNA Charts. - ---- - -## Consequences - -### Positive - -* Native DOM representation of graphical elements. -* Improved accessibility support. -* Better compatibility with assistive technologies. -* Simplified keyboard navigation. -* Simplified focus management. -* Easier automated accessibility testing. -* Resolution-independent rendering. -* Consistent styling using CSS. -* Better integration with Web Components. -* Simplified debugging using browser developer tools. - -### Negative - -* Rendering performance may decrease for extremely large datasets. -* SVG documents become larger as chart complexity increases. -* Very large visualizations may require optimization techniques such as virtualization or data aggregation. - -These trade-offs are considered acceptable because accessibility and maintainability have higher architectural priority than maximum rendering performance. - ---- - -## Related TOGAF Phases - -* Architecture Vision (Phase A) -* Business Architecture (Phase B) -* Information Systems Architecture (Phase C) -* Technology Architecture (Phase D) -* Opportunities & Solutions (Phase E) - ---- - -## References - -* LUNA Charts Architecture Wiki -* ADR-0002: Technology Stack -* ADR-0003: Web Components as Public API -* Scalable Vector Graphics (SVG) Specification -* Web Content Accessibility Guidelines (WCAG) diff --git a/docs/src/content/adr/000500-accessibility-as-a-cross-cutting-concern.md b/docs/src/content/adr/000500-accessibility-as-a-cross-cutting-concern.md deleted file mode 100644 index b07761b..0000000 --- a/docs/src/content/adr/000500-accessibility-as-a-cross-cutting-concern.md +++ /dev/null @@ -1,139 +0,0 @@ -# ADR-000500: Accessibility as a Cross-Cutting Concern - -* **Status:** Accepted -* **Date:** 2026-07-12 -* **Decision Makers:** LUNA Charts Maintainers - ---- - -## Context - -Accessibility is the primary quality attribute of LUNA Charts. - -The project's objective is not only to render charts but also to support developers in creating accessible data visualizations that align with the Web Content Accessibility Guidelines (WCAG). - -During the architectural design process, accessibility was initially considered as a separate subsystem responsible for validating and enforcing accessibility requirements. - -Further analysis revealed that accessibility affects nearly every architectural layer of the system. - -Rendering, component APIs, configuration, validation, interaction, keyboard navigation, documentation, and testing all contribute to the accessibility of the final chart. - -As a result, accessibility cannot be implemented as an isolated engine without introducing architectural inconsistencies. - ---- - -## Decision Drivers - -The following factors influenced this decision: - -* Accessibility by Design -* WCAG Compliance -* Separation of Concerns -* Maintainability -* Consistency -* Developer Experience -* Long-Term Evolution -* Testability - ---- - -## Considered Alternatives - -| Alternative | Description | -| ------------------------------ | ---------------------------------------------------------------------------------------------------------- | -| Dedicated Accessibility Engine | A centralized subsystem responsible for accessibility validation and enforcement. | -| Accessibility Utilities | A collection of reusable accessibility helper functions. | -| **Cross-Cutting Concern** | Accessibility is integrated into every architectural layer where accessibility-related decisions are made. | - -A dedicated accessibility engine was rejected because accessibility cannot be guaranteed after a chart has already been designed or rendered. - -Accessibility decisions must be made continuously throughout the rendering process and component lifecycle. - -Accessibility utilities remain part of the implementation but do not represent the architectural model. - ---- - -## Decision - -Accessibility is treated as a **cross-cutting concern** throughout the entire architecture of LUNA Charts. - -Accessibility responsibilities are distributed across multiple architectural modules rather than centralized in a single subsystem. - -Examples include: - -* Public component APIs -* TypeScript type definitions -* Validation -* Rendering -* SVG generation -* Keyboard interaction -* Focus management -* Documentation -* Automated testing - -Each architectural component is responsible for implementing the accessibility requirements relevant to its own responsibility. - ---- - -## Rationale - -Accessibility is not a feature that can be added after rendering has completed. - -Instead, accessibility emerges from many architectural decisions working together. - -Examples include: - -* selecting SVG instead of Canvas, -* designing semantic component APIs, -* exposing accessible keyboard interaction, -* generating meaningful DOM structures, -* providing strongly typed configuration, -* validating accessibility-related configuration, -* documenting accessibility behavior, -* verifying accessibility through automated testing. - -Treating accessibility as a cross-cutting concern ensures that accessibility remains an architectural responsibility rather than an isolated implementation detail. - -This approach also aligns with established software architecture principles, where quality attributes such as security, logging, and observability are commonly treated as cross-cutting concerns. - ---- - -## Consequences - -### Positive - -* Accessibility is considered throughout the entire development process. -* Architectural responsibilities remain clearly separated. -* Accessibility becomes part of every feature rather than an optional extension. -* Better support for WCAG-compliant chart implementations. -* Simplified long-term maintenance. -* Consistent accessibility behavior across all chart types. -* Accessibility can be validated at multiple architectural levels. - -### Negative - -* Accessibility responsibilities are distributed across multiple modules. -* Contributors must understand accessibility requirements beyond their immediate implementation. -* Architectural reviews must continuously consider accessibility implications. - -These trade-offs are acceptable because accessibility represents the primary quality objective of LUNA Charts. - ---- - -## Related TOGAF Phases - -* Architecture Vision (Phase A) -* Business Architecture (Phase B) -* Information Systems Architecture (Phase C) -* Technology Architecture (Phase D) -* Implementation Governance (Phase G) - ---- - -## References - -* LUNA Charts Architecture Wiki -* ADR-000300: Web Components as Public API -* ADR-000400: SVG as Rendering Technology -* Web Content Accessibility Guidelines (WCAG) -* WAI-ARIA Authoring Practices Guide diff --git a/docs/src/content/adr/README.md b/docs/src/content/adr/README.md deleted file mode 100644 index e2e36ee..0000000 --- a/docs/src/content/adr/README.md +++ /dev/null @@ -1,190 +0,0 @@ -# Architecture Decision Records (ADRs) - -Architecture Wiki: [https://wiki.byting-pandas.ninja/en/Projects/LUNA-Charts/Introduction] - -## Purpose - -This directory contains the **Architecture Decision Records (ADRs)** for the LUNA Charts project. - -An Architecture Decision Record documents a significant architectural decision, the context in which it was made, the chosen solution, and its consequences. - -The goal is to preserve the reasoning behind architectural decisions so that future contributors and maintainers understand **why** a decision was made—not only **what** was implemented. - -ADRs complement the Architecture Development Method (ADM) documentation and serve as the primary record of architectural decisions throughout the project's lifecycle. - ---- - -## Architecture Documentation - -The complete software architecture of LUNA Charts is documented in the official Architecture Wiki. - -The wiki follows the **TOGAF Architecture Development Method (ADM)** and describes the project from the initial vision through implementation governance and long-term architecture evolution. - -### Architecture Wiki - -* Architecture Vision (Phase A) -* Business Architecture (Phase B) -* Information Systems Architecture (Phase C) -* Technology Architecture (Phase D) -* Opportunities & Solutions (Phase E) -* Migration Planning (Phase F) -* Implementation Governance (Phase G) -* Architecture Change Management (Phase H) - -The ADRs contained in this directory should always be read together with the Architecture Wiki. - -The wiki describes the architecture as a whole, whereas ADRs explain the reasoning behind individual architectural decisions. - ---- - -## Relationship to the Architecture Documentation - -| Architecture Wiki | Architecture Decision Records | -| -------------------------------------------- | --------------------------------------------------- | -| Describes the complete software architecture | Documents individual architectural decisions | -| Defines the overall system structure | Explains why a specific solution was selected | -| Organized according to TOGAF ADM phases | Organized chronologically by architectural decision | -| Updated when the architecture evolves | Added whenever a significant decision is made | - -ADRs do **not** replace the Architecture Wiki. - -Likewise, the Architecture Wiki should not duplicate ADRs. - -Instead, both artifacts complement each other. - ---- - -## When to Create an ADR - -An ADR should be created whenever a decision has a significant impact on the architecture of the project. - -Typical examples include: - -* Selecting a new technology -* Introducing or replacing an architectural pattern -* Changing the public API -* Introducing a new rendering strategy -* Changing accessibility principles -* Modifying the repository structure -* Changing release or governance processes - -Small implementation details, bug fixes, refactorings, or coding style decisions do **not** require an ADR. - ---- - -## ADR Lifecycle - -Every ADR has one of the following statuses: - -| Status | Description | -| ---------- | ------------------------------------------------------- | -| Proposed | The decision is under discussion. | -| Accepted | The decision has been approved and adopted. | -| Deprecated | The decision is no longer recommended but still exists. | -| Superseded | The decision has been replaced by another ADR. | -| Discarded | The proposal was rejected. | - -Only **Accepted** ADRs represent the current architecture. - ---- - -## ADR Structure - -Each ADR follows the same structure. - -```text -Title - -Status - -Context - -Decision Drivers - -Considered Alternatives - -Decision - -Rationale - -Consequences - Positive - Negative - -Related TOGAF Phases - -References -``` - -This structure ensures that every ADR answers the following questions: - -* **What** decision was made? -* **Why** was the decision necessary? -* **When** was it made? -* **Who** approved the decision? -* **What** are the expected consequences? - ---- - -## Naming Convention - -ADRs use sequential numbering. - -Examples: - -```text -0001-repository-structure.md -0002-technology-stack.md -0003-svg-rendering.md -``` - -The number is never reused. - -If an ADR becomes obsolete, its status changes instead of deleting the document. - ---- - -## Decision Process - -Architectural decisions follow the governance model defined in **Implementation Governance (Phase G)**. - -```text -Proposal - ↓ -Architecture Discussion - ↓ -Architecture Review - ↓ -Maintainer Decision - ↓ -ADR Update - ↓ -Implementation -``` - -Community members are encouraged to participate in discussions. - -Final architectural decisions are made by the project maintainers. - ---- - -## Relationship to Source Code - -Source code is expected to reflect accepted ADRs. - -If an implementation no longer follows an accepted ADR, one of the following actions should occur: - -* Update the implementation to match the ADR. -* Replace the ADR with a new architectural decision. -* Deprecate or supersede the ADR. - -Architectural changes should always be documented before or together with the implementation. - ---- - -## References - -* TOGAF Architecture Development Method (ADM) -* LUNA Charts Architecture Wiki -* LUNA Charts Implementation Governance (Phase G) -* LUNA Charts Architecture Change Management (Phase H) diff --git a/docs/src/content/adr/template.md b/docs/src/content/adr/template.md deleted file mode 100644 index bd7a837..0000000 --- a/docs/src/content/adr/template.md +++ /dev/null @@ -1,117 +0,0 @@ -# ADR-XXXX: Title - -* **Status:** Proposed -* **Date:** YYYY-MM-DD -* **Decision Makers:** LUNA Charts Maintainers - ---- - -## Context - -Describe the background that led to this decision. - -Questions that should be answered: - -* What problem needs to be solved? -* Which architectural constraints exist? -* Which project goals influence the decision? -* Which stakeholders are affected? - ---- - -## Decision Drivers - -List the primary factors that influenced the decision. - -Typical examples: - -* Accessibility -* Performance -* Developer Experience -* Maintainability -* Framework Agnosticism -* Type Safety -* Simplicity -* Scalability - ---- - -## Considered Alternatives - -Document all relevant alternatives. - -| Alternative | Description | -| ----------- | ----------- | -| Option A | Description | -| Option B | Description | -| Option C | Description | - -Briefly explain why the alternatives were not selected. - ---- - -## Decision - -Describe the selected solution. - -This section should clearly answer: - -> What has been decided? - ---- - -## Rationale - -Explain why the selected solution best satisfies the decision drivers. - -This section should justify the decision from an architectural perspective. - ---- - -## Consequences - -### Positive - -Describe the expected benefits. - -Examples: - -* Improved maintainability -* Better accessibility -* Easier onboarding -* Reduced complexity - -### Negative - -Describe possible drawbacks. - -Examples: - -* Increased implementation effort -* Additional maintenance -* Performance trade-offs - ---- - -## Related TOGAF Phases - -List all architecture phases that influenced this decision. - -Examples: - -* Architecture Vision (Phase A) -* Technology Architecture (Phase D) -* Implementation Governance (Phase G) - ---- - -## References - -Provide references to related documentation. - -Examples: - -* Architecture Wiki -* Other ADRs -* External standards -* Specifications -- 2.54.0 From 0f30917ce9ffcf66d42be2d643cca6d15f06ea89 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:08:09 +0200 Subject: [PATCH 29/88] Become unnecessary --- docs/src/content/architecture/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/src/content/architecture/.gitkeep diff --git a/docs/src/content/architecture/.gitkeep b/docs/src/content/architecture/.gitkeep deleted file mode 100644 index e69de29..0000000 -- 2.54.0 From 58c12c4ffb87f8c68040e9f4a563bbb81d8f6769 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:13:45 +0200 Subject: [PATCH 30/88] Added a start page for the ADRs --- docs/src/content/docs/adr/index.mdx | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 docs/src/content/docs/adr/index.mdx diff --git a/docs/src/content/docs/adr/index.mdx b/docs/src/content/docs/adr/index.mdx new file mode 100644 index 0000000..535a308 --- /dev/null +++ b/docs/src/content/docs/adr/index.mdx @@ -0,0 +1,6 @@ +--- +title: Architecture Decision Records +description: Read Architecture Decision Records +--- + +Welcome to the Architecture Decision Records! \ No newline at end of file -- 2.54.0 From 630c1ca1b65e0ad4e3c47d8a65d5031cf5fa2861 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:14:10 +0200 Subject: [PATCH 31/88] Added start page for topic architecture --- docs/src/content/docs/architecture/index.mdx | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 docs/src/content/docs/architecture/index.mdx diff --git a/docs/src/content/docs/architecture/index.mdx b/docs/src/content/docs/architecture/index.mdx new file mode 100644 index 0000000..6ac5c15 --- /dev/null +++ b/docs/src/content/docs/architecture/index.mdx @@ -0,0 +1,6 @@ +--- +title: Architecture Dogumentation +description: Read the Architecture +--- + +Welcome to the Architecture dogumentation! \ No newline at end of file -- 2.54.0 From 2258e0b159f498193f7bedc14f80faac0a64ec11 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:17:24 +0200 Subject: [PATCH 32/88] Added landing page, so other developers know where to start --- docs/src/content/docs/getting-started/index.mdx | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 docs/src/content/docs/getting-started/index.mdx diff --git a/docs/src/content/docs/getting-started/index.mdx b/docs/src/content/docs/getting-started/index.mdx new file mode 100644 index 0000000..2e03b84 --- /dev/null +++ b/docs/src/content/docs/getting-started/index.mdx @@ -0,0 +1,6 @@ +--- +title: Getting Started +description: Start here +--- + +Welcome to Getting Started! \ No newline at end of file -- 2.54.0 From c46f4c6de7a38882deecb5097b6429b3346b2c39 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:23:26 +0200 Subject: [PATCH 33/88] fix(docs): add Starlight frontmatter to ADR-0001 --- .../docs/adr/000100-repository-structure.md | 138 ++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 docs/src/content/docs/adr/000100-repository-structure.md diff --git a/docs/src/content/docs/adr/000100-repository-structure.md b/docs/src/content/docs/adr/000100-repository-structure.md new file mode 100644 index 0000000..4ae6757 --- /dev/null +++ b/docs/src/content/docs/adr/000100-repository-structure.md @@ -0,0 +1,138 @@ +--- +title: "ADR-0001: Repository Structure" +description: "Decision to use a pnpm-based monorepo structure for LUNA Charts." +--- + +* **Status:** Accepted +* **Date:** 2026-07-12 +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +LUNA Charts is designed as an open-source charting library with a strong focus on accessibility, maintainability, and long-term evolution. +The project consists of multiple concerns, including source code, documentation, examples, testing infrastructure, and continuous integration. +A repository structure was required that supports collaborative development while keeping the project easy to understand for contributors and maintainers. +The repository should also support future growth without requiring structural changes. + +--- + +## Decision Drivers + +The following factors influenced this decision: + +* Maintainability +* Developer Experience +* Open Source Collaboration +* Modular Architecture +* Shared Tooling +* Consistent Build Process +* Long-Term Evolution + +--- + +## Considered Alternatives + +| Alternative | Description | +| ------------------------------------ | ---------------------------------------------------------------------------------- | +| Multiple repositories | Separate repositories for documentation, examples, and library packages. | +| Single repository without workspaces | One repository containing all files without workspace separation. | +| **Monorepo using pnpm Workspaces** | One repository containing all project artifacts with logical workspace separation. | + +Multiple repositories were rejected because they increase maintenance effort, duplicate tooling, and complicate contribution workflows. +A single repository without workspaces was rejected because the project is expected to grow over time and benefits from a clear modular organization. + +--- + +## Decision + +LUNA Charts is implemented as a **pnpm-based monorepo**. + +The repository contains all project artifacts, including: + +* Source code +* Documentation +* Storybook +* Examples +* Architecture documentation +* Architecture Decision Records (ADRs) +* CI/CD configuration + +The repository is organized into logical workspaces. + +```text +luna-charts/ +│ +├── packages/ +│ └── luna-charts/ +│ +├── apps/ +│ ├── storybook/ +│ └── docs/ +│ +├── docs/ +│ ├── architecture/ +│ └── adr/ +│ +├── examples/ +│ +└── .github/ +``` + +Internally, the library is organized into architectural modules such as: + +* Core +* Charts +* Themes +* Utilities + +These modules are implementation details and are **not** exposed as individual npm packages. + +--- + +## Rationale + +A monorepo provides a single source of truth for the entire project. +All contributors work within the same repository using a shared toolchain, coding standards, testing infrastructure, and documentation. +Using **pnpm Workspaces** enables clear separation of responsibilities while avoiding duplicated dependencies and configuration. +This structure supports the project's architecture-first approach and simplifies future expansion. + +--- + +## Consequences + +### Positive + +* Single source of truth +* Simplified onboarding for contributors +* Shared tooling and configuration +* Consistent CI/CD pipeline +* Easier dependency management +* Centralized documentation +* Scalable project organization + +### Negative + +* Larger repository size +* Contributors clone the complete repository +* Workspace configuration introduces a small amount of additional complexity + +--- + +## Related TOGAF Phases + +* Architecture Vision (Phase A) +* Technology Architecture (Phase D) +* Opportunities & Solutions (Phase E) +* Migration Planning (Phase F) +* Implementation Governance (Phase G) +* Architecture Change Management (Phase H) + +--- + +## References + +* LUNA Charts Architecture Wiki +* ADR-0002: Technology Stack +* pnpm Workspaces Documentation \ No newline at end of file -- 2.54.0 From d8477ee2ac935ce61eeef1705e0cefd273cb1894 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:25:53 +0200 Subject: [PATCH 34/88] Convert Markdown file to MDX --- ...00-repository-structure.md => 000100-repository-structure.mdx} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/src/content/docs/adr/{000100-repository-structure.md => 000100-repository-structure.mdx} (100%) diff --git a/docs/src/content/docs/adr/000100-repository-structure.md b/docs/src/content/docs/adr/000100-repository-structure.mdx similarity index 100% rename from docs/src/content/docs/adr/000100-repository-structure.md rename to docs/src/content/docs/adr/000100-repository-structure.mdx -- 2.54.0 From 67e4204365a8ad3f00ec5b0d0dc1dd029da40f7b Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:26:13 +0200 Subject: [PATCH 35/88] fix(docs): add Starlight frontmatter to ADR-0002 Add required `title`/`description` frontmatter and remove the redundant H1 heading so the file conforms to Starlight's content collection schema. --- .../docs/adr/000200-technology-stack.mdx | 214 ++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 docs/src/content/docs/adr/000200-technology-stack.mdx diff --git a/docs/src/content/docs/adr/000200-technology-stack.mdx b/docs/src/content/docs/adr/000200-technology-stack.mdx new file mode 100644 index 0000000..aa5b400 --- /dev/null +++ b/docs/src/content/docs/adr/000200-technology-stack.mdx @@ -0,0 +1,214 @@ +--- +title: "ADR-0002: Technology Stack" +description: "Auswahl des Technologie-Stacks für LUNA Charts basierend auf den TOGAF-Architekturprinzipien." +--- + +* **Status:** Accepted +* **Date:** 2026-07-12 +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +LUNA Charts is an open-source charting library designed to provide accessible, framework-agnostic, and strongly typed chart components. + +The selected technology stack must support the architectural principles defined during the TOGAF Architecture Development Method (ADM), including: + +* Accessibility by Design +* Framework Agnosticism +* Strong Type Safety +* Component-Based Architecture +* High Developer Experience +* Open Source Collaboration +* Long-Term Maintainability + +Rather than selecting technologies based on popularity, each technology is evaluated according to its ability to support these architectural goals. + +--- + +## Decision Drivers + +The following factors influenced the decision: + +* Accessibility +* Framework Agnosticism +* Type Safety +* Developer Experience +* Maintainability +* Testability +* Documentation +* Open Source Collaboration +* Long-Term Evolution + +--- + +## Considered Alternatives + +| Technology Area | Considered Alternatives | Selected | +| ------------------------ | ----------------------------------------------- | ------------------ | +| Component Framework | React, Vue, Angular, Lit, StencilJS | **StencilJS** | +| Component Documentation | Storybook, Styleguidist | **Storybook** | +| Project Documentation | Docusaurus, VitePress, Starlight | **Starlight** | +| Package Manager | npm, Yarn, pnpm | **pnpm** | +| Unit Testing | Vitest, Jest | **Jest** | +| Browser Testing | Cypress, Playwright | **Playwright** | +| Accessibility Testing | Manual Testing Only, axe-core | **axe-core** | +| Code Formatting | Manual Formatting, Prettier | **Prettier** | +| Static Analysis | TSLint, ESLint | **ESLint** | +| Versioning | Manual Versioning, Semantic Release, Changesets | **Changesets** | +| Continuous Integration | GitLab CI, Azure Pipelines, GitHub Actions | **GitHub Actions** | + +The selected technologies best support the project's architectural goals while remaining broadly adopted and well documented. + +--- + +## Decision + +The following technology stack is adopted for the implementation of LUNA Charts. + +| Technology | Purpose | +| ------------------- | ---------------------------------------------------- | +| **StencilJS** | Web Component development | +| **Storybook** | Interactive component documentation and development | +| **Starlight** | Project and architecture documentation | +| **TypeScript** | Strong typing and developer tooling | +| **pnpm** | Package management and workspace support | +| **Jest** | Unit testing | +| **Playwright** | Browser and interaction testing | +| **axe-core** | Accessibility validation | +| **ESLint** | Static code analysis | +| **Prettier** | Consistent code formatting | +| **Changesets** | Versioning and release management | +| **GitHub Actions** | Continuous Integration | + +The technology stack is considered part of the project's architecture and may only be changed through a new Architecture Decision Record. + +--- + +## Rationale + +Each technology has been selected because it directly supports one or more architectural principles. + +### StencilJS + +StencilJS enables the development of standards-based Web Components. + +This aligns with the project's goal of remaining framework agnostic while allowing framework-specific wrappers to be generated automatically during the build process. + +--- + +### Storybook + +Storybook provides an isolated environment for component development. + +It supports rapid development, interactive examples, accessibility validation, and visual review of chart components. + +--- + +### Starlight + +Starlight serves as the central documentation platform. + +It separates architectural documentation from component documentation and supports long-term maintainability of the project's knowledge base. + +--- + +### TypeScript + +TypeScript enables strong compile-time validation. + +It improves the developer experience by detecting integration errors early and providing comprehensive IDE support. + +--- + +### pnpm + +pnpm Workspaces enable a modular repository structure while maintaining a single source of truth for dependencies and tooling. + +--- + +### Jest + +Jest provides fast unit testing for business logic, utility functions, configuration handling, validation, and other non-browser-specific functionality. + +--- + +### Playwright + +Playwright validates component behavior inside real browsers. + +It is used to verify keyboard interaction, focus management, SVG rendering, and other browser-dependent accessibility features. + +--- + +### axe-core + +axe-core automatically validates accessibility requirements and complements manual accessibility reviews. + +--- + +### ESLint and Prettier + +Both tools ensure consistent coding standards across the project and reduce friction during code reviews. + +--- + +### Changesets + +Changesets manages package versioning and release notes while keeping release decisions under maintainer control. + +--- + +### GitHub Actions + +GitHub Actions automates testing, validation, and release workflows to ensure consistent software quality. + +--- + +## Consequences + +### Positive + +* Technology stack directly supports architectural principles. +* Strong accessibility support throughout development. +* Framework-independent component model. +* Excellent developer experience. +* Consistent documentation workflow. +* High maintainability. +* Modern testing strategy. +* Simplified contributor onboarding. +* Automated quality assurance. +* Scalable project foundation. + +### Negative + +* Initial project setup is more complex. +* Contributors must become familiar with multiple development tools. +* Toolchain maintenance requires periodic updates. +* CI configuration is more comprehensive than for smaller projects. + +--- + +## Related TOGAF Phases + +* Architecture Vision (Phase A) +* Information Systems Architecture (Phase C) +* Technology Architecture (Phase D) +* Opportunities & Solutions (Phase E) +* Migration Planning (Phase F) +* Implementation Governance (Phase G) + +--- + +## References + +* LUNA Charts Architecture Wiki +* ADR-0001: Repository Structure +* ADR-0003: Web Components as Public API +* StencilJS Documentation +* Storybook Documentation +* Starlight Documentation +* Playwright Documentation +* Jest Documentation +* pnpm Documentation \ No newline at end of file -- 2.54.0 From 9ad74eaa7996335cb610872d3d6f01cbda3901e5 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:30:07 +0200 Subject: [PATCH 36/88] fix(docs): add Starlight frontmatter to ADR-0003 Add required `title`/`description` frontmatter and remove the redundant H1 heading so the file conforms to Starlight's content collection schema. --- .../000300-web-components-as-public-api.mdx | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 docs/src/content/docs/adr/000300-web-components-as-public-api.mdx diff --git a/docs/src/content/docs/adr/000300-web-components-as-public-api.mdx b/docs/src/content/docs/adr/000300-web-components-as-public-api.mdx new file mode 100644 index 0000000..515155f --- /dev/null +++ b/docs/src/content/docs/adr/000300-web-components-as-public-api.mdx @@ -0,0 +1,113 @@ +--- +title: "ADR-0003: Web Components as Public API" +description: "Entscheidung, die öffentliche API von LUNA Charts ausschließlich über Web Components bereitzustellen." +--- + +* **Status:** Accepted +* **Date:** 2026-07-12 +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +LUNA Charts is intended to be an open-source charting library that can be integrated into applications regardless of the frontend framework used. + +A primary architectural objective defined during the Architecture Vision and Technology Architecture phases is **framework agnosticism**. Consumers should be able to use LUNA Charts in React, Angular, Vue, Svelte, or plain HTML applications without requiring framework-specific implementations of the chart components. + +The public API therefore had to be based on a stable and widely adopted web standard rather than a framework-specific component model. + +--- + +## Decision Drivers + +The following factors influenced this decision: + +* Framework Agnosticism +* Standards Compliance +* Long-Term Maintainability +* Accessibility +* Developer Experience +* Component Reusability +* Open Web Platform +* Future Compatibility + +--- + +## Considered Alternatives + +| Alternative | Description | +| --------------------------------------- | ------------------------------------------------------------------- | +| React Components | Components implemented exclusively for React. | +| Vue Components | Components implemented exclusively for Vue. | +| Angular Components | Components implemented exclusively for Angular. | +| Separate implementations per framework | Independent implementations for each supported framework. | +| **Web Components** | Standards-based custom elements implemented using Web Components. | + +Framework-specific implementations were rejected because they increase maintenance effort, duplicate functionality, and couple the architecture to individual frontend ecosystems. + +Maintaining multiple implementations would also increase the likelihood of inconsistent behavior across frameworks. + +--- + +## Decision + +LUNA Charts exposes its public API exclusively through **Web Components**. + +The project uses **StencilJS** to implement these components according to the Web Components standard. + +Framework integrations (e.g., React, Angular, Vue) are generated automatically during the build process and are considered **integration adapters**, not independent implementations. + +The architecture therefore consists of a single component model with multiple consumption options. + +--- + +## Rationale + +Web Components are an open web standard supported by all modern browsers. + +By building directly upon this standard, LUNA Charts remains independent of any frontend framework while still supporting popular ecosystems through automatically generated wrappers. + +This approach minimizes duplicated implementation effort and guarantees consistent functionality across all supported platforms. + +Using a single implementation also simplifies testing, documentation, maintenance, and accessibility validation. + +Framework wrappers remain lightweight integration layers and do not introduce architectural differences. + +--- + +## Consequences + +### Positive + +* Framework-independent public API. +* Single implementation for all supported platforms. +* Reduced maintenance effort. +* Consistent behavior across frameworks. +* Simplified testing and documentation. +* Better long-term stability. +* Supports future frontend frameworks without redesigning the library. + +### Negative + +* Developers unfamiliar with Web Components may require additional documentation. +* Framework wrappers depend on the capabilities provided by StencilJS. +* Some framework-specific features cannot be exposed without breaking framework independence. + +--- + +## Related TOGAF Phases + +* Architecture Vision (Phase A) +* Information Systems Architecture (Phase C) +* Technology Architecture (Phase D) +* Opportunities & Solutions (Phase E) + +--- + +## References + +* LUNA Charts Architecture Wiki +* ADR-0002: Technology Stack +* StencilJS Documentation +* Web Components Specification \ No newline at end of file -- 2.54.0 From cc446bc6830faba59e099780daa394779a40f9b3 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:32:06 +0200 Subject: [PATCH 37/88] fix(docs): add Starlight frontmatter to ADR-0004 Add required `title`/`description` frontmatter and remove the redundant H1 heading so the file conforms to Starlight's content collection schema. --- .../000400-svg-as-rendering-technology.mdx | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 docs/src/content/docs/adr/000400-svg-as-rendering-technology.mdx diff --git a/docs/src/content/docs/adr/000400-svg-as-rendering-technology.mdx b/docs/src/content/docs/adr/000400-svg-as-rendering-technology.mdx new file mode 100644 index 0000000..9fb2845 --- /dev/null +++ b/docs/src/content/docs/adr/000400-svg-as-rendering-technology.mdx @@ -0,0 +1,132 @@ +--- +title: "ADR-000400: SVG as Rendering Technology" +description: "Entscheidung, SVG als Rendering-Technologie für alle Chart-Visualisierungen in LUNA Charts einzusetzen." +--- + +* **Status:** Accepted +* **Date:** 2026-07-12 +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +One of the primary goals of LUNA Charts is to provide accessible chart components that support modern accessibility standards and assist developers in creating WCAG-compliant data visualizations. + +Charts are graphical user interfaces that contain meaningful information. Depending on the chart type, individual graphical elements such as bars, points, labels, legends, and axes may need to be discoverable by assistive technologies, focusable using the keyboard, or interactable by users. + +The rendering technology therefore has a direct impact on accessibility, developer experience, testing capabilities, maintainability, and future extensibility. + +A rendering technology had to be selected that supports these architectural goals while remaining compatible with modern browsers and Web Components. + +--- + +## Decision Drivers + +The following factors influenced this decision: + +* Accessibility +* WCAG Compliance +* Semantic Structure +* Keyboard Navigation +* Focus Management +* Screen Reader Support +* Developer Experience +* Maintainability +* Browser Compatibility +* Long-Term Evolution + +--- + +## Considered Alternatives + +| Alternative | Description | +| ----------------- | ------------------------------------------------------------ | +| HTML Elements | Represent charts using standard HTML elements. | +| Canvas | Render graphics using the HTML Canvas API. | +| Hybrid Rendering | Combine Canvas and SVG depending on the chart type. | +| **SVG** | Render all chart graphics using Scalable Vector Graphics. | + +HTML was rejected because it is not designed to represent complex graphical visualizations. + +Canvas was rejected because graphical objects are rendered as pixels rather than DOM elements. This makes individual chart elements difficult to expose to assistive technologies and increases implementation complexity for keyboard interaction and accessibility. + +Hybrid rendering was rejected because it would introduce two rendering models, increasing architectural complexity, testing effort, and maintenance costs. + +--- + +## Decision + +All chart visualizations within LUNA Charts are rendered using **Scalable Vector Graphics (SVG)**. + +Each visual element (e.g., bars, lines, points, labels, legends, and axes) is represented as an individual SVG element within the DOM. + +Accessibility information, keyboard navigation, focus management, and interaction are implemented directly on these SVG elements. + +Canvas is not used as a rendering technology for chart components. + +--- + +## Rationale + +SVG integrates directly into the browser's Document Object Model (DOM), allowing every graphical element to be individually identified, styled, focused, and enriched with accessibility information. + +This capability aligns with the project's goal of supporting accessible chart implementations by design. + +Using SVG enables the library to: + +* associate semantic information with graphical elements, +* support keyboard navigation, +* expose meaningful structures to assistive technologies, +* apply standard web accessibility techniques, +* simplify automated accessibility testing, +* integrate naturally with Web Components. + +SVG also provides excellent scalability across different display resolutions without requiring additional rendering logic. + +Although Canvas may provide better rendering performance for extremely large datasets, accessibility and maintainability are considered higher architectural priorities for LUNA Charts. + +--- + +## Consequences + +### Positive + +* Native DOM representation of graphical elements. +* Improved accessibility support. +* Better compatibility with assistive technologies. +* Simplified keyboard navigation. +* Simplified focus management. +* Easier automated accessibility testing. +* Resolution-independent rendering. +* Consistent styling using CSS. +* Better integration with Web Components. +* Simplified debugging using browser developer tools. + +### Negative + +* Rendering performance may decrease for extremely large datasets. +* SVG documents become larger as chart complexity increases. +* Very large visualizations may require optimization techniques such as virtualization or data aggregation. + +These trade-offs are considered acceptable because accessibility and maintainability have higher architectural priority than maximum rendering performance. + +--- + +## Related TOGAF Phases + +* Architecture Vision (Phase A) +* Business Architecture (Phase B) +* Information Systems Architecture (Phase C) +* Technology Architecture (Phase D) +* Opportunities & Solutions (Phase E) + +--- + +## References + +* LUNA Charts Architecture Wiki +* ADR-000200: Technology Stack +* ADR-000300: Web Components as Public API +* Scalable Vector Graphics (SVG) Specification +* Web Content Accessibility Guidelines (WCAG) \ No newline at end of file -- 2.54.0 From f1339b1d5e64be18ae14dd21ba09c0dac73e24ac Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:34:49 +0200 Subject: [PATCH 38/88] fix(docs): add Starlight frontmatter to ADR-0005 Add required `title`/`description` frontmatter and remove the redundant H1 heading so the file conforms to Starlight's content collection schema. --- ...cessibility-as-a-cross-cutting-concern.mdx | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 docs/src/content/docs/adr/000500-accessibility-as-a-cross-cutting-concern.mdx diff --git a/docs/src/content/docs/adr/000500-accessibility-as-a-cross-cutting-concern.mdx b/docs/src/content/docs/adr/000500-accessibility-as-a-cross-cutting-concern.mdx new file mode 100644 index 0000000..6a7fe7d --- /dev/null +++ b/docs/src/content/docs/adr/000500-accessibility-as-a-cross-cutting-concern.mdx @@ -0,0 +1,142 @@ +--- +title: "ADR-000500: Accessibility as a Cross-Cutting Concern" +description: "Entscheidung, Accessibility als Cross-Cutting Concern über alle Architekturebenen von LUNA Charts zu behandeln." +--- + +* **Status:** Accepted +* **Date:** 2026-07-12 +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +Accessibility is the primary quality attribute of LUNA Charts. + +The project's objective is not only to render charts but also to support developers in creating accessible data visualizations that align with the Web Content Accessibility Guidelines (WCAG). + +During the architectural design process, accessibility was initially considered as a separate subsystem responsible for validating and enforcing accessibility requirements. + +Further analysis revealed that accessibility affects nearly every architectural layer of the system. + +Rendering, component APIs, configuration, validation, interaction, keyboard navigation, documentation, and testing all contribute to the accessibility of the final chart. + +As a result, accessibility cannot be implemented as an isolated engine without introducing architectural inconsistencies. + +--- + +## Decision Drivers + +The following factors influenced this decision: + +* Accessibility by Design +* WCAG Compliance +* Separation of Concerns +* Maintainability +* Consistency +* Developer Experience +* Long-Term Evolution +* Testability + +--- + +## Considered Alternatives + +| Alternative | Description | +| -------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| Dedicated Accessibility Engine | A centralized subsystem responsible for accessibility validation and enforcement. | +| Accessibility Utilities | A collection of reusable accessibility helper functions. | +| **Cross-Cutting Concern** | Accessibility is integrated into every architectural layer where accessibility-related decisions are made. | + +A dedicated accessibility engine was rejected because accessibility cannot be guaranteed after a chart has already been designed or rendered. + +Accessibility decisions must be made continuously throughout the rendering process and component lifecycle. + +Accessibility utilities remain part of the implementation but do not represent the architectural model. + +--- + +## Decision + +Accessibility is treated as a **cross-cutting concern** throughout the entire architecture of LUNA Charts. + +Accessibility responsibilities are distributed across multiple architectural modules rather than centralized in a single subsystem. + +Examples include: + +* Public component APIs +* TypeScript type definitions +* Validation +* Rendering +* SVG generation +* Keyboard interaction +* Focus management +* Documentation +* Automated testing + +Each architectural component is responsible for implementing the accessibility requirements relevant to its own responsibility. + +--- + +## Rationale + +Accessibility is not a feature that can be added after rendering has completed. + +Instead, accessibility emerges from many architectural decisions working together. + +Examples include: + +* selecting SVG instead of Canvas, +* designing semantic component APIs, +* exposing accessible keyboard interaction, +* generating meaningful DOM structures, +* providing strongly typed configuration, +* validating accessibility-related configuration, +* documenting accessibility behavior, +* verifying accessibility through automated testing. + +Treating accessibility as a cross-cutting concern ensures that accessibility remains an architectural responsibility rather than an isolated implementation detail. + +This approach also aligns with established software architecture principles, where quality attributes such as security, logging, and observability are commonly treated as cross-cutting concerns. + +--- + +## Consequences + +### Positive + +* Accessibility is considered throughout the entire development process. +* Architectural responsibilities remain clearly separated. +* Accessibility becomes part of every feature rather than an optional extension. +* Better support for WCAG-compliant chart implementations. +* Simplified long-term maintenance. +* Consistent accessibility behavior across all chart types. +* Accessibility can be validated at multiple architectural levels. + +### Negative + +* Accessibility responsibilities are distributed across multiple modules. +* Contributors must understand accessibility requirements beyond their immediate implementation. +* Architectural reviews must continuously consider accessibility implications. + +These trade-offs are acceptable because accessibility represents the primary quality objective of LUNA Charts. + +--- + +## Related TOGAF Phases + +* Architecture Vision (Phase A) +* Business Architecture (Phase B) +* Information Systems Architecture (Phase C) +* Technology Architecture (Phase D) +* Implementation Governance (Phase G) + +--- + +## References + +* LUNA Charts Architecture Wiki +* ADR-000300: Web Components as Public API +* ADR-000400: SVG as Rendering Technology +* Web Content Accessibility Guidelines (WCAG) +* WAI-ARIA Authoring Practices Guide \ No newline at end of file -- 2.54.0 From 3d4c01250dcb6fb39be115f1009aad7a3e5b3abf Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:41:24 +0200 Subject: [PATCH 39/88] docs(adr): add ADR overview index page Add an introductory index page explaining what ADRs are, why LUNA Charts uses them, and listing the currently documented decisions. --- docs/src/content/docs/adr/README.mdx | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 docs/src/content/docs/adr/README.mdx diff --git a/docs/src/content/docs/adr/README.mdx b/docs/src/content/docs/adr/README.mdx new file mode 100644 index 0000000..fb05727 --- /dev/null +++ b/docs/src/content/docs/adr/README.mdx @@ -0,0 +1,29 @@ +--- +title: "Architecture Decision Records" +description: "Overview of the Architecture Decision Records (ADRs) for LUNA Charts." +--- + +## What are ADRs? + +An **Architecture Decision Record (ADR)** documents an important architectural decision along with its context, the alternatives considered, and the resulting consequences. + +Instead of keeping knowledge only in the heads of individual maintainers, every decision is recorded in a traceable way: **why** it was made, **which options** were rejected, and **which trade-offs** were consciously accepted. + +## Why do we use ADRs? + +* **Traceability** – decisions remain understandable even years later. +* **Onboarding** – new contributors quickly understand why the project is structured the way it is. +* **Consistency** – future decisions can reference existing ADRs instead of repeating past discussions. +* **Governance** – architectural changes happen deliberately, through a new ADR, rather than silently in the code. + +## ADRs at LUNA Charts + +LUNA Charts is an accessible, framework-agnostic charting library. Architectural decisions follow the phases of the **TOGAF Architecture Development Method (ADM)** and are continuously documented as ADRs – from repository structure to the technology stack to foundational principles such as accessibility. + +The following ADRs have been documented so far: + +* **ADR-0001** – Repository Structure +* **ADR-0002** – Technology Stack +* **ADR-0003** – Web Components as Public API +* **ADR-0004** – SVG as Rendering Technology +* **ADR-0005** – Accessibility as a Cross-Cutting Concern \ No newline at end of file -- 2.54.0 From 080987ca52e76755a21ddcc0e5ce6eb1f0df4ec3 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 16:48:26 +0200 Subject: [PATCH 40/88] docs(adr): add Starlight frontmatter to ADR template Add required `title`/`description` frontmatter and remove the redundant H1 heading so new ADRs created from this template conform to Starlight's content collection schema by default. --- docs/src/content/docs/adr/template.mdx | 120 +++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 docs/src/content/docs/adr/template.mdx diff --git a/docs/src/content/docs/adr/template.mdx b/docs/src/content/docs/adr/template.mdx new file mode 100644 index 0000000..4ccee8f --- /dev/null +++ b/docs/src/content/docs/adr/template.mdx @@ -0,0 +1,120 @@ +--- +title: "ADR-XXXXXX: Title" +description: "One-sentence summary of the decision." +--- + +* **Status:** Proposed +* **Date:** YYYY-MM-DD +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +Describe the background that led to this decision. + +Questions that should be answered: + +* What problem needs to be solved? +* Which architectural constraints exist? +* Which project goals influence the decision? +* Which stakeholders are affected? + +--- + +## Decision Drivers + +List the primary factors that influenced the decision. + +Typical examples: + +* Accessibility +* Performance +* Developer Experience +* Maintainability +* Framework Agnosticism +* Type Safety +* Simplicity +* Scalability + +--- + +## Considered Alternatives + +Document all relevant alternatives. + +| Alternative | Description | +| ----------- | ----------- | +| Option A | Description | +| Option B | Description | +| Option C | Description | + +Briefly explain why the alternatives were not selected. + +--- + +## Decision + +Describe the selected solution. + +This section should clearly answer: + +> What has been decided? + +--- + +## Rationale + +Explain why the selected solution best satisfies the decision drivers. + +This section should justify the decision from an architectural perspective. + +--- + +## Consequences + +### Positive + +Describe the expected benefits. + +Examples: + +* Improved maintainability +* Better accessibility +* Easier onboarding +* Reduced complexity + +### Negative + +Describe possible drawbacks. + +Examples: + +* Increased implementation effort +* Additional maintenance +* Performance trade-offs + +--- + +## Related TOGAF Phases + +List all architecture phases that influenced this decision. + +Examples: + +* Architecture Vision (Phase A) +* Technology Architecture (Phase D) +* Implementation Governance (Phase G) + +--- + +## References + +Provide references to related documentation. + +Examples: + +* Architecture Wiki +* Other ADRs +* External standards +* Specifications \ No newline at end of file -- 2.54.0 From 869ea553789e923a33433975fe44c25a970445b5 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 19:48:44 +0200 Subject: [PATCH 41/88] fix(docs): Updated file, to automatically search for MDX files. The MDX files are automatically placed in the ADM and ADR subfolders in the documentation --- docs/astro.config.mjs | 51 +++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs index 69b83b3..3ac2f9b 100644 --- a/docs/astro.config.mjs +++ b/docs/astro.config.mjs @@ -2,25 +2,38 @@ import { defineConfig } from 'astro/config'; import starlight from '@astrojs/starlight'; + // https://astro.build/config export default defineConfig({ - integrations: [ - starlight({ - title: 'My Docs', - social: [{ icon: 'github', label: 'GitHub', href: 'https://github.com/withastro/starlight' }], - sidebar: [ - { - label: 'Guides', - items: [ - // Each item here is one entry in the navigation menu. - { label: 'Example Guide', slug: 'guides/example' }, - ], - }, - { - label: 'Reference', - items: [{ autogenerate: { directory: 'reference' } }], - }, - ], - }), - ], + integrations: [ + starlight({ + title: 'LUNA-Charts', + social: [ + { + icon: 'github', + label: 'GitHub', + href: 'https://git.byting-pandas.ninja/Ninosaurier/LUNA-Charts', + }, + ], + sidebar: [ + { + label: 'Start Here', + items: [{ label: 'Getting Started', slug: 'getting-started' }], + }, + { + label: 'Architecture', + items: [ + { + label: 'ADM', + items: [{ autogenerate: { "directory": "architecture/adm" } }], + }, + { + label: 'ADRs', + items: [{ autogenerate: { "directory": "architecture/adr" } }], + }, + ], + }, + ], + }), + ], }); -- 2.54.0 From c6f83a9a90e1ab126dac9f5bc689a703e6b47e24 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Tue, 14 Jul 2026 19:55:28 +0200 Subject: [PATCH 42/88] fix(docs): Added an adr template Developers can use template for creating new adrs --- .../docs/architecture/adr/template.mdx | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 docs/src/content/docs/architecture/adr/template.mdx diff --git a/docs/src/content/docs/architecture/adr/template.mdx b/docs/src/content/docs/architecture/adr/template.mdx new file mode 100644 index 0000000..77057b0 --- /dev/null +++ b/docs/src/content/docs/architecture/adr/template.mdx @@ -0,0 +1,120 @@ +--- +title: Template for new ADRs +description: "One-sentence summary of the decision." +--- + +* **Status:** Proposed +* **Date:** YYYY-MM-DD +* **Decision Makers:** LUNA Charts Maintainers + +--- + +## Context + +Describe the background that led to this decision. + +Questions that should be answered: + +* What problem needs to be solved? +* Which architectural constraints exist? +* Which project goals influence the decision? +* Which stakeholders are affected? + +--- + +## Decision Drivers + +List the primary factors that influenced the decision. + +Typical examples: + +* Accessibility +* Performance +* Developer Experience +* Maintainability +* Framework Agnosticism +* Type Safety +* Simplicity +* Scalability + +--- + +## Considered Alternatives + +Document all relevant alternatives. + +| Alternative | Description | +| ----------- | ----------- | +| Option A | Description | +| Option B | Description | +| Option C | Description | + +Briefly explain why the alternatives were not selected. + +--- + +## Decision + +Describe the selected solution. + +This section should clearly answer: + +> What has been decided? + +--- + +## Rationale + +Explain why the selected solution best satisfies the decision drivers. + +This section should justify the decision from an architectural perspective. + +--- + +## Consequences + +### Positive + +Describe the expected benefits. + +Examples: + +* Improved maintainability +* Better accessibility +* Easier onboarding +* Reduced complexity + +### Negative + +Describe possible drawbacks. + +Examples: + +* Increased implementation effort +* Additional maintenance +* Performance trade-offs + +--- + +## Related TOGAF Phases + +List all architecture phases that influenced this decision. + +Examples: + +* Architecture Vision (Phase A) +* Technology Architecture (Phase D) +* Implementation Governance (Phase G) + +--- + +## References + +Provide references to related documentation. + +Examples: + +* Architecture Wiki +* Other ADRs +* External standards +* Specifications \ No newline at end of file -- 2.54.0 From 912a53d7df81f4940aa126b1cce1b36bdf5d3ffb Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Wed, 15 Jul 2026 00:21:16 +0200 Subject: [PATCH 43/88] fix(docs) Migration of the adm-document Added the whole adm-document oft LUNA-Charts in AstroJS --- .../adm/architecture-change-management.mdx | 169 +++++++++++++ .../architecture/adm/architecture-vision.mdx | 135 +++++++++++ .../adm/business-architecture.mdx | 197 +++++++++++++++ .../adm/implementation-governance.mdx | 199 +++++++++++++++ .../content/docs/architecture/adm/index.mdx | 74 ++++++ .../adm/information-systems-architecture.mdx | 206 ++++++++++++++++ .../docs/architecture/adm/introduction.mdx | 29 +++ .../architecture/adm/migration-planning.mdx | 221 +++++++++++++++++ .../adm/opportunities-and-solutions.mdx | 227 ++++++++++++++++++ .../adm/technology-architecture.mdx | 226 +++++++++++++++++ .../content/docs/architecture/adr/index.mdx | 29 +++ 11 files changed, 1712 insertions(+) create mode 100644 docs/src/content/docs/architecture/adm/architecture-change-management.mdx create mode 100644 docs/src/content/docs/architecture/adm/architecture-vision.mdx create mode 100644 docs/src/content/docs/architecture/adm/business-architecture.mdx create mode 100644 docs/src/content/docs/architecture/adm/implementation-governance.mdx create mode 100644 docs/src/content/docs/architecture/adm/index.mdx create mode 100644 docs/src/content/docs/architecture/adm/information-systems-architecture.mdx create mode 100644 docs/src/content/docs/architecture/adm/introduction.mdx create mode 100644 docs/src/content/docs/architecture/adm/migration-planning.mdx create mode 100644 docs/src/content/docs/architecture/adm/opportunities-and-solutions.mdx create mode 100644 docs/src/content/docs/architecture/adm/technology-architecture.mdx create mode 100644 docs/src/content/docs/architecture/adr/index.mdx diff --git a/docs/src/content/docs/architecture/adm/architecture-change-management.mdx b/docs/src/content/docs/architecture/adm/architecture-change-management.mdx new file mode 100644 index 0000000..43f71ed --- /dev/null +++ b/docs/src/content/docs/architecture/adm/architecture-change-management.mdx @@ -0,0 +1,169 @@ +--- +title: 8. Architecture Change Management +description: Process for evaluating and managing future architectural change in LUNA Charts, ensuring the system evolves without losing consistency. +sidebar: + order: 9 +--- + +## 1. Overview + +Architecture Change Management defines how LUNA Charts adapts to new requirements, technologies, standards, and stakeholder needs throughout its lifecycle. + +Rather than treating the architecture as a static artifact, this phase establishes a controlled evolution process that preserves architectural consistency while enabling continuous improvement. + +All architectural changes follow documented governance processes and remain aligned with the project's long-term vision and architectural principles. + +## 2. Objectives + +Architecture Change Management pursues the following objectives: + +- Ensure the long-term sustainability of the architecture +- Adapt to technological and regulatory changes +- Preserve architectural consistency across releases +- Support controlled innovation without compromising existing principles +- Maintain traceable architectural evolution + +## 3. Architecture Change Triggers + +Architectural changes may be initiated by various internal and external factors. + +Typical triggers include: + +### External Triggers + +- Updates to WCAG recommendations +- Changes in accessibility regulations +- Browser platform evolution +- SVG specification changes +- TypeScript language evolution +- New web platform capabilities + +### Internal Triggers + +- Architectural improvements +- Lessons learned during implementation +- Long-term maintainability concerns +- Performance improvements +- Community feedback +- New functional requirements + +The existence of a trigger does not automatically require an architectural change. Every trigger must first be evaluated. + +## 4. Change Evaluation + +Every proposed architectural change is evaluated before implementation begins. + +Evaluation includes questions such as: + +- Does the proposal align with the Architecture Vision? +- Does it respect the established architecture principles? +- Does it improve long-term maintainability? +- Does it preserve accessibility objectives? +- Does it maintain a positive developer experience? +- Does the expected value justify the architectural impact? + +Architectural principles always take precedence over feature demand. + +New functionality should strengthen the existing architecture rather than weaken its consistency. + +## 5. Architecture Evolution Process + +Architectural evolution follows a structured review process. + +```text +Change Trigger + ↓ +Architecture Evaluation + ↓ +Architecture Discussion + ↓ +Maintainer Decision + ↓ +Architecture Documentation Update + ↓ +Implementation + ↓ +Project Documentation Update + ↓ +Release +``` + +Implementation follows documented architectural decisions rather than defining them. + +## 6. Documentation Management + +Architecture documentation is the primary source of truth for architectural decisions. + +Whenever an architectural change is approved, the following artifacts should be reviewed and updated where applicable: + +- Architecture documentation (ADM phases) +- Developer documentation +- Usage examples +- Test suites +- Public Change Log + +Documentation updates should precede or accompany implementation to ensure architectural transparency. + +## 7. Continuous Improvement + +LUNA Charts is designed to evolve continuously through incremental architectural improvements. + +Continuous improvement includes: + +- Refining existing architectural decisions +- Improving accessibility support +- Simplifying developer experience +- Enhancing maintainability +- Responding to technological evolution + +Continuous evolution should preserve the project's architectural identity. + +## 8. Major Architectural Evolution + +Some changes may fundamentally affect the architecture. + +Examples include: + +- Replacing core rendering technologies +- Redefining the public API model +- Introducing a new architectural paradigm +- Fundamental changes to supported platforms + +Such changes should be treated as major architectural revisions and may require a new major software version. + +Major architectural evolution should be carefully evaluated before implementation begins. + +## 9. Relationship to Previous Phases + +Architecture Change Management builds upon all previous ADM phases. + +- Architecture Vision defines the long-term direction. +- Business Architecture defines the expected business value. +- Information Systems Architecture defines the application structure. +- Technology Architecture defines the technical implementation. +- Opportunities & Solutions defines the implementation roadmap. +- Migration Planning defines delivery planning. +- Implementation Governance ensures architectural compliance during implementation. + +Architecture Change Management ensures that future architectural evolution remains aligned with these foundations. + +## 10. Key Outcome of this Phase + +Architecture Change Management establishes: + +- A structured process for architectural evolution +- Clear architecture change triggers +- Evaluation criteria for architectural decisions +- Documentation-first architecture evolution +- Continuous architectural improvement +- Controlled management of major architectural revisions + +The result is an architecture that remains stable, maintainable, and adaptable throughout the lifecycle of LUNA Charts. + +## 11. Change Log + +No structural changes were introduced in this document during this iteration. + +This phase concludes the Architecture Development Method (ADM) lifecycle by defining how architectural evolution is managed after implementation. + +The Architecture Change Management process complements the governance model established in Implementation Governance (Phase G) and provides the long-term evolution strategy for LUNA Charts. \ No newline at end of file diff --git a/docs/src/content/docs/architecture/adm/architecture-vision.mdx b/docs/src/content/docs/architecture/adm/architecture-vision.mdx new file mode 100644 index 0000000..6924e95 --- /dev/null +++ b/docs/src/content/docs/architecture/adm/architecture-vision.mdx @@ -0,0 +1,135 @@ +--- +title: 1. Architecture Vision +description: Problem statement, objectives, target audience, guiding principles, and success criteria for LUNA Charts. +sidebar: + order: 2 +--- + +import { Aside } from '@astrojs/starlight/components'; + +## 1. Problem Statement + +Modern web applications are increasingly required to meet accessibility standards such as the European Accessibility Act (EAA) and WCAG 2.2 guidelines. + +However, implementing accessible data visualizations remains a complex and underrepresented area in frontend development. Many developers lack specialized knowledge in accessibility design patterns, especially for chart components such as bar, line, or pie charts. As a result, accessibility is often added late, inconsistently, or not at all. + +## 2. Objective + +LUNA Charts aims to provide a reusable, developer-friendly charting library that enables the creation of accessible, WCAG-oriented data visualizations for web applications. + +The primary objective is to reduce the complexity of implementing accessibility in charts while maintaining flexibility for customization and integration into modern frontend stacks. + +## 3. Target Audience + +The primary stakeholders of LUNA Charts are: + +- Frontend developers integrating chart components into web applications +- Full-stack developers building data-driven products +- Teams responsible for accessibility compliance in digital products + +Secondary stakeholders include: + +- UX/UI designers concerned with accessible data representation +- Accessibility specialists reviewing compliance with WCAG standards +- End users, including users with visual, cognitive, or motor impairments + +## 4. Benefits + +LUNA Charts provides the following benefits: + +- Simplifies the implementation of accessible data visualizations +- Reduces the need for deep accessibility expertise in development teams +- Promotes consistent WCAG-aligned chart behavior across applications +- Improves development speed by providing reusable, standardized components +- Enhances end-user accessibility for data-driven interfaces +- Supports regulatory compliance with accessibility requirements + +## 5. Scope + +LUNA Charts is a frontend-focused charting library providing reusable components for accessible data visualization. + +It is further defined as a **closed system with a strictly controlled input boundary and deterministic internal processing pipeline** (see [Section 8.4](#84-system-boundary-and-extensibility-constraint)). + +## 6. Architecture Principles + +The following principles guide all architectural decisions in LUNA Charts. They apply across all ADM phases and serve as the basis for evaluating design options, resolving conflicts, and maintaining long-term consistency. + +| ID | Principle | Statement | Rationale | +|----|-----------|-----------|-----------| +| P01 | Accessibility by Design | Accessibility is a core requirement of every component, not a feature added after the fact. | Aligns with the EAA and WCAG mandate; prevents costly rework in later development stages. | +| P02 | Framework Agnosticism | LUNA Charts must not introduce tight coupling to any specific frontend framework. | Maximizes adoption potential across React, Vue, Angular, and Web Components ecosystems. | +| P03 | Developer Experience First | Every API decision is evaluated primarily by the effort it imposes on the integrating developer. | Adoption depends directly on integration speed and ease of use. | +| P04 | Open Source by Default | LUNA Charts is developed and maintained as an open-source project. | Builds community trust, enables external contributions, and ensures regulatory transparency. | +| P05 | Standards over Convention | Where open standards exist (WCAG, ARIA, WAI-ARIA), LUNA Charts follows them over proprietary patterns. | Ensures long-term maintainability and compatibility with assistive technologies. | +| P06 | Lightweight by Design | The library actively minimizes external dependencies and bundle size. | Prevents performance regressions in integrating products. | +| P07 | Separation of Concerns | Visual rendering, data processing, configuration resolution, and cross-cutting concerns are clearly separated. | Improves testability, predictability, and architectural clarity. | + +## 7. Success Criteria + +The success of LUNA Charts is primarily measured by: + +- Adoption rate among frontend and full-stack developers +- Integration into production-grade applications +- Reduction of accessibility-related implementation effort in charting +- Positive developer experience and ease of integration + +## 8. Change Log + +

+ +### 8.1 Accessibility Model Refinement + +- Accessibility was reclassified from a conceptual "Accessibility Engine" to a **system-wide cross-cutting concern** +- Accessibility is enforced across multiple layers: + - Default value handling (design-time) + - Validation and checks (build-time) + - Runtime warnings and safeguards + +*(See original Section 1 + Section 6 — refinement of internal architecture interpretation)* + +### 8.2 Architectural Structure Shift (Component → Pipeline Model) + +- The system architecture was refined from a component-oriented view to a **deterministic processing pipeline model** + +![Architectural Structure Shift](https://wiki.byting-pandas.ninja/luna-charts/architecture-vision/luna_charts_architectural_structure_shift.svg) + +- Internal processing is now defined as sequential stages: + - Input / Interaction + - Validation / Resilience + - Configuration Resolution + - Accessibility Enforcement + - Rendering + +*(Impacts Section 5 Scope and Section 6 Principles P07)* + +### 8.3 Developer Interaction Model Clarification + +- The developer interaction model was clarified as a **component-based declarative API** +- Developers interact via strongly typed chart-specific components such as: + - `` + - `` + - `` +- Each chart type defines its own strict data model + +*(Refines Section 2 Objective and Section 3 Target Audience assumptions)* + +### 8.4 System Boundary and Extensibility Constraint + +- The architecture was explicitly defined as a **closed system** +- No plugin system or extension points are provided +- Internal pipeline stages cannot be modified or extended by external developers +- Developer interaction is strictly limited to input and configuration at the system boundary + +*(Refines Section 5 Scope and Section 6 Principles P07)* + +--- + +## 🔎 Summary of Changes in This Document + +The following sections were updated compared to the original version: + +- Section 5 (Scope) → clarified system boundary model +- Section 6 (Principles) → refined separation of concerns wording +- Section 8 (Evolution Note) → fully introduced and structured architectural evolution \ No newline at end of file diff --git a/docs/src/content/docs/architecture/adm/business-architecture.mdx b/docs/src/content/docs/architecture/adm/business-architecture.mdx new file mode 100644 index 0000000..3afd91a --- /dev/null +++ b/docs/src/content/docs/architecture/adm/business-architecture.mdx @@ -0,0 +1,197 @@ +--- +title: 2. Business Architecture +description: Stakeholders, business processes, decision-making model, capability map, and business value driving adoption of LUNA Charts. +sidebar: + order: 3 +--- + +import { Aside } from '@astrojs/starlight/components'; + +## 1. Overview + +This Business Architecture describes how LUNA Charts is used in a real-world context. It focuses on stakeholders, decision processes, business workflows, and value creation rather than technical implementation details. + +LUNA Charts is a developer-focused charting library designed to support the creation of accessible, WCAG-compliant data visualizations in web applications. + +## 2. Business Context + +Modern software products are required to meet accessibility regulations such as the European Accessibility Act (EAA) and WCAG 2.2 guidelines. + +Accessible data visualization is a particularly complex area, especially for chart components (e.g., bar, line, pie charts), where accessibility is often inconsistent or added late in development. + +LUNA Charts addresses this gap by providing a reusable solution that reduces accessibility complexity for development teams. + +## 3. Business Actors (Stakeholders) + +### 3.1 Primary Actors + +- Development Team responsible for evaluating, integrating, and maintaining LUNA Charts within the application +- Product Owner responsible for final decision-making based on business value, cost, and priorities + +### 3.2 Supporting Actors + +- Software Architect provides technical evaluation and ensures long-term architectural consistency +- Accessibility / Compliance Stakeholders ensure adherence to WCAG and regulatory requirements + +### 3.3 End Users + +- Users consuming data visualizations +- Includes users with disabilities relying on assistive technologies + +## 4. Business Trigger (Why the process starts) + +The process begins when a product requirement emerges that requires accessible data visualizations. + +Typical triggers include: + +- Need for WCAG-compliant charts in a product +- Accessibility audit findings requiring improvements +- Product Owner requesting new data visualization features + +## 5. Business Process (LUNA Charts Adoption Lifecycle) + +The adoption of LUNA Charts typically follows this sequence: + +- A business need for accessible charts is identified +- The team researches possible solutions +- Alternative charting libraries are evaluated +- LUNA Charts is selected as a candidate solution +- The team validates usability through documentation and examples +- A proof of concept is created +- The Product Owner makes the final decision +- LUNA Charts is integrated into the product +- Developers implement charts in production features +- End users interact with accessible visualizations + +## 6. Decision-Making Model + +The decision to adopt LUNA Charts is typically shared across roles: + +- Development Team → provides technical feasibility assessment +- Software Architect → evaluates architectural fit and long-term sustainability +- Product Owner → makes the final investment and product decision + +### Decision Criteria Include: + +- Documentation quality +- Community / support availability +- Licensing model (e.g., Open Source) +- Technological compatibility (web ecosystem fit) +- Ease of integration and developer experience + +## 7. Business Capability Map + +The following capability map defines what LUNA Charts must be able to do as a product — organized into three levels: + +- Core Capabilities +- Enabling Capabilities +- Governance & Sustainability Capabilities + +### 7.1 Core Capabilities + +| Capability | Description | +|------------|-------------| +| Chart Rendering | Creation of standard data visualizations: bar, line, pie, scatter charts via SVG or Canvas output | +| Interaction Handling | Enables keyboard navigation, focus management, and non-pointer interaction models across all chart types | + + + +### 7.2 Enabling Capabilities + +| Capability | Description | +|------------|-------------| +| Configuration & Theming | Allows customization of chart appearance including colors, contrast, labels, and layout | +| Framework Integration | Enables embedding into modern web application frameworks: React, Vue, Angular, and Web Components | +| Data Processing | Handles normalization, scaling, and transformation of input datasets into renderable structures | +| Documentation & DX | Maintains API documentation, examples, and developer experience consistency | + +### 7.3 Governance & Sustainability + +| Capability | Description | +|------------|-------------| +| Release Management | Governs versioning (Semantic Versioning), changelog discipline, and predictable releases | +| Compliance Monitoring | Tracks WCAG audit status across releases and prevents regressions | + +## 8. Business Value + +### 8.1 Value for Development Teams + +- Faster implementation of charts +- No need for deep accessibility expertise +- Reduced implementation complexity +- Standardized reusable solution + +### 8.2 Value for Product Owners + +- Reduced development and maintenance costs +- Lower risk of accessibility compliance issues +- Avoidance of repeated evaluation efforts +- Predictable integration effort + +### 8.3 Value for End Users + +- Improved accessibility of information +- Support for assistive technologies +- More consistent data visualization experience + +## 9. Business Risks / Reasons for Rejection + +LUNA Charts may be rejected if: + +- Lack of commercial support raises operational risk concerns +- Limited chart types do not meet product requirements +- Insufficient flexibility for custom visualization needs +- Concerns about long-term maintenance in open-source context + +## 10. Business Constraints + +- Must operate in modern web environments +- Must integrate with existing frontend architectures +- Must support accessibility requirements (WCAG compliance) +- Must remain lightweight and developer-friendly +- Must not introduce excessive framework lock-in +- **Must operate as a closed system with defined input boundary and no extension mechanisms** *(See [Evolution Note 12.2](#122-system-boundary--extensibility-constraint))* + +## 11. Key Outcome of this Phase + +The Business Architecture defines: + +- How LUNA Charts is evaluated and adopted +- Which stakeholders influence the decision +- What value is expected from the solution +- Which risks can lead to rejection +- How the solution fits into real-world workflows +- Which capabilities the product must maintain to remain viable + +## 12. Change Log + +### 12.1 Accessibility Model Refinement + +- The previously defined "Accessibility Engine" was removed as a standalone capability +- Accessibility is now defined as a **system-wide cross-cutting concern** +- It is enforced through: + - Default configurations + - Validation processes + - Runtime feedback mechanisms + +*(Impacts Section 7.1 Core Capabilities)* + +### 12.2 System Boundary & Extensibility Constraint + +- LUNA Charts is explicitly defined as a **closed system** +- No plugin or extension mechanism is provided +- Developers cannot modify internal processing pipeline behavior +- Interaction is limited to declarative input and configuration only + +*(Impacts Section 10 Business Constraints and Section 6 Decision Criteria indirectly)* + +### 12.3 Architectural Model Alignment (Business ↔ Application) + +- The Business Architecture now explicitly aligns with the Application Architecture: + - Declarative component-based API model + - Strict separation of responsibilities + - Accessibility as cross-cutting concern + +*(Ensures consistency with Phase C decisions)* \ No newline at end of file diff --git a/docs/src/content/docs/architecture/adm/implementation-governance.mdx b/docs/src/content/docs/architecture/adm/implementation-governance.mdx new file mode 100644 index 0000000..3e5b6b9 --- /dev/null +++ b/docs/src/content/docs/architecture/adm/implementation-governance.mdx @@ -0,0 +1,199 @@ +--- +title: 7. Implementation Governance +description: Roles, review processes, and quality gates that keep LUNA Charts implementation aligned with the documented architecture. +sidebar: + order: 8 +--- + +## 1. Overview + +This phase defines how the implementation of LUNA Charts is governed to ensure long-term architectural consistency, product quality, and maintainability. + +Rather than introducing new architectural decisions, Implementation Governance ensures that all implementation activities remain aligned with the architecture defined in previous phases. It establishes responsibilities, review processes, quality gates, and decision-making procedures for both contributors and maintainers. + +As an open-source project, LUNA Charts balances community contributions with centralized architectural governance to protect the project's long-term vision. + +## 2. Governance Principles + +Implementation Governance is guided by the following principles: + +- Architecture remains the authoritative source for implementation decisions. +- Community contributions are encouraged but do not define the architecture. +- Architectural decisions are reviewed collectively by the Maintainer Team. +- Quality requirements apply consistently across the entire project. +- Architectural evolution is documented and traceable through the architecture repository. + +## 3. Governance Roles + +### Community + +The community contributes ideas and implementation proposals. + +Responsibilities include: +- Reporting bugs +- Suggesting improvements +- Participating in architectural discussions +- Creating Pull Requests + +The community may influence discussions but does not make architectural decisions. + +### Contributors + +Contributors actively improve the project. + +Responsibilities include: +- Implementing new features +- Fixing defects +- Improving documentation +- Maintaining existing functionality + +All contributions are subject to review before integration. + +### Maintainers + +The Maintainer Team is responsible for the long-term integrity of the project. + +Responsibilities include: +- Reviewing Pull Requests +- Protecting architectural consistency +- Approving architectural changes +- Ensuring accessibility standards +- Maintaining API stability +- Approving public releases + +Architectural governance is owned collectively by the Maintainer Team rather than by an individual contributor. + +## 4. Governance Layers + +Implementation Governance operates across three complementary layers. + +### 4.1 Automated Governance + +Objective quality checks performed automatically during development. + +Examples include: +- TypeScript validation +- Linting +- Unit testing +- Accessibility testing +- Build verification +- Continuous Integration (CI) + +These checks ensure that objective quality requirements are consistently enforced. + +### 4.2 Architectural Governance + +Architectural Governance ensures that implementations remain aligned with the defined architecture. + +Maintainers review topics such as: +- Public API consistency +- Architectural boundaries +- Rendering strategy +- Cross-cutting concerns +- Long-term maintainability + +Architectural compliance cannot be verified solely through automation and therefore requires human review. + +### 4.3 Project Governance + +Project Governance focuses on overall software quality beyond technical correctness. + +Evaluation criteria include: +- Code readability +- Maintainability +- Documentation quality +- Consistency with project conventions +- Long-term sustainability + +A contribution may therefore be rejected even if all automated quality checks have passed. + +## 5. Architectural Compliance + +Every contribution is evaluated against the documented architecture. + +A Pull Request may be rejected if it: +- Violates documented architectural decisions +- Introduces unnecessary API changes +- Circumvents accessibility mechanisms +- Ignores cross-cutting concerns +- Reduces maintainability or consistency +- Conflicts with established architectural principles + +Maintainers are responsible for ensuring compliance before accepting contributions. + +## 6. Architectural Change Process + +Architectural evolution follows a structured review process. + +```text +Proposal + ↓ +Architecture Discussion + ↓ +Maintainer Review + ↓ +Decision + ↓ +Architecture Documentation Update + ↓ +Evolution Note + ↓ +Implementation +``` + +Architectural decisions become official only after the architecture documentation has been updated. + +Implementation follows the documented architecture rather than defining it. + +## 7. Release Governance + +Public releases require successful completion of all mandatory quality gates defined by the Technology Architecture. + +These quality gates include, where applicable: +- Automated testing +- Accessibility validation +- Build verification +- Packaging validation +- Release-specific usability testing + +Implementation Governance ensures that releases cannot be approved until all required validation activities have been successfully completed. + +## 8. Continuous Architecture Evolution + +The architecture is expected to evolve throughout the lifetime of the project. + +Potential triggers include: +- New WCAG recommendations +- Browser platform changes +- TypeScript language evolution +- SVG specification updates +- Community feedback +- Long-term maintainability concerns + +All architectural changes follow the same governance process regardless of their origin. + +## 9. Key Outcome of this Phase + +Implementation Governance defines: + +- Governance responsibilities +- Review and approval processes +- Automated and manual quality controls +- Architectural compliance rules +- Release approval governance +- Continuous architecture evolution + +The result is a governance model that protects the long-term architectural integrity of LUNA Charts while enabling collaborative open-source development. + +## 10. Change Log + +No structural changes were introduced in this document during this iteration. + +This governance model is fully aligned with: + +- Architecture Vision (Phase A) +- Business Architecture (Phase B) +- Information Systems Architecture (Phase C) +- Technology Architecture (Phase D) +- Opportunities & Solutions (Phase E) +- Migration Planning (Phase F) \ No newline at end of file diff --git a/docs/src/content/docs/architecture/adm/index.mdx b/docs/src/content/docs/architecture/adm/index.mdx new file mode 100644 index 0000000..1bf39ba --- /dev/null +++ b/docs/src/content/docs/architecture/adm/index.mdx @@ -0,0 +1,74 @@ +--- +title: What is the Architecture Development Method (ADM) +description: Overview of the TOGAF Architecture Development Method (ADM) used in LUNA-Charts. +sidebar: + order: 1 +--- + +import { Aside, Steps, Card, CardGrid } from '@astrojs/starlight/components'; + +The **Architecture Development Method (ADM)** is the core process at the heart of [TOGAF](https://www.opengroup.org/togaf) (The Open Group Architecture Framework), one of the most widely used enterprise architecture frameworks. It provides a step-by-step, iterative approach for developing, implementing, and governing enterprise architecture. + +## Purpose + +ADM gives organizations a repeatable, structured way to design architecture that aligns business goals with IT systems, rather than approaching architecture work ad hoc. + + + +## The Phases + + + +1. **Preliminary Phase** + Define the architecture framework, principles, and scope for the organization. + +2. **Phase A: Architecture Vision** + Establish the scope, stakeholders, constraints, and high-level vision of the project. + +3. **Phase B: Business Architecture** + Model current and target business processes, organization, and capabilities. + +4. **Phase C: Information Systems Architectures** + Split into Data Architecture and Application Architecture. + +5. **Phase D: Technology Architecture** + Define hardware, software, and network infrastructure needed to support the architecture. + +6. **Phase E: Opportunities & Solutions** + Identify major implementation projects and delivery vehicles. + +7. **Phase F: Migration Planning** + Prioritize projects and develop a detailed roadmap. + +8. **Phase G: Implementation Governance** + Ensure implementation projects conform to the architecture. + +9. **Phase H: Architecture Change Management** + Monitor and manage changes to the architecture over time. + + + + + +## Phase C in Detail + + + + Structure of an organization's logical and physical data assets. + + + Blueprint for individual application systems, their interactions, and their relationships to core business processes. + + + +## Key Characteristics + +- **Iterative** — Organizations often cycle through the phases multiple times, refining architecture at increasing levels of detail. +- **Adaptable** — Phases can be tailored, skipped, or reordered depending on the organization's needs and maturity. +- **Governance-focused** — Strong emphasis on ensuring architecture decisions are actually implemented and maintained correctly. + +--- diff --git a/docs/src/content/docs/architecture/adm/information-systems-architecture.mdx b/docs/src/content/docs/architecture/adm/information-systems-architecture.mdx new file mode 100644 index 0000000..b6668d5 --- /dev/null +++ b/docs/src/content/docs/architecture/adm/information-systems-architecture.mdx @@ -0,0 +1,206 @@ +--- +title: 3. Information Systems Architecture +description: Internal application design of LUNA Charts and how the system is structured to process and render data. +sidebar: + order: 4 +--- + +import { Aside } from '@astrojs/starlight/components'; + +## 1. Overview + +This Application Architecture defines how LUNA Charts is structured at the application level. It describes the internal processing model, developer interaction boundaries, system layers, and architectural style used to ensure accessible, consistent, and predictable chart rendering. + +LUNA Charts is designed as a declarative, component-based charting library with a controlled internal processing pipeline and strict input boundaries. + +## 2. Architectural Style + +LUNA Charts follows a: + +- Declarative API model +- Component-based developer interface +- Black-box processing pipeline +- Opinionated and non-extensible architecture + +### Key Characteristics + +- Single entry point for developers via chart components +- Strict separation between input and internal processing +- Deterministic rendering behavior +- No plugin or extension system +- Accessibility and validation are enforced internally + +## 3. Developer Interaction Model + +Developers interact with LUNA Charts exclusively through a declarative component API. + +### Public API + +- `` +- `` +- `` +- (and other chart-specific components) + +Each component has its own strongly typed data model. + +### Responsibilities of the Developer + +Developers are responsible for: + +- Providing correctly structured data per chart type +- Using typed configuration models provided by the library +- Preparing and transforming data before passing it into the component + +### Restrictions + +Developers cannot: + +- Modify internal rendering logic +- Override accessibility processing +- Inject plugins or extensions +- Interfere with internal pipeline stages + +## 4. System Boundary Model + +LUNA Charts exposes a strict system boundary: + +### Allowed Inputs + +- Typed chart components +- Structured data per chart type +- Configuration properties (themes, labels, styling overrides) + +### Internal System Ownership + +After input is provided, the system fully controls: + +- Data validation +- Configuration resolution +- Accessibility enforcement (system-wide cross-cutting concern) +- Rendering process +- Fallback behavior + +## 5. Internal Processing Pipeline + +LUNA Charts processes all input through a deterministic pipeline: + +![Internal Processing Pipeline](https://wiki.byting-pandas.ninja/luna-charts/information-systems-architecture-diagrams/luna_charts_internal_processing_pipeline.svg) + +### 5.1 Interaction Layer (Entry Point) + +Receives component input, accepts data and configuration, and normalizes incoming parameters. + +### 5.2 Resilience & Validation Layer + +Validates input data integrity, detects missing or invalid values, triggers fallback behavior if necessary, and emits warnings for developer feedback. + +### 5.3 Configuration Resolution Layer + +Merges user configuration with default values, resolves themes, labels, and styling parameters, and applies library-provided defaults when needed. + +### 5.4 Accessibility Enforcement Layer + +Applies accessibility rules and guidance mechanisms intended to support WCAG-compliant chart implementations, generates ARIA attributes, validates known accessibility constraints, and provides runtime warnings and developer feedback. + + + +### 5.5 Rendering Layer + +Transforms processed data into visual representations, generates SVG or Canvas output, and produces the final chart visualization. + +## 6. Chart Type Model + +LUNA Charts uses explicit chart-type components: + +- `` +- `` +- `` + +### Characteristics + +- Each chart type has a dedicated internal rendering strategy +- Chart type selection is static and defined at component level +- No runtime switching of chart types +- Each chart type defines its own data structure + +## 7. Cross-Cutting Concerns + +### Accessibility (System-wide Concern) + +Accessibility is implemented through a combination of type-safe APIs, validation mechanisms, default configurations, runtime warnings, and internal quality assurance processes. + +It includes: + +- WCAG compliance rules +- ARIA generation +- Accessibility validation +- Runtime and build-time checks + +### Resilience & Fallback Behavior + +The system ensures stability through: + +- Default values for missing configurations +- Fallback labels for missing data +- Safe rendering under incomplete input +- Warning generation for developer feedback + +## 8. Configuration Model + +LUNA Charts provides a strongly typed configuration system. + +Developers can configure: + +- Themes (colors, contrast, styling) +- Labels and text overrides +- Chart-specific display options +- Accessibility hints (optional) + +Configuration is merged with system defaults during the processing pipeline. + +## 9. Technology-Agnostic Design + +This Application Architecture does not assume a specific frontend framework but is compatible with modern web ecosystems such as: + +- React +- Vue +- Angular +- Web Components + +The API is component-based but conceptually framework-agnostic. + +## 10. Key Architectural Decisions + +- Component-based declarative API is used instead of pure DSL or JSON input +- System uses a single controlled entry point for all interactions +- Internal pipeline is fully deterministic and not externally modifiable +- Accessibility is enforced as a core system responsibility +- No plugin or extension mechanisms are provided +- Chart types are explicitly defined and not dynamically extensible + +## 11. Trade-offs + +### Advantages + +- Strong accessibility guarantees +- High consistency across all charts +- Excellent developer experience +- Predictable behavior +- Reduced implementation complexity + +### Limitations + +- Limited extensibility for custom chart types +- Reduced low-level control over rendering +- Strict API constraints for developers +- No plugin ecosystem support + +## 12. Evolution Note + +No structural changes were introduced in this document during this iteration. This architecture remains fully aligned with: + +- Architecture Vision (Phase A) +- Business Architecture (Phase B) +- Information System Architecture (Phase C) \ No newline at end of file diff --git a/docs/src/content/docs/architecture/adm/introduction.mdx b/docs/src/content/docs/architecture/adm/introduction.mdx new file mode 100644 index 0000000..43f0ff3 --- /dev/null +++ b/docs/src/content/docs/architecture/adm/introduction.mdx @@ -0,0 +1,29 @@ +--- +title: Introduction to LUNA Charts using the ADM +description: A short introduction to LUNA Charts and how its architecture documentation follows the TOGAF Architecture Development Method (ADM). +sidebar: + order: 1 +--- + +import { Aside } from '@astrojs/starlight/components'; + +LUNA Charts is a reusable, developer-friendly charting library that makes accessible, WCAG-oriented data visualization the default rather than an afterthought. Since chart accessibility is often added late or skipped entirely, LUNA Charts bakes it into every component from the start. + +## Documented with the ADM + +To keep the architecture consistent and traceable as the project grows, this documentation follows the **TOGAF Architecture Development Method (ADM)** — an iterative, phase-based process for developing and governing enterprise architecture. + +Each phase of the ADM maps to one section of this wiki: + +- **Architecture Vision** — problem statement and objectives +- **Business Architecture** — stakeholders and value drivers +- **Information Systems Architecture** — internal application design +- **Technology Architecture** — underlying technology choices +- **Opportunities & Solutions** — implementation roadmap +- **Migration Planning** — staged rollout plan +- **Implementation Governance** — quality gates and review process +- **Architecture Change Management** — how the architecture evolves + + \ No newline at end of file diff --git a/docs/src/content/docs/architecture/adm/migration-planning.mdx b/docs/src/content/docs/architecture/adm/migration-planning.mdx new file mode 100644 index 0000000..33b5ff0 --- /dev/null +++ b/docs/src/content/docs/architecture/adm/migration-planning.mdx @@ -0,0 +1,221 @@ +--- +title: 6. Migration Planning +description: Staged delivery plan for rolling out the LUNA Charts architecture over time. +sidebar: + order: 7 +--- + +## 1. Overview + +This phase defines how LUNA Charts transitions from architectural design into a deliverable product. + +Unlike traditional migration planning, LUNA Charts is a greenfield project with no existing solution to replace. Therefore, this phase focuses on planning the incremental delivery of the solution through implementation milestones and public releases. + +The objective is to maximize business value while minimizing implementation risk by validating architectural decisions before expanding the solution. + +## 2. Delivery Strategy + +LUNA Charts follows an incremental delivery strategy. + +Implementation begins with establishing the architectural groundwork, followed by a reference implementation used to validate the overall architecture. + +Once a usable Minimum Viable Product (MVP) has been completed and reviewed internally, the project transitions into parallel development and continuous feature expansion. + +This approach enables early stakeholder feedback while ensuring that public releases maintain a professional quality standard. + +## 3. Migration Stages + +### Stage 1 – Architectural Groundwork + +**Objective** +Establish the technical foundations required for all future chart implementations. + +**Deliverables** +- Type System +- Public API Contracts +- Rendering Foundation +- Configuration Model +- Validation Framework + +**Outcome** +A stable architectural foundation capable of supporting reusable chart implementations. + +### Stage 2 – Reference Implementation + +**Objective** +Validate the architecture through a production-ready BarChart implementation. + +**Deliverables** +- BarChart component +- Rendering pipeline +- Accessibility support +- Configuration integration +- Validation integration + +**Outcome** +Confirmation that the architectural decisions are viable for real-world usage. + +### Stage 3 – Minimum Viable Product (MVP) + +**Objective** +Create the first usable product increment. + +**Deliverables** +- BarChart Reference Implementation +- Documentation & Developer Experience + +**Outcome** +The first version that can be evaluated by stakeholders and integrated into demonstration applications. + +The MVP serves as the primary milestone for Product Owner review and architectural validation. + +### Stage 4 – Public Release Preparation + +**Objective** +Prepare the library for public distribution. + +**Deliverables** +- Unit Tests +- Accessibility Tests +- Linting +- Visual Regression Testing +- GitHub Release Pipeline +- npm Publishing + +**Outcome** +A production-ready release process capable of delivering reliable public versions. + +### Stage 5 – Product Evolution + +**Objective** +Expand the library after the initial public release. + +**Examples** +- LineChart +- PieChart +- ScatterChart + +Future enhancements remain based on the architectural foundations established during earlier stages. + +## 4. Delivery Roadmap + +The planned delivery sequence is illustrated below. + +### Internal Delivery + +```text +WP1 Groundwork + ↓ +WP2 BarChart Reference Implementation + ↓ +WP3 Documentation & Developer Experience + ↓ +Internal Product Review (MVP) +``` + +The MVP enables architectural validation and stakeholder feedback before the first public release. + +### Public Delivery + +```text +Internal MVP + ↓ +WP4 Quality & Release Infrastructure + ↓ +Public Release 1.0.0 + ↓ +WP5 Additional Chart Types + ↓ +Future Releases +``` + +The first public release prioritizes stability, documentation, accessibility, and developer experience over feature completeness. + +## 5. Stakeholder Validation Strategy + +Different stakeholders participate at different stages of the delivery process. + +### Internal Stakeholders + +- Development Team +- Software Architect +- Product Owner + +**Responsibilities** +- Validate architectural decisions +- Review developer experience +- Confirm business value +- Evaluate implementation quality + +### External Stakeholders + +- Open-source community +- Frontend developers +- Accessibility specialists + +**Responsibilities** +- Adopt the library +- Provide community feedback +- Report issues +- Contribute improvements + +Public stakeholder involvement begins after the first production-ready release. + +## 6. Release Strategy + +LUNA Charts distinguishes between internal milestones and public releases. + +### Internal Milestones + +**Purpose** +- Validate architecture +- Validate usability +- Gather Product Owner feedback + +Internal milestones are not intended for public consumption. + +### Public Releases + +**Purpose** +- Stable APIs +- Complete documentation +- Reliable release process +- Community adoption + +Public releases follow Semantic Versioning and are published through npm and GitHub. + +## 7. Migration Risks + +Potential risks include: + +- Architectural refinements discovered during the reference implementation +- Additional accessibility requirements emerging during implementation +- Delays caused by documentation or quality assurance activities +- API adjustments before the first stable release + +These risks are mitigated by validating the architecture before expanding the feature set. + +## 8. Key Outcome of this Phase + +Migration Planning defines: + +- The incremental delivery strategy +- Internal implementation milestones +- The Minimum Viable Product (MVP) +- The transition from internal validation to public releases +- Stakeholder involvement throughout delivery +- The long-term release strategy for LUNA Charts + +The result is a structured roadmap that transforms the architectural vision into a deliverable, production-ready open-source project. + +## 9. Change Log + +No structural changes were introduced in this document during this iteration. + +This migration strategy is fully aligned with: + +- Architecture Vision (Phase A) +- Business Architecture (Phase B) +- Information Systems Architecture (Phase C) +- Technology Architecture (Phase D) +- Opportunities & Solutions (Phase E) \ No newline at end of file diff --git a/docs/src/content/docs/architecture/adm/opportunities-and-solutions.mdx b/docs/src/content/docs/architecture/adm/opportunities-and-solutions.mdx new file mode 100644 index 0000000..126763f --- /dev/null +++ b/docs/src/content/docs/architecture/adm/opportunities-and-solutions.mdx @@ -0,0 +1,227 @@ +--- +title: 5. Opportunities & Solutions +description: Work packages that translate the LUNA Charts architecture into an implementation roadmap. +sidebar: + order: 6 +--- + +import { Aside } from '@astrojs/starlight/components'; + +## 1. Overview + +This phase translates the target architecture into implementable solution increments. It identifies the major work packages required to realize LUNA Charts and defines their dependencies, priorities, and expected outcomes. + +As LUNA Charts is a greenfield project, the focus is not on migration from an existing solution but on establishing a structured implementation path from architecture to a production-ready charting library. + +The goal of this phase is to identify what must be built, in which order it should be built, and which implementation areas can later evolve independently. + +## 2. Solution Strategy + +LUNA Charts is implemented incrementally. + +The implementation begins with a foundational groundwork package that establishes the architectural contracts and reusable building blocks required by all future chart types. + +A BarChart is then implemented as the first production-ready chart and serves as a reference implementation for validating architectural decisions. + +Once the architecture has been validated through the BarChart implementation, **Documentation & Developer Experience is completed to form the first usable Minimum Viable Product (MVP)**.¹ + +After this milestone has been reached, the remaining work packages can proceed in parallel.¹ + +## 3. Work Packages + +### WP1 – Groundwork + +**Objective** +Establish all reusable architectural foundations required for chart implementation. + +**Scope** +- Type System +- Public API Contracts +- Rendering Foundation +- Configuration Model +- Validation Framework + +**Expected Outcome** +The groundwork package is considered complete when: +- Public APIs are defined +- Chart-related data types are available +- Rendering utilities exist +- Configuration handling is established +- Validation and warning mechanisms are implemented +- A chart implementation can be built on top of the provided foundations + +**Architectural Role** +This work package provides the reusable building blocks used by all future chart types. + +### WP2 – BarChart Reference Implementation + +**Objective** +Implement the first production-ready chart type and validate the architecture. + +**Scope** +- BarChart component +- Rendering integration +- Accessibility validation +- Configuration integration +- Validation integration + +**Expected Outcome** +The BarChart serves as a reference implementation demonstrating that: +- The public API is usable +- The rendering architecture is viable +- Accessibility concepts are effective +- Reusable foundations support real-world chart implementations + +**Architectural Role** +This work package acts as the architectural proof-of-concept for the entire solution. + +### WP3 – Documentation & Developer Experience + +**Objective** +Enable developers to successfully adopt and use LUNA Charts. + +**Scope** +- Getting Started Guides +- Tutorials +- API Documentation +- Accessibility Guidance +- Usage Examples + +**Expected Outcome** +Developers can understand, integrate, and use LUNA Charts without requiring internal architectural knowledge. + +### WP4 – Quality & Release Infrastructure + +**Objective** +Ensure product quality and reliable software delivery. + +**Scope** +- Unit Testing +- Accessibility Testing +- Linting +- Visual Regression Testing +- GitHub Release Pipeline +- npm Publishing + +**Expected Outcome** +All releases follow a repeatable and quality-controlled process. + +### WP5 – Additional Chart Types + +**Objective** +Extend the library with additional chart implementations. + +**Scope** +Examples include: +- LineChart +- PieChart +- ScatterChart + +Additional chart types may be introduced based on project priorities and community demand. + +**Expected Outcome** +The chart ecosystem expands while reusing the foundations established in earlier work packages. + +## 4. Work Package Dependencies + +The implementation follows a staged approach. + +### Phase 1 + +``` +WP1 Groundwork + ↓ +WP2 BarChart Reference Implementation + ↓ +WP3 Documentation & Developer Experience¹ + ↓ +Internal Product Review (MVP)¹ +``` + +The first implementation phase focuses on validating the architecture and delivering the first usable product increment. + +Although Documentation & Developer Experience is modeled as an independent work package, it is functionally coupled to the BarChart Reference Implementation. Together they form the project's first Minimum Viable Product (MVP), enabling meaningful stakeholder evaluation. + +### Phase 2 + +After successful completion of the BarChart reference implementation, additional work packages can proceed independently. + +``` + MVP¹ + │ + ┌────────┴────────┐ + ▼ ▼ +WP4 Quality & WP5 Additional +Release Chart Types +Infrastructure +``` + +Although Documentation & Developer Experience is modeled as an independent work package, it is functionally coupled to the BarChart Reference Implementation.¹ Together they form the project's first Minimum Viable Product (MVP), enabling meaningful stakeholder evaluation. + +## 5. Accessibility Strategy + +Accessibility is not implemented as a dedicated work package. + +Instead, accessibility requirements are integrated into all work packages and act as a cross-cutting quality requirement throughout the solution. + +Examples include: +- Accessibility-related type definitions +- Validation rules and developer warnings +- Accessible default values and fallbacks +- Accessible SVG output generation +- Accessibility-focused documentation +- Automated accessibility testing + +This approach aligns with the architectural principle of Accessibility by Design established in the Architecture Vision. + +## 6. Solution Risks + +Potential risks include: +- Architectural assumptions may prove invalid during the BarChart reference implementation +- Accessibility requirements may reveal additional constraints during implementation +- Future chart types may require capabilities not anticipated during groundwork design +- Open-source maintenance capacity may influence implementation speed + +These risks are mitigated through the staged implementation approach and early architectural validation. + +## 7. Key Outcome of this Phase + +- The implementation strategy for LUNA Charts +- The major work packages required for delivery +- Dependencies between implementation activities +- The role of the BarChart as a reference implementation +- The definition of the first usable MVP consisting of the BarChart implementation and developer documentation¹ +- The integration of accessibility as a cross-cutting concern +- A phased roadmap for incremental solution realization + +## 8. Change Log + + + +### Work Package Dependencies and MVP Definition + +**Reason** + +During Migration Planning (Phase F), it became clear that the BarChart Reference Implementation alone does not provide sufficient business value for stakeholder evaluation. A usable product increment also requires developer documentation and onboarding material. + +This insight refined the implementation sequence without changing the overall work package structure. + +**Changes** + +- Clarified that **WP3 – Documentation & Developer Experience** is functionally coupled to **WP2 – BarChart Reference Implementation**. +- Defined the project's first **Minimum Viable Product (MVP)** as the combination of: + - WP2 – BarChart Reference Implementation + - WP3 – Documentation & Developer Experience +- Updated the work package dependency model so that parallel development begins only after the MVP has been completed and reviewed. +- Refined the solution strategy to distinguish between: + - Architectural validation (Groundwork + BarChart) + - MVP completion (Documentation & Developer Experience) + - Subsequent parallel solution evolution + +**Impact** + +The overall work package structure remains unchanged. + +Only the implementation sequence has been refined to better align the technical implementation with the project's business objectives. This ensures that the first stakeholder evaluation is based on a usable product increment rather than a purely technical implementation. \ No newline at end of file diff --git a/docs/src/content/docs/architecture/adm/technology-architecture.mdx b/docs/src/content/docs/architecture/adm/technology-architecture.mdx new file mode 100644 index 0000000..c310713 --- /dev/null +++ b/docs/src/content/docs/architecture/adm/technology-architecture.mdx @@ -0,0 +1,226 @@ +--- +title: 4. Technology Architecture +description: Technology choices underlying LUNA Charts and how they are structured together. +sidebar: + order: 5 +--- + +import { Aside } from '@astrojs/starlight/components'; + +## 1. Overview + +This Technology Architecture defines the underlying technology decisions for LUNA Charts. It describes the runtime environment, rendering technology, programming language, distribution model, testing strategy, and release pipeline. + +LUNA Charts is designed as a modern, accessibility-first charting library optimized for web environments, focusing on performance, consistency, and WCAG-oriented rendering behavior. + +## 2. Rendering Technology + +### SVG-based Rendering Model + +LUNA Charts uses **SVG (Scalable Vector Graphics)** as its primary rendering technology. + +#### Rationale + +- Enables element-level accessibility (focusable nodes) +- Supports ARIA attributes per visual element +- Allows keyboard navigation across chart components +- Provides native DOM structure for assistive technologies +- Ensures compatibility with WCAG 2.2 requirements + +#### Exclusion of Canvas + +Canvas-based rendering is explicitly excluded because: + +- It produces pixel-based output without semantic structure +- Individual chart elements cannot be addressed or focused +- Accessibility must be simulated externally (insufficient for WCAG goals) +- It conflicts with the "Accessibility by Design" principle + +## 3. Programming Language + +### TypeScript + +LUNA Charts is implemented in TypeScript. + +#### Rationale + +- Strong typing for chart-specific data models +- Early error detection at compile time +- Improved developer experience (DX) via IntelliSense +- Explicit API contracts for all chart components +- Supports structured accessibility-related metadata + +#### Architectural Impact + +- Each chart type has a dedicated strongly typed data model +- Invalid configurations can be detected before runtime +- Improves reliability of accessibility-related constraints + +## 4. Framework Integration Strategy + +### Framework-Neutral Core with Adapter Layer + +LUNA Charts is designed as a framework-agnostic system. + +#### Architecture Model + +- Core rendering and logic are framework-independent +- Framework-specific adapters provide integration layers + +#### Supported Environments + +- React +- Vue +- Angular +- Web Components + +#### Rationale + +- Prevents vendor lock-in +- Ensures consistent behavior across frameworks +- Aligns with "Framework Agnosticism" principle (P02) +- Maximizes adoption across ecosystems + +## 5. Distribution Strategy + +### Single-Package Consumption Model + +LUNA Charts is distributed as a single unified package. + +#### Characteristics + +- No plugin system +- No external extensions by consumers +- All functionality is included in the core distribution + +#### Example Usage + +```bash +npm install luna-charts +``` + +```jsx + +``` + +#### Rationale + +- Simplifies developer experience +- Ensures consistent API behavior +- Maintains strict control over accessibility compliance +- Avoids fragmentation of implementation quality + +## 6. Testing & Quality Strategy + +LUNA Charts follows a multi-layer quality assurance model. + +### 6.1 Functional Testing + +- Unit Tests for core logic +- Ensures correctness of rendering pipeline + +### 6.2 Accessibility Testing + +- Automated accessibility validation tools +- Checks WCAG-related constraints where machine-verifiable +- Ensures ARIA structure correctness + +### 6.3 Code Quality (Linting) + +- Enforces architectural consistency +- Prevents API misuse patterns +- Ensures maintainable code structure + +### 6.4 Visual Regression Testing + +- Ensures SVG rendering stability +- Detects unintended layout or structural changes +- Validates accessibility-relevant DOM consistency + +### 6.5 Usability Testing + +- Manual or moderated usability sessions with representative developers/end users +- Validates real-world developer experience and end-user comprehension of charts +- Required for **minor and major releases** (new chart types, API changes, significant UX changes) +- **Not required for patch releases** (bug fixes, internal refactors with no user-facing change) + + + +## 7. Release & Distribution Model + +### Open Source Release Pipeline + +LUNA Charts is developed as an open-source project. + +#### Distribution Flow + +![Release & Distribution Flow](https://wiki.byting-pandas.ninja/luna-charts/luna_charts_release_distribution_flow_v.svg) + +#### Versioning Strategy + +Semantic Versioning (SemVer): + +- MAJOR: breaking API or chart model changes +- MINOR: new features or chart types +- PATCH: bug fixes and accessibility improvements + +## 8. Runtime Environment + +### Modern Browser & Mobile Support + +LUNA Charts targets modern web environments. + +#### Constraints + +- Modern browsers only (Evergreen browsers) +- Mobile-first compatibility +- No legacy browser support + +#### Rationale + +- Enables SVG-first accessibility design +- Reduces polyfill and compatibility overhead +- Improves performance and maintainability + +## 9. Key Architectural Decisions + +- SVG is the only rendering technology (Canvas excluded) +- TypeScript is used for strict typing and API contracts +- Framework-neutral core with adapter layers +- Single-package distribution model +- No plugin or extension system +- Multi-layer testing strategy with release gating +- Open-source distribution via GitHub and npm +- Modern browser and mobile-first runtime strategy + +## 10. Trade-offs + +### Advantages + +- Strong accessibility guarantees +- Predictable and deterministic rendering +- High developer experience (DX) +- Consistent cross-framework behavior +- Simplified integration model +- High quality assurance via release gates + +### Limitations + +- Limited extensibility for external developers +- Reduced customization flexibility +- Strict architectural constraints +- No plugin ecosystem +- Higher responsibility on core maintainers + +## 11. Change Log + +This document reflects a refined Technology Architecture based on iterative architectural decisions across Phase A (Vision), Phase B (Business Architecture), and Phase C (Application Architecture). Key clarifications introduced in this phase: + +- SVG confirmed as the only rendering technology due to accessibility requirements +- Accessibility is treated as a cross-cutting concern supported by type safety, runtime validation, and internal quality assurance (not a standalone engine) +- Framework neutrality enforced through adapter-based architecture +- Distribution model defined as a single-package open-source release via npm and GitHub +- Testing strategy defined as a multi-layer quality gate system (unit, accessibility, linting, visual regression) +- Runtime scope restricted to modern browsers and mobile-first environments for performance and accessibility alignment \ No newline at end of file diff --git a/docs/src/content/docs/architecture/adr/index.mdx b/docs/src/content/docs/architecture/adr/index.mdx new file mode 100644 index 0000000..ab85cc1 --- /dev/null +++ b/docs/src/content/docs/architecture/adr/index.mdx @@ -0,0 +1,29 @@ +--- +title: "What are Architecture Decision Records?" +description: "Overview of the Architecture Decision Records (ADRs) for LUNA Charts." +--- + +## What are ADRs? + +An **Architecture Decision Record (ADR)** documents an important architectural decision along with its context, the alternatives considered, and the resulting consequences. + +Instead of keeping knowledge only in the heads of individual maintainers, every decision is recorded in a traceable way: **why** it was made, **which options** were rejected, and **which trade-offs** were consciously accepted. + +## Why do we use ADRs? + +* **Traceability** – decisions remain understandable even years later. +* **Onboarding** – new contributors quickly understand why the project is structured the way it is. +* **Consistency** – future decisions can reference existing ADRs instead of repeating past discussions. +* **Governance** – architectural changes happen deliberately, through a new ADR, rather than silently in the code. + +## ADRs at LUNA Charts + +LUNA Charts is an accessible, framework-agnostic charting library. Architectural decisions follow the phases of the **TOGAF Architecture Development Method (ADM)** and are continuously documented as ADRs – from repository structure to the technology stack to foundational principles such as accessibility. + +The following ADRs have been documented so far: + +* **ADR-000100** – Repository Structure +* **ADR-000200** – Technology Stack +* **ADR-000300** – Web Components as Public API +* **ADR-000400** – SVG as Rendering Technology +* **ADR-000500** – Accessibility as a Cross-Cutting Concern \ No newline at end of file -- 2.54.0 From 7fa7211d8eea9a988b86edb271b22b8117a82209 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Wed, 15 Jul 2026 00:23:53 +0200 Subject: [PATCH 44/88] fix(docs): Migrate the first five ADRs --- docs/src/content/docs/adr/README.mdx | 29 ----- docs/src/content/docs/adr/index.mdx | 6 - docs/src/content/docs/adr/template.mdx | 120 ------------------ .../adr/000100-repository-structure.mdx | 2 +- .../adr/000200-technology-stack.mdx | 4 +- .../000300-web-components-as-public-api.mdx | 6 +- .../000400-svg-as-rendering-technology.mdx | 2 +- ...cessibility-as-a-cross-cutting-concern.mdx | 2 +- .../content/docs/getting-started/index.mdx | 2 +- 9 files changed, 9 insertions(+), 164 deletions(-) delete mode 100644 docs/src/content/docs/adr/README.mdx delete mode 100644 docs/src/content/docs/adr/index.mdx delete mode 100644 docs/src/content/docs/adr/template.mdx rename docs/src/content/docs/{ => architecture}/adr/000100-repository-structure.mdx (98%) rename docs/src/content/docs/{ => architecture}/adr/000200-technology-stack.mdx (97%) rename docs/src/content/docs/{ => architecture}/adr/000300-web-components-as-public-api.mdx (95%) rename docs/src/content/docs/{ => architecture}/adr/000400-svg-as-rendering-technology.mdx (97%) rename docs/src/content/docs/{ => architecture}/adr/000500-accessibility-as-a-cross-cutting-concern.mdx (97%) diff --git a/docs/src/content/docs/adr/README.mdx b/docs/src/content/docs/adr/README.mdx deleted file mode 100644 index fb05727..0000000 --- a/docs/src/content/docs/adr/README.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "Architecture Decision Records" -description: "Overview of the Architecture Decision Records (ADRs) for LUNA Charts." ---- - -## What are ADRs? - -An **Architecture Decision Record (ADR)** documents an important architectural decision along with its context, the alternatives considered, and the resulting consequences. - -Instead of keeping knowledge only in the heads of individual maintainers, every decision is recorded in a traceable way: **why** it was made, **which options** were rejected, and **which trade-offs** were consciously accepted. - -## Why do we use ADRs? - -* **Traceability** – decisions remain understandable even years later. -* **Onboarding** – new contributors quickly understand why the project is structured the way it is. -* **Consistency** – future decisions can reference existing ADRs instead of repeating past discussions. -* **Governance** – architectural changes happen deliberately, through a new ADR, rather than silently in the code. - -## ADRs at LUNA Charts - -LUNA Charts is an accessible, framework-agnostic charting library. Architectural decisions follow the phases of the **TOGAF Architecture Development Method (ADM)** and are continuously documented as ADRs – from repository structure to the technology stack to foundational principles such as accessibility. - -The following ADRs have been documented so far: - -* **ADR-0001** – Repository Structure -* **ADR-0002** – Technology Stack -* **ADR-0003** – Web Components as Public API -* **ADR-0004** – SVG as Rendering Technology -* **ADR-0005** – Accessibility as a Cross-Cutting Concern \ No newline at end of file diff --git a/docs/src/content/docs/adr/index.mdx b/docs/src/content/docs/adr/index.mdx deleted file mode 100644 index 535a308..0000000 --- a/docs/src/content/docs/adr/index.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Architecture Decision Records -description: Read Architecture Decision Records ---- - -Welcome to the Architecture Decision Records! \ No newline at end of file diff --git a/docs/src/content/docs/adr/template.mdx b/docs/src/content/docs/adr/template.mdx deleted file mode 100644 index 4ccee8f..0000000 --- a/docs/src/content/docs/adr/template.mdx +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: "ADR-XXXXXX: Title" -description: "One-sentence summary of the decision." ---- - -* **Status:** Proposed -* **Date:** YYYY-MM-DD -* **Decision Makers:** LUNA Charts Maintainers - ---- - -## Context - -Describe the background that led to this decision. - -Questions that should be answered: - -* What problem needs to be solved? -* Which architectural constraints exist? -* Which project goals influence the decision? -* Which stakeholders are affected? - ---- - -## Decision Drivers - -List the primary factors that influenced the decision. - -Typical examples: - -* Accessibility -* Performance -* Developer Experience -* Maintainability -* Framework Agnosticism -* Type Safety -* Simplicity -* Scalability - ---- - -## Considered Alternatives - -Document all relevant alternatives. - -| Alternative | Description | -| ----------- | ----------- | -| Option A | Description | -| Option B | Description | -| Option C | Description | - -Briefly explain why the alternatives were not selected. - ---- - -## Decision - -Describe the selected solution. - -This section should clearly answer: - -> What has been decided? - ---- - -## Rationale - -Explain why the selected solution best satisfies the decision drivers. - -This section should justify the decision from an architectural perspective. - ---- - -## Consequences - -### Positive - -Describe the expected benefits. - -Examples: - -* Improved maintainability -* Better accessibility -* Easier onboarding -* Reduced complexity - -### Negative - -Describe possible drawbacks. - -Examples: - -* Increased implementation effort -* Additional maintenance -* Performance trade-offs - ---- - -## Related TOGAF Phases - -List all architecture phases that influenced this decision. - -Examples: - -* Architecture Vision (Phase A) -* Technology Architecture (Phase D) -* Implementation Governance (Phase G) - ---- - -## References - -Provide references to related documentation. - -Examples: - -* Architecture Wiki -* Other ADRs -* External standards -* Specifications \ No newline at end of file diff --git a/docs/src/content/docs/adr/000100-repository-structure.mdx b/docs/src/content/docs/architecture/adr/000100-repository-structure.mdx similarity index 98% rename from docs/src/content/docs/adr/000100-repository-structure.mdx rename to docs/src/content/docs/architecture/adr/000100-repository-structure.mdx index 4ae6757..16515e6 100644 --- a/docs/src/content/docs/adr/000100-repository-structure.mdx +++ b/docs/src/content/docs/architecture/adr/000100-repository-structure.mdx @@ -1,5 +1,5 @@ --- -title: "ADR-0001: Repository Structure" +title: "ADR-0001000: Repository Structure" description: "Decision to use a pnpm-based monorepo structure for LUNA Charts." --- diff --git a/docs/src/content/docs/adr/000200-technology-stack.mdx b/docs/src/content/docs/architecture/adr/000200-technology-stack.mdx similarity index 97% rename from docs/src/content/docs/adr/000200-technology-stack.mdx rename to docs/src/content/docs/architecture/adr/000200-technology-stack.mdx index aa5b400..e85861e 100644 --- a/docs/src/content/docs/adr/000200-technology-stack.mdx +++ b/docs/src/content/docs/architecture/adr/000200-technology-stack.mdx @@ -1,6 +1,6 @@ --- -title: "ADR-0002: Technology Stack" -description: "Auswahl des Technologie-Stacks für LUNA Charts basierend auf den TOGAF-Architekturprinzipien." +title: "ADR-0002000: Technology Stack" +description: "Selection of the technology stack for LUNA Charts based on the TOGAF architectural principles." --- * **Status:** Accepted diff --git a/docs/src/content/docs/adr/000300-web-components-as-public-api.mdx b/docs/src/content/docs/architecture/adr/000300-web-components-as-public-api.mdx similarity index 95% rename from docs/src/content/docs/adr/000300-web-components-as-public-api.mdx rename to docs/src/content/docs/architecture/adr/000300-web-components-as-public-api.mdx index 515155f..06c06ac 100644 --- a/docs/src/content/docs/adr/000300-web-components-as-public-api.mdx +++ b/docs/src/content/docs/architecture/adr/000300-web-components-as-public-api.mdx @@ -1,6 +1,6 @@ --- -title: "ADR-0003: Web Components as Public API" -description: "Entscheidung, die öffentliche API von LUNA Charts ausschließlich über Web Components bereitzustellen." +title: "ADR-0003000: Web Components as Public API" +description: "Decision to make LUNA Charts' public API available exclusively via Web Components." --- * **Status:** Accepted @@ -108,6 +108,6 @@ Framework wrappers remain lightweight integration layers and do not introduce ar ## References * LUNA Charts Architecture Wiki -* ADR-0002: Technology Stack +* ADR-0002000: Technology Stack * StencilJS Documentation * Web Components Specification \ No newline at end of file diff --git a/docs/src/content/docs/adr/000400-svg-as-rendering-technology.mdx b/docs/src/content/docs/architecture/adr/000400-svg-as-rendering-technology.mdx similarity index 97% rename from docs/src/content/docs/adr/000400-svg-as-rendering-technology.mdx rename to docs/src/content/docs/architecture/adr/000400-svg-as-rendering-technology.mdx index 9fb2845..2b3fefd 100644 --- a/docs/src/content/docs/adr/000400-svg-as-rendering-technology.mdx +++ b/docs/src/content/docs/architecture/adr/000400-svg-as-rendering-technology.mdx @@ -1,6 +1,6 @@ --- title: "ADR-000400: SVG as Rendering Technology" -description: "Entscheidung, SVG als Rendering-Technologie für alle Chart-Visualisierungen in LUNA Charts einzusetzen." +description: "Decision to use SVG as the rendering technology for all chart visualizations in LUNA Charts." --- * **Status:** Accepted diff --git a/docs/src/content/docs/adr/000500-accessibility-as-a-cross-cutting-concern.mdx b/docs/src/content/docs/architecture/adr/000500-accessibility-as-a-cross-cutting-concern.mdx similarity index 97% rename from docs/src/content/docs/adr/000500-accessibility-as-a-cross-cutting-concern.mdx rename to docs/src/content/docs/architecture/adr/000500-accessibility-as-a-cross-cutting-concern.mdx index 6a7fe7d..83b5dc8 100644 --- a/docs/src/content/docs/adr/000500-accessibility-as-a-cross-cutting-concern.mdx +++ b/docs/src/content/docs/architecture/adr/000500-accessibility-as-a-cross-cutting-concern.mdx @@ -1,6 +1,6 @@ --- title: "ADR-000500: Accessibility as a Cross-Cutting Concern" -description: "Entscheidung, Accessibility als Cross-Cutting Concern über alle Architekturebenen von LUNA Charts zu behandeln." +description: "Decision to treat accessibility as a cross-cutting concern across all architectural layers of LUNA Charts." --- * **Status:** Accepted diff --git a/docs/src/content/docs/getting-started/index.mdx b/docs/src/content/docs/getting-started/index.mdx index 2e03b84..3943124 100644 --- a/docs/src/content/docs/getting-started/index.mdx +++ b/docs/src/content/docs/getting-started/index.mdx @@ -3,4 +3,4 @@ title: Getting Started description: Start here --- -Welcome to Getting Started! \ No newline at end of file +Welcome to Getting Test! \ No newline at end of file -- 2.54.0 From 3d79b545d475fcf3255341c48ac3ee5e8c45895f Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Wed, 15 Jul 2026 00:47:10 +0200 Subject: [PATCH 45/88] fix(docs): Updated astro.config.mjs AstroJS will show automatically all mdx-files in the folder "getting-started" --- docs/astro.config.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs index 3ac2f9b..df8acea 100644 --- a/docs/astro.config.mjs +++ b/docs/astro.config.mjs @@ -18,7 +18,7 @@ export default defineConfig({ sidebar: [ { label: 'Start Here', - items: [{ label: 'Getting Started', slug: 'getting-started' }], + items: [{ autogenerate: { "directory": "getting-started" } }], }, { label: 'Architecture', -- 2.54.0 From 8e2131ef129980c7de38b58255141ff6a7ff7c6c Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Wed, 15 Jul 2026 00:48:16 +0200 Subject: [PATCH 46/88] fix(docs): Added new chapter in the doc Added new chapter "getting-started", so new developers has a start point --- .../content/docs/getting-started/index.mdx | 41 ++++++++- .../getting-started/project-structure.mdx | 88 ++++++++++++++++++ .../content/docs/getting-started/roadmap.mdx | 92 +++++++++++++++++++ 3 files changed, 218 insertions(+), 3 deletions(-) create mode 100644 docs/src/content/docs/getting-started/project-structure.mdx create mode 100644 docs/src/content/docs/getting-started/roadmap.mdx diff --git a/docs/src/content/docs/getting-started/index.mdx b/docs/src/content/docs/getting-started/index.mdx index 3943124..340b739 100644 --- a/docs/src/content/docs/getting-started/index.mdx +++ b/docs/src/content/docs/getting-started/index.mdx @@ -1,6 +1,41 @@ --- -title: Getting Started -description: Start here +title: Why LUNA Charts? +description: Learn why LUNA Charts exists and what problems it aims to solve. +sidebar: + order: 0 --- -Welcome to Getting Test! \ No newline at end of file +LUNA Charts is an open-source charting library built with a strong focus on **accessibility**, **developer experience**, and **long-term maintainability**. + +The project was created because many existing charting libraries provide excellent visualizations, but often treat accessibility, architecture, and maintainability as secondary concerns. + +LUNA Charts takes a different approach. + +Instead of starting with code, the project started with an **architecture-first process**. The entire foundation—including business goals, technical architecture, governance, and architectural decisions—was designed before implementation began. + +## Project Goals + +LUNA Charts aims to provide a charting library that is: + +- Accessible by default +- Framework-independent through Web Components +- Easy to integrate into modern frontend frameworks +- Well documented for users and contributors +- Designed for long-term maintainability +- Governed through transparent architectural decisions + +## Current Project Status + +The project is currently in the **Groundwork** phase. + +At this stage, the architecture, repository structure, development workflow, and governance model are being established before implementing the first chart components. + +Although no production-ready charts are available yet, the project documentation already reflects the long-term vision and architectural direction. + +## Learn More + +If you're interested in the project's design decisions, continue with the following sections: + +- **Project Structure** +- **Architecture** +- **Architecture Decision Records (ADRs)** \ No newline at end of file diff --git a/docs/src/content/docs/getting-started/project-structure.mdx b/docs/src/content/docs/getting-started/project-structure.mdx new file mode 100644 index 0000000..e67f462 --- /dev/null +++ b/docs/src/content/docs/getting-started/project-structure.mdx @@ -0,0 +1,88 @@ +--- +title: Project Structure +description: Overview of the LUNA Charts repository and its organization. +sidebar: + order: 1 +--- + +LUNA Charts follows a modular repository structure that separates the chart library from its documentation while keeping all project artifacts within a single repository. + +```text +luna-charts/ +│ +├── packages/ +│ └── luna-charts/ +│ +├── docs/ +│ +├── examples/ +│ +├── .github/ +│ +├── package.json +└── pnpm-workspace.yaml +``` + +## packages/ + +The `packages` directory contains the actual LUNA Charts library. + +This package is responsible for: + +- Chart components +- Rendering +- Public API +- Build process +- Testing + +As the project evolves, all chart implementations will live here. + +--- + +## docs/ + +The `docs` directory contains the complete project documentation. + +It serves as the **Single Point of Truth (SPOT)** for: + +- Architecture documentation +- Architecture Decision Records (ADRs) +- Developer guides +- Project governance +- User documentation + +The documentation is rendered using **Starlight**, but the Markdown content remains the authoritative source. + +--- + +## examples/ + +Example applications demonstrating how to integrate LUNA Charts with supported frontend frameworks will be added here in future iterations. + +Examples may include: + +- Vanilla JavaScript +- React +- Angular +- Vue + +--- + +## .github/ + +Contains project automation such as: + +- GitHub Actions +- Issue templates +- Pull request templates +- Community workflows + +--- + +## Monorepo + +LUNA Charts is maintained as a **pnpm workspace**. + +This structure allows multiple packages and supporting projects to evolve together while sharing a consistent toolchain and development workflow. + +As the project grows, additional packages or tooling may be introduced without changing the overall repository organization. \ No newline at end of file diff --git a/docs/src/content/docs/getting-started/roadmap.mdx b/docs/src/content/docs/getting-started/roadmap.mdx new file mode 100644 index 0000000..b8bd2f9 --- /dev/null +++ b/docs/src/content/docs/getting-started/roadmap.mdx @@ -0,0 +1,92 @@ +--- +title: Roadmap +description: Current project status and planned evolution of LUNA Charts. +sidebar: + order: 2 +--- + +LUNA Charts follows an **architecture-first** development approach. + +Instead of implementing features immediately, the project establishes a solid architectural and organizational foundation before writing production code. This ensures long-term maintainability, consistent quality, and transparent decision-making. + +--- + +## Current Status + +**Current Phase:** Groundwork + +The project is currently preparing the technical and organizational foundation for future development. + +Completed work includes: + +- Repository structure +- Development workflow +- Architecture documentation (TOGAF ADM) +- Architecture Decision Records (ADRs) +- Project governance +- Documentation infrastructure + +At this stage, no production-ready chart components are available. + +--- + +## Upcoming Milestones + +### Foundation + +- Create the initial StencilJS library +- Establish Storybook for component development +- Configure testing infrastructure +- Configure CI/CD pipeline + +--- + +### First Proof of Concept + +Deliver the first functional chart implementation to validate the technical architecture. + +Goals include: + +- SVG rendering +- Accessibility validation +- Framework integration +- Community feedback + +--- + +### Minimum Viable Product (MVP) + +Provide the first publicly usable version of LUNA Charts. + +The MVP focuses on delivering value rather than completeness. + +Expected outcomes include: + +- Initial chart collection +- Stable public API +- Documentation +- Example applications +- Accessibility support + +--- + +### Community Growth + +After the MVP, the project will gradually expand. + +Future work may include: + +- Additional chart types +- Advanced customization +- Performance improvements +- Extended framework support +- Community contributions +- Governance evolution + +--- + +## Long-Term Vision + +LUNA Charts aims to become an accessible, framework-independent charting library that combines modern Web Components with a transparent architecture and a sustainable open-source development model. + +Every milestone builds upon the architectural foundation established during the Groundwork phase. \ No newline at end of file -- 2.54.0 From 94c12dc90a1b20271ba3ef505db8beb7b51e0b13 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Wed, 15 Jul 2026 01:05:21 +0200 Subject: [PATCH 47/88] fix(docs): Updated Startpage of the documentation --- docs/src/content/docs/index.mdx | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx index 61eeca9..f9a6831 100644 --- a/docs/src/content/docs/index.mdx +++ b/docs/src/content/docs/index.mdx @@ -21,20 +21,13 @@ import { Card, CardGrid } from '@astrojs/starlight/components'; ## The Topics - - Edit `src/content/docs/index.mdx` to see this page change. + + Start reading [getting-started](./getting-started/) and learn how LUNA-Charts is organized. - - Delete `template: splash` in `src/content/docs/index.mdx` to display a - sidebar on this page. + + Read how LUNA is using the ADM [document](./architecture/adm/). - - Add Markdown or MDX files to `src/content/docs` to create new pages. - - - Edit your `sidebar` and other config in `astro.config.mjs`. - - - Learn more in [the Starlight Docs](https://starlight.astro.build/). + + Explore our [ADRs](./architecture/adr/) to understand the reasoning behind our technical decisions. -- 2.54.0 From 2c2fbd160e336f0e37ef89e06f81557050670b81 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Wed, 15 Jul 2026 12:18:38 +0200 Subject: [PATCH 48/88] ignore(test): Added new folder After pnpm test, test-results will be created. Does need to push. Added the folder in .gitignore --- packages/luna-charts/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/luna-charts/.gitignore b/packages/luna-charts/.gitignore index c3ea58a..e877e1b 100644 --- a/packages/luna-charts/.gitignore +++ b/packages/luna-charts/.gitignore @@ -24,3 +24,5 @@ $RECYCLE.BIN/ Thumbs.db UserInterfaceState.xcuserstate .env + +test-results \ No newline at end of file -- 2.54.0 From 1874c0ea9ee93c0394f246fe8dfbc68d6508dfe5 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Wed, 15 Jul 2026 13:51:26 +0200 Subject: [PATCH 49/88] Added .pnpm-store in .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b512c09..58c4935 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -node_modules \ No newline at end of file +node_modules +.pnpm-store -- 2.54.0 From 9821ffe64262eb4d6402c1bb624818327d5f2600 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Wed, 15 Jul 2026 13:55:27 +0200 Subject: [PATCH 50/88] test(docker): Added docker container Playwright tests execute in containers, allowing developers to test independently of the operating system. --- Dockerfile.test | 18 ++++++++++++++++++ docker-compose.test.yaml | 6 ++++++ 2 files changed, 24 insertions(+) create mode 100644 Dockerfile.test create mode 100644 docker-compose.test.yaml diff --git a/Dockerfile.test b/Dockerfile.test new file mode 100644 index 0000000..df96508 --- /dev/null +++ b/Dockerfile.test @@ -0,0 +1,18 @@ +FROM mcr.microsoft.com/playwright:v1.61.1-noble + +RUN corepack enable && corepack prepare pnpm@10 --activate + +ENV CI=true + +WORKDIR /app + +COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./ +COPY packages/luna-charts/package.json ./packages/luna-charts/ + +RUN pnpm install --frozen-lockfile + +COPY . . + +WORKDIR /app/packages/luna-charts + +CMD ["pnpm", "test:browser"] \ No newline at end of file diff --git a/docker-compose.test.yaml b/docker-compose.test.yaml new file mode 100644 index 0000000..bbf80bc --- /dev/null +++ b/docker-compose.test.yaml @@ -0,0 +1,6 @@ +services: + test: + build: + context: . + dockerfile: Dockerfile.test + working_dir: /app/packages/luna-charts \ No newline at end of file -- 2.54.0 From d8d4c7cb69d9d7ab9291f80b80e7f30084ce6746 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Wed, 15 Jul 2026 13:57:44 +0200 Subject: [PATCH 51/88] test(pnpm and playwright): Updated dependencies --- package.json | 8 +++++--- packages/luna-charts/package.json | 2 ++ pnpm-workspace.yaml | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 0b8d1d9..d643a4a 100644 --- a/package.json +++ b/package.json @@ -6,10 +6,12 @@ "scripts": { "lint": "eslint .", "format": "prettier --write .", - "test": "echo \"Error: no test specified\" && exit 1", "changeset": "changeset", "version": "changeset version", - "release": "changeset publish" + "release": "changeset publish", + "test:unit": "pnpm --filter luna-charts test:unit", + "test:component": "docker compose -f docker-compose.test.yaml up --build --abort-on-container-exit --exit-code-from test", + "test": "pnpm test:unit && pnpm test:component" }, "keywords": [], "author": "", @@ -31,4 +33,4 @@ "eslint": "^10.6.0", "prettier": "^3.9.4" } -} +} \ No newline at end of file diff --git a/packages/luna-charts/package.json b/packages/luna-charts/package.json index ab4fda6..f5e04af 100644 --- a/packages/luna-charts/package.json +++ b/packages/luna-charts/package.json @@ -35,6 +35,8 @@ "build": "stencil build", "start": "stencil build --dev --watch --serve", "test": "stencil-test --prod", + "test:unit": "stencil-test --prod --project=unit", + "test:browser": "stencil-test --prod --project=browser", "test:watch": "stencil-test --prod --watch", "generate": "stencil generate", "storybook": "storybook dev -p 6006 --no-open" diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0eecc15..9e3811f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,20 @@ packages: - "packages/*" - "apps/*" + allowBuilds: esbuild: false + +onlyBuiltDependencies: + - playwright + +supportedArchitectures: + os: + - current + - linux + cpu: + - current + - x64 + libc: + - current + - glibc -- 2.54.0 From a10b79b5041566d95c385dbb136e1d7e59eb86d1 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Wed, 15 Jul 2026 16:42:43 +0200 Subject: [PATCH 52/88] test(pnpm and playwright): Playwright run successful in docker container" -m "- Pin Dockerfile.test to mcr.microsoft.com/playwright:v1.52.0-noble to match the playwright npm package version (was mismatched at v1.61.1) - Add supportedArchitectures (linux-x64-gnu) to pnpm-workspace.yaml so native bindings (rolldown, esbuild) are included in the lockfile for the container's platform - Add onlyBuiltDependencies: [playwright] to pnpm-workspace.yaml so build scripts run non-interactively in CI/Docker - Remove stale/redundant pnpm field from package.json (moved to pnpm-workspace.yaml per pnpm v10+ config location) - Split stencil-test into test:unit (native, fast) and test:browser (Docker, cross-browser) scripts - Set ENV CI=true in Dockerfile.test to avoid interactive TTY prompts during pnpm install - Remove anonymous node_modules volumes from docker-compose.test.yaml to prevent stale volume state from surviving image rebuilds - Add root-level test:unit / test:component / test scripts to orchestrate native unit tests and Dockerized cross-browser tests --- .dockerignore | 2 ++ Dockerfile.test | 17 +++++++++++------ package.json | 2 +- packages/luna-charts/package.json | 8 ++++---- pnpm-lock.yaml | 2 +- 5 files changed, 19 insertions(+), 12 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..4f7a56c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +node_modules +packages/**/node_modules diff --git a/Dockerfile.test b/Dockerfile.test index df96508..83f44b4 100644 --- a/Dockerfile.test +++ b/Dockerfile.test @@ -6,13 +6,18 @@ ENV CI=true WORKDIR /app -COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./ -COPY packages/luna-charts/package.json ./packages/luna-charts/ - -RUN pnpm install --frozen-lockfile - COPY . . +RUN rm -rf node_modules packages/**/node_modules + +RUN rm -f pnpm-lock.yaml + +ENV PNPM_CONFIG_SUPPORTED_ARCHITECTURES="current,linux-x64-gnu" + +RUN pnpm install + WORKDIR /app/packages/luna-charts -CMD ["pnpm", "test:browser"] \ No newline at end of file +RUN pnpm add -D @rolldown/binding-linux-x64-gnu + +CMD ["pnpm", "test:browser"] diff --git a/package.json b/package.json index d643a4a..b54396c 100644 --- a/package.json +++ b/package.json @@ -33,4 +33,4 @@ "eslint": "^10.6.0", "prettier": "^3.9.4" } -} \ No newline at end of file +} diff --git a/packages/luna-charts/package.json b/packages/luna-charts/package.json index f5e04af..017f261 100644 --- a/packages/luna-charts/package.json +++ b/packages/luna-charts/package.json @@ -45,14 +45,14 @@ "@stencil/core": "^4.43.5", "@stencil/storybook-plugin": "^0.7.0", "@stencil/vitest": "^1.8.3", + "@storybook/addon-docs": "^10.5.0", "@storybook/addon-links": "^10.5.0", "@types/node": "^22.13.5", "@vitest/browser-playwright": "^4.0.0", - "playwright": "^1.52.0", - "storybook": "^10.5.0", - "vitest": "^4.0.0", "eslint-plugin-storybook": "10.5.0", - "@storybook/addon-docs": "^10.5.0" + "playwright": "^1.61.1", + "storybook": "^10.5.0", + "vitest": "^4.0.0" }, "license": "MIT" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 01f4bb9..bf3b1fe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -244,7 +244,7 @@ importers: specifier: 10.5.0 version: 10.5.0(eslint@10.6.0(jiti@2.7.0))(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(typescript@5.9.3) playwright: - specifier: ^1.52.0 + specifier: ^1.61.1 version: 1.61.1 storybook: specifier: ^10.5.0 -- 2.54.0 From 5564eaf31acb07fbd3b8aa55885d477cc8b21cc0 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Thu, 16 Jul 2026 15:23:14 +0200 Subject: [PATCH 53/88] build: add axe-core dependency --- packages/luna-charts/package.json | 1 + pnpm-lock.yaml | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/packages/luna-charts/package.json b/packages/luna-charts/package.json index 017f261..607e5e6 100644 --- a/packages/luna-charts/package.json +++ b/packages/luna-charts/package.json @@ -49,6 +49,7 @@ "@storybook/addon-links": "^10.5.0", "@types/node": "^22.13.5", "@vitest/browser-playwright": "^4.0.0", + "axe-core": "^4.12.1", "eslint-plugin-storybook": "10.5.0", "playwright": "^1.61.1", "storybook": "^10.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bf3b1fe..df81374 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -240,6 +240,9 @@ importers: '@vitest/browser-playwright': specifier: ^4.0.0 version: 4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10) + axe-core: + specifier: ^4.12.1 + version: 4.12.1 eslint-plugin-storybook: specifier: 10.5.0 version: 10.5.0(eslint@10.6.0(jiti@2.7.0))(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(typescript@5.9.3) @@ -1324,6 +1327,10 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} + axe-core@4.12.1: + resolution: {integrity: sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==} + engines: {node: '>=4'} + balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} @@ -3266,6 +3273,8 @@ snapshots: dependencies: tslib: 2.8.1 + axe-core@4.12.1: {} + balanced-match@4.0.4: {} better-path-resolve@1.0.0: -- 2.54.0 From 64a6ff6a2000f458b86ba05805d87185245e8f3d Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Thu, 16 Jul 2026 15:33:28 +0200 Subject: [PATCH 54/88] feat(a11y): add extensible accessibility test infrastructure with axe-core" -m "- Add A11yChecker interface (types.ts) as the shared contract for accessibility checkers --- .../testing/a11y/checkers/axe-core.checker.ts | 21 +++++++++++ .../src/testing/a11y/checkers/types.ts | 17 +++++++++ .../luna-charts/src/testing/a11y/index.ts | 12 +++++++ .../luna-charts/src/testing/a11y/matchers.ts | 36 +++++++++++++++++++ packages/luna-charts/vitest-setup.ts | 1 + 5 files changed, 87 insertions(+) create mode 100644 packages/luna-charts/src/testing/a11y/checkers/axe-core.checker.ts create mode 100644 packages/luna-charts/src/testing/a11y/checkers/types.ts create mode 100644 packages/luna-charts/src/testing/a11y/index.ts create mode 100644 packages/luna-charts/src/testing/a11y/matchers.ts diff --git a/packages/luna-charts/src/testing/a11y/checkers/axe-core.checker.ts b/packages/luna-charts/src/testing/a11y/checkers/axe-core.checker.ts new file mode 100644 index 0000000..edef231 --- /dev/null +++ b/packages/luna-charts/src/testing/a11y/checkers/axe-core.checker.ts @@ -0,0 +1,21 @@ +import axe from 'axe-core'; +import type { A11yChecker, A11yCheckResult } from './types'; + +export const axeCoreChecker: A11yChecker = { + name: 'axe-core', + + async run(rootElement: Element): Promise { + const results = await axe.run(rootElement); + + return { + checkerName: 'axe-core', + violations: results.violations.map((violations) => ({ + id: violations.id, + impact: violations.impact ?? null, + description: violations.help, + helpUrl: violations.helpUrl, + nodes: violations.nodes.map((node) => node.target.join(' ')), + })), + }; + }, +}; \ No newline at end of file diff --git a/packages/luna-charts/src/testing/a11y/checkers/types.ts b/packages/luna-charts/src/testing/a11y/checkers/types.ts new file mode 100644 index 0000000..2254aaa --- /dev/null +++ b/packages/luna-charts/src/testing/a11y/checkers/types.ts @@ -0,0 +1,17 @@ +export interface A11yViolation { + id: string; + impact: 'minor' | 'moderate' | 'serious' | 'critical' | null; + description: string; + helpUrl?: string; + nodes: string[]; +} + +export interface A11yCheckResult { + checkerName: string; + violations: A11yViolation[]; +} + +export interface A11yChecker { + name: string; + run(root: Element): Promise; +} \ No newline at end of file diff --git a/packages/luna-charts/src/testing/a11y/index.ts b/packages/luna-charts/src/testing/a11y/index.ts new file mode 100644 index 0000000..7a840e8 --- /dev/null +++ b/packages/luna-charts/src/testing/a11y/index.ts @@ -0,0 +1,12 @@ +import type { A11yChecker, A11yCheckResult } from './checkers/types'; +import { axeCoreChecker } from './checkers/axe-core.checker'; + +const a11yCheckerRegistry: A11yChecker[] = [ + axeCoreChecker, +]; + +export async function runA11yChecks(rootElement: Element): Promise { + return Promise.all(a11yCheckerRegistry.map((a11yChecker) => a11yChecker.run(rootElement))); +} + +export type { A11yChecker, A11yCheckResult, A11yViolation } from './checkers/types'; \ No newline at end of file diff --git a/packages/luna-charts/src/testing/a11y/matchers.ts b/packages/luna-charts/src/testing/a11y/matchers.ts new file mode 100644 index 0000000..ac44fcb --- /dev/null +++ b/packages/luna-charts/src/testing/a11y/matchers.ts @@ -0,0 +1,36 @@ +import { expect } from 'vitest'; +import type { A11yCheckResult } from './checkers/types'; + +expect.extend({ + toHaveNoA11yViolations(results: A11yCheckResult[]) { + const failing = results.filter((results) => results.violations.length > 0); + + if (failing.length === 0) { + return { + pass: true, + message: () => 'expected accessibility violations, but none were found', + }; + } + + const message = failing + .map( + (results) => + `[${results.checkerName}] ${results.violations.length} violation(s):\n` + + results.violations + .map((validation) => ` - ${validation.id} (${validation.impact}): ${validation.description}\n affected: ${validation.nodes.join(', ')}`) + .join('\n') + ) + .join('\n\n'); + + return { + pass: false, + message: () => `Accessibility violations found:\n\n${message}`, + }; + }, +}); + +declare module 'vitest' { + interface Assertion { + toHaveNoA11yViolations(): void; + } +} \ No newline at end of file diff --git a/packages/luna-charts/vitest-setup.ts b/packages/luna-charts/vitest-setup.ts index 1c397f3..e046bc4 100644 --- a/packages/luna-charts/vitest-setup.ts +++ b/packages/luna-charts/vitest-setup.ts @@ -1,3 +1,4 @@ import { defineCustomElements } from "./loader"; +import './src/testing/a11y/matchers'; defineCustomElements(); \ No newline at end of file -- 2.54.0 From 477f2bcc479e54a5618e2623ccad178b8240f1a1 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Thu, 16 Jul 2026 15:34:35 +0200 Subject: [PATCH 55/88] feat(a11y-example) Added my-component my-component will remove in the future or moved in example. It is just a preview to see, if the tests run --- .../my-component/my-component.cmp.test.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/luna-charts/src/components/my-component/my-component.cmp.test.tsx b/packages/luna-charts/src/components/my-component/my-component.cmp.test.tsx index a3a2076..bc8961e 100644 --- a/packages/luna-charts/src/components/my-component/my-component.cmp.test.tsx +++ b/packages/luna-charts/src/components/my-component/my-component.cmp.test.tsx @@ -1,4 +1,5 @@ import { render, h, describe, it, expect } from '@stencil/vitest'; +import { runA11yChecks } from '../../testing/a11y'; describe('my-component', () => { it('renders', async () => { @@ -14,10 +15,15 @@ describe('my-component', () => { `); }); + it('has no accessibility violations', async () => { + const { root } = await render(); + + const results = await runA11yChecks(root); + expect(results).toHaveNoA11yViolations(); + }); + it('renders with values', async () => { - const { root } = await render( - , - ); + const { root } = await render(); await expect(root).toEqualHtml(` -- 2.54.0 From 9b0758a0ebde2a44c3eaf1cd76727fb8a03d1ab7 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Fri, 17 Jul 2026 18:27:17 +0200 Subject: [PATCH 56/88] Update(docs) Updated ADR 200 Jest is replaced by Vitest. New version of StencilJS use Vitest for unit tests --- .../adr/000200-technology-stack.mdx | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/docs/src/content/docs/architecture/adr/000200-technology-stack.mdx b/docs/src/content/docs/architecture/adr/000200-technology-stack.mdx index e85861e..8e7fe6d 100644 --- a/docs/src/content/docs/architecture/adr/000200-technology-stack.mdx +++ b/docs/src/content/docs/architecture/adr/000200-technology-stack.mdx @@ -5,6 +5,7 @@ description: "Selection of the technology stack for LUNA Charts based on the TOG * **Status:** Accepted * **Date:** 2026-07-12 +* **Last Updated:** 2006-07-17 * **Decision Makers:** LUNA Charts Maintainers --- @@ -51,7 +52,7 @@ The following factors influenced the decision: | Component Documentation | Storybook, Styleguidist | **Storybook** | | Project Documentation | Docusaurus, VitePress, Starlight | **Starlight** | | Package Manager | npm, Yarn, pnpm | **pnpm** | -| Unit Testing | Vitest, Jest | **Jest** | +| Unit Testing | Vitest, Jest | **Vitest** | | Browser Testing | Cypress, Playwright | **Playwright** | | Accessibility Testing | Manual Testing Only, axe-core | **axe-core** | | Code Formatting | Manual Formatting, Prettier | **Prettier** | @@ -74,8 +75,8 @@ The following technology stack is adopted for the implementation of LUNA Charts. | **Starlight** | Project and architecture documentation | | **TypeScript** | Strong typing and developer tooling | | **pnpm** | Package management and workspace support | -| **Jest** | Unit testing | -| **Playwright** | Browser and interaction testing | +| **Vitest** | Unit testing and browser/component testing | +| **Playwright** | Browser provider for Vitest browser mode | | **axe-core** | Accessibility validation | | **ESLint** | Static code analysis | | **Prettier** | Consistent code formatting | @@ -128,15 +129,17 @@ pnpm Workspaces enable a modular repository structure while maintaining a single --- -### Jest +### Vitest -Jest provides fast unit testing for business logic, utility functions, configuration handling, validation, and other non-browser-specific functionality. +Vitest provides fast unit testing for business logic, utility functions, configuration handling, validation, and other non-browser-specific functionality. + +Vitest also serves as the single test runner for browser/component tests, using Playwright as its browser provider (`@vitest/browser-playwright`). This avoids maintaining two separate test runners and keeps unit and component testing under one consistent configuration and reporting workflow. --- ### Playwright -Playwright validates component behavior inside real browsers. +Playwright validates component behavior inside real browsers, running as the browser provider within Vitest's browser mode rather than as a standalone test runner. It is used to verify keyboard interaction, focus management, SVG rendering, and other browser-dependent accessibility features. @@ -210,5 +213,26 @@ GitHub Actions automates testing, validation, and release workflows to ensure co * Storybook Documentation * Starlight Documentation * Playwright Documentation -* Jest Documentation -* pnpm Documentation \ No newline at end of file +* Vitest Documentation +* pnpm Documentation + +--- + +## Change Log + +### 2026-07-17 – Unit Testing: Jest replaced with Vitest + +**Reason** + +During implementation, Jest was replaced with Vitest as the unit testing tool. Stencil's official Vitest integration (`@stencil/vitest`) allows unit tests and browser/component tests to run through a single test runner and configuration file, instead of maintaining Jest for unit tests and a separate Playwright test runner for browser tests. This reduces toolchain complexity and keeps testing configuration consistent across both test types. + +**Changes** + +* "Considered Alternatives" table: selected Unit Testing technology changed from **Jest** to **Vitest** +* "Decision" table: **Jest** entry replaced with **Vitest**; **Playwright**'s purpose updated to reflect its role as the browser provider used by Vitest, not a standalone browser test runner +* "Rationale" section: `Jest` subsection replaced with `Vitest`; `Playwright` subsection clarified to describe it as running inside Vitest's browser mode +* "References": `Jest Documentation` replaced with `Vitest Documentation` + +**Impact** + +Playwright remains part of the technology stack, but its architectural role changes from an independent browser test runner to the browser engine used by Vitest. No other decisions in this ADR are affected. \ No newline at end of file -- 2.54.0 From 2b5ce8a2336b0934071abfa0d1a2604a2f26c9da Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Fri, 17 Jul 2026 18:36:11 +0200 Subject: [PATCH 57/88] Update(docs): align ADR-0001 and ADR-0002 with implemented architecture Corrects two Architecture Decision Records that had drifted from the actual implementation during this sprint. - ADR-0002 (Technology Stack): unit testing now uses Vitest instead of Jest; Playwright's role is clarified as the browser provider used by Vitest's browser mode rather than a standalone test runner. - ADR-0001 (Repository Structure): repository diagram updated to remove the unused apps/ directory, correct the docs/ path to match the actual Starlight content location, and add the previously missing adm/ folder. Both ADRs now include a Change Log section documenting what changed and why, per the Architecture Change Management process (ADM Phase H). --- .../adr/000100-repository-structure.mdx | 40 +++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/docs/src/content/docs/architecture/adr/000100-repository-structure.mdx b/docs/src/content/docs/architecture/adr/000100-repository-structure.mdx index 16515e6..da4d526 100644 --- a/docs/src/content/docs/architecture/adr/000100-repository-structure.mdx +++ b/docs/src/content/docs/architecture/adr/000100-repository-structure.mdx @@ -5,6 +5,7 @@ description: "Decision to use a pnpm-based monorepo structure for LUNA Charts." * **Status:** Accepted * **Date:** 2026-07-12 +* **Last Updated:** 2026-07-17 * **Decision Makers:** LUNA Charts Maintainers --- @@ -66,20 +67,23 @@ luna-charts/ │ ├── packages/ │ └── luna-charts/ -│ -├── apps/ -│ ├── storybook/ -│ └── docs/ +│ └── .storybook/ │ ├── docs/ -│ ├── architecture/ -│ └── adr/ +│ └── src/content/docs/architecture/ +│ ├── adr/ +│ └── adm/ │ ├── examples/ │ +├── .changeset/ +│ └── .github/ ``` +Storybook is not maintained as a separate app but lives directly inside the `packages/luna-charts` package, alongside the component source code it documents. +The `docs/` workspace is not nested under an `apps/` directory; it is a top-level workspace built with Starlight, with architecture documentation (ADR and ADM) organized under `docs/src/content/docs/architecture/`. + Internally, the library is organized into architectural modules such as: * Core @@ -135,4 +139,26 @@ This structure supports the project's architecture-first approach and simplifies * LUNA Charts Architecture Wiki * ADR-0002: Technology Stack -* pnpm Workspaces Documentation \ No newline at end of file +* pnpm Workspaces Documentation + +--- + +## Change Log + +### 2026-07-17 – Repository structure diagram updated (removal of `apps/`) + +**Reason** + +The originally planned `apps/` workspace (containing `apps/storybook` and `apps/docs`) was never adopted in this form during implementation. Storybook was instead kept inside `packages/luna-charts` alongside the component source it documents, and the documentation workspace (`docs/`) was placed directly at the repository root rather than nested under `apps/`. The repository structure diagram in this ADR no longer matched the actual repository layout, while the Getting Started documentation (`project-structure.mdx`) already reflected the current structure. + +**Changes** + +* Removed the `apps/` directory (and its `storybook/` and `docs/` subentries) from the structure diagram +* Corrected the `docs/` path to reflect the actual Starlight content location (`docs/src/content/docs/architecture/`) +* Added the `adm/` folder to the diagram, alongside `adr/`, since Architecture Development Method documentation is stored there as well +* Added `.changeset/` to the diagram, as it is a workspace-level configuration directory used for release management +* Added a note clarifying that Storybook is maintained as part of the `packages/luna-charts` package rather than as a separate app + +**Impact** + +The overall decision (pnpm-based monorepo with logical workspace separation) is unaffected. Only the illustrative directory layout was corrected to match the implemented structure. No other ADRs are impacted by this change. \ No newline at end of file -- 2.54.0 From c5011073cf1df146aced0ff3dbe886cff5b8720e Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Fri, 17 Jul 2026 18:41:10 +0200 Subject: [PATCH 58/88] Fix(config): remove stale apps/ references from workspace configs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cleans up leftover configuration from the apps/ → docs/ restructuring (see ADR-0001 update). Neither file had any effect anymore since the apps/ directory no longer exists, but both left stale references that could confuse future contributors. - pnpm-workspace.yaml: removed the unused "apps/*" package glob - .changeset/config.json: removed the "ignore": ["apps/docs"] entry, since docs/ is not tracked as a pnpm workspace package and the entry had no effect --- .changeset/config.json | 2 +- pnpm-workspace.yaml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.changeset/config.json b/.changeset/config.json index 3b48572..a369c84 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -7,5 +7,5 @@ "access": "restricted", "baseBranch": "dev", "updateInternalDependencies": "patch", - "ignore": ["apps/docs"] + "ignore": [] } diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 9e3811f..2f99386 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,6 +1,5 @@ packages: - "packages/*" - - "apps/*" allowBuilds: esbuild: false -- 2.54.0 From 669baef7d40e8ad27786c244148caea520d315ff Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Fri, 17 Jul 2026 18:49:35 +0200 Subject: [PATCH 59/88] Update(docs): document containerized browser test execution Adds the containerized Playwright-based test execution environment (Dockerfile.test, docker-compose.test.yaml) to the Technology Architecture, which was implemented but never documented. - Added Section 6.6 "Test Execution Environment" describing the Docker-based Playwright setup used for local development and CI - Added the containerized test environment to the "Key Architectural Decisions" list - Added a Change Log entry explaining what changed and why --- .../adm/technology-architecture.mdx | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/docs/src/content/docs/architecture/adm/technology-architecture.mdx b/docs/src/content/docs/architecture/adm/technology-architecture.mdx index c310713..9e3cc82 100644 --- a/docs/src/content/docs/architecture/adm/technology-architecture.mdx +++ b/docs/src/content/docs/architecture/adm/technology-architecture.mdx @@ -148,6 +148,22 @@ LUNA Charts follows a multi-layer quality assurance model. Automated testing (unit, accessibility, linting, visual regression) is a **blocking condition for every release**. Usability testing is a **blocking condition for minor and major releases**, but is skipped for patch releases to avoid delaying critical fixes. +### 6.6 Test Execution Environment + +Component and browser tests (Vitest browser mode, see ADR-0002) run inside a **containerized Playwright environment** rather than directly on contributor or CI host machines. + +#### Characteristics + +- A dedicated `Dockerfile.test`, based on the official Playwright container image, provides a reproducible browser environment with pinned browser versions +- `docker-compose.test.yaml` orchestrates the test execution, isolating dependencies from the host system +- The same containerized environment is used locally by contributors and in Continuous Integration, avoiding "works on my machine" discrepancies caused by differing local Playwright/browser installations + +#### Rationale + +- Ensures deterministic, reproducible accessibility and browser test results independent of the host operating system +- Removes the need for contributors to install and maintain matching Playwright browser binaries locally +- Aligns automated testing (Section 6.1–6.4) with a single, version-controlled execution environment + ## 7. Release & Distribution Model ### Open Source Release Pipeline @@ -192,6 +208,7 @@ LUNA Charts targets modern web environments. - Single-package distribution model - No plugin or extension system - Multi-layer testing strategy with release gating +- Containerized, reproducible test execution environment for browser and accessibility tests - Open-source distribution via GitHub and npm - Modern browser and mobile-first runtime strategy @@ -223,4 +240,19 @@ This document reflects a refined Technology Architecture based on iterative arch - Framework neutrality enforced through adapter-based architecture - Distribution model defined as a single-package open-source release via npm and GitHub - Testing strategy defined as a multi-layer quality gate system (unit, accessibility, linting, visual regression) -- Runtime scope restricted to modern browsers and mobile-first environments for performance and accessibility alignment \ No newline at end of file +- Runtime scope restricted to modern browsers and mobile-first environments for performance and accessibility alignment + +### 2026-07-17 – Containerized test execution documented + +**Reason** + +Component and browser tests are executed inside a Docker-based Playwright environment (`Dockerfile.test`, `docker-compose.test.yaml`), which was introduced during implementation but had not yet been reflected in this document. + +**Changes** + +- Added Section 6.6 "Test Execution Environment" describing the containerized Playwright setup used for local development and CI +- Added "Containerized, reproducible test execution environment" to Section 9 "Key Architectural Decisions" + +**Impact** + +This clarifies an already-implemented part of the testing strategy (Section 6) and does not change any other architectural decision in this document. \ No newline at end of file -- 2.54.0 From 2991ddf5675831505bb607a2b882bc0059f739ff Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sat, 18 Jul 2026 09:38:43 +0200 Subject: [PATCH 60/88] Update(docs): add project README and CONTRIBUTING guide Adds a proper project README (description, tech stack, structure, setup, scripts) and a CONTRIBUTING guide (governance summary, workflow, PR expectations), both previously missing or placeholder-only. --- CONTRIBUTING.md | 78 ++++++++++++++++++++++++++++++++++++++++++++ README.md | 86 +++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..1a201d1 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,78 @@ +# Contributing to LUNA Charts + +Thank you for considering a contribution to LUNA Charts! This document explains how the project is governed, what's expected of a contribution, and how to get your change through review. + +Before contributing, please also read our [Code of Conduct](./.github/CODE_OF_CONDUCT.md). + +## Project Status + +LUNA Charts is currently in its **groundwork phase** — foundational architecture, tooling, and testing infrastructure are being established before chart components are built out. Check the [Roadmap](./docs/src/content/docs/getting-started/roadmap.mdx) to see what's currently in scope. + +## How the Project Is Governed + +LUNA Charts balances open community contribution with a documented architecture. In short: + +- **The architecture is the authoritative source for implementation decisions** — it's documented under [`docs/.../architecture/adm`](./docs/src/content/docs/architecture/adm) (Architecture Development Method) and [`docs/.../architecture/adr`](./docs/src/content/docs/architecture/adr) (Architecture Decision Records) +- **Contributions are reviewed on three levels**: automated checks (types, linting, tests, accessibility), architectural compliance (does it fit the documented architecture?), and general project quality (readability, maintainability, documentation) +- **A Pull Request can be rejected even if all automated checks pass** — for example, if it introduces an unnecessary public API change, bypasses accessibility mechanisms, or conflicts with a documented architectural decision +- Community members can propose architectural changes, but such changes only become official once the relevant ADR/ADM documentation has been updated to reflect them (see [Architecture Change Management](./docs/src/content/docs/architecture/adm/architecture-change-management.mdx)) + +If you're planning a larger change, especially one that touches the public API, rendering approach, or accessibility behavior, please open an issue or discussion first so it can be reviewed against the architecture before you invest time in an implementation. + +## Getting Started + +1. Fork the repository and clone your fork +2. Install dependencies: + + ```bash + pnpm install + ``` + +3. Requirements: Node.js `>= 22.0.0`, pnpm `11.11.0` (via Corepack), and Docker (for component/browser tests) + +## Making a Change + +1. Create a branch from `main` with a descriptive name (e.g. `fix/axis-label-overflow`, `docs/update-technology-architecture`) +2. Make your change +3. Run the checks locally before opening a PR: + + ```bash + pnpm lint + pnpm test:unit + pnpm test:component # runs inside a Docker/Playwright container + pnpm test # runs both of the above + ``` + +4. If your change affects published package behavior (bug fix, feature, breaking change), add a changeset: + + ```bash + pnpm changeset + ``` + + Documentation-only or internal tooling changes generally don't need a changeset — if you're unsure, mention it in your PR description and a maintainer will advise. + +## Pull Request Guidelines + +- Keep PRs focused on a single concern where possible — smaller PRs are easier to review against the architecture +- Describe **what** changed and **why**, not just what the diff shows +- If your change affects accessibility behavior, explain how it was verified (e.g. which axe-core checks or manual screen-reader testing was done) +- If your change touches an area covered by an existing ADR, reference it and note whether the ADR needs a corresponding update +- Automated testing (unit, accessibility, linting) must pass before a PR can be merged + +## Documentation Changes + +Documentation lives in `docs/` (Starlight) and is a first-class contribution — fixing unclear wording, expanding examples, or correcting an outdated ADR/ADM page is just as valuable as a code change. + +If your code change makes a documented architectural statement incorrect (for example, changing a technology choice or the repository structure), please update the relevant ADR/ADM page in the same PR, including a short **Change Log** entry at the end of that document explaining what changed and why. Keeping documentation in sync with implementation is part of the review criteria described above. + +## Reporting Bugs and Suggesting Features + +Please open an issue with: + +- A clear description of the problem or suggestion +- Steps to reproduce (for bugs), including browser/OS if relevant to rendering or accessibility +- What you expected to happen vs. what actually happened + +## Questions + +If anything here is unclear, feel free to open a discussion or issue — improving this guide based on real contributor questions is welcome too. diff --git a/README.md b/README.md index 67e79c5..352583a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,85 @@ -# LUNA-Charts +# LUNA Charts -LUNA Charts is a reusable, developer-friendly charting library designed to make accessible, WCAG-oriented data visualization the default rather than an afterthought. \ No newline at end of file +LUNA Charts is a reusable, developer-friendly charting library designed to make accessible, WCAG-oriented data visualization the default rather than an afterthought. + +> **Project status:** Groundwork phase. Core architecture and tooling are in place; production-ready chart components (starting with `BarChart`) are still in development. See the [Roadmap](./docs/src/content/docs/getting-started/roadmap.mdx) for details. + +## Why LUNA Charts + +Most charting libraries treat accessibility as an add-on. LUNA Charts builds it in from the start: + +- **Accessible by default** — components are designed and tested against WCAG guidance from day one, not patched in afterward +- **Framework-agnostic** — built as standard Web Components (Stencil), usable in React, Vue, Angular, Svelte, or plain HTML +- **SVG-based rendering** — inspectable, stylable, and screen-reader-friendly output instead of an opaque canvas + +## Tech Stack + +| Area | Technology | +|---|---| +| Component framework | [Stencil](https://stenciljs.com) (compiles to standard Web Components) | +| Language | TypeScript | +| Package manager | pnpm (monorepo workspaces) | +| Unit & component testing | [Vitest](https://vitest.dev), with [Playwright](https://playwright.dev) as the browser provider | +| Accessibility testing | axe-core | +| Documentation | [Starlight](https://starlight.astro.build) | +| Component explorer | Storybook | +| Linting & formatting | ESLint, Prettier | +| Release management | [Changesets](https://github.com/changesets/changesets) | + +The full set of architecture decisions behind these choices is documented in [`docs/.../architecture/adr`](./docs/src/content/docs/architecture/adr) and the broader [Architecture Development Method (ADM) documentation](./docs/src/content/docs/architecture/adm). + +## Project Structure + +```text +luna-charts/ +│ +├── packages/ +│ └── luna-charts/ # The library itself (Stencil components, Storybook) +│ +├── docs/ # Architecture docs, ADRs, guides (Starlight) +│ +├── examples/ # Usage examples (framework integrations) +│ +├── .changeset/ # Release/versioning configuration +│ +└── .github/ # Community health files (Code of Conduct, etc.) +``` + +## Getting Started + +### Prerequisites + +- Node.js `>= 22.0.0` +- pnpm `11.11.0` (see `devEngines` in `package.json`; pnpm will be downloaded automatically via Corepack if missing) +- Docker (required for running component/browser tests locally, see below) + +### Installation + +```bash +git clone +cd luna-charts +pnpm install +``` + +### Common commands + +| Command | Description | +|---|---| +| `pnpm lint` | Run ESLint across the repository | +| `pnpm format` | Format all files with Prettier | +| `pnpm test:unit` | Run unit tests for the `luna-charts` package | +| `pnpm test:component` | Run component/browser tests inside the containerized Playwright environment | +| `pnpm test` | Run the full test suite (unit + component) | +| `pnpm changeset` | Record a changeset for your change (required for any user-facing change) | + +Component and browser tests run inside Docker (`docker-compose.test.yaml`) to guarantee a reproducible browser environment across all contributors and CI — you don't need Playwright browsers installed locally. + +## Documentation + +- **Architecture documentation**: see `docs/` — includes the full Architecture Development Method (ADM) documentation (vision, business architecture, technology architecture, governance, migration planning) and all Architecture Decision Records (ADRs) +- **Contributing**: see [CONTRIBUTING.md](./CONTRIBUTING.md) +- **Code of Conduct**: see [.github/CODE_OF_CONDUCT.md](./.github/CODE_OF_CONDUCT.md) + +## License + +LUNA Charts is licensed under the [GNU Lesser General Public License v3.0 (LGPL-3.0)](./LICENSE). -- 2.54.0 From 3dc61e5087f6b82ba078a408a1e2b8b8b4cae99e Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Wed, 22 Jul 2026 23:50:31 +0200 Subject: [PATCH 61/88] build: fix missing native linux bindings for oxc and rolldown Explicitly added @oxc-parser/binding-linux-x64-gnu and @rolldown/binding-linux-x64-gnu as devDependencies. This bypasses issues where pnpm occasionally skips optional native platform bindings during installation, which previously caused CriticalPresetLoadError when loading StencilJS plugins. --- packages/luna-charts/custom-elements.json | 23 +++++++++++++++------- packages/luna-charts/package.json | 2 ++ pnpm-lock.yaml | 24 +++++++++++++++++++++++ 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/packages/luna-charts/custom-elements.json b/packages/luna-charts/custom-elements.json index b7c7052..98413b7 100644 --- a/packages/luna-charts/custom-elements.json +++ b/packages/luna-charts/custom-elements.json @@ -1,5 +1,5 @@ { - "timestamp": "2026-07-12T12:51:52", + "timestamp": "2026-07-22T21:49:28", "compiler": { "name": "@stencil/core", "version": "4.43.5", @@ -17,10 +17,10 @@ "props": [ { "name": "first", - "type": "string", + "type": "string | undefined", "complexType": { "original": "string", - "resolved": "string", + "resolved": "string | undefined", "references": {} }, "mutable": false, @@ -31,6 +31,9 @@ "values": [ { "type": "string" + }, + { + "type": "undefined" } ], "optional": true, @@ -40,10 +43,10 @@ }, { "name": "last", - "type": "string", + "type": "string | undefined", "complexType": { "original": "string", - "resolved": "string", + "resolved": "string | undefined", "references": {} }, "mutable": false, @@ -54,6 +57,9 @@ "values": [ { "type": "string" + }, + { + "type": "undefined" } ], "optional": true, @@ -63,10 +69,10 @@ }, { "name": "middle", - "type": "string", + "type": "string | undefined", "complexType": { "original": "string", - "resolved": "string", + "resolved": "string | undefined", "references": {} }, "mutable": false, @@ -77,6 +83,9 @@ "values": [ { "type": "string" + }, + { + "type": "undefined" } ], "optional": true, diff --git a/packages/luna-charts/package.json b/packages/luna-charts/package.json index 607e5e6..2e72e73 100644 --- a/packages/luna-charts/package.json +++ b/packages/luna-charts/package.json @@ -42,6 +42,8 @@ "storybook": "storybook dev -p 6006 --no-open" }, "devDependencies": { + "@oxc-parser/binding-linux-x64-gnu": "^0.141.0", + "@rolldown/binding-linux-x64-gnu": "^1.2.0", "@stencil/core": "^4.43.5", "@stencil/storybook-plugin": "^0.7.0", "@stencil/vitest": "^1.8.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index df81374..cf52efc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -219,6 +219,12 @@ importers: packages/luna-charts: devDependencies: + '@oxc-parser/binding-linux-x64-gnu': + specifier: ^0.141.0 + version: 0.141.0 + '@rolldown/binding-linux-x64-gnu': + specifier: ^1.2.0 + version: 1.2.0 '@stencil/core': specifier: ^4.43.5 version: 4.43.5 @@ -701,6 +707,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-x64-gnu@0.141.0': + resolution: {integrity: sha512-qtyQVAAebFq57B2tifTlel3TgGqUtsYNI/e+p6aya9rN9lOZVTDvr215fGYSA9XWooxzMxDiVxkBLk2jQHbsOQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-x64-musl@0.127.0': resolution: {integrity: sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -914,6 +927,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-x64-gnu@1.2.0': + resolution: {integrity: sha512-MK7L0018jjh1jR3mh21G2j1zAVcpscJBlPo2z19pRjv2XOYGRhaV4LyiD8HO6nCDdZln9IFgCMIV5yt4E3klGQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-x64-musl@1.1.5': resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2750,6 +2770,8 @@ snapshots: '@oxc-parser/binding-linux-x64-gnu@0.127.0': optional: true + '@oxc-parser/binding-linux-x64-gnu@0.141.0': {} + '@oxc-parser/binding-linux-x64-musl@0.127.0': optional: true @@ -2869,6 +2891,8 @@ snapshots: '@rolldown/binding-linux-x64-gnu@1.1.5': optional: true + '@rolldown/binding-linux-x64-gnu@1.2.0': {} + '@rolldown/binding-linux-x64-musl@1.1.5': optional: true -- 2.54.0 From 568bc3a98b75513564eb90de25c2026c0f204e12 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sat, 1 Aug 2026 23:12:45 +0200 Subject: [PATCH 62/88] textdocs(readme): add repository mirror and issue tracking notice To prevent fragmentation of feedback, we want all bug reports and contributions to be centralized on our main self-hosted platform. GitHub lacks active monitoring for issues, so users need clear direction on where to officially open them. --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 352583a..08ba42d 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,14 @@ LUNA Charts is a reusable, developer-friendly charting library designed to make > **Project status:** Groundwork phase. Core architecture and tooling are in place; production-ready chart components (starting with `BarChart`) are still in development. See the [Roadmap](./docs/src/content/docs/getting-started/roadmap.mdx) for details. +## Preface & Repository Mirror Notice + +Please be aware of our repository structure: + +* **Official Repository:** [git.byting-pandas.ninja/Ninosaurier/LUNA-Charts](https://byting-pandas.ninja) + +**Important:** All development, including issue tracking and contribution management, takes place exclusively on our self-hosted server. Issues and pull requests cannot be created or processed on this GitHub mirror. Please visit the original link above to report bugs or request features. + ## Why LUNA Charts Most charting libraries treat accessibility as an add-on. LUNA Charts builds it in from the start: -- 2.54.0 From bb6009d26c0b521f865a2f93fa4a69659b842023 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sat, 1 Aug 2026 23:41:47 +0200 Subject: [PATCH 63/88] build(workspace): add root command for documentation development Expose the Astro documentation development server through the root workspace to simplify the local development workflow. Developers can now start the documentation site without changing into the docs directory. Fixes: #12 --- package.json | 1 + pnpm-lock.yaml | 4777 +++++++++++++++++++++++++++++++++++++------ pnpm-workspace.yaml | 4 +- 3 files changed, 4137 insertions(+), 645 deletions(-) diff --git a/package.json b/package.json index b54396c..1f062bd 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "description": "", "main": "index.js", "scripts": { + "docs": "pnpm --filter docs run dev", "lint": "eslint .", "format": "prettier --write .", "changeset": "changeset", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cf52efc..aa69d73 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,10 +7,10 @@ importers: configDependencies: {} packageManagerDependencies: '@pnpm/exe': - specifier: ^11.11.0 + specifier: 11.11.0 version: 11.11.0 pnpm: - specifier: ^11.11.0 + specifier: 11.11.0 version: 11.11.0 packages: @@ -209,13 +209,25 @@ importers: devDependencies: '@changesets/cli': specifier: ^2.31.0 - version: 2.31.0(@types/node@22.20.1) + version: 2.31.1(@types/node@24.13.3) eslint: specifier: ^10.6.0 - version: 10.6.0(jiti@2.7.0) + version: 10.8.0(jiti@2.7.0) prettier: specifier: ^3.9.4 - version: 3.9.4 + version: 3.9.6 + + docs: + dependencies: + '@astrojs/starlight': + specifier: ^0.41.3 + version: 0.41.6(@astrojs/markdown-remark@7.2.2)(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3)(jiti@2.7.0))(typescript@5.9.3) + astro: + specifier: ^7.0.2 + version: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3)(jiti@2.7.0) + sharp: + specifier: ^0.34.5 + version: 0.34.5 packages/luna-charts: devDependencies: @@ -224,64 +236,234 @@ importers: version: 0.141.0 '@rolldown/binding-linux-x64-gnu': specifier: ^1.2.0 - version: 1.2.0 + version: 1.2.1 '@stencil/core': specifier: ^4.43.5 version: 4.43.5 '@stencil/storybook-plugin': specifier: ^0.7.0 - version: 0.7.0(@stencil/core@4.43.5)(preact@10.29.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(typescript@5.9.3)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + version: 0.7.0(@stencil/core@4.43.5)(esbuild@0.28.1)(preact@10.29.7)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(typescript@5.9.3)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)) '@stencil/vitest': specifier: ^1.8.3 - version: 1.13.3(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.61.1)(vitest@4.1.10) + version: 1.14.0(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.62.1)(vitest@4.1.10) '@storybook/addon-docs': specifier: ^10.5.0 - version: 10.5.0(@types/react@19.2.17)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + version: 10.5.5(@types/react@19.2.18)(esbuild@0.28.1)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)) '@storybook/addon-links': specifier: ^10.5.0 - version: 10.5.0(@types/react@19.2.17)(react@19.2.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7)) + version: 10.5.5(@types/react@19.2.18)(react@19.2.8)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8)) '@types/node': specifier: ^22.13.5 version: 22.20.1 '@vitest/browser-playwright': specifier: ^4.0.0 - version: 4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10) + version: 4.1.10(playwright@1.62.1)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10) axe-core: specifier: ^4.12.1 version: 4.12.1 eslint-plugin-storybook: specifier: 10.5.0 - version: 10.5.0(eslint@10.6.0(jiti@2.7.0))(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(typescript@5.9.3) + version: 10.5.0(eslint@10.8.0(jiti@2.7.0))(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(typescript@5.9.3) playwright: specifier: ^1.61.1 - version: 1.61.1 + version: 1.62.1 storybook: specifier: ^10.5.0 - version: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + version: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) vitest: specifier: ^4.0.0 - version: 4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + version: 4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)) packages: '@adobe/css-tools@4.5.0': resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} + '@astrojs/compiler-binding-darwin-arm64@0.3.2': + resolution: {integrity: sha512-MM8tn8CSimcfytaOla4b6acN8mKWiL/rlAA1fpT3/Wl7dNGSE4y8FjTN/zJVNnb63CsLWG5zZwCt01TXtDKh9g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@astrojs/compiler-binding-darwin-x64@0.3.2': + resolution: {integrity: sha512-2lXOlzf8xb7jLomRsf/aswh61/NnGusynB2OwFkK6k4pmOtpfXMYnG0PLfXrEvxXYj69NdCnmUYXtHDd+JOOag==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@astrojs/compiler-binding-linux-arm64-gnu@0.3.2': + resolution: {integrity: sha512-BmU3kWj7qnLrd4vzm49zFEPJ5oFnn1tCT4Vt9hZbqdU5Cmb8GZl7fn6VFsnNfe7B18a2gIFtVzbLINtYl5kBjQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@astrojs/compiler-binding-linux-arm64-musl@0.3.2': + resolution: {integrity: sha512-f0heT9ZZEseSu5bHCeb80eL2DH07ArE6U9xi1WT/PEusNjzPmEr3GJsjG1tRLo5VYUUYX7h3ScaqGmGrMOVGmw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@astrojs/compiler-binding-linux-x64-gnu@0.3.2': + resolution: {integrity: sha512-M8fOUt0itRpqiGyoEA/ij184s8O+hqbCz3+YozRusOOM3osgGljpDThhbKAJjqh82wOo6FioQ4w8PBvU1XMD5Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@astrojs/compiler-binding-linux-x64-musl@0.3.2': + resolution: {integrity: sha512-/Kebk8sO6HnLeSd691JkaAPfN7CqR9/KEXmWvyNPkaKNGmj8rTZ/lf2uXtnPu92Lan84UrKdIKVPy1fSo2encQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@astrojs/compiler-binding-wasm32-wasi@0.3.2': + resolution: {integrity: sha512-pUA6xbcOSB7DhfzIArB8BCAkFfAIqriiR7zl5zOStd6oU2G0kIKj+GUdGnyXyhfiv881Hffyk5tC0mR18sDjDw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@astrojs/compiler-binding-win32-arm64-msvc@0.3.2': + resolution: {integrity: sha512-ESruf+6Qkl1trHUFxI6GSf6t52j8yN2kCNSzMWdzt7V/T09tFHrYzrVaJQohb2C9bJUH76pNvX6Zb51+xCQc9Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@astrojs/compiler-binding-win32-x64-msvc@0.3.2': + resolution: {integrity: sha512-wzzVrEbOwbsLWOdEbocskjMRx2aZPxJ7ZbmL+jnpBamFwmigm+2M/wzuM6JWncocgYwLic1csSpalBh96kQKXA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@astrojs/compiler-binding@0.3.2': + resolution: {integrity: sha512-8w/9CWmYrAJJ8N0SY3O43ws2BgxoW6u3QsD8u2mE140lMYAlwh+tlNoUeSBq22wVheFuiBbR212l6ixZ2IIgCQ==} + engines: {node: ^20.19.0 || >=22.12.0} + + '@astrojs/compiler-rs@0.3.2': + resolution: {integrity: sha512-xlx/T7JovIKduu4ucbTQUxQ5+Q8wxkHxhLjnZk3VlJbhbQ9RLvvuDk1p2YYFYFQ5y14dVm3FGGO4isQXa4F+Tg==} + engines: {node: '>=22.12.0'} + + '@astrojs/internal-helpers@0.10.2': + resolution: {integrity: sha512-yt7fMgPYqSM4Tmr+taTW6Per+hjJ8Pk6lA1PAcDyqzOt8HzJ6Kje5WzCxA2Sd+9wsUW7uhkLeoTMK0cXPwH9rQ==} + + '@astrojs/markdown-remark@7.2.2': + resolution: {integrity: sha512-FGfmK84zSNcrsBd0dl1gXE9JvZYElp8EXQa2jpHVAxG4deGKAp43wspxFupjADJX7MSsMRHwYCnfT6EyVmgeFQ==} + + '@astrojs/markdown-satteri@0.3.5': + resolution: {integrity: sha512-CvWVEFAbay7YO+i9SaqDJubipA5ckiVB89QWoMJ5XC0m5CtFg8JwZ7Kau6X9sYY7FZURH0w2l03ISH2jOS/RDQ==} + + '@astrojs/mdx@7.0.5': + resolution: {integrity: sha512-wEM/HH1RiEntyPVagdiF+yArzfcYLKBB0C1RZspVidKZ97rRMbaqP1Nbl/GR0sJs8zwaceqxRymw8aOKKJRdYw==} + engines: {node: '>=22.12.0'} + peerDependencies: + '@astrojs/markdown-satteri': ^0.3.1 + astro: ^7.0.0 + peerDependenciesMeta: + '@astrojs/markdown-satteri': + optional: true + + '@astrojs/prism@4.0.2': + resolution: {integrity: sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==} + engines: {node: '>=22.12.0'} + + '@astrojs/sitemap@3.7.3': + resolution: {integrity: sha512-f8euLVsyeAmAkSm/1M2Kb8sL8byQmfgbvBNaHFItCheTj/IpiJYSEWVcqDHZ/yEHxiS7+w87mQkzwZaPHmk5GA==} + + '@astrojs/starlight@0.41.6': + resolution: {integrity: sha512-Dt0/wY2JbFGUpxMgclw1j2Iqks2GG0LHYKgP7TfBXsFrs4LIbKvQ596lzyhXLz6nFcnPdIB9ZRFyDJeuVcx3Ug==} + peerDependencies: + '@astrojs/markdown-remark': ^7.2.0 + astro: ^7.0.2 + peerDependenciesMeta: + '@astrojs/markdown-remark': + optional: true + + '@astrojs/telemetry@3.3.3': + resolution: {integrity: sha512-C1TLn5sPJr0x4vk56piHWKbnqlEB8BKyte5Y45V02U+D7BGO5eMqZDH5aPjnkXQWJggvmsTXxH03QMZ9NgWLzQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + '@babel/code-frame@7.29.7': resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.29.7': resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} + '@babel/parser@7.29.8': + resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/runtime@7.29.7': resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.8': + resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} + engines: {node: '>=6.9.0'} + '@blazediff/core@1.9.1': resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==} + '@bruits/satteri-darwin-arm64@0.9.5': + resolution: {integrity: sha512-iw4nZgx9v30lWo/MTngQqi1pI78KI0DnkSm+lVJGYdmPLgAyDNJigVhpG42/Iq55A6c1Ll8q66ljyyRiQUxwow==} + cpu: [arm64] + os: [darwin] + + '@bruits/satteri-darwin-x64@0.9.5': + resolution: {integrity: sha512-6T26Z5Kf3cFW2PSlk9p7zT7yVxvuBSiJvYyz9u8KjYwMTqZyIDOj2wDyNpxKV4+6yUVG7rddq2QwvG/8LJA2+Q==} + cpu: [x64] + os: [darwin] + + '@bruits/satteri-linux-arm64-gnu@0.9.5': + resolution: {integrity: sha512-u51id17uJwNEMK9nBlICsq6U31c+XVqQueVBkwRIzZG+gMpS8TOJctt5h5Wz33Z8xnMdTd+adtACVz0yHgGuOA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@bruits/satteri-linux-arm64-musl@0.9.5': + resolution: {integrity: sha512-v39HxiwGC5Rqm01HksP6+5Y+xKLPlsuVFgIgpEAo+SiQ22c+mJVhS3u7Z6ePAKdhL5NJoK1xq70kLz3L13AhpQ==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@bruits/satteri-linux-x64-gnu@0.9.5': + resolution: {integrity: sha512-F3uO8uFp3pAP5ZGXttwvh57GS7s0lL953tnNdyI2gRyP4kOOkp6pyGojNJzCjkDvWI2Cvb9iNrKok3aqQPauAw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@bruits/satteri-linux-x64-musl@0.9.5': + resolution: {integrity: sha512-bicEqglLlz++mWyADaZoP0JY20s4vDfLjaPYgQqC+NI4zZLTOOg1T4GB8aqtc822Pqji8SQBmSrTb7CrP8i08Q==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@bruits/satteri-wasm32-wasi@0.9.5': + resolution: {integrity: sha512-zauAuMwfPnKPUkd4AFixRFpXdgKwP2mKgxrIIo2gJzW0/ZneF9dbHnLkojSpaBnCCp7VUL1hIi5WWZvB1CqmAQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@bruits/satteri-win32-arm64-msvc@0.9.5': + resolution: {integrity: sha512-SrfE7NEsgZjBvU3c+RR6oQRu0ToXY5uVJEbieXEF0YTctIV2zAVlbaMjWLts074QCgh3a+XHWkR/lWh2VH2LUg==} + cpu: [arm64] + os: [win32] + + '@bruits/satteri-win32-x64-msvc@0.9.5': + resolution: {integrity: sha512-5Kw9ZAtTGS8WHizyn+CJhjjfIQrw+7jcZodpmpXJjefnO15M8UexIi6JR2E5thyvsmHyhL6ZDDMUNR4bKJPd4g==} + cpu: [x64] + os: [win32] + + '@capsizecss/unpack@4.0.1': + resolution: {integrity: sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==} + engines: {node: '>=18'} + '@changesets/apply-release-plan@7.1.1': resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} @@ -291,8 +473,8 @@ packages: '@changesets/changelog-git@0.2.1': resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} - '@changesets/cli@2.31.0': - resolution: {integrity: sha512-AhI4enNTgHu2IZr6K4WZyf0EPch4XVMn1yOMFmCD9gsfBGqMYaHXls5HyDv6/CL5axVQABz68eG30eCtbr2wFg==} + '@changesets/cli@2.31.1': + resolution: {integrity: sha512-uO05WTcRBwuVOJVSW8Cmpqw6q0WDL53ajGCMyszutvOe5toOnunbpM4jZzf+qxBOz7i0AzopZ8diBuewjmF40w==} hasBin: true '@changesets/config@3.1.4': @@ -337,182 +519,212 @@ packages: '@changesets/write@0.4.0': resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} + '@clack/core@1.4.3': + resolution: {integrity: sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==} + engines: {node: '>= 20.12.0'} + + '@clack/prompts@1.7.0': + resolution: {integrity: sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==} + engines: {node: '>= 20.12.0'} + + '@ctrl/tinycolor@4.2.0': + resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} + engines: {node: '>=14'} + '@emnapi/core@1.11.1': resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + '@emnapi/core@1.11.2': + resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} + '@emnapi/core@1.9.2': resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + '@emnapi/core@2.0.0-alpha.3': + resolution: {integrity: sha512-AZypUeJ/yByuxyS7BlSNRDOMLMlROYtjYdIAuBmJssVz1UJDSeYxLrdizhXCFYhedC5bqd/ASy8EuNXbVVXp9g==} + '@emnapi/runtime@1.11.1': resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} + + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} + '@emnapi/runtime@1.9.2': resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + '@emnapi/runtime@2.0.0-alpha.3': + resolution: {integrity: sha512-hFPAhMUjJD9BSyCANEISPOogeXC9Zo9ZQl7L6vKnaVsMkCtzznaW/naYypeyl0Gv5rYfWYsZbpixTMpjDJzQeA==} + '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} '@emnapi/wasi-threads@1.2.2': resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + '@emnapi/wasi-threads@2.0.1': + resolution: {integrity: sha512-9DsSk+o5NBX0CCJT8s0EROGSGxjR/tKu6aBTaVyq+SjAEQH4XcdcRxPBRzsBLizTTJ49MJjF+jgu3qnO9GLQcQ==} + + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.12': - resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.12': - resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.12': - resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.12': - resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.12': - resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.12': - resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.12': - resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.12': - resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.12': - resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.12': - resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.12': - resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.12': - resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.12': - resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.12': - resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.12': - resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.12': - resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.12': - resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.12': - resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.12': - resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.12': - resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.12': - resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.12': - resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.12': - resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.12': - resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.12': - resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.1': - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + '@eslint-community/eslint-utils@4.10.1': + resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -525,8 +737,8 @@ packages: resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-helpers@0.6.0': - resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} + '@eslint/config-helpers@0.7.0': + resolution: {integrity: sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/core@1.2.1': @@ -541,6 +753,18 @@ packages: resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@expressive-code/core@0.44.1': + resolution: {integrity: sha512-3dDo9N8D7hYrLNNMMWFovg3+aDUtnQm7c7z0GZc1c0LEFVBc0Q6lKG+tVT28gDadOvsgOANfCn35fgpe97Pmgg==} + + '@expressive-code/plugin-frames@0.44.1': + resolution: {integrity: sha512-HC/bdRao9225ApcgO/e3jn8ZOhldKO7ob1O/Tcipvtv7Vb5nMphZhMtD9uuywpvxkPYBHJi3504WhrKg05Dwqg==} + + '@expressive-code/plugin-shiki@0.44.1': + resolution: {integrity: sha512-YApiZt3buUzBwL5tqj8G+sYC5NjMjRCHgQwr9bmGl69rtcHy6fE9dooWUeKYB978fJT2BuxT5FeHcF47rA3SEg==} + + '@expressive-code/plugin-text-markers@0.44.1': + resolution: {integrity: sha512-B3BsJoJ8CFMlcIX9f+X9tcI3C4zPDO601+YuLi9GheSTNro7ZfqSjLptMQKBHOWZvxnAtY5zvIX7iO/qtBhNBg==} + '@humanfs/core@0.19.2': resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} @@ -561,6 +785,159 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@inquirer/external-editor@1.0.3': resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} engines: {node: '>=18'} @@ -592,17 +969,21 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + '@mdx-js/react@3.1.1': resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} peerDependencies: '@types/react': '>=16' react: '>=16' - '@napi-rs/wasm-runtime@1.1.6': - resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} + '@napi-rs/wasm-runtime@1.2.2': + resolution: {integrity: sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} peerDependencies: - '@emnapi/core': ^1.7.1 - '@emnapi/runtime': ^1.7.1 + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.3 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.3 '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -616,6 +997,9 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@oslojs/encoding@1.1.0': + resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + '@oxc-parser/binding-android-arm-eabi@0.127.0': resolution: {integrity: sha512-0LC7ye4hvqbIKxAzThzvswgHLFu2AURKzYLeSVvLdu2TBOYWQDmHnTqPLeA597BcUCxiLqLsS4CJ5uoI5WYWCQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -753,213 +1137,243 @@ packages: '@oxc-project/types@0.127.0': resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} - '@oxc-project/types@0.139.0': - resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} + '@oxc-project/types@0.142.0': + resolution: {integrity: sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ==} - '@oxc-resolver/binding-android-arm-eabi@11.23.0': - resolution: {integrity: sha512-8IJyWRLVAyhTfe9/TIEbQqSQnl5rUqYJrUOS6Dkr+Mq9FGHMxDGeiEmwkBqCvDP5KckpPh/GYSgbag66O6JsCw==} + '@oxc-resolver/binding-android-arm-eabi@11.24.2': + resolution: {integrity: sha512-y09e0L0SRI2OA2tUIrjBgoV3eH5hvUKXNkJqXmNo5V2WxIjyC7I7aJfRLMEVpA8yi95f90gFDvO0VMgrDw+vwA==} cpu: [arm] os: [android] - '@oxc-resolver/binding-android-arm64@11.23.0': - resolution: {integrity: sha512-pprVojnNhHxupwTT2gdeUlkxll6XEvWWBk3oVicOSNVWQC99OBnDhMQDoirqnzrE1bScQSMS2JgPpqdlrhz/Fg==} + '@oxc-resolver/binding-android-arm64@11.24.2': + resolution: {integrity: sha512-cl4icWaZFnLdg8m6qtnh5rBMuGbxc/ptStFHLeCNwr+2cZjkjNwQu/jYRS0CHlnPecOJMpuS5M6/BH+0J/YkEg==} cpu: [arm64] os: [android] - '@oxc-resolver/binding-darwin-arm64@11.23.0': - resolution: {integrity: sha512-mbIrWIMAJeytyee36OyUP5XH92TP7FaKaQ2m5AjokKy7STgjrhRt7SMXqpqLjhGm6Xn721Xmsg6H3Rtd9YQETw==} + '@oxc-resolver/binding-darwin-arm64@11.24.2': + resolution: {integrity: sha512-At29QEMF6HajbQvgY8K6OXnHD1x9rad74xBEfmCB6ZqCGsdq75aK7tOYcTbOanMy8qdIBrfL3SMr3p/lfSlb9w==} cpu: [arm64] os: [darwin] - '@oxc-resolver/binding-darwin-x64@11.23.0': - resolution: {integrity: sha512-UnIphmZ1LazUCr9DXWaKYWtKDefPMbgLsywaoYxRqVCNHhq4MM6d2q1Nz1i9Vzxt5i+cE2nRUYpAUHr/lijNYA==} + '@oxc-resolver/binding-darwin-x64@11.24.2': + resolution: {integrity: sha512-A5Kqr1EUj4oIL5CF4WRssq/o5P0Y11cwoFouMRmQ7YnC/A8V93nv1nb7aSU8HwcgmXropjLNkVTl4MN87cu28Q==} cpu: [x64] os: [darwin] - '@oxc-resolver/binding-freebsd-x64@11.23.0': - resolution: {integrity: sha512-aaZ/cSEYFkSxgS2hOrobT6RQcsWNviOX8dW6CEkVx2/UYkAf9MeHbjl3W0usWV53rVV//ndBdn2nb1y7jsu4lw==} + '@oxc-resolver/binding-freebsd-x64@11.24.2': + resolution: {integrity: sha512-R5xkRBRRz7ceH/P5Jrc6G7FmdUdgpLYyESFAUDVTNQ9K0sGPxcp4ljiwEwEqsvNcQ4sYbMRrWcHHBCu7ksAJVw==} cpu: [x64] os: [freebsd] - '@oxc-resolver/binding-linux-arm-gnueabihf@11.23.0': - resolution: {integrity: sha512-IoJLvO5SjLSVMaq83BNTrPCb1FppvoJc1IhZ5CoUVl3PykUBku7D+LK1j0GSurhJcIc6zfjghsvaZNpq5ev6Mg==} + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': + resolution: {integrity: sha512-k/RuYL4L/R58IBn3wT5ma3Wh4k62bp1eYCFRWCmMsasUOqL+H6sW0VGFadEzKWXFFlz+2uIMoeMk9ySSZJHgbg==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm-musleabihf@11.23.0': - resolution: {integrity: sha512-vskFpwg44T/LFsfjSCnVZ5ygcuqzPC1yUzVEiKa8BgHAQz0+QLQQW3EGWLPVi8EXFghzjR4EtgPBtOhCjU4jdw==} + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': + resolution: {integrity: sha512-bnHAak3ujYfH5pKk4NieFNbvYvernfoQDgwLddbZ3OtMYrem87/qjlA+u+aKG0oZcqSLGCful/6/CEA+aeAgaA==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm64-gnu@11.23.0': - resolution: {integrity: sha512-//TcHVhrChyw5RYtgts6WO7KcWq9387c1Z5Zvhqpk/ktAbyaRYgBZrpSY1GDCFq50ASt6B6jhh+JxB1rB45IAg==} + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': + resolution: {integrity: sha512-vDT3KHgzYp47gmtNOqL2VNhCyl5Zv643eyxm//A68J8DeUGXrvD1pZFiaT4jSfe+RInfnn1R2yVHye4enx6RnA==} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-arm64-musl@11.23.0': - resolution: {integrity: sha512-ZFqlwiTf7CXLLSGyAR9tYiO33LiaeIEXW+xm42d8mnUGpDgPltyrCGYtQezyMMEXvjhOgCz1X+i7sbDTJEx+bg==} + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': + resolution: {integrity: sha512-+kMlQvbzfyEYtu5FcjE4p+ttBLpKW4d/AsAsuE69BxV6V4twZJeIQZFfD8gh/wqglY0MkPSezWXQH0jBV13MUw==} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-ppc64-gnu@11.23.0': - resolution: {integrity: sha512-oZ5LeN5+H1R19dRjTAxKrxQguH+AsemHcnthEfFxf4OjmBSty2doHLeSmMunKy3zpTHJQ3lh3Af+dNS+W6dYeA==} + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': + resolution: {integrity: sha512-shjfMhmZ3gq9fv/w7bi3PnZlgOPG+2QAOFf0BJF0EgBSIGZ6PMLN2zbGEblTUYB/NKVDRyYhE2ff3dJ1QqNPkA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-gnu@11.23.0': - resolution: {integrity: sha512-O4ciFDyX5ebQd0qkb1bjAIg8IEfiLT03GbSeylwlwlUMK9KwBWaALwrxSbc0Msaz4U6iPj+T9eRXpD5mxBfmvA==} + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': + resolution: {integrity: sha512-zGelwFR5oRo+b69k8Lrzun86DyUHzfKN6cnjbR9l7Z7NIRznOE/2ZvPa1IUKqAL2PzAXOdwkfVqNvO1H2RlpAw==} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-musl@11.23.0': - resolution: {integrity: sha512-P3o8Y9kISYjcxadmbO+94ThRwLhwGuDAbA7dcdd4+YLpfeF+mmobz8fXf4NmSdfSqjyRSkceJDBRZha9NVYkiQ==} + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': + resolution: {integrity: sha512-qxZ1SWCXJY0eyhAlP6Lmo9F2Nrtx7EkYj9oCgL8apDPCwXwCEDA2U697bbT81JIc2IrVjxO4KX6WU2N+oN9Z4w==} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-s390x-gnu@11.23.0': - resolution: {integrity: sha512-oj03m1E3RmTFczKhcKJDzHaEDKJnPIsDcQFVxBJsSdXGSuIPdt5TvcM332FfMQgzI6yDJqyl4InrnFfXrmUTKQ==} + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': + resolution: {integrity: sha512-sGCecF3cx2DFlH4t/z7ApnOnXqN48p5p5mlHDEnHTAukQa2P+qMVE4CwyWE9W+q/m3QJ7kKfGrIjax31f44oFQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-gnu@11.23.0': - resolution: {integrity: sha512-BqJxbSC8FdP7mSuSpRePTGHm0hXWV+dfz//f7SjsteZncLaBgWTBmi/OZNv7sX6CyG/Pt/eJkPorP+DkMOhMwQ==} + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': + resolution: {integrity: sha512-k/VlMMcSzMlahb3/fENM4rTlsJ0s3fFROA0KXPBmKggqmTSaE383sl8F3KCOXPLmVsYfW6hCitMhXCEtNeZxxg==} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-musl@11.23.0': - resolution: {integrity: sha512-utmw+VmUrW4K8LI5/6jhg4aGYKJHOIjQ9syYOOA6pF3w7haKu4r4enTe2U0C04/HbUvkq/Zif43xFsKW1Pnq9w==} + '@oxc-resolver/binding-linux-x64-musl@11.24.2': + resolution: {integrity: sha512-8hbnZyNi97b/8wapYaIF9+t9GmZKBW2vunaOc3h9HGJptH7b7XpvZqOTBSm/MpTjr7H497BlgOaSfLUdhmy2bw==} cpu: [x64] os: [linux] libc: [musl] - '@oxc-resolver/binding-openharmony-arm64@11.23.0': - resolution: {integrity: sha512-V6lbRrthHa4TbvsLjPtg+EkXT1tRY+s4I8rYLXUfiHlZzGx3sLv1EH9CEOOevjvUYHLsbe/gqCIc73XnQfPb9A==} + '@oxc-resolver/binding-openharmony-arm64@11.24.2': + resolution: {integrity: sha512-MvyGik3a6pVgZ0t/kWlbmFxFLmXQJwgLsY2eYFHLpy0wGwRbfzeIGgDwQ3kXqE30z+kSXennRkCrT7TUvkptNg==} cpu: [arm64] os: [openharmony] - '@oxc-resolver/binding-wasm32-wasi@11.23.0': - resolution: {integrity: sha512-gRoOxQPdnAmIAjxcuQNBxfihvx+wjTaQM/9/eP12xwnGNawOG/+Zz9RHN4WNSxT45b5CrscK4NB8aPh+oZQXAQ==} + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + resolution: {integrity: sha512-vHcssMPwO08RTvj/c0iOBz90attxyG3wQJ0dTcyEQK43LRpcdLWZlV5feBhv6Isn6ahbQIzHbCgfa81+RiML0Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-resolver/binding-win32-arm64-msvc@11.23.0': - resolution: {integrity: sha512-CgTGMYsJVe1eUiCdJTpGw21svXw79ITsemN1h0hcNkiswasDbN5MoibSLY+gRMWP5syfEz5iffrjZnwEP8xeUA==} + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': + resolution: {integrity: sha512-uokJqro2iBqkFvJdKQLP7d8/BUmFwESQFVmIJUQKj1Xn1a/LysJoe1vmeECLF5b3jsV8CAL5sEMJXX6SdK9Nhg==} cpu: [arm64] os: [win32] - '@oxc-resolver/binding-win32-x64-msvc@11.23.0': - resolution: {integrity: sha512-gUGJpr+Rn6zMxm5juApV0K3U845i8t47o8k+rbO0BHbi4PoJIfSPeQmrE2dgohQm2g5k6iviNFyXCGqvmaYUpw==} + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': + resolution: {integrity: sha512-UqGPmo56KDfLlfXFAFIrNflHT8tFxWGEivWg3Zeyp4Uy2NlKN1FGPr6/BxcLGG3+kZ6Wp14g5Uj+n71boqZfiw==} + cpu: [x64] + os: [win32] + + '@pagefind/darwin-arm64@1.5.2': + resolution: {integrity: sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ==} + cpu: [arm64] + os: [darwin] + + '@pagefind/darwin-x64@1.5.2': + resolution: {integrity: sha512-IojxFWMEJe0RQ7PQ3KXQsPIImNsbpPYpoZ+QUDrL8fAl/O27IX+LVLs74/UzEZy5uA2LD8Nz1AiwKr72vrkZQw==} + cpu: [x64] + os: [darwin] + + '@pagefind/default-ui@1.5.2': + resolution: {integrity: sha512-pm1LMnQg8N2B3n2TnjKlhaFihpz6zTiA4HiGQ6/slKO/+8K9CAU5kcjdSSPgpuk1PMuuN4hxLipUIifnrkl3Sg==} + + '@pagefind/freebsd-x64@1.5.2': + resolution: {integrity: sha512-7EVzo9+0w+2cbe671BtMj10UlNo83I+HrLVLfRxO731svHRJKUfJ/mo05gU14pe9PCfpKNQT8FS3Xc/oDN6pOA==} + cpu: [x64] + os: [freebsd] + + '@pagefind/linux-arm64@1.5.2': + resolution: {integrity: sha512-Ovt9+K35sqzn8H3ZMXGwls4TD/wMJuvRtShHIsmUQREmaxjrDEX7gHckRCrwYJ4XE1H1p6HkLz3wukrAnsfXQw==} + cpu: [arm64] + os: [linux] + + '@pagefind/linux-x64@1.5.2': + resolution: {integrity: sha512-V+tFqHKXhQKq/WqPBD67AFy7scn1/aZID00ws4fSDd+1daSi5UHR9VVlRrOUYKxn3VuFQYRD7lYXdZK1WED1YA==} + cpu: [x64] + os: [linux] + + '@pagefind/windows-arm64@1.5.2': + resolution: {integrity: sha512-hN9Nh90fNW61nNRCW9ZyQrAj/mD0eRvmJ8NlTUzkbuW8kIzGJUi3cxjFkEcMZ5h/8FsKWD/VcouZl4yo1F7B6g==} + cpu: [arm64] + os: [win32] + + '@pagefind/windows-x64@1.5.2': + resolution: {integrity: sha512-Fa2Iyw7kaDRzGMfNYNUXNW2zbL5FQVDgSOcbDHdzBrDEdpqOqg8TcZ68F22ol6NJ9IGzvUdmeyZypLW5dyhqsg==} cpu: [x64] os: [win32] '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - '@rolldown/binding-android-arm64@1.1.5': - resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} + '@rolldown/binding-android-arm64@1.2.1': + resolution: {integrity: sha512-02hOeOSryYxVrOIphmLAsqnCJWxwlzFk+pEt/N/i6OgT3lShHO7xGCU5cpgchRDHboAEbSjzgGh+O/u1GswQmA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.1.5': - resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} + '@rolldown/binding-darwin-arm64@1.2.1': + resolution: {integrity: sha512-fMsTOnN0OjFm3CyppWPitKnc8UlliVARUULW6cfU6AIqjdtgmSFWSk9vecHzZduv/yMWIHDlRhM1e8Iff9uAfA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.1.5': - resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} + '@rolldown/binding-darwin-x64@1.2.1': + resolution: {integrity: sha512-1wjKdz/XLGKHaTNHjQveQ/B23TKx4ItAqm1JbyVuvNPc4Ze0Fb48s49TAd/2zcplPl8okE/UbTgmlVfwT7eFeQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.1.5': - resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} + '@rolldown/binding-freebsd-x64@1.2.1': + resolution: {integrity: sha512-Fa0jHR07E7YBN4vOEsbVf2briYNsuOowfLJaXULZM0ldMlaCaj2LJgLMbMe4iacRyZmvR8efFhgR9wKuGclQUg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.1.5': - resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.1': + resolution: {integrity: sha512-pzkgu1SSHGgRRyRZ4fbmSgmajbVt+epaLP99NDjFft69v/ypfTi6swBMiVdh2EkQ0OSnHE1lZDM7DRGkyAzUpA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.1.5': - resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} + '@rolldown/binding-linux-arm64-gnu@1.2.1': + resolution: {integrity: sha512-QI5SEDY8cbiYWHx0VO4vIc3UlS6a32vXHjU8Qy/17adEmZIPuByJg13UEvo9c/UCiUkdcVWY83C+b+JrwnNyUg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.1.5': - resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} + '@rolldown/binding-linux-arm64-musl@1.2.1': + resolution: {integrity: sha512-Sm41FyCeXqmYcERoYOCbGIL5hNfd8w9LQ7Y61Bev48HkcjaJqV/iiVOaiDxjVTRMS+QKrZmD8cfPt4uMVnvM+A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.1.5': - resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} + '@rolldown/binding-linux-ppc64-gnu@1.2.1': + resolution: {integrity: sha512-2x+WhXTGl9yJYPbltW/BSEPTVz9OIWQyER4N+gJEDWkkn904eRcBzELqh/Hf7K0w/ubGbKNMv0ZC+94QK/IFEg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.1.5': - resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} + '@rolldown/binding-linux-s390x-gnu@1.2.1': + resolution: {integrity: sha512-eEjmQpuRQayHPWWnywaWHkFT3ToPbP3RYy42VVd/B9aBGDA+Ol25EIWHxKQST3IiWJjikCWUF7KtbfqwZrzVwQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.1.5': - resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} + '@rolldown/binding-linux-x64-gnu@1.2.1': + resolution: {integrity: sha512-/Orga1fZYkLc/56jBICcHrKchl8Z2UKdDSr3LG9ToWO1lQ6a4Livk9Xz+9WN91zsz5QR3XQz2NNoSDEvP6qadw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.2.0': - resolution: {integrity: sha512-MK7L0018jjh1jR3mh21G2j1zAVcpscJBlPo2z19pRjv2XOYGRhaV4LyiD8HO6nCDdZln9IFgCMIV5yt4E3klGQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rolldown/binding-linux-x64-musl@1.1.5': - resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} + '@rolldown/binding-linux-x64-musl@1.2.1': + resolution: {integrity: sha512-xxBJRL+0q0Kce7orznGWLuylHDY65vuARXZRpX+hPdv+DqK2c3NlCsVA98tlWzWNEE7yPqA/1NQ5nnCrj49Y5A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.1.5': - resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} + '@rolldown/binding-openharmony-arm64@1.2.1': + resolution: {integrity: sha512-M6AdXIXw3s+/8XpKMzdGDEXGS1S7kwUsy+rcTIUIOx5Ge4nXKCtAFHFV9YKkXvGcC5WMoTjAteLzlsQROVI0Yw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.1.5': - resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] + '@rolldown/binding-wasm32-wasi@1.2.1': + resolution: {integrity: sha512-/TX0SoRGojHzSAHpfVBbavRVSazg5U3h3Y3VXfcc0cdugq6kxdqw8LPGFiPr+/7gE/60zRcsOY2Vi9b9eT0jww==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} - '@rolldown/binding-win32-arm64-msvc@1.1.5': - resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} + '@rolldown/binding-win32-arm64-msvc@1.2.1': + resolution: {integrity: sha512-EvRrivJieyHG+AO9lleZWgq+g0+S7oV2C51yuqlcyU/R9net+sI4Pj0F+lUoP2bEr6TWX3SqFaaS0SzfLxSzkw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.1.5': - resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} + '@rolldown/binding-win32-x64-msvc@1.2.1': + resolution: {integrity: sha512-Z4eCmn5QJ/5+azF9knpLWKfVd9aidn0mAe9TpJgvBLId9Ax3t0+JVxBmT25Bv7NBbVW1TZyKjQjQReouMeH5UQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -967,6 +1381,15 @@ packages: '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@rollup/pluginutils@5.4.0': + resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/rollup-darwin-arm64@4.44.0': resolution: {integrity: sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==} cpu: [arm64] @@ -1011,6 +1434,37 @@ packages: cpu: [x64] os: [win32] + '@shikijs/core@4.4.1': + resolution: {integrity: sha512-VeR2CY6Nn9/WbisoYLOQZ7HZOnwTrpBuOw4wExjqLnBCi62BNWynBUO6K2uPIASPFJwAv7cX1fUu+LrPlSstcw==} + engines: {node: '>=20'} + + '@shikijs/engine-javascript@4.4.1': + resolution: {integrity: sha512-6U4lJBh8LTvIkEVqRHv/rr3ruwtO6IweFQt1ME1ntHJMGHS+6N86vfYGO1o8c/DtOCTia2lfhdQBtBrps1sDfQ==} + engines: {node: '>=20'} + + '@shikijs/engine-oniguruma@4.4.1': + resolution: {integrity: sha512-p23RugMKss0r5DAtRJW1yAXUDl60JvhQYV20yuxei//26JyDSJefV3umyWzzwep2weblMnJGDYahuti6XkcMgA==} + engines: {node: '>=20'} + + '@shikijs/langs@4.4.1': + resolution: {integrity: sha512-xb2kCMloBCIraIy2fS5MW0t/BxVY3q2nDyQKBoeSeq6KNrQbShHetCFlw2n35fGIJ6t3+hXDLQogP5ir9O9bvA==} + engines: {node: '>=20'} + + '@shikijs/primitive@4.4.1': + resolution: {integrity: sha512-ko2OfDoG89YuQ7xL5LtcQiWKb7NIv1Ephb7g48TVU198OzAMLC8lXVEwaJGHK4sUMYrfAGJDqYmNLOLiW/Kz8w==} + engines: {node: '>=20'} + + '@shikijs/themes@4.4.1': + resolution: {integrity: sha512-wudOaoFro+/Zl9gQv2W1Ur5XlVduqvTuYLI483Xi0wgc1A+cy1hfB2r6ac6ufBgF+ID7KJEW7L41MHrzQ4wH+w==} + engines: {node: '>=20'} + + '@shikijs/types@4.4.1': + resolution: {integrity: sha512-GOwCLQDHM5EjGUWNPrhzJbr6JP8V/Dx/CDVkWvbZ1Avw5JFnNUckrgbLmE07qtg4WlW7Q7QFndhjIkeU9XMPvw==} + engines: {node: '>=20'} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -1050,8 +1504,8 @@ packages: '@stencil/core': ^4.30.0 storybook: ^10.0.0 - '@stencil/vitest@1.13.3': - resolution: {integrity: sha512-dWpmN9KPRLZpA6wGJ+46z8wjxrAErqbKEmgKLUIC/Ke/VURMzM1Oh/8F03tmC1qVba3KqAjnO6gpuxMOt/90yw==} + '@stencil/vitest@1.14.0': + resolution: {integrity: sha512-EWxS/pDzRI3krlgNq1/EJejzX59DLLdE7+xzKhGjDgxV4VJJrKgFWlELPsMo3KRS7wKCd8r1xi1gFLXj5fWPkw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: @@ -1086,39 +1540,39 @@ packages: playwright: optional: true - '@storybook/addon-docs@10.5.0': - resolution: {integrity: sha512-kbZGdX+mysiY4xezhpcFEwzQ1zSXcMhSS3u09Qt8+w5XetCAMMSv/yAxzpi6z+YoH+EdQ53e1q3MFtPUkzkfUA==} + '@storybook/addon-docs@10.5.5': + resolution: {integrity: sha512-0YpKlimS4XE0kQ8Maa5coeefQxdyDrBHg1wOP3WTPuBe4FolFSCDveR0ge2+vuUBk+fZfn2+l+3Q2jmAWaRGDg==} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.5.0 + storybook: ^10.5.5 peerDependenciesMeta: '@types/react': optional: true - '@storybook/addon-links@10.5.0': - resolution: {integrity: sha512-pZlBqBjJc9Lo3LbcPx2ch0+BXD/efFQ0x9v7w+siCTs4IfqiePBuMK6ZSBQfxai+x/zHm0vKNTmOikEvP8j1wA==} + '@storybook/addon-links@10.5.5': + resolution: {integrity: sha512-rqb8EYosKG7eZ6XmFiQ5HwpZIke11QYS0OhuK+1oBLHVfMrlbEgDDLo/wtbiUKKAzj8D1hlwgC6mzSyyW4oQTw==} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.5.0 + storybook: ^10.5.5 peerDependenciesMeta: '@types/react': optional: true react: optional: true - '@storybook/builder-vite@10.5.0': - resolution: {integrity: sha512-KXlifNIThDgS84KqVAJXyilool8OLTWp6DGoO9h5bHM2IPLe7UcdKfOzMUBkQ807mWBk4aW1yGEekj7kC2dvmg==} + '@storybook/builder-vite@10.5.5': + resolution: {integrity: sha512-dQoJ7gUl8y0z5rV9cE0mz6qTBNmN9R4GOLIZk98rJ8CwduNJOb9eGZXusDzzvnYcp8TnNkqDtyx4tXQSUDInPQ==} peerDependencies: - storybook: ^10.5.0 + storybook: ^10.5.5 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@storybook/csf-plugin@10.5.0': - resolution: {integrity: sha512-R7VFw6FnDZTWct0ekOcFnTfDgdHnnAuQW+AbGG9A9IZPvyH9uLJivK7L86+r9MITRrO2+v81HaFDsT/OFk6ZkQ==} + '@storybook/csf-plugin@10.5.5': + resolution: {integrity: sha512-/euibhRFqklYCZqUseokojmfYcQpXshVY2QmA1qCuxMz9SzVFD3iSTw+aFLTxpsJGGdcZJk8fnm/rEthLzZ9jA==} peerDependencies: esbuild: '*' rollup: '*' - storybook: ^10.5.0 + storybook: ^10.5.5 vite: '*' webpack: '*' peerDependenciesMeta: @@ -1134,24 +1588,24 @@ packages: '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - '@storybook/html@10.5.0': - resolution: {integrity: sha512-buj/0N+mhsDTIqaEGxa9q6Q7mDCDbZJkBUmABwMep77FOP9eH/TFuUmDYhHK4/o9sNTCrROG6Df/Q/A+fiO0zQ==} + '@storybook/html@10.5.5': + resolution: {integrity: sha512-Dm2Ud+UiDgtgolURvpZpN7SbOSjPJ2iy4RAxSZLR2BglE5QL7u4Uewpbs5/kw/VFT5u9SAenxEK6P/kbZuZC0g==} peerDependencies: - storybook: ^10.5.0 + storybook: ^10.5.5 '@storybook/icons@2.1.0': resolution: {integrity: sha512-Fxh9vYpX9bQqFeHRiY8h2ApeRGDzRSMLwJwNZ/AIRqnyOKHxRKL+yFe+ctEkVJmuptRE9u1Hrn8ZZNHyfDKKNg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@storybook/react-dom-shim@10.5.0': - resolution: {integrity: sha512-GwGA6zDj4Cfw6vGsdfPKfF39L0W6solNbbnjdjGa57m2ooASkidLhrXo2wgC9wh3o/jcfonmYPDRGY6sEhGDtg==} + '@storybook/react-dom-shim@10.5.5': + resolution: {integrity: sha512-PIk7N3LLrZIxfNxmkvmQN1d5UQ70XEedT8n0GhBiXnM6XL09xPGB8n8TZXeJBRYluKhDQcAyQeT0/OZmcDVQJg==} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.5.0 + storybook: ^10.5.5 peerDependenciesMeta: '@types/react': optional: true @@ -1181,67 +1635,103 @@ packages: '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} + + '@types/js-yaml@4.0.9': + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + '@types/mdx@2.0.14': resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/nlcst@2.0.3': + resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} + '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} '@types/node@22.20.1': resolution: {integrity: sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==} - '@types/react@19.2.17': - resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==} + '@types/node@24.13.3': + resolution: {integrity: sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==} - '@typescript-eslint/project-service@8.63.0': - resolution: {integrity: sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==} + '@types/react@19.2.18': + resolution: {integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==} + + '@types/sax@1.2.7': + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@typescript-eslint/project-service@8.65.0': + resolution: {integrity: sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.63.0': - resolution: {integrity: sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==} + '@typescript-eslint/scope-manager@8.65.0': + resolution: {integrity: sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.63.0': - resolution: {integrity: sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==} + '@typescript-eslint/tsconfig-utils@8.65.0': + resolution: {integrity: sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.63.0': - resolution: {integrity: sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==} + '@typescript-eslint/types@8.65.0': + resolution: {integrity: sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.63.0': - resolution: {integrity: sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==} + '@typescript-eslint/typescript-estree@8.65.0': + resolution: {integrity: sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.63.0': - resolution: {integrity: sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==} + '@typescript-eslint/utils@8.65.0': + resolution: {integrity: sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.63.0': - resolution: {integrity: sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==} + '@typescript-eslint/visitor-keys@8.65.0': + resolution: {integrity: sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.3': + resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==} + '@vitest/browser-playwright@4.1.10': resolution: {integrity: sha512-nMoXGEiRpT7m3W7NsbvrM2aKNwiNHZf+zEpUCvMteGjZFvfT96Q9fh7QyB98dvDWXiKvrLxA7bJ1mCOOv+JQPw==} peerDependencies: @@ -1302,14 +1792,18 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.17.0: - resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + acorn@8.18.0: + resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==} engines: {node: '>=0.4.0'} hasBin: true ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + am-i-vibing@0.4.0: + resolution: {integrity: sha512-MxT4XZL7pzLHpuvhDKdMaQHMGGkJDLluKBLsbstn+8wv9sWcFT6h+0ve9qkml95amVTZtZV83gQe2hY+ojgHLg==} + hasBin: true + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -1322,6 +1816,13 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -1335,6 +1836,9 @@ packages: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} + array-iterate@2.0.1: + resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -1347,21 +1851,56 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + + astro-expressive-code@0.44.1: + resolution: {integrity: sha512-DT1LnCqbHasBKlvzJ3m6LR4VI94wwx3W9EV/YbP1te4rqjOHsvsezHYuqb5MeLWLftXms/1FA9QBbwCo43DnJQ==} + peerDependencies: + astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta || ^7.0.0 + + astro@7.1.6: + resolution: {integrity: sha512-83x9rYbHazMaZkYrAFRVZXSQx2moFkz0F7cjTDUF3GWfS0a3p2vZXG1ZdhV86rStHApQCodBJW+XTD37xISIrQ==} + engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'} + hasBin: true + peerDependencies: + '@astrojs/markdown-remark': 7.2.2 + peerDependenciesMeta: + '@astrojs/markdown-remark': + optional: true + axe-core@4.12.1: resolution: {integrity: sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==} engines: {node: '>=4'} + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} + bcp-47-match@2.0.3: + resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} + + bcp-47@2.1.1: + resolution: {integrity: sha512-KLw+H/gd2p4zly1X7Yh/qziuyae5/w/QFnvTng9eZL5fvszL7Whl3MBoWF8yxL7ksUjBfOD+OxkytiqbBpG+Fw==} + better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} - brace-expansion@5.0.7: - resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} - engines: {node: 18 || 20 || >=22} + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@5.0.9: + resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} + engines: {node: 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -1371,6 +1910,9 @@ packages: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@5.3.3: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} @@ -1379,6 +1921,18 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chardet@2.2.0: resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} @@ -1386,6 +1940,32 @@ packages: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + common-ancestor-path@2.0.0: + resolution: {integrity: sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==} + engines: {node: '>= 18'} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -1395,13 +1975,50 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie-es@1.2.3: + resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==} + + cookie@2.0.1: + resolution: {integrity: sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==} + engines: {node: '>=22'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-selector-parser@3.3.0: + resolution: {integrity: sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -1414,6 +2031,9 @@ packages: supports-color: optional: true + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -1433,10 +2053,16 @@ packages: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -1445,25 +2071,70 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + devalue@5.9.0: + resolution: {integrity: sha512-RWrqdArjvPbsATEhOPUo6Wndc/iWnkWKlhIrdlF3zMMYo/c3CVtoaVAyLtWxz5h8nSlkHzxnzV2uLydPXmtF+A==} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + diff@8.0.4: + resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} + engines: {node: '>=0.3.1'} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + direction@2.0.1: + resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} + hasBin: true + dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} dom-accessibility-api@0.6.3: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} + enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} - es-module-lexer@2.3.0: - resolution: {integrity: sha512-KLdwQm2NvGLDkQDCGvmiQrhkd0JbMzXthwQAUgWjQuQdBLFa3eiBP5arXZyA+f8x+x7OXgud6bq2rxjGtHV2tw==} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} - esbuild@0.25.12: - resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + es-module-lexer@2.3.1: + resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} + + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} engines: {node: '>=18'} hasBin: true @@ -1471,6 +2142,10 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + eslint-plugin-storybook@10.5.0: resolution: {integrity: sha512-UyhbK11baKAYqzyDUHlwDlm1aP/wxPMR0vFmsxA5984BGaPwarhoXUWng1Xa0cd9BdPbQ+zr/y8ADk6XxtwkYg==} peerDependencies: @@ -1489,8 +2164,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.6.0: - resolution: {integrity: sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==} + eslint@10.8.0: + resolution: {integrity: sha512-nuKKvN+oIBO0koN7Tm7dlkmnkc21mtt0QJLwAKzjLq14y6lRTdVG36MZHJ8eQHwdJMwZbQNMlPOYedMq/oVJvQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1520,6 +2195,27 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + + estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + + estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -1527,12 +2223,21 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + expect-type@1.4.0: resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} engines: {node: '>=12.0.0'} - exsolve@1.1.0: - resolution: {integrity: sha512-D+42+T12DdIlJM3uepa55qGiL3sYdLBOxIl2ifQCzCHz4c7eiolaHsi3BIqEr7JxBzxv2pYZQX9kw16ziMcEmw==} + expressive-code@0.44.1: + resolution: {integrity: sha512-GakidxhapWDzpKLqEaFQ8wGk6gAqEtPQibu8+yPBfnDLgev5Vdsh1pasTxnrXL/mzIknyqeTwhMHTghdaiUrTg==} + + exsolve@1.1.1: + resolution: {integrity: sha512-9U/jZUgjnSGyntRr6y5Muu1MJcwFl6kPu7k8qLF0IMNfLqvw0NZ4nnVDq0RVoZ0RvCyumib4Ez3KYrVfilrw+g==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} @@ -1550,6 +2255,15 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + + fast-wrap-ansi@0.2.2: + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} + fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -1582,8 +2296,19 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.4.2: - resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + flatted@3.4.4: + resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==} + + flattie@1.1.1: + resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} + engines: {node: '>=8'} + + fontace@0.4.1: + resolution: {integrity: sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==} + + fontkitten@1.0.3: + resolution: {integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==} + engines: {node: '>=20'} fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} @@ -1603,6 +2328,13 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + get-tsconfig@5.0.0-beta.4: + resolution: {integrity: sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==} + engines: {node: '>=20.20.0'} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -1618,10 +2350,93 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + h3@1.15.11: + resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==} + + hast-util-embedded@3.0.0: + resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} + + hast-util-format@1.1.0: + resolution: {integrity: sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==} + + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + + hast-util-has-property@3.0.0: + resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + + hast-util-is-body-ok-link@3.0.1: + resolution: {integrity: sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==} + + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + + hast-util-minify-whitespace@1.0.1: + resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-phrasing@3.0.1: + resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==} + + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + + hast-util-select@6.0.4: + resolution: {integrity: sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==} + + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-to-parse5@8.0.1: + resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} + + hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + + html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + html-whitespace-sensitive-tag-names@3.0.1: + resolution: {integrity: sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + human-id@4.2.0: resolution: {integrity: sha512-K3GbkIWqyvvlpfhBPlbEvD97TtqBpAYA4kt+cn2lD2x2HuohzZCibcA2nOlnJT6exqvJLggoB5nv2dNf192nEA==} hasBin: true + i18next@26.3.6: + resolution: {integrity: sha512-Bu5Z2nAXgfVyM8xvW3jk9EKRIuX37PudsrBViThNFx7CR7aaYTpP01cxNB/E4c4UUzTDiAZRstEhsRfPOL/8xA==} + peerDependencies: + typescript: ^5 || ^6 || ^7 + peerDependenciesMeta: + typescript: + optional: true + iconv-lite@0.7.3: resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} engines: {node: '>=0.10.0'} @@ -1638,11 +2453,31 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + + iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true + is-docker@4.0.0: + resolution: {integrity: sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==} + engines: {node: '>=20'} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -1651,6 +2486,9 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} @@ -1660,6 +2498,10 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} @@ -1682,12 +2524,12 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.15.0: - resolution: {integrity: sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==} + js-yaml@3.15.1: + resolution: {integrity: sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==} hasBin: true - js-yaml@4.3.0: - resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} + js-yaml@4.3.1: + resolution: {integrity: sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==} hasBin: true json-buffer@3.0.1: @@ -1708,82 +2550,86 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lightningcss-android-arm64@1.32.0: - resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] - lightningcss-darwin-arm64@1.32.0: - resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.32.0: - resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.32.0: - resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.32.0: - resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.32.0: - resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [glibc] - lightningcss-linux-arm64-musl@1.32.0: - resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [musl] - lightningcss-linux-x64-gnu@1.32.0: - resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [glibc] - lightningcss-linux-x64-musl@1.32.0: - resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [musl] - lightningcss-win32-arm64-msvc@1.32.0: - resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.32.0: - resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.32.0: - resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} engines: {node: '>= 12.0.0'} local-pkg@1.2.1: @@ -1801,9 +2647,16 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loupe@3.2.1: resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + lru-cache@11.5.2: + resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} + engines: {node: 20 || >=22} + lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -1811,10 +2664,191 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magic-string@1.1.0: + resolution: {integrity: sha512-kS3VHe0nEPST2saQV4Rbkchcd3UBRkVTQHo1D3h/ZTwFDhai/mfKkmtPAtD129EOI7K3HlHIsFOt0WrI2/oU9g==} + + magicast@0.5.4: + resolution: {integrity: sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==} + + markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + mdast-util-definitions@6.0.0: + resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} + + mdast-util-directive@3.1.0: + resolution: {integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-directive@4.0.0: + resolution: {integrity: sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -1823,8 +2857,8 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - minimatch@10.2.5: - resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} engines: {node: 18 || 20 || >=22} mlly@1.8.2: @@ -1841,18 +2875,50 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.15: - resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - obug@2.1.3: - resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} + neotraverse@1.0.1: + resolution: {integrity: sha512-WmmLty1YWwJl9yZi77v2dVIV6X2kuYV8YYBI/G3LWGKdGHmHUvL1z7FW0iDvEvGAwNEoc5x1tOOOyDnf5jJw/w==} + engines: {node: '>= 10'} + + nlcst-to-string@4.0.0: + resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} + + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + node-mock-http@1.0.5: + resolution: {integrity: sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + obug@2.1.4: + resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} engines: {node: '>=12.20.0'} + ofetch@1.5.1: + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + + oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + open@10.2.0: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} @@ -1868,8 +2934,8 @@ packages: resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-resolver@11.23.0: - resolution: {integrity: sha512-f0+l598CJMOLnYPXsXxttJALH0ljtivdRMKtvHhxRuWa5FYmw5+qODARl8oYjMC/brpzKcrpdORsOBrTqhBZ9A==} + oxc-resolver@11.24.2: + resolution: {integrity: sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw==} p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} @@ -1883,6 +2949,10 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-limit@7.3.1: + resolution: {integrity: sha512-0trZaiG7Y7kN/Egy9a8j47t9osC0Tch4PaIWd9yGF6bvmlk7muExRvGNYb8sXBwEKMoNKsbNN9P8EefuQekE4Q==} + engines: {node: '>=20'} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -1895,6 +2965,14 @@ packages: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} + p-queue@9.3.3: + resolution: {integrity: sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==} + engines: {node: '>=20'} + + p-timeout@7.0.1: + resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==} + engines: {node: '>=20'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -1902,6 +2980,22 @@ packages: package-manager-detector@0.2.11: resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} + package-manager-detector@1.8.0: + resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==} + + pagefind@1.5.2: + resolution: {integrity: sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q==} + hasBin: true + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + parse-latin@7.0.0: + resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -1921,6 +3015,9 @@ packages: resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} engines: {node: '>= 14.16'} + piccolore@0.1.3: + resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1942,22 +3039,32 @@ packages: pkg-types@2.3.1: resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} - playwright-core@1.61.1: - resolution: {integrity: sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==} - engines: {node: '>=18'} + playwright-core@1.62.1: + resolution: {integrity: sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==} + engines: {node: '>=20'} hasBin: true - playwright@1.61.1: - resolution: {integrity: sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==} - engines: {node: '>=18'} + playwright@1.62.1: + resolution: {integrity: sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==} + engines: {node: '>=20'} hasBin: true pngjs@7.0.0: resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} engines: {node: '>=14.19.0'} - postcss@8.5.16: - resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.4: + resolution: {integrity: sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==} + engines: {node: '>=4'} + + postcss@8.5.25: + resolution: {integrity: sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==} engines: {node: ^10 || ^12 || >=14} preact-render-to-string@6.7.0: @@ -1982,8 +3089,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.9.4: - resolution: {integrity: sha512-yWG/o/4oJfo036EKAfK6ACAoDOfHeRHx4tuxkfBZiauURiaSmYwlpOr5LQqKtIkRD2z1PLteme2WoxEnj4tHTg==} + prettier@3.9.6: + resolution: {integrity: sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==} engines: {node: '>=14'} hasBin: true @@ -1991,6 +3098,17 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + process-ancestry@0.1.0: + resolution: {integrity: sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg==} + engines: {node: '>=18.0.0'} + + property-information@7.2.0: + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -2001,45 +3119,133 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + react-docgen-typescript@2.4.0: resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} peerDependencies: typescript: '>= 4.3.x' - react-dom@19.2.7: - resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} + react-dom@19.2.8: + resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==} peerDependencies: - react: ^19.2.7 + react: ^19.2.8 react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react@19.2.7: - resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} + react@19.2.8: + resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==} engines: {node: '>=0.10.0'} read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} - recast@0.23.12: - resolution: {integrity: sha512-dEWRjcINDu/F4l2dYx57ugBtD7HV9KXESyxhzw/MqWLeglJrsjJKqACPyUPg+6AF8mIgm+Zi0dZ3ACoIg+QtpA==} + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + recast@0.23.19: + resolution: {integrity: sha512-T98lym7kH+pnZmRaD8yDRdaNqyUbwnbEBx0MuchrzMFOEMray4AO3ZJoTUZ5r78Ao78X/OhzW0DL8GB85w/I2w==} engines: {node: '>= 4'} + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + + rehype-expressive-code@0.44.1: + resolution: {integrity: sha512-+VZgs7Evw4LXRN3owpoBNSTpYuW6GeOdjqcUT1TuY8o/4MGPtbd0EU7Bgrju7X8KrQ6SslOBAuGWJ5fV5TriJQ==} + + rehype-format@5.0.1: + resolution: {integrity: sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==} + + rehype-parse@9.0.1: + resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + + rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + + rehype@13.0.2: + resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} + + remark-directive@4.0.0: + resolution: {integrity: sha512-7sxn4RfF1o3izevPV1DheyGDD6X4c9hrGpfdUpm7uC++dqrnJxIZVkk7CoKqcLm0VUMAuOol7Mno3m6g8cfMuA==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-smartypants@3.0.3: + resolution: {integrity: sha512-gCaK+ndZ0hYezlqFegHFCVh2CQemsi0Npdh1qVM9bxlUFknjkbP6VmojWhddOCrbK0PbbacmYLWfTULRiT1eWA==} + engines: {node: '>=16.0.0'} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + retext-latin@4.0.0: + resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} + + retext-smartypants@6.2.0: + resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} + + retext-stringify@4.0.0: + resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} + + retext@9.0.0: + resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} + reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rolldown@1.1.5: - resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} + rolldown@1.2.1: + resolution: {integrity: sha512-4FKJhg8d3OiyQOA6Q1Q0hoFFpW9/OoX+VsHzpECsdsIZoOArrAK90gl59YK/Z+gnDel45bgJZK03ozH/9bCqEw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -2053,6 +3259,13 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + satteri@0.9.5: + resolution: {integrity: sha512-ZuWVl+vnM64y+/TtX8Kosv2c00W+hLQiiwnEL6H0UKVVrxFqMw4D2CJHHQaouVd89OAhtBBfjWLqhKi3TVUV4w==} + + sax@1.6.1: + resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} + engines: {node: '>=11.0.0'} + scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -2061,6 +3274,10 @@ packages: engines: {node: '>=10'} hasBin: true + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -2069,6 +3286,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shiki@4.4.1: + resolution: {integrity: sha512-rFP+iYKzjLEIqiMiKANhARqiAbk4deDhWnBtnUO/K0D0dPxMGDH4N0FVfBY/VeI+lPrV4wNGCHQZp7EOr7NNBw==} + engines: {node: '>=20'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -2080,10 +3301,22 @@ packages: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + sitemap@9.0.1: + resolution: {integrity: sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==} + engines: {node: '>=20.19.5', npm: '>=10.8.2'} + hasBin: true + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + smol-toml@1.7.1: + resolution: {integrity: sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ==} + engines: {node: '>= 18'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -2092,6 +3325,13 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} @@ -2104,8 +3344,8 @@ packages: std-env@4.2.0: resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} - storybook@10.5.0: - resolution: {integrity: sha512-dRhM/kSSvHQR8DmZO41v5sJuz9U6zDjjR2gRBTgZN2RBSXbmF0Brvgszrvvxyx2VfxuYKzhB+xumKwWkwlBtig==} + storybook@10.5.5: + resolution: {integrity: sha512-UscBIBJDloUeqntukHOhP1a5W/vouePDJbzPSxj466WK801FZtzQiMffMtkjzJiWSuj20wfaYlB2QQKh9aOYAg==} hasBin: true peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -2119,6 +3359,12 @@ packages: vite-plus: optional: true + stream-replace-string@2.0.0: + resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2131,16 +3377,34 @@ packages: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + + svgo@4.0.2: + resolution: {integrity: sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng==} + engines: {node: '>=16'} + hasBin: true + term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} + tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinyclip@0.1.15: + resolution: {integrity: sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==} + engines: {node: ^16.14.0 || >= 17.3.0} + tinyexec@1.2.4: resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} engines: {node: '>=18'} @@ -2153,8 +3417,8 @@ packages: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyrainbow@3.1.0: - resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} + tinyrainbow@3.1.1: + resolution: {integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==} engines: {node: '>=14.0.0'} tinyspy@4.0.4: @@ -2169,6 +3433,12 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-api-utils@2.5.0: resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} @@ -2194,9 +3464,54 @@ packages: ufo@1.6.4: resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + ultrahtml@1.7.0: + resolution: {integrity: sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==} + + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unifont@0.7.4: + resolution: {integrity: sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==} + + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-modify-children@4.0.0: + resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-children@3.0.0: + resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -2205,21 +3520,99 @@ packages: resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} engines: {node: '>=18.12.0'} + unstorage@1.17.5: + resolution: {integrity: sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==} + 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 + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-extras@0.1.0: + resolution: {integrity: sha512-8tzwTeXFPuX/5PHuCDQE5Dd9Ts4rwoq2t9aIT+HS4iAVpmj5l4Ao7Q+BuuFjvWRqrLswBhQDk8O96ZicgCqQqw==} + engines: {node: '>=20'} + use-sync-external-store@1.6.0: resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - vite@8.1.4: - resolution: {integrity: sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ==} + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@8.2.0: + resolution: {integrity: sha512-pn+CFpM0lwDeKwmOq1ZaBK/9sjorZcgqxki6MbY/jPEVd9vichIlmlD4HmQ5wdP5EgqQCFRaACBxMC7uEGc6lQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.3.0 + '@vitejs/devtools': ^0.4.0 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -2256,8 +3649,16 @@ packages: yaml: optional: true - vitest-environment-stencil@1.13.3: - resolution: {integrity: sha512-dOCA04cVraAJLjCPx6jWAdjoFK/KaMeCAdUkS/K8O8aC869GTy3gJi7WaRKB4NCYaCRLtf9GIlJNVtCegVhwNQ==} + vitefu@1.1.3: + resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + vite: + optional: true + + vitest-environment-stencil@1.14.0: + resolution: {integrity: sha512-Co2JA54ls4VeKzH4dqSWMKCnYCbPd/SCx/6FcWnZFLRsUr6VfeswUV5/+mEjFLOBPpNy9gW872k1Qu8gCQD1oQ==} peerDependencies: '@stencil/core': ^4.0.0 || ^5.0.0-0 @@ -2302,6 +3703,9 @@ packages: jsdom: optional: true + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} @@ -2319,8 +3723,8 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - ws@8.21.0: - resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + ws@8.21.1: + resolution: {integrity: sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -2335,26 +3739,261 @@ packages: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} + xxhash-wasm@1.1.0: + resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} + + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} + engines: {node: '>=12.20'} + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: '@adobe/css-tools@4.5.0': {} + '@astrojs/compiler-binding-darwin-arm64@0.3.2': + optional: true + + '@astrojs/compiler-binding-darwin-x64@0.3.2': + optional: true + + '@astrojs/compiler-binding-linux-arm64-gnu@0.3.2': + optional: true + + '@astrojs/compiler-binding-linux-arm64-musl@0.3.2': + optional: true + + '@astrojs/compiler-binding-linux-x64-gnu@0.3.2': + optional: true + + '@astrojs/compiler-binding-linux-x64-musl@0.3.2': + optional: true + + '@astrojs/compiler-binding-wasm32-wasi@0.3.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)': + dependencies: + '@napi-rs/wasm-runtime': 1.2.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + '@astrojs/compiler-binding-win32-arm64-msvc@0.3.2': + optional: true + + '@astrojs/compiler-binding-win32-x64-msvc@0.3.2': + optional: true + + '@astrojs/compiler-binding@0.3.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)': + optionalDependencies: + '@astrojs/compiler-binding-darwin-arm64': 0.3.2 + '@astrojs/compiler-binding-darwin-x64': 0.3.2 + '@astrojs/compiler-binding-linux-arm64-gnu': 0.3.2 + '@astrojs/compiler-binding-linux-arm64-musl': 0.3.2 + '@astrojs/compiler-binding-linux-x64-gnu': 0.3.2 + '@astrojs/compiler-binding-linux-x64-musl': 0.3.2 + '@astrojs/compiler-binding-wasm32-wasi': 0.3.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) + '@astrojs/compiler-binding-win32-arm64-msvc': 0.3.2 + '@astrojs/compiler-binding-win32-x64-msvc': 0.3.2 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + '@astrojs/compiler-rs@0.3.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)': + dependencies: + '@astrojs/compiler-binding': 0.3.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + '@astrojs/internal-helpers@0.10.2': + dependencies: + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + js-yaml: 4.3.1 + picomatch: 4.0.5 + retext-smartypants: 6.2.0 + shiki: 4.4.1 + smol-toml: 1.7.1 + unified: 11.0.5 + + '@astrojs/markdown-remark@7.2.2': + dependencies: + '@astrojs/internal-helpers': 0.10.2 + '@astrojs/prism': 4.0.2 + github-slugger: 2.0.0 + hast-util-from-html: 2.0.3 + hast-util-to-text: 4.0.2 + 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.3 + 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 + transitivePeerDependencies: + - supports-color + + '@astrojs/markdown-satteri@0.3.5': + dependencies: + '@astrojs/internal-helpers': 0.10.2 + '@astrojs/prism': 4.0.2 + github-slugger: 2.0.0 + hast-util-from-html: 2.0.3 + satteri: 0.9.5 + + '@astrojs/mdx@7.0.5(@astrojs/markdown-satteri@0.3.5)(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3)(jiti@2.7.0))': + dependencies: + '@astrojs/internal-helpers': 0.10.2 + '@astrojs/markdown-remark': 7.2.2 + '@mdx-js/mdx': 3.1.1 + acorn: 8.18.0 + astro: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3)(jiti@2.7.0) + es-module-lexer: 2.3.1 + 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.3 + source-map: 0.7.6 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + optionalDependencies: + '@astrojs/markdown-satteri': 0.3.5 + transitivePeerDependencies: + - supports-color + + '@astrojs/prism@4.0.2': + dependencies: + prismjs: 1.30.0 + + '@astrojs/sitemap@3.7.3': + dependencies: + sitemap: 9.0.1 + stream-replace-string: 2.0.0 + zod: 4.4.3 + + '@astrojs/starlight@0.41.6(@astrojs/markdown-remark@7.2.2)(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3)(jiti@2.7.0))(typescript@5.9.3)': + dependencies: + '@astrojs/markdown-satteri': 0.3.5 + '@astrojs/mdx': 7.0.5(@astrojs/markdown-satteri@0.3.5)(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3)(jiti@2.7.0)) + '@astrojs/sitemap': 3.7.3 + '@pagefind/default-ui': 1.5.2 + '@types/hast': 3.0.5 + '@types/js-yaml': 4.0.9 + '@types/mdast': 4.0.4 + astro: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3)(jiti@2.7.0) + astro-expressive-code: 0.44.1(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3)(jiti@2.7.0)) + bcp-47: 2.1.1 + hast-util-from-html: 2.0.3 + hast-util-select: 6.0.4 + hast-util-to-string: 3.0.1 + hastscript: 9.0.1 + i18next: 26.3.6(typescript@5.9.3) + js-yaml: 4.3.1 + klona: 2.0.6 + magic-string: 0.30.21 + mdast-util-directive: 3.1.0 + mdast-util-to-markdown: 2.1.2 + mdast-util-to-string: 4.0.0 + pagefind: 1.5.2 + rehype: 13.0.2 + rehype-format: 5.0.1 + remark-directive: 4.0.0 + satteri: 0.9.5 + ultrahtml: 1.7.0 + unified: 11.0.5 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + optionalDependencies: + '@astrojs/markdown-remark': 7.2.2 + transitivePeerDependencies: + - supports-color + - typescript + + '@astrojs/telemetry@3.3.3': + dependencies: + ci-info: 4.4.0 + dset: 3.1.4 + is-docker: 4.0.0 + package-manager-detector: 1.8.0 + '@babel/code-frame@7.29.7': dependencies: '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 + '@babel/helper-string-parser@7.29.7': {} + '@babel/helper-validator-identifier@7.29.7': {} + '@babel/parser@7.29.8': + dependencies: + '@babel/types': 7.29.8 + '@babel/runtime@7.29.7': {} + '@babel/types@7.29.8': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@blazediff/core@1.9.1': {} + '@bruits/satteri-darwin-arm64@0.9.5': + optional: true + + '@bruits/satteri-darwin-x64@0.9.5': + optional: true + + '@bruits/satteri-linux-arm64-gnu@0.9.5': + optional: true + + '@bruits/satteri-linux-arm64-musl@0.9.5': + optional: true + + '@bruits/satteri-linux-x64-gnu@0.9.5': + optional: true + + '@bruits/satteri-linux-x64-musl@0.9.5': + optional: true + + '@bruits/satteri-wasm32-wasi@0.9.5': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.2.2(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optional: true + + '@bruits/satteri-win32-arm64-msvc@0.9.5': + optional: true + + '@bruits/satteri-win32-x64-msvc@0.9.5': + optional: true + + '@capsizecss/unpack@4.0.1': + dependencies: + fontkitten: 1.0.3 + '@changesets/apply-release-plan@7.1.1': dependencies: '@changesets/config': 3.1.4 @@ -2384,7 +4023,7 @@ snapshots: dependencies: '@changesets/types': 6.1.0 - '@changesets/cli@2.31.0(@types/node@22.20.1)': + '@changesets/cli@2.31.1(@types/node@24.13.3)': dependencies: '@changesets/apply-release-plan': 7.1.1 '@changesets/assemble-release-plan': 6.0.10 @@ -2400,7 +4039,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.3(@types/node@22.20.1) + '@inquirer/external-editor': 1.0.3(@types/node@24.13.3) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 enquirer: 2.4.1 @@ -2463,7 +4102,7 @@ snapshots: '@changesets/parse@0.4.3': dependencies: '@changesets/types': 6.1.0 - js-yaml: 4.3.0 + js-yaml: 4.3.1 '@changesets/pre@2.0.2': dependencies: @@ -2498,28 +4137,69 @@ snapshots: human-id: 4.2.0 prettier: 2.8.8 + '@clack/core@1.4.3': + dependencies: + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 + + '@clack/prompts@1.7.0': + dependencies: + '@clack/core': 1.4.3 + fast-string-width: 3.0.2 + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 + + '@ctrl/tinycolor@4.2.0': {} + '@emnapi/core@1.11.1': dependencies: '@emnapi/wasi-threads': 1.2.2 tslib: 2.8.1 optional: true + '@emnapi/core@1.11.2': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + '@emnapi/core@1.9.2': dependencies: '@emnapi/wasi-threads': 1.2.1 tslib: 2.8.1 optional: true + '@emnapi/core@2.0.0-alpha.3': + dependencies: + '@emnapi/wasi-threads': 2.0.1 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.11.1': dependencies: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.11.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.3': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.9.2': dependencies: tslib: 2.8.1 optional: true + '@emnapi/runtime@2.0.0-alpha.3': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 @@ -2530,87 +4210,92 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.25.12': - optional: true - - '@esbuild/android-arm64@0.25.12': - optional: true - - '@esbuild/android-arm@0.25.12': - optional: true - - '@esbuild/android-x64@0.25.12': - optional: true - - '@esbuild/darwin-arm64@0.25.12': - optional: true - - '@esbuild/darwin-x64@0.25.12': - optional: true - - '@esbuild/freebsd-arm64@0.25.12': - optional: true - - '@esbuild/freebsd-x64@0.25.12': - optional: true - - '@esbuild/linux-arm64@0.25.12': - optional: true - - '@esbuild/linux-arm@0.25.12': - optional: true - - '@esbuild/linux-ia32@0.25.12': - optional: true - - '@esbuild/linux-loong64@0.25.12': - optional: true - - '@esbuild/linux-mips64el@0.25.12': - optional: true - - '@esbuild/linux-ppc64@0.25.12': - optional: true - - '@esbuild/linux-riscv64@0.25.12': - optional: true - - '@esbuild/linux-s390x@0.25.12': - optional: true - - '@esbuild/linux-x64@0.25.12': - optional: true - - '@esbuild/netbsd-arm64@0.25.12': - optional: true - - '@esbuild/netbsd-x64@0.25.12': - optional: true - - '@esbuild/openbsd-arm64@0.25.12': - optional: true - - '@esbuild/openbsd-x64@0.25.12': - optional: true - - '@esbuild/openharmony-arm64@0.25.12': - optional: true - - '@esbuild/sunos-x64@0.25.12': - optional: true - - '@esbuild/win32-arm64@0.25.12': - optional: true - - '@esbuild/win32-ia32@0.25.12': - optional: true - - '@esbuild/win32-x64@0.25.12': - optional: true - - '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0(jiti@2.7.0))': + '@emnapi/wasi-threads@2.0.1': dependencies: - eslint: 10.6.0(jiti@2.7.0) + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.28.1': + optional: true + + '@esbuild/android-arm64@0.28.1': + optional: true + + '@esbuild/android-arm@0.28.1': + optional: true + + '@esbuild/android-x64@0.28.1': + optional: true + + '@esbuild/darwin-arm64@0.28.1': + optional: true + + '@esbuild/darwin-x64@0.28.1': + optional: true + + '@esbuild/freebsd-arm64@0.28.1': + optional: true + + '@esbuild/freebsd-x64@0.28.1': + optional: true + + '@esbuild/linux-arm64@0.28.1': + optional: true + + '@esbuild/linux-arm@0.28.1': + optional: true + + '@esbuild/linux-ia32@0.28.1': + optional: true + + '@esbuild/linux-loong64@0.28.1': + optional: true + + '@esbuild/linux-mips64el@0.28.1': + optional: true + + '@esbuild/linux-ppc64@0.28.1': + optional: true + + '@esbuild/linux-riscv64@0.28.1': + optional: true + + '@esbuild/linux-s390x@0.28.1': + optional: true + + '@esbuild/linux-x64@0.28.1': + optional: true + + '@esbuild/netbsd-arm64@0.28.1': + optional: true + + '@esbuild/netbsd-x64@0.28.1': + optional: true + + '@esbuild/openbsd-arm64@0.28.1': + optional: true + + '@esbuild/openbsd-x64@0.28.1': + optional: true + + '@esbuild/openharmony-arm64@0.28.1': + optional: true + + '@esbuild/sunos-x64@0.28.1': + optional: true + + '@esbuild/win32-arm64@0.28.1': + optional: true + + '@esbuild/win32-ia32@0.28.1': + optional: true + + '@esbuild/win32-x64@0.28.1': + optional: true + + '@eslint-community/eslint-utils@4.10.1(eslint@10.8.0(jiti@2.7.0))': + dependencies: + eslint: 10.8.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -2619,11 +4304,11 @@ snapshots: dependencies: '@eslint/object-schema': 3.0.5 debug: 4.4.3 - minimatch: 10.2.5 + minimatch: 10.2.6 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.6.0': + '@eslint/config-helpers@0.7.0': dependencies: '@eslint/core': 1.2.1 @@ -2638,6 +4323,31 @@ snapshots: '@eslint/core': 1.2.1 levn: 0.4.1 + '@expressive-code/core@0.44.1': + dependencies: + '@ctrl/tinycolor': 4.2.0 + hast-util-select: 6.0.4 + hast-util-to-html: 9.0.5 + hast-util-to-text: 4.0.2 + hastscript: 9.0.1 + postcss: 8.5.25 + postcss-nested: 6.2.0(postcss@8.5.25) + unist-util-visit: 5.1.0 + unist-util-visit-parents: 6.0.2 + + '@expressive-code/plugin-frames@0.44.1': + dependencies: + '@expressive-code/core': 0.44.1 + + '@expressive-code/plugin-shiki@0.44.1': + dependencies: + '@expressive-code/core': 0.44.1 + shiki: 4.4.1 + + '@expressive-code/plugin-text-markers@0.44.1': + dependencies: + '@expressive-code/core': 0.44.1 + '@humanfs/core@0.19.2': dependencies: '@humanfs/types': 0.15.0 @@ -2654,12 +4364,108 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@inquirer/external-editor@1.0.3(@types/node@22.20.1)': + '@img/colour@1.1.0': {} + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.11.3 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + + '@inquirer/external-editor@1.0.3(@types/node@24.13.3)': dependencies: chardet: 2.2.0 iconv-lite: 0.7.3 optionalDependencies: - '@types/node': 22.20.1 + '@types/node': 24.13.3 '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -2696,26 +4502,70 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7)': + '@mdx-js/mdx@3.1.1': + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdx': 2.0.14 + acorn: 8.18.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.18.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@mdx-js/react@3.1.1(@types/react@19.2.18)(react@19.2.8)': dependencies: '@types/mdx': 2.0.14 - '@types/react': 19.2.17 - react: 19.2.7 + '@types/react': 19.2.18 + react: 19.2.8 - '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + '@napi-rs/wasm-runtime@1.2.2(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: '@emnapi/core': 1.11.1 '@emnapi/runtime': 1.11.1 '@tybys/wasm-util': 0.10.3 optional: true - '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@napi-rs/wasm-runtime@1.2.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@tybys/wasm-util': 0.10.3 + optional: true + + '@napi-rs/wasm-runtime@1.2.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: '@emnapi/core': 1.9.2 '@emnapi/runtime': 1.9.2 '@tybys/wasm-util': 0.10.3 optional: true + '@napi-rs/wasm-runtime@1.2.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)': + dependencies: + '@emnapi/core': 2.0.0-alpha.3 + '@emnapi/runtime': 2.0.0-alpha.3 + '@tybys/wasm-util': 0.10.3 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -2728,6 +4578,8 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 + '@oslojs/encoding@1.1.0': {} + '@oxc-parser/binding-android-arm-eabi@0.127.0': optional: true @@ -2782,7 +4634,7 @@ snapshots: dependencies: '@emnapi/core': 1.9.2 '@emnapi/runtime': 1.9.2 - '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@napi-rs/wasm-runtime': 1.2.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) optional: true '@oxc-parser/binding-win32-arm64-msvc@0.127.0': @@ -2796,124 +4648,150 @@ snapshots: '@oxc-project/types@0.127.0': {} - '@oxc-project/types@0.139.0': {} + '@oxc-project/types@0.142.0': {} - '@oxc-resolver/binding-android-arm-eabi@11.23.0': + '@oxc-resolver/binding-android-arm-eabi@11.24.2': optional: true - '@oxc-resolver/binding-android-arm64@11.23.0': + '@oxc-resolver/binding-android-arm64@11.24.2': optional: true - '@oxc-resolver/binding-darwin-arm64@11.23.0': + '@oxc-resolver/binding-darwin-arm64@11.24.2': optional: true - '@oxc-resolver/binding-darwin-x64@11.23.0': + '@oxc-resolver/binding-darwin-x64@11.24.2': optional: true - '@oxc-resolver/binding-freebsd-x64@11.23.0': + '@oxc-resolver/binding-freebsd-x64@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm-gnueabihf@11.23.0': + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm-musleabihf@11.23.0': + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm64-gnu@11.23.0': + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm64-musl@11.23.0': + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': optional: true - '@oxc-resolver/binding-linux-ppc64-gnu@11.23.0': + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-riscv64-gnu@11.23.0': + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-riscv64-musl@11.23.0': + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': optional: true - '@oxc-resolver/binding-linux-s390x-gnu@11.23.0': + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-x64-gnu@11.23.0': + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-x64-musl@11.23.0': + '@oxc-resolver/binding-linux-x64-musl@11.24.2': optional: true - '@oxc-resolver/binding-openharmony-arm64@11.23.0': + '@oxc-resolver/binding-openharmony-arm64@11.24.2': optional: true - '@oxc-resolver/binding-wasm32-wasi@11.23.0': + '@oxc-resolver/binding-wasm32-wasi@11.24.2': dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 - '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@napi-rs/wasm-runtime': 1.2.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) optional: true - '@oxc-resolver/binding-win32-arm64-msvc@11.23.0': + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': optional: true - '@oxc-resolver/binding-win32-x64-msvc@11.23.0': + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': + optional: true + + '@pagefind/darwin-arm64@1.5.2': + optional: true + + '@pagefind/darwin-x64@1.5.2': + optional: true + + '@pagefind/default-ui@1.5.2': {} + + '@pagefind/freebsd-x64@1.5.2': + optional: true + + '@pagefind/linux-arm64@1.5.2': + optional: true + + '@pagefind/linux-x64@1.5.2': + optional: true + + '@pagefind/windows-arm64@1.5.2': + optional: true + + '@pagefind/windows-x64@1.5.2': optional: true '@polka/url@1.0.0-next.29': {} - '@rolldown/binding-android-arm64@1.1.5': + '@rolldown/binding-android-arm64@1.2.1': optional: true - '@rolldown/binding-darwin-arm64@1.1.5': + '@rolldown/binding-darwin-arm64@1.2.1': optional: true - '@rolldown/binding-darwin-x64@1.1.5': + '@rolldown/binding-darwin-x64@1.2.1': optional: true - '@rolldown/binding-freebsd-x64@1.1.5': + '@rolldown/binding-freebsd-x64@1.2.1': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + '@rolldown/binding-linux-arm-gnueabihf@1.2.1': optional: true - '@rolldown/binding-linux-arm64-gnu@1.1.5': + '@rolldown/binding-linux-arm64-gnu@1.2.1': optional: true - '@rolldown/binding-linux-arm64-musl@1.1.5': + '@rolldown/binding-linux-arm64-musl@1.2.1': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.1.5': + '@rolldown/binding-linux-ppc64-gnu@1.2.1': optional: true - '@rolldown/binding-linux-s390x-gnu@1.1.5': + '@rolldown/binding-linux-s390x-gnu@1.2.1': optional: true - '@rolldown/binding-linux-x64-gnu@1.1.5': + '@rolldown/binding-linux-x64-gnu@1.2.1': {} + + '@rolldown/binding-linux-x64-musl@1.2.1': optional: true - '@rolldown/binding-linux-x64-gnu@1.2.0': {} - - '@rolldown/binding-linux-x64-musl@1.1.5': + '@rolldown/binding-openharmony-arm64@1.2.1': optional: true - '@rolldown/binding-openharmony-arm64@1.1.5': - optional: true - - '@rolldown/binding-wasm32-wasi@1.1.5': + '@rolldown/binding-wasm32-wasi@1.2.1': dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 - '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@emnapi/core': 2.0.0-alpha.3 + '@emnapi/runtime': 2.0.0-alpha.3 + '@napi-rs/wasm-runtime': 1.2.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) optional: true - '@rolldown/binding-win32-arm64-msvc@1.1.5': + '@rolldown/binding-win32-arm64-msvc@1.2.1': optional: true - '@rolldown/binding-win32-x64-msvc@1.1.5': + '@rolldown/binding-win32-x64-msvc@1.2.1': optional: true '@rolldown/pluginutils@1.0.1': {} + '@rollup/pluginutils@5.4.0': + dependencies: + '@types/estree': 1.0.9 + estree-walker: 2.0.2 + picomatch: 4.0.5 + '@rollup/rollup-darwin-arm64@4.44.0': optional: true @@ -2938,16 +4816,57 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.44.0': optional: true + '@shikijs/core@4.4.1': + dependencies: + '@shikijs/primitive': 4.4.1 + '@shikijs/types': 4.4.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@4.4.1': + dependencies: + '@shikijs/types': 4.4.1 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 + + '@shikijs/engine-oniguruma@4.4.1': + dependencies: + '@shikijs/types': 4.4.1 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@4.4.1': + dependencies: + '@shikijs/types': 4.4.1 + + '@shikijs/primitive@4.4.1': + dependencies: + '@shikijs/types': 4.4.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/themes@4.4.1': + dependencies: + '@shikijs/types': 4.4.1 + + '@shikijs/types@4.4.1': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/vscode-textmate@10.0.2': {} + '@standard-schema/spec@1.1.0': {} - '@stencil-community/unplugin-stencil@0.5.2(@stencil/core@4.43.5)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))': + '@stencil-community/unplugin-stencil@0.5.2(@stencil/core@4.43.5)(esbuild@0.28.1)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: '@stencil/core': 4.43.5 mlly: 1.8.2 typescript: 5.9.3 unplugin: 2.3.11 optionalDependencies: - vite: 8.1.4(@types/node@22.20.1)(jiti@2.7.0) + esbuild: 0.28.1 + vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0) '@stencil/core@4.43.5': optionalDependencies: @@ -2960,16 +4879,16 @@ snapshots: '@rollup/rollup-win32-arm64-msvc': 4.44.0 '@rollup/rollup-win32-x64-msvc': 4.44.0 - '@stencil/storybook-plugin@0.7.0(@stencil/core@4.43.5)(preact@10.29.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(typescript@5.9.3)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))': + '@stencil/storybook-plugin@0.7.0(@stencil/core@4.43.5)(esbuild@0.28.1)(preact@10.29.7)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(typescript@5.9.3)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: - '@stencil-community/unplugin-stencil': 0.5.2(@stencil/core@4.43.5)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + '@stencil-community/unplugin-stencil': 0.5.2(@stencil/core@4.43.5)(esbuild@0.28.1)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)) '@stencil/core': 4.43.5 - '@storybook/builder-vite': 10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + '@storybook/builder-vite': 10.5.5(esbuild@0.28.1)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)) '@storybook/global': 5.0.0 - '@storybook/html': 10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7)) + '@storybook/html': 10.5.5(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8)) preact-render-to-string: 6.7.0(preact@10.29.7) react-docgen-typescript: 2.4.0(typescript@5.9.3) - storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) transitivePeerDependencies: - '@nuxt/kit' - '@nuxt/schema' @@ -2980,29 +4899,29 @@ snapshots: - vite - webpack - '@stencil/vitest@1.13.3(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.61.1)(vitest@4.1.10)': + '@stencil/vitest@1.14.0(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.62.1)(vitest@4.1.10)': dependencies: '@stencil/core': 4.43.5 jiti: 2.7.0 local-pkg: 1.2.1 - vitest: 4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) - vitest-environment-stencil: 1.13.3(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.61.1)(vitest@4.1.10) + vitest: 4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)) + vitest-environment-stencil: 1.14.0(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.62.1)(vitest@4.1.10) optionalDependencies: - '@vitest/browser-playwright': 4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10) - playwright: 1.61.1 + '@vitest/browser-playwright': 4.1.10(playwright@1.62.1)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10) + playwright: 1.62.1 - '@storybook/addon-docs@10.5.0(@types/react@19.2.17)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))': + '@storybook/addon-docs@10.5.5(@types/react@19.2.18)(esbuild@0.28.1)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: - '@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.7) - '@storybook/csf-plugin': 10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) - '@storybook/icons': 2.1.0(react@19.2.7) - '@storybook/react-dom-shim': 10.5.0(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7)) - react: 19.2.7 - react-dom: 19.2.7(react@19.2.7) - storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + '@mdx-js/react': 3.1.1(@types/react@19.2.18)(react@19.2.8) + '@storybook/csf-plugin': 10.5.5(esbuild@0.28.1)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/icons': 2.1.0(react@19.2.8) + '@storybook/react-dom-shim': 10.5.5(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8)) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) ts-dedent: 2.3.0 optionalDependencies: - '@types/react': 19.2.17 + '@types/react': 19.2.18 transitivePeerDependencies: - '@types/react-dom' - esbuild @@ -3010,51 +4929,52 @@ snapshots: - vite - webpack - '@storybook/addon-links@10.5.0(@types/react@19.2.17)(react@19.2.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))': + '@storybook/addon-links@10.5.5(@types/react@19.2.18)(react@19.2.8)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))': dependencies: '@storybook/global': 5.0.0 - storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) optionalDependencies: - '@types/react': 19.2.17 - react: 19.2.7 + '@types/react': 19.2.18 + react: 19.2.8 - '@storybook/builder-vite@10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))': + '@storybook/builder-vite@10.5.5(esbuild@0.28.1)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: - '@storybook/csf-plugin': 10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) - storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + '@storybook/csf-plugin': 10.5.5(esbuild@0.28.1)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)) + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) ts-dedent: 2.3.0 - vite: 8.1.4(@types/node@22.20.1)(jiti@2.7.0) + vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0) transitivePeerDependencies: - esbuild - rollup - webpack - '@storybook/csf-plugin@10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))': + '@storybook/csf-plugin@10.5.5(esbuild@0.28.1)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: - storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) unplugin: 2.3.11 optionalDependencies: - vite: 8.1.4(@types/node@22.20.1)(jiti@2.7.0) + esbuild: 0.28.1 + vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0) '@storybook/global@5.0.0': {} - '@storybook/html@10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))': + '@storybook/html@10.5.5(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))': dependencies: '@storybook/global': 5.0.0 - storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) ts-dedent: 2.3.0 - '@storybook/icons@2.1.0(react@19.2.7)': + '@storybook/icons@2.1.0(react@19.2.8)': dependencies: - react: 19.2.7 + react: 19.2.8 - '@storybook/react-dom-shim@10.5.0(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))': + '@storybook/react-dom-shim@10.5.5(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))': dependencies: - react: 19.2.7 - react-dom: 19.2.7(react@19.2.7) - storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) optionalDependencies: - '@types/react': 19.2.17 + '@types/react': 19.2.18 '@testing-library/dom@10.4.1': dependencies: @@ -3092,54 +5012,90 @@ snapshots: '@types/deep-eql': 4.0.2 assertion-error: 2.0.1 + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 + '@types/deep-eql@4.0.2': {} '@types/esrecurse@4.3.1': {} + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.9 + '@types/estree@1.0.9': {} + '@types/hast@3.0.5': + dependencies: + '@types/unist': 3.0.3 + + '@types/js-yaml@4.0.9': {} + '@types/json-schema@7.0.15': {} + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/mdx@2.0.14': {} + '@types/ms@2.1.0': {} + + '@types/nlcst@2.0.3': + dependencies: + '@types/unist': 3.0.3 + '@types/node@12.20.55': {} '@types/node@22.20.1': dependencies: undici-types: 6.21.0 - '@types/react@19.2.17': + '@types/node@24.13.3': + dependencies: + undici-types: 7.18.2 + + '@types/react@19.2.18': dependencies: csstype: 3.2.3 - '@typescript-eslint/project-service@8.63.0(typescript@5.9.3)': + '@types/sax@1.2.7': dependencies: - '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@5.9.3) - '@typescript-eslint/types': 8.63.0 + '@types/node': 22.20.1 + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@typescript-eslint/project-service@8.65.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@5.9.3) + '@typescript-eslint/types': 8.65.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.63.0': + '@typescript-eslint/scope-manager@8.65.0': dependencies: - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/visitor-keys': 8.63.0 + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/visitor-keys': 8.65.0 - '@typescript-eslint/tsconfig-utils@8.63.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.65.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/types@8.63.0': {} + '@typescript-eslint/types@8.65.0': {} - '@typescript-eslint/typescript-estree@8.63.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.65.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.63.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@5.9.3) - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/visitor-keys': 8.63.0 + '@typescript-eslint/project-service': 8.65.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@5.9.3) + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/visitor-keys': 8.65.0 debug: 4.4.3 - minimatch: 10.2.5 + minimatch: 10.2.6 semver: 7.8.5 tinyglobby: 0.2.17 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -3147,46 +5103,48 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/utils@8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) - '@typescript-eslint/scope-manager': 8.63.0 - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) - eslint: 10.6.0(jiti@2.7.0) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.65.0 + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.9.3) + eslint: 10.8.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.63.0': + '@typescript-eslint/visitor-keys@8.65.0': dependencies: - '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/types': 8.65.0 eslint-visitor-keys: 5.0.1 - '@vitest/browser-playwright@4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10)': + '@ungap/structured-clone@1.3.3': {} + + '@vitest/browser-playwright@4.1.10(playwright@1.62.1)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10)': dependencies: - '@vitest/browser': 4.1.10(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10) - '@vitest/mocker': 4.1.10(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) - playwright: 1.61.1 - tinyrainbow: 3.1.0 - vitest: 4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + '@vitest/browser': 4.1.10(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10) + '@vitest/mocker': 4.1.10(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)) + playwright: 1.62.1 + tinyrainbow: 3.1.1 + vitest: 4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.10(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10)': + '@vitest/browser@4.1.10(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.10(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + '@vitest/mocker': 4.1.10(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)) '@vitest/utils': 4.1.10 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 - tinyrainbow: 3.1.0 - vitest: 4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) - ws: 8.21.0 + tinyrainbow: 3.1.1 + vitest: 4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)) + ws: 8.21.1 transitivePeerDependencies: - bufferutil - msw @@ -3208,15 +5166,15 @@ snapshots: '@vitest/spy': 4.1.10 '@vitest/utils': 4.1.10 chai: 6.2.2 - tinyrainbow: 3.1.0 + tinyrainbow: 3.1.1 - '@vitest/mocker@4.1.10(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))': + '@vitest/mocker@4.1.10(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.1.4(@types/node@22.20.1)(jiti@2.7.0) + vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0) '@vitest/pretty-format@3.2.4': dependencies: @@ -3224,7 +5182,7 @@ snapshots: '@vitest/pretty-format@4.1.10': dependencies: - tinyrainbow: 3.1.0 + tinyrainbow: 3.1.1 '@vitest/runner@4.1.10': dependencies: @@ -3254,15 +5212,15 @@ snapshots: dependencies: '@vitest/pretty-format': 4.1.10 convert-source-map: 2.0.0 - tinyrainbow: 3.1.0 + tinyrainbow: 3.1.1 '@webcontainer/env@1.1.1': {} - acorn-jsx@5.3.2(acorn@8.17.0): + acorn-jsx@5.3.2(acorn@8.18.0): dependencies: - acorn: 8.17.0 + acorn: 8.18.0 - acorn@8.17.0: {} + acorn@8.18.0: {} ajv@6.15.0: dependencies: @@ -3271,12 +5229,23 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + am-i-vibing@0.4.0: + dependencies: + process-ancestry: 0.1.0 + ansi-colors@4.1.3: {} ansi-regex@5.0.1: {} ansi-styles@5.2.0: {} + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.2 + + arg@5.0.2: {} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -3289,6 +5258,8 @@ snapshots: aria-query@5.3.2: {} + array-iterate@2.0.1: {} + array-union@2.1.0: {} assertion-error@2.0.1: {} @@ -3297,15 +5268,130 @@ snapshots: dependencies: tslib: 2.8.1 + astring@1.9.0: {} + + astro-expressive-code@0.44.1(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3)(jiti@2.7.0)): + dependencies: + astro: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3)(jiti@2.7.0) + rehype-expressive-code: 0.44.1 + url-extras: 0.1.0 + + astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3)(jiti@2.7.0): + dependencies: + '@astrojs/compiler-rs': 0.3.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) + '@astrojs/internal-helpers': 0.10.2 + '@astrojs/markdown-satteri': 0.3.5 + '@astrojs/telemetry': 3.3.3 + '@capsizecss/unpack': 4.0.1 + '@clack/prompts': 1.7.0 + '@oslojs/encoding': 1.1.0 + '@rollup/pluginutils': 5.4.0 + am-i-vibing: 0.4.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: 2.0.1 + devalue: 5.9.0 + diff: 8.0.4 + dset: 3.1.4 + es-module-lexer: 2.3.1 + esbuild: 0.28.1 + flattie: 1.1.1 + fontace: 0.4.1 + get-tsconfig: 5.0.0-beta.4 + github-slugger: 2.0.0 + html-escaper: 3.0.3 + http-cache-semantics: 4.2.0 + js-yaml: 4.3.1 + jsonc-parser: 3.3.1 + magic-string: 1.1.0 + magicast: 0.5.4 + mrmime: 2.0.1 + neotraverse: 1.0.1 + obug: 2.1.4 + p-limit: 7.3.1 + p-queue: 9.3.3 + package-manager-detector: 1.8.0 + piccolore: 0.1.3 + picomatch: 4.0.5 + semver: 7.8.5 + shiki: 4.4.1 + smol-toml: 1.7.1 + svgo: 4.0.2 + tinyclip: 0.1.15 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + ultrahtml: 1.7.0 + unifont: 0.7.4 + unstorage: 1.17.5 + vite: 8.2.0(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) + vitefu: 1.1.3(vite@8.2.0(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + xxhash-wasm: 1.1.0 + yargs-parser: 22.0.0 + zod: 4.4.3 + optionalDependencies: + '@astrojs/markdown-remark': 7.2.2 + sharp: 0.34.5 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@emnapi/core' + - '@emnapi/runtime' + - '@netlify/blobs' + - '@planetscale/database' + - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@vitejs/devtools' + - aws4fetch + - db0 + - idb-keyval + - ioredis + - jiti + - less + - rollup + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - uploadthing + - yaml + axe-core@4.12.1: {} + axobject-query@4.1.0: {} + + bail@2.0.2: {} + balanced-match@4.0.4: {} + bcp-47-match@2.0.3: {} + + bcp-47@2.1.1: + dependencies: + is-alphabetical: 2.0.1 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 - brace-expansion@5.0.7: + boolbase@1.0.0: {} + + brace-expansion@5.0.9: dependencies: balanced-match: 4.0.4 @@ -3317,6 +5403,8 @@ snapshots: dependencies: run-applescript: 7.1.0 + ccount@2.0.1: {} + chai@5.3.3: dependencies: assertion-error: 2.0.1 @@ -3327,30 +5415,94 @@ snapshots: chai@6.2.2: {} + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + chardet@2.2.0: {} check-error@2.1.3: {} + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + ci-info@4.4.0: {} + + clsx@2.1.1: {} + + collapse-white-space@2.1.0: {} + + comma-separated-tokens@2.0.3: {} + + commander@11.1.0: {} + + common-ancestor-path@2.0.0: {} + confbox@0.1.8: {} confbox@0.2.4: {} convert-source-map@2.0.0: {} + cookie-es@1.2.3: {} + + cookie@2.0.1: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + crossws@0.3.5: + dependencies: + uncrypto: 0.1.3 + + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-selector-parser@3.3.0: {} + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.1 + + css-what@6.2.2: {} + css.escape@1.5.1: {} + cssesc@3.0.0: {} + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + csstype@3.2.3: {} debug@4.4.3: dependencies: ms: 2.1.3 + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + deep-eql@5.0.2: {} deep-is@0.1.4: {} @@ -3364,64 +5516,118 @@ snapshots: define-lazy-prop@3.0.0: {} + defu@6.1.7: {} + dequal@2.0.3: {} + destr@2.0.5: {} + detect-indent@6.1.0: {} detect-libc@2.1.2: {} + devalue@5.9.0: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + diff@8.0.4: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 + direction@2.0.1: {} + dom-accessibility-api@0.5.16: {} dom-accessibility-api@0.6.3: {} + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dset@3.1.4: {} + enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 strip-ansi: 6.0.1 - es-module-lexer@2.3.0: {} + entities@4.5.0: {} - esbuild@0.25.12: + entities@6.0.1: {} + + es-module-lexer@2.3.1: {} + + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.18.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + + esbuild@0.28.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.12 - '@esbuild/android-arm': 0.25.12 - '@esbuild/android-arm64': 0.25.12 - '@esbuild/android-x64': 0.25.12 - '@esbuild/darwin-arm64': 0.25.12 - '@esbuild/darwin-x64': 0.25.12 - '@esbuild/freebsd-arm64': 0.25.12 - '@esbuild/freebsd-x64': 0.25.12 - '@esbuild/linux-arm': 0.25.12 - '@esbuild/linux-arm64': 0.25.12 - '@esbuild/linux-ia32': 0.25.12 - '@esbuild/linux-loong64': 0.25.12 - '@esbuild/linux-mips64el': 0.25.12 - '@esbuild/linux-ppc64': 0.25.12 - '@esbuild/linux-riscv64': 0.25.12 - '@esbuild/linux-s390x': 0.25.12 - '@esbuild/linux-x64': 0.25.12 - '@esbuild/netbsd-arm64': 0.25.12 - '@esbuild/netbsd-x64': 0.25.12 - '@esbuild/openbsd-arm64': 0.25.12 - '@esbuild/openbsd-x64': 0.25.12 - '@esbuild/openharmony-arm64': 0.25.12 - '@esbuild/sunos-x64': 0.25.12 - '@esbuild/win32-arm64': 0.25.12 - '@esbuild/win32-ia32': 0.25.12 - '@esbuild/win32-x64': 0.25.12 + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 escape-string-regexp@4.0.0: {} - eslint-plugin-storybook@10.5.0(eslint@10.6.0(jiti@2.7.0))(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7))(typescript@5.9.3): + escape-string-regexp@5.0.0: {} + + eslint-plugin-storybook@10.5.0(eslint@10.8.0(jiti@2.7.0))(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(typescript@5.9.3): dependencies: - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) - eslint: 10.6.0(jiti@2.7.0) - storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7) + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/utils': 8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.8.0(jiti@2.7.0) + storybook: 10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8) transitivePeerDependencies: - supports-color - typescript @@ -3437,12 +5643,12 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.6.0(jiti@2.7.0): + eslint@10.8.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 - '@eslint/config-helpers': 0.6.0 + '@eslint/config-helpers': 0.7.0 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.2 '@humanfs/node': 0.16.8 @@ -3466,7 +5672,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - minimatch: 10.2.5 + minimatch: 10.2.6 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: @@ -3476,8 +5682,8 @@ snapshots: espree@11.2.0: dependencies: - acorn: 8.17.0 - acorn-jsx: 5.3.2(acorn@8.17.0) + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) eslint-visitor-keys: 5.0.1 esprima@4.0.1: {} @@ -3492,15 +5698,57 @@ snapshots: estraverse@5.3.0: {} + estree-util-attach-comments@3.0.0: + dependencies: + '@types/estree': 1.0.9 + + estree-util-build-jsx@3.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + + estree-util-is-identifier-name@3.0.0: {} + + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + + estree-util-to-js@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 + + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + + estree-walker@2.0.2: {} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 esutils@2.0.3: {} + eventemitter3@5.0.4: {} + expect-type@1.4.0: {} - exsolve@1.1.0: {} + expressive-code@0.44.1: + dependencies: + '@expressive-code/core': 0.44.1 + '@expressive-code/plugin-frames': 0.44.1 + '@expressive-code/plugin-shiki': 0.44.1 + '@expressive-code/plugin-text-markers': 0.44.1 + + exsolve@1.1.1: {} + + extend@3.0.2: {} extendable-error@0.1.7: {} @@ -3518,6 +5766,16 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + + fast-wrap-ansi@0.2.2: + dependencies: + fast-string-width: 3.0.2 + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -3546,10 +5804,20 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.4.2 + flatted: 3.4.4 keyv: 4.5.4 - flatted@3.4.2: {} + flatted@3.4.4: {} + + flattie@1.1.1: {} + + fontace@0.4.1: + dependencies: + fontkitten: 1.0.3 + + fontkitten@1.0.3: + dependencies: + tiny-inflate: 1.0.3 fs-extra@7.0.1: dependencies: @@ -3569,6 +5837,12 @@ snapshots: fsevents@2.3.3: optional: true + get-tsconfig@5.0.0-beta.4: + dependencies: + resolve-pkg-maps: 1.0.0 + + github-slugger@2.0.0: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -3588,8 +5862,221 @@ snapshots: graceful-fs@4.2.11: {} + h3@1.15.11: + dependencies: + cookie-es: 1.2.3 + crossws: 0.3.5 + defu: 6.1.7 + destr: 2.0.5 + iron-webcrypto: 1.2.1 + node-mock-http: 1.0.5 + radix3: 1.1.2 + ufo: 1.6.4 + uncrypto: 0.1.3 + + hast-util-embedded@3.0.0: + dependencies: + '@types/hast': 3.0.5 + hast-util-is-element: 3.0.0 + + hast-util-format@1.1.0: + dependencies: + '@types/hast': 3.0.5 + hast-util-embedded: 3.0.0 + hast-util-minify-whitespace: 1.0.1 + hast-util-phrasing: 3.0.1 + hast-util-whitespace: 3.0.0 + html-whitespace-sensitive-tag-names: 3.0.1 + unist-util-visit-parents: 6.0.2 + + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.5 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 + vfile: 6.0.3 + vfile-message: 4.0.3 + + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.2.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-has-property@3.0.0: + dependencies: + '@types/hast': 3.0.5 + + hast-util-is-body-ok-link@3.0.1: + dependencies: + '@types/hast': 3.0.5 + + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.5 + + hast-util-minify-whitespace@1.0.1: + dependencies: + '@types/hast': 3.0.5 + hast-util-embedded: 3.0.0 + hast-util-is-element: 3.0.0 + hast-util-whitespace: 3.0.0 + unist-util-is: 6.0.1 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.5 + + hast-util-phrasing@3.0.1: + dependencies: + '@types/hast': 3.0.5 + hast-util-embedded: 3.0.0 + hast-util-has-property: 3.0.0 + hast-util-is-body-ok-link: 3.0.1 + hast-util-is-element: 3.0.0 + + hast-util-raw@9.1.0: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.3.3 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.1 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-select@6.0.4: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + bcp-47-match: 2.0.3 + comma-separated-tokens: 2.0.3 + css-selector-parser: 3.3.0 + devlop: 1.1.0 + direction: 2.0.1 + hast-util-has-property: 3.0.0 + hast-util-to-string: 3.0.1 + hast-util-whitespace: 3.0.0 + nth-check: 2.1.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + hast-util-to-estree@3.1.3: + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + devlop: 1.1.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.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + hast-util-to-parse5@8.0.1: + dependencies: + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-string@3.0.1: + dependencies: + '@types/hast': 3.0.5 + + hast-util-to-text@4.0.2: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.5 + + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + + html-escaper@3.0.3: {} + + html-void-elements@3.0.0: {} + + html-whitespace-sensitive-tag-names@3.0.1: {} + + http-cache-semantics@4.2.0: {} + human-id@4.2.0: {} + i18next@26.3.6(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + iconv-lite@0.7.3: dependencies: safer-buffer: 2.1.2 @@ -3600,20 +6087,39 @@ snapshots: indent-string@4.0.0: {} + inline-style-parser@0.2.7: {} + + iron-webcrypto@1.2.1: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-decimal@2.0.1: {} + is-docker@3.0.0: {} + is-docker@4.0.0: {} + is-extglob@2.1.1: {} is-glob@4.0.3: dependencies: is-extglob: 2.1.1 + is-hexadecimal@2.0.1: {} + is-inside-container@1.0.0: dependencies: is-docker: 3.0.0 is-number@7.0.0: {} + is-plain-obj@4.1.0: {} + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 @@ -3630,12 +6136,12 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@3.15.0: + js-yaml@3.15.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 - js-yaml@4.3.0: + js-yaml@4.3.1: dependencies: argparse: 2.0.1 @@ -3655,59 +6161,61 @@ snapshots: dependencies: json-buffer: 3.0.1 + klona@2.0.6: {} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - lightningcss-android-arm64@1.32.0: + lightningcss-android-arm64@1.33.0: optional: true - lightningcss-darwin-arm64@1.32.0: + lightningcss-darwin-arm64@1.33.0: optional: true - lightningcss-darwin-x64@1.32.0: + lightningcss-darwin-x64@1.33.0: optional: true - lightningcss-freebsd-x64@1.32.0: + lightningcss-freebsd-x64@1.33.0: optional: true - lightningcss-linux-arm-gnueabihf@1.32.0: + lightningcss-linux-arm-gnueabihf@1.33.0: optional: true - lightningcss-linux-arm64-gnu@1.32.0: + lightningcss-linux-arm64-gnu@1.33.0: optional: true - lightningcss-linux-arm64-musl@1.32.0: + lightningcss-linux-arm64-musl@1.33.0: optional: true - lightningcss-linux-x64-gnu@1.32.0: + lightningcss-linux-x64-gnu@1.33.0: optional: true - lightningcss-linux-x64-musl@1.32.0: + lightningcss-linux-x64-musl@1.33.0: optional: true - lightningcss-win32-arm64-msvc@1.32.0: + lightningcss-win32-arm64-msvc@1.33.0: optional: true - lightningcss-win32-x64-msvc@1.32.0: + lightningcss-win32-x64-msvc@1.33.0: optional: true - lightningcss@1.32.0: + lightningcss@1.33.0: dependencies: detect-libc: 2.1.2 optionalDependencies: - lightningcss-android-arm64: 1.32.0 - lightningcss-darwin-arm64: 1.32.0 - lightningcss-darwin-x64: 1.32.0 - lightningcss-freebsd-x64: 1.32.0 - lightningcss-linux-arm-gnueabihf: 1.32.0 - lightningcss-linux-arm64-gnu: 1.32.0 - lightningcss-linux-arm64-musl: 1.32.0 - lightningcss-linux-x64-gnu: 1.32.0 - lightningcss-linux-x64-musl: 1.32.0 - lightningcss-win32-arm64-msvc: 1.32.0 - lightningcss-win32-x64-msvc: 1.32.0 + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 local-pkg@1.2.1: dependencies: @@ -3725,16 +6233,495 @@ snapshots: lodash.startcase@4.4.0: {} + longest-streak@3.1.0: {} + loupe@3.2.1: {} + lru-cache@11.5.2: {} + lz-string@1.5.0: {} magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@1.1.0: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + magicast@0.5.4: + dependencies: + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 + source-map-js: 1.2.1 + + markdown-extensions@2.0.0: {} + + markdown-table@3.0.4: {} + + mdast-util-definitions@6.0.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + + mdast-util-directive@3.1.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-visit-parents: 6.0.2 + transitivePeerDependencies: + - supports-color + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.3: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.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.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.3 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + mdn-data@2.0.28: {} + + mdn-data@2.27.1: {} + merge2@1.4.1: {} + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-directive@4.0.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + parse-entities: 4.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-events-to-acorn@2.0.3: + dependencies: + '@types/estree': 1.0.9 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -3742,13 +6729,13 @@ snapshots: min-indent@1.0.1: {} - minimatch@10.2.5: + minimatch@10.2.6: dependencies: - brace-expansion: 5.0.7 + brace-expansion: 5.0.9 mlly@1.8.2: dependencies: - acorn: 8.17.0 + acorn: 8.18.0 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.6.4 @@ -3759,11 +6746,43 @@ snapshots: ms@2.1.3: {} - nanoid@3.3.15: {} + nanoid@3.3.16: {} natural-compare@1.4.0: {} - obug@2.1.3: {} + neotraverse@1.0.1: {} + + nlcst-to-string@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + + node-fetch-native@1.6.7: {} + + node-mock-http@1.0.5: {} + + normalize-path@3.0.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + obug@2.1.4: {} + + ofetch@1.5.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.4 + + ohash@2.0.11: {} + + oniguruma-parser@0.12.2: {} + + oniguruma-to-es@4.3.6: + dependencies: + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 open@10.2.0: dependencies: @@ -3808,27 +6827,27 @@ snapshots: '@oxc-parser/binding-win32-ia32-msvc': 0.127.0 '@oxc-parser/binding-win32-x64-msvc': 0.127.0 - oxc-resolver@11.23.0: + oxc-resolver@11.24.2: optionalDependencies: - '@oxc-resolver/binding-android-arm-eabi': 11.23.0 - '@oxc-resolver/binding-android-arm64': 11.23.0 - '@oxc-resolver/binding-darwin-arm64': 11.23.0 - '@oxc-resolver/binding-darwin-x64': 11.23.0 - '@oxc-resolver/binding-freebsd-x64': 11.23.0 - '@oxc-resolver/binding-linux-arm-gnueabihf': 11.23.0 - '@oxc-resolver/binding-linux-arm-musleabihf': 11.23.0 - '@oxc-resolver/binding-linux-arm64-gnu': 11.23.0 - '@oxc-resolver/binding-linux-arm64-musl': 11.23.0 - '@oxc-resolver/binding-linux-ppc64-gnu': 11.23.0 - '@oxc-resolver/binding-linux-riscv64-gnu': 11.23.0 - '@oxc-resolver/binding-linux-riscv64-musl': 11.23.0 - '@oxc-resolver/binding-linux-s390x-gnu': 11.23.0 - '@oxc-resolver/binding-linux-x64-gnu': 11.23.0 - '@oxc-resolver/binding-linux-x64-musl': 11.23.0 - '@oxc-resolver/binding-openharmony-arm64': 11.23.0 - '@oxc-resolver/binding-wasm32-wasi': 11.23.0 - '@oxc-resolver/binding-win32-arm64-msvc': 11.23.0 - '@oxc-resolver/binding-win32-x64-msvc': 11.23.0 + '@oxc-resolver/binding-android-arm-eabi': 11.24.2 + '@oxc-resolver/binding-android-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-x64': 11.24.2 + '@oxc-resolver/binding-freebsd-x64': 11.24.2 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-arm64-musl': 11.24.2 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-musl': 11.24.2 + '@oxc-resolver/binding-linux-s390x-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-musl': 11.24.2 + '@oxc-resolver/binding-openharmony-arm64': 11.24.2 + '@oxc-resolver/binding-wasm32-wasi': 11.24.2 + '@oxc-resolver/binding-win32-arm64-msvc': 11.24.2 + '@oxc-resolver/binding-win32-x64-msvc': 11.24.2 p-filter@2.1.0: dependencies: @@ -3842,6 +6861,10 @@ snapshots: dependencies: yocto-queue: 0.1.0 + p-limit@7.3.1: + dependencies: + yocto-queue: 1.2.2 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -3852,12 +6875,54 @@ snapshots: p-map@2.1.0: {} + p-queue@9.3.3: + dependencies: + eventemitter3: 5.0.4 + p-timeout: 7.0.1 + + p-timeout@7.0.1: {} + p-try@2.2.0: {} package-manager-detector@0.2.11: dependencies: quansync: 0.2.11 + package-manager-detector@1.8.0: {} + + pagefind@1.5.2: + optionalDependencies: + '@pagefind/darwin-arm64': 1.5.2 + '@pagefind/darwin-x64': 1.5.2 + '@pagefind/freebsd-x64': 1.5.2 + '@pagefind/linux-arm64': 1.5.2 + '@pagefind/linux-x64': 1.5.2 + '@pagefind/windows-arm64': 1.5.2 + '@pagefind/windows-x64': 1.5.2 + + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.3.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + parse-latin@7.0.0: + dependencies: + '@types/nlcst': 2.0.3 + '@types/unist': 3.0.3 + nlcst-to-string: 4.0.0 + unist-util-modify-children: 4.0.0 + unist-util-visit-children: 3.0.0 + vfile: 6.0.3 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + path-exists@4.0.0: {} path-key@3.1.1: {} @@ -3868,6 +6933,8 @@ snapshots: pathval@2.0.1: {} + piccolore@0.1.3: {} + picocolors@1.1.1: {} picomatch@2.3.2: {} @@ -3885,22 +6952,32 @@ snapshots: pkg-types@2.3.1: dependencies: confbox: 0.2.4 - exsolve: 1.1.0 + exsolve: 1.1.1 pathe: 2.0.3 - playwright-core@1.61.1: {} + playwright-core@1.62.1: {} - playwright@1.61.1: + playwright@1.62.1: dependencies: - playwright-core: 1.61.1 + playwright-core: 1.62.1 optionalDependencies: fsevents: 2.3.2 pngjs@7.0.0: {} - postcss@8.5.16: + postcss-nested@6.2.0(postcss@8.5.25): dependencies: - nanoid: 3.3.15 + postcss: 8.5.25 + postcss-selector-parser: 6.1.4 + + postcss-selector-parser@6.1.4: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss@8.5.25: + dependencies: + nanoid: 3.3.16 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -3916,7 +6993,7 @@ snapshots: prettier@2.8.8: {} - prettier@3.9.4: {} + prettier@3.9.6: {} pretty-format@27.5.1: dependencies: @@ -3924,33 +7001,43 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 + prismjs@1.30.0: {} + + process-ancestry@0.1.0: {} + + property-information@7.2.0: {} + punycode@2.3.1: {} quansync@0.2.11: {} queue-microtask@1.2.3: {} + radix3@1.1.2: {} + react-docgen-typescript@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 - react-dom@19.2.7(react@19.2.7): + react-dom@19.2.8(react@19.2.8): dependencies: - react: 19.2.7 + react: 19.2.8 scheduler: 0.27.0 react-is@17.0.2: {} - react@19.2.7: {} + react@19.2.8: {} read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 - js-yaml: 3.15.0 + js-yaml: 3.15.1 pify: 4.0.1 strip-bom: 3.0.0 - recast@0.23.12: + readdirp@5.0.0: {} + + recast@0.23.19: dependencies: ast-types: 0.16.1 esprima: 4.0.1 @@ -3958,35 +7045,200 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 + recma-build-jsx@1.0.0: + dependencies: + '@types/estree': 1.0.9 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + + recma-jsx@1.0.1(acorn@8.18.0): + dependencies: + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.9 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.9 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + redent@3.0.0: dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + + rehype-expressive-code@0.44.1: + dependencies: + expressive-code: 0.44.1 + + rehype-format@5.0.1: + dependencies: + '@types/hast': 3.0.5 + hast-util-format: 1.1.0 + + rehype-parse@9.0.1: + dependencies: + '@types/hast': 3.0.5 + hast-util-from-html: 2.0.3 + unified: 11.0.5 + + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.5 + hast-util-raw: 9.1.0 + vfile: 6.0.3 + + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.5 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color + + rehype-stringify@10.0.1: + dependencies: + '@types/hast': 3.0.5 + hast-util-to-html: 9.0.5 + unified: 11.0.5 + + rehype@13.0.2: + dependencies: + '@types/hast': 3.0.5 + rehype-parse: 9.0.1 + rehype-stringify: 10.0.1 + unified: 11.0.5 + + remark-directive@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-directive: 3.1.0 + micromark-extension-directive: 4.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-mdx@3.1.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + + remark-smartypants@3.0.3: + dependencies: + retext: 9.0.0 + retext-smartypants: 6.2.0 + unified: 11.0.5 + unist-util-visit: 5.1.0 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} + + retext-latin@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + parse-latin: 7.0.0 + unified: 11.0.5 + + retext-smartypants@6.2.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unist-util-visit: 5.1.0 + + retext-stringify@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unified: 11.0.5 + + retext@9.0.0: + dependencies: + '@types/nlcst': 2.0.3 + retext-latin: 4.0.0 + retext-stringify: 4.0.0 + unified: 11.0.5 + reusify@1.1.0: {} - rolldown@1.1.5: + rolldown@1.2.1: dependencies: - '@oxc-project/types': 0.139.0 + '@oxc-project/types': 0.142.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.1.5 - '@rolldown/binding-darwin-arm64': 1.1.5 - '@rolldown/binding-darwin-x64': 1.1.5 - '@rolldown/binding-freebsd-x64': 1.1.5 - '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 - '@rolldown/binding-linux-arm64-gnu': 1.1.5 - '@rolldown/binding-linux-arm64-musl': 1.1.5 - '@rolldown/binding-linux-ppc64-gnu': 1.1.5 - '@rolldown/binding-linux-s390x-gnu': 1.1.5 - '@rolldown/binding-linux-x64-gnu': 1.1.5 - '@rolldown/binding-linux-x64-musl': 1.1.5 - '@rolldown/binding-openharmony-arm64': 1.1.5 - '@rolldown/binding-wasm32-wasi': 1.1.5 - '@rolldown/binding-win32-arm64-msvc': 1.1.5 - '@rolldown/binding-win32-x64-msvc': 1.1.5 + '@rolldown/binding-android-arm64': 1.2.1 + '@rolldown/binding-darwin-arm64': 1.2.1 + '@rolldown/binding-darwin-x64': 1.2.1 + '@rolldown/binding-freebsd-x64': 1.2.1 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.1 + '@rolldown/binding-linux-arm64-gnu': 1.2.1 + '@rolldown/binding-linux-arm64-musl': 1.2.1 + '@rolldown/binding-linux-ppc64-gnu': 1.2.1 + '@rolldown/binding-linux-s390x-gnu': 1.2.1 + '@rolldown/binding-linux-x64-gnu': 1.2.1 + '@rolldown/binding-linux-x64-musl': 1.2.1 + '@rolldown/binding-openharmony-arm64': 1.2.1 + '@rolldown/binding-wasm32-wasi': 1.2.1 + '@rolldown/binding-win32-arm64-msvc': 1.2.1 + '@rolldown/binding-win32-x64-msvc': 1.2.1 run-applescript@7.1.0: {} @@ -3996,16 +7248,77 @@ snapshots: safer-buffer@2.1.2: {} + satteri@0.9.5: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + optionalDependencies: + '@bruits/satteri-darwin-arm64': 0.9.5 + '@bruits/satteri-darwin-x64': 0.9.5 + '@bruits/satteri-linux-arm64-gnu': 0.9.5 + '@bruits/satteri-linux-arm64-musl': 0.9.5 + '@bruits/satteri-linux-x64-gnu': 0.9.5 + '@bruits/satteri-linux-x64-musl': 0.9.5 + '@bruits/satteri-wasm32-wasi': 0.9.5 + '@bruits/satteri-win32-arm64-msvc': 0.9.5 + '@bruits/satteri-win32-x64-msvc': 0.9.5 + + sax@1.6.1: {} + scheduler@0.27.0: {} semver@7.8.5: {} + sharp@0.34.5: + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 + 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 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 shebang-regex@3.0.0: {} + shiki@4.4.1: + dependencies: + '@shikijs/core': 4.4.1 + '@shikijs/engine-javascript': 4.4.1 + '@shikijs/engine-oniguruma': 4.4.1 + '@shikijs/langs': 4.4.1 + '@shikijs/themes': 4.4.1 + '@shikijs/types': 4.4.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + siginfo@2.0.0: {} signal-exit@4.1.0: {} @@ -4016,12 +7329,27 @@ snapshots: mrmime: 2.0.1 totalist: 3.0.1 + sisteransi@1.0.5: {} + + sitemap@9.0.1: + dependencies: + '@types/node': 24.13.3 + '@types/sax': 1.2.7 + arg: 5.0.2 + sax: 1.6.1 + slash@3.0.0: {} + smol-toml@1.7.1: {} + source-map-js@1.2.1: {} source-map@0.6.1: {} + source-map@0.7.6: {} + + space-separated-tokens@2.0.2: {} + spawndamnit@3.0.1: dependencies: cross-spawn: 7.0.6 @@ -4033,33 +7361,40 @@ snapshots: std-env@4.2.0: {} - storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.4)(react@19.2.7): + storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8): dependencies: '@storybook/global': 5.0.0 - '@storybook/icons': 2.1.0(react@19.2.7) + '@storybook/icons': 2.1.0(react@19.2.8) '@testing-library/dom': 10.4.1 '@testing-library/jest-dom': 6.9.1 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) '@vitest/expect': 3.2.4 '@vitest/spy': 3.2.4 '@webcontainer/env': 1.1.1 - esbuild: 0.25.12 + esbuild: 0.28.1 jsonc-parser: 3.3.1 open: 10.2.0 oxc-parser: 0.127.0 - oxc-resolver: 11.23.0 - recast: 0.23.12 + oxc-resolver: 11.24.2 + recast: 0.23.19 semver: 7.8.5 - use-sync-external-store: 1.6.0(react@19.2.7) - ws: 8.21.0 + use-sync-external-store: 1.6.0(react@19.2.8) + ws: 8.21.1 optionalDependencies: - '@types/react': 19.2.17 - prettier: 3.9.4 + '@types/react': 19.2.18 + prettier: 3.9.6 transitivePeerDependencies: - bufferutil - react - utf-8-validate + stream-replace-string@2.0.0: {} + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -4070,12 +7405,34 @@ snapshots: dependencies: min-indent: 1.0.1 + style-to-js@1.1.21: + dependencies: + style-to-object: 1.0.14 + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + + svgo@4.0.2: + dependencies: + commander: 11.1.0 + css-select: 5.2.2 + css-tree: 3.2.1 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.6.1 + term-size@2.2.1: {} + tiny-inflate@1.0.3: {} + tiny-invariant@1.3.3: {} tinybench@2.9.0: {} + tinyclip@0.1.15: {} + tinyexec@1.2.4: {} tinyglobby@0.2.17: @@ -4085,7 +7442,7 @@ snapshots: tinyrainbow@2.0.0: {} - tinyrainbow@3.1.0: {} + tinyrainbow@3.1.1: {} tinyspy@4.0.4: {} @@ -4095,6 +7452,10 @@ snapshots: totalist@3.0.1: {} + trim-lines@3.0.1: {} + + trough@2.2.0: {} + ts-api-utils@2.5.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -4111,41 +7472,157 @@ snapshots: ufo@1.6.4: {} + ultrahtml@1.7.0: {} + + uncrypto@0.1.3: {} + undici-types@6.21.0: {} + undici-types@7.18.2: {} + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unifont@0.7.4: + dependencies: + css-tree: 3.2.1 + ofetch: 1.5.1 + ohash: 2.0.11 + + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-modify-children@4.0.0: + dependencies: + '@types/unist': 3.0.3 + array-iterate: 2.0.1 + + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-children@3.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + universalify@0.1.2: {} unplugin@2.3.11: dependencies: '@jridgewell/remapping': 2.3.5 - acorn: 8.17.0 + acorn: 8.18.0 picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 + unstorage@1.17.5: + dependencies: + anymatch: 3.1.3 + chokidar: 5.0.0 + destr: 2.0.5 + h3: 1.15.11 + lru-cache: 11.5.2 + node-fetch-native: 1.6.7 + ofetch: 1.5.1 + ufo: 1.6.4 + uri-js@4.4.1: dependencies: punycode: 2.3.1 - use-sync-external-store@1.6.0(react@19.2.7): - dependencies: - react: 19.2.7 + url-extras@0.1.0: {} - vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0): + use-sync-external-store@1.6.0(react@19.2.8): dependencies: - lightningcss: 1.32.0 + react: 19.2.8 + + util-deprecate@1.0.2: {} + + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0): + dependencies: + lightningcss: 1.33.0 picomatch: 4.0.5 - postcss: 8.5.16 - rolldown: 1.1.5 + postcss: 8.5.25 + rolldown: 1.2.1 tinyglobby: 0.2.17 optionalDependencies: '@types/node': 22.20.1 + esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.7.0 - vitest-environment-stencil@1.13.3(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.61.1)(vitest@4.1.10): + vite@8.2.0(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0): + dependencies: + lightningcss: 1.33.0 + picomatch: 4.0.5 + postcss: 8.5.25 + rolldown: 1.2.1 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 24.13.3 + esbuild: 0.28.1 + fsevents: 2.3.3 + jiti: 2.7.0 + + vitefu@1.1.3(vite@8.2.0(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)): + optionalDependencies: + vite: 8.2.0(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) + + vitest-environment-stencil@1.14.0(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.62.1)(vitest@4.1.10): dependencies: '@stencil/core': 4.43.5 - '@stencil/vitest': 1.13.3(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.61.1)(vitest@4.1.10) + '@stencil/vitest': 1.14.0(@stencil/core@4.43.5)(@vitest/browser-playwright@4.1.10)(playwright@1.62.1)(vitest@4.1.10) transitivePeerDependencies: - '@playwright/test' - '@stencil/mock-doc' @@ -4158,34 +7635,36 @@ snapshots: - playwright - vitest - vitest@4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)): + vitest@4.1.10(@types/node@22.20.1)(@vitest/browser-playwright@4.1.10)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)): dependencies: '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0)) + '@vitest/mocker': 4.1.10(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)) '@vitest/pretty-format': 4.1.10 '@vitest/runner': 4.1.10 '@vitest/snapshot': 4.1.10 '@vitest/spy': 4.1.10 '@vitest/utils': 4.1.10 - es-module-lexer: 2.3.0 + es-module-lexer: 2.3.1 expect-type: 1.4.0 magic-string: 0.30.21 - obug: 2.1.3 + obug: 2.1.4 pathe: 2.0.3 picomatch: 4.0.5 std-env: 4.2.0 tinybench: 2.9.0 tinyexec: 1.2.4 tinyglobby: 0.2.17 - tinyrainbow: 3.1.0 - vite: 8.1.4(@types/node@22.20.1)(jiti@2.7.0) + tinyrainbow: 3.1.1 + vite: 8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.20.1 - '@vitest/browser-playwright': 4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@22.20.1)(jiti@2.7.0))(vitest@4.1.10) + '@vitest/browser-playwright': 4.1.10(playwright@1.62.1)(vite@8.2.0(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10) transitivePeerDependencies: - msw + web-namespaces@2.0.1: {} + webpack-virtual-modules@0.6.2: {} which@2.0.2: @@ -4199,10 +7678,20 @@ snapshots: word-wrap@1.2.5: {} - ws@8.21.0: {} + ws@8.21.1: {} wsl-utils@0.1.0: dependencies: is-wsl: 3.1.1 + xxhash-wasm@1.1.0: {} + + yargs-parser@22.0.0: {} + yocto-queue@0.1.0: {} + + yocto-queue@1.2.2: {} + + zod@4.4.3: {} + + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 2f99386..3acde3b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,8 +1,10 @@ packages: - "packages/*" + - "docs/" allowBuilds: - esbuild: false + esbuild: true + sharp: true onlyBuiltDependencies: - playwright -- 2.54.0 From 575f9202a8a33376aed0637f44fd5349574d0398 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 00:01:04 +0200 Subject: [PATCH 64/88] docs(readme): add documentation and storybook start instructions The README was missing instructions for running the documentation site and Storybook locally, so contributors had to guess or dig through package.json scripts to find them. Documents the existing `pnpm run docs` command and the current Storybook workflow, including the known limitation that it must be run from within `packages/luna-charts` until a root-level filter script is set up. --- README.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 08ba42d..a46faf5 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ LUNA Charts is a reusable, developer-friendly charting library designed to make Please be aware of our repository structure: -* **Official Repository:** [git.byting-pandas.ninja/Ninosaurier/LUNA-Charts](https://byting-pandas.ninja) +* **Official Repository:** [git.byting-pandas.ninja/Ninosaurier/LUNA-Charts](https://git.byting-pandas.ninja/Ninosaurier/LUNA-Charts) **Important:** All development, including issue tracking and contribution management, takes place exclusively on our self-hosted server. Issues and pull requests cannot be created or processed on this GitHub mirror. Please visit the original link above to report bugs or request features. @@ -79,6 +79,18 @@ pnpm install | `pnpm test:component` | Run component/browser tests inside the containerized Playwright environment | | `pnpm test` | Run the full test suite (unit + component) | | `pnpm changeset` | Record a changeset for your change (required for any user-facing change) | +| `pnpm run docs` | Start the documentation site locally (astroJS) | + +### Storybook + +Storybook currently needs to be started from within the library package directly: + +```bash +cd packages/luna-charts +pnpm run storybook +``` + +> **Note:** Running Storybook from the repository root isn't set up yet. This is a known gap — contributions to add a root-level `pnpm --filter` script are welcome. Component and browser tests run inside Docker (`docker-compose.test.yaml`) to guarantee a reproducible browser environment across all contributors and CI — you don't need Playwright browsers installed locally. @@ -90,4 +102,4 @@ Component and browser tests run inside Docker (`docker-compose.test.yaml`) to gu ## License -LUNA Charts is licensed under the [GNU Lesser General Public License v3.0 (LGPL-3.0)](./LICENSE). +LUNA Charts is licensed under the [GNU Lesser General Public License v3.0 (LGPL-3.0)](./LICENSE). \ No newline at end of file -- 2.54.0 From a09d83fb53b5a97d1c97c22c0b5f1685388d0324 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 00:45:30 +0200 Subject: [PATCH 65/88] fix(deps): pin playwright to 1.62.1 and sync docker test image Playwright was previously pinned with a caret range (^1.61.1), which allowed pnpm to silently resolve a newer minor version after the lockfile was regenerated. This caused a version mismatch with the Docker test image, which still referenced 1.61.1. - packages/luna-charts/package.json: pin playwright to 1.62.1 exactly - Dockerfile.test: bump base image to v1.62.1-noble to match --- Dockerfile.test | 2 +- packages/luna-charts/package.json | 2 +- pnpm-lock.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile.test b/Dockerfile.test index 83f44b4..4de7f2f 100644 --- a/Dockerfile.test +++ b/Dockerfile.test @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/playwright:v1.61.1-noble +FROM mcr.microsoft.com/playwright:v1.62.1-noble RUN corepack enable && corepack prepare pnpm@10 --activate diff --git a/packages/luna-charts/package.json b/packages/luna-charts/package.json index 2e72e73..f67bfa2 100644 --- a/packages/luna-charts/package.json +++ b/packages/luna-charts/package.json @@ -53,7 +53,7 @@ "@vitest/browser-playwright": "^4.0.0", "axe-core": "^4.12.1", "eslint-plugin-storybook": "10.5.0", - "playwright": "^1.61.1", + "playwright": "^1.62.1", "storybook": "^10.5.0", "vitest": "^4.0.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aa69d73..0fc95ca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -265,7 +265,7 @@ importers: specifier: 10.5.0 version: 10.5.0(eslint@10.8.0(jiti@2.7.0))(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(typescript@5.9.3) playwright: - specifier: ^1.61.1 + specifier: ^1.62.1 version: 1.62.1 storybook: specifier: ^10.5.0 -- 2.54.0 From 2b742e95f1b5d41dc9146bb461a997fb799a203f Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 00:52:27 +0200 Subject: [PATCH 66/88] fix(lint): resolve all outstanding eslint errors --- README.md | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index a46faf5..bc04e8c 100644 --- a/README.md +++ b/README.md @@ -16,14 +16,14 @@ Please be aware of our repository structure: Most charting libraries treat accessibility as an add-on. LUNA Charts builds it in from the start: -- **Accessible by default** — components are designed and tested against WCAG guidance from day one, not patched in afterward -- **Framework-agnostic** — built as standard Web Components (Stencil), usable in React, Vue, Angular, Svelte, or plain HTML -- **SVG-based rendering** — inspectable, stylable, and screen-reader-friendly output instead of an opaque canvas +* **Accessible by default** — components are designed and tested against WCAG guidance from day one, not patched in afterward +* **Framework-agnostic** — built as standard Web Components (Stencil), usable in React, Vue, Angular, Svelte, or plain HTML +* **SVG-based rendering** — inspectable, stylable, and screen-reader-friendly output instead of an opaque canvas ## Tech Stack | Area | Technology | -|---|---| +| --- | --- | | Component framework | [Stencil](https://stenciljs.com) (compiles to standard Web Components) | | Language | TypeScript | | Package manager | pnpm (monorepo workspaces) | @@ -57,9 +57,9 @@ luna-charts/ ### Prerequisites -- Node.js `>= 22.0.0` -- pnpm `11.11.0` (see `devEngines` in `package.json`; pnpm will be downloaded automatically via Corepack if missing) -- Docker (required for running component/browser tests locally, see below) +* Node.js `>= 22.0.0` +* pnpm `11.11.0` (see `devEngines` in `package.json`; pnpm will be downloaded automatically via Corepack if missing) +* Docker (required for running component/browser tests locally, see below) ### Installation @@ -72,9 +72,7 @@ pnpm install ### Common commands | Command | Description | -|---|---| -| `pnpm lint` | Run ESLint across the repository | -| `pnpm format` | Format all files with Prettier | +| --- | --- | | `pnpm test:unit` | Run unit tests for the `luna-charts` package | | `pnpm test:component` | Run component/browser tests inside the containerized Playwright environment | | `pnpm test` | Run the full test suite (unit + component) | @@ -96,9 +94,9 @@ Component and browser tests run inside Docker (`docker-compose.test.yaml`) to gu ## Documentation -- **Architecture documentation**: see `docs/` — includes the full Architecture Development Method (ADM) documentation (vision, business architecture, technology architecture, governance, migration planning) and all Architecture Decision Records (ADRs) -- **Contributing**: see [CONTRIBUTING.md](./CONTRIBUTING.md) -- **Code of Conduct**: see [.github/CODE_OF_CONDUCT.md](./.github/CODE_OF_CONDUCT.md) +* **Architecture documentation**: see `docs/` — includes the full Architecture Development Method (ADM) documentation (vision, business architecture, technology architecture, governance, migration planning) and all Architecture Decision Records (ADRs) +* **Contributing**: see [CONTRIBUTING.md](./CONTRIBUTING.md) +* **Code of Conduct**: see [.github/CODE_OF_CONDUCT.md](./.github/CODE_OF_CONDUCT.md) ## License -- 2.54.0 From c1a1e712405d3ff7421d6cc9a178a929e9f8823f Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 01:00:25 +0200 Subject: [PATCH 67/88] docs(readme): update readme content --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bc04e8c..a782107 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,15 @@ luna-charts/ ### Installation ```bash -git clone +git clone https://github.com/Ninosaurier/LUNA-Charts.git +cd luna-charts +pnpm install +``` + +or + +```bash +git clone https://git.byting-pandas.ninja/Ninosaurier/LUNA-Charts.git cd luna-charts pnpm install ``` -- 2.54.0 From 82cfca42152a35db966aed02795c174a73b238f6 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 01:12:57 +0200 Subject: [PATCH 68/88] chore(luna-charts): update generated custom elements metadata --- packages/luna-charts/custom-elements.json | 2 +- .../luna-charts/src/components/my-component/readme.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/luna-charts/custom-elements.json b/packages/luna-charts/custom-elements.json index 98413b7..0edd695 100644 --- a/packages/luna-charts/custom-elements.json +++ b/packages/luna-charts/custom-elements.json @@ -1,5 +1,5 @@ { - "timestamp": "2026-07-22T21:49:28", + "timestamp": "2026-08-01T23:02:04", "compiler": { "name": "@stencil/core", "version": "4.43.5", diff --git a/packages/luna-charts/src/components/my-component/readme.md b/packages/luna-charts/src/components/my-component/readme.md index 06b5864..9788a67 100644 --- a/packages/luna-charts/src/components/my-component/readme.md +++ b/packages/luna-charts/src/components/my-component/readme.md @@ -7,11 +7,11 @@ ## Properties -| Property | Attribute | Description | Type | Default | -| -------- | --------- | --------------- | -------- | ----------- | -| `first` | `first` | The first name | `string` | `undefined` | -| `last` | `last` | The last name | `string` | `undefined` | -| `middle` | `middle` | The middle name | `string` | `undefined` | +| Property | Attribute | Description | Type | Default | +| -------- | --------- | --------------- | --------------------- | ----------- | +| `first` | `first` | The first name | `string \| undefined` | `undefined` | +| `last` | `last` | The last name | `string \| undefined` | `undefined` | +| `middle` | `middle` | The middle name | `string \| undefined` | `undefined` | ---------------------------------------------- -- 2.54.0 From 85b1ca240ed7ed20f99c6576e8299ecddf7882e2 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 01:31:47 +0200 Subject: [PATCH 69/88] fix(deps): pin playwright exactly and respect lockfile in docker build The Playwright version was pinned with a caret range and the test Dockerfile deleted pnpm-lock.yaml before installing, so every image build silently re-resolved to the latest matching Playwright version. This caused the npm package and the Docker base image to drift apart. - packages/luna-charts/package.json: pin playwright to 1.62.1 exactly - Dockerfile.test: stop deleting pnpm-lock.yaml before install, and use --frozen-lockfile so a mismatch between package.json and the lockfile fails the build loudly instead of resolving silently --- Dockerfile.test | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Dockerfile.test b/Dockerfile.test index 4de7f2f..3763117 100644 --- a/Dockerfile.test +++ b/Dockerfile.test @@ -10,11 +10,9 @@ COPY . . RUN rm -rf node_modules packages/**/node_modules -RUN rm -f pnpm-lock.yaml - ENV PNPM_CONFIG_SUPPORTED_ARCHITECTURES="current,linux-x64-gnu" -RUN pnpm install +RUN pnpm install --frozen-lockfile WORKDIR /app/packages/luna-charts -- 2.54.0 From 6e13c29141de6470e2cda07d2b2771023a105cf3 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 01:44:40 +0200 Subject: [PATCH 70/88] chore(tooling): add prettier format check script --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 1f062bd..d45eb8c 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "docs": "pnpm --filter docs run dev", "lint": "eslint .", "format": "prettier --write .", + "format:check": "prettier --check .", "changeset": "changeset", "version": "changeset version", "release": "changeset publish", -- 2.54.0 From dd2874d8b0644fa56d201b20f6ab573a6dcf2914 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 02:00:57 +0200 Subject: [PATCH 71/88] feat(ci): add quality gate workflow for dev/main Adds automated checks that were previously only run manually and locally, closing the last remaining gap before dev can be merged into main with confidence. Runs on every push and pull request targeting dev or main: - lint (eslint) - format check (prettier --check) - changeset presence check (non-blocking for now, see comment in workflow file) - unit tests (vitest) - component/browser tests (vitest + playwright, via the existing Docker test setup) Fixes: #10 --- .gitea/workflows/quality-gate.yml | 73 +++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 .gitea/workflows/quality-gate.yml diff --git a/.gitea/workflows/quality-gate.yml b/.gitea/workflows/quality-gate.yml new file mode 100644 index 0000000..b733b26 --- /dev/null +++ b/.gitea/workflows/quality-gate.yml @@ -0,0 +1,73 @@ +name: CI + +on: + push: + branches: [dev, main] + pull_request: + branches: [dev, main] + +jobs: + lint-and-format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: "22" + + - run: corepack enable + - run: corepack prepare pnpm@11.11.0 --activate + + - run: pnpm install --frozen-lockfile + + - name: Lint + run: pnpm lint + + - name: Check formatting + run: pnpm format:check + + changeset-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-node@v4 + with: + node-version: "22" + + - run: corepack enable + - run: corepack prepare pnpm@11.11.0 --activate + + - run: pnpm install --frozen-lockfile + + - name: Verify changeset exists + continue-on-error: true + run: pnpm changeset status --since=origin/dev + + unit-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: "22" + + - run: corepack enable + - run: corepack prepare pnpm@11.11.0 --activate + + - run: pnpm install --frozen-lockfile + + - name: Run unit tests + run: pnpm test:unit + + component-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Run component tests (Docker) + run: pnpm test:component \ No newline at end of file -- 2.54.0 From 97f99a23ae6c0292662981b74985441fd34778f1 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 14:11:38 +0200 Subject: [PATCH 72/88] fix-lint(lint-violation): Updated readme.md It had a lint-violation --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a782107..d75c34c 100644 --- a/README.md +++ b/README.md @@ -108,4 +108,4 @@ Component and browser tests run inside Docker (`docker-compose.test.yaml`) to gu ## License -LUNA Charts is licensed under the [GNU Lesser General Public License v3.0 (LGPL-3.0)](./LICENSE). \ No newline at end of file +LUNA Charts is licensed under the [GNU Lesser General Public License v3.0 (LGPL-3.0)](./LICENSE). -- 2.54.0 From 75c8300d84f481b6380bb492bbd1e26446bec3ce Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 14:14:12 +0200 Subject: [PATCH 73/88] fix(runner): Fixed wrong label. the right label for using the runner is ubuntu-docker-dind --- .gitea/workflows/quality-gate.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitea/workflows/quality-gate.yml b/.gitea/workflows/quality-gate.yml index b733b26..880d9ca 100644 --- a/.gitea/workflows/quality-gate.yml +++ b/.gitea/workflows/quality-gate.yml @@ -8,7 +8,7 @@ on: jobs: lint-and-format: - runs-on: ubuntu-latest + runs-on: ubuntu-docker-dind steps: - uses: actions/checkout@v4 @@ -28,7 +28,7 @@ jobs: run: pnpm format:check changeset-check: - runs-on: ubuntu-latest + runs-on: ubuntu-docker-dind steps: - uses: actions/checkout@v4 with: @@ -48,7 +48,7 @@ jobs: run: pnpm changeset status --since=origin/dev unit-tests: - runs-on: ubuntu-latest + runs-on: ubuntu-docker-dind steps: - uses: actions/checkout@v4 @@ -65,7 +65,7 @@ jobs: run: pnpm test:unit component-tests: - runs-on: ubuntu-latest + runs-on: ubuntu-docker-dind steps: - uses: actions/checkout@v4 -- 2.54.0 From 768a43d9b60ac0c542020bf0338801ae1bc702bc Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 14:30:05 +0200 Subject: [PATCH 74/88] fix(ci): add missing node and pnpm setup to component tests Every job runs in an isolated container. The component-tests job was missing the Node.js and pnpm installation steps, causing command not found errors (exit code 127) during local execution. --- .gitea/workflows/quality-gate.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/quality-gate.yml b/.gitea/workflows/quality-gate.yml index 880d9ca..7ed4497 100644 --- a/.gitea/workflows/quality-gate.yml +++ b/.gitea/workflows/quality-gate.yml @@ -69,5 +69,14 @@ jobs: steps: - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "22" + + - run: corepack enable + - run: corepack prepare pnpm@11.11.0 --activate + + - run: pnpm install --frozen-lockfile + - name: Run component tests (Docker) - run: pnpm test:component \ No newline at end of file + run: pnpm test:component -- 2.54.0 From 6d1aeb6ee22d78e528522415d2c2d704b0952671 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 14:32:24 +0200 Subject: [PATCH 75/88] ci: trigger workflow on all branch pushes and fix component tests setup - Changed push branch filter to wildcard '*' to test feature branches before merging - Kept the missing pnpm/node setup fix for the component-tests job --- .gitea/workflows/quality-gate.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/quality-gate.yml b/.gitea/workflows/quality-gate.yml index 7ed4497..d5d74f2 100644 --- a/.gitea/workflows/quality-gate.yml +++ b/.gitea/workflows/quality-gate.yml @@ -2,7 +2,13 @@ name: CI on: push: - branches: [dev, main] + # ======================================================== + # 🟢 START: TRIGER BEI JEDEM BRANCH-PUSH AKTIVIERT + # ======================================================== + branches: ['*'] + # ======================================================== + # 🔴 ENDE: ÄNDERUNG + # ======================================================== pull_request: branches: [dev, main] @@ -69,6 +75,9 @@ jobs: steps: - uses: actions/checkout@v4 + # ======================================================== + # 🟢 ZUVOR HINZUGEFÜGT FÜR PNPM & NODE.JS SETUP + # ======================================================== - uses: actions/setup-node@v4 with: node-version: "22" @@ -77,6 +86,7 @@ jobs: - run: corepack prepare pnpm@11.11.0 --activate - run: pnpm install --frozen-lockfile + # ======================================================== - name: Run component tests (Docker) run: pnpm test:component -- 2.54.0 From 35747ec6818c08d9a37fdc34782e891cf3c6001e Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 14:33:03 +0200 Subject: [PATCH 76/88] ci: trigger workflow on all branch pushes and fix component tests setup - Changed push branch filter to wildcard '*' to test feature branches before merging - Kept the missing pnpm/node setup fix for the component-tests job --- .gitea/workflows/quality-gate.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.gitea/workflows/quality-gate.yml b/.gitea/workflows/quality-gate.yml index d5d74f2..e3763de 100644 --- a/.gitea/workflows/quality-gate.yml +++ b/.gitea/workflows/quality-gate.yml @@ -2,13 +2,7 @@ name: CI on: push: - # ======================================================== - # 🟢 START: TRIGER BEI JEDEM BRANCH-PUSH AKTIVIERT - # ======================================================== branches: ['*'] - # ======================================================== - # 🔴 ENDE: ÄNDERUNG - # ======================================================== pull_request: branches: [dev, main] @@ -75,9 +69,6 @@ jobs: steps: - uses: actions/checkout@v4 - # ======================================================== - # 🟢 ZUVOR HINZUGEFÜGT FÜR PNPM & NODE.JS SETUP - # ======================================================== - uses: actions/setup-node@v4 with: node-version: "22" -- 2.54.0 From a92d83a5f4ab37ddecb7178797708018116b5365 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 14:35:50 +0200 Subject: [PATCH 77/88] fix(ci): trigger workflow on all branch pushes and fix component tests setup --- .gitea/workflows/quality-gate.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/quality-gate.yml b/.gitea/workflows/quality-gate.yml index e3763de..398408d 100644 --- a/.gitea/workflows/quality-gate.yml +++ b/.gitea/workflows/quality-gate.yml @@ -2,7 +2,8 @@ name: CI on: push: - branches: ['*'] + branches: + - '**' pull_request: branches: [dev, main] -- 2.54.0 From b0ae34dbaa62f0752b21f1163b40da15238d5a8a Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 15:03:49 +0200 Subject: [PATCH 78/88] chore(lint): improve monorepo workspace scripts --- package.json | 5 ++++- packages/luna-charts/package.json | 1 + pnpm-lock.yaml | 32 +++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index d45eb8c..e2e51e0 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "index.js", "scripts": { "docs": "pnpm --filter docs run dev", - "lint": "eslint .", + "lint": "pnpm --filter luna-charts run lint", "format": "prettier --write .", "format:check": "prettier --check .", "changeset": "changeset", @@ -32,7 +32,10 @@ "type": "module", "devDependencies": { "@changesets/cli": "^2.31.0", + "@eslint/js": "^10.0.1", "eslint": "^10.6.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-storybook": "10.5.0", "prettier": "^3.9.4" } } diff --git a/packages/luna-charts/package.json b/packages/luna-charts/package.json index f67bfa2..d91274f 100644 --- a/packages/luna-charts/package.json +++ b/packages/luna-charts/package.json @@ -32,6 +32,7 @@ "loader/" ], "scripts": { + "lint": "eslint .", "build": "stencil build", "start": "stencil build --dev --watch --serve", "test": "stencil-test --prod", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0fc95ca..13ff9a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -210,9 +210,18 @@ importers: '@changesets/cli': specifier: ^2.31.0 version: 2.31.1(@types/node@24.13.3) + '@eslint/js': + specifier: ^10.0.1 + version: 10.0.1(eslint@10.8.0(jiti@2.7.0)) eslint: specifier: ^10.6.0 version: 10.8.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.8.0(jiti@2.7.0)) + eslint-plugin-storybook: + specifier: 10.5.0 + version: 10.5.0(eslint@10.8.0(jiti@2.7.0))(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(typescript@5.9.3) prettier: specifier: ^3.9.4 version: 3.9.6 @@ -745,6 +754,15 @@ packages: resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/js@10.0.1': + resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true + '@eslint/object-schema@3.0.5': resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -2146,6 +2164,12 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + eslint-plugin-storybook@10.5.0: resolution: {integrity: sha512-UyhbK11baKAYqzyDUHlwDlm1aP/wxPMR0vFmsxA5984BGaPwarhoXUWng1Xa0cd9BdPbQ+zr/y8ADk6XxtwkYg==} peerDependencies: @@ -4316,6 +4340,10 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 + '@eslint/js@10.0.1(eslint@10.8.0(jiti@2.7.0))': + optionalDependencies: + eslint: 10.8.0(jiti@2.7.0) + '@eslint/object-schema@3.0.5': {} '@eslint/plugin-kit@0.7.2': @@ -5622,6 +5650,10 @@ snapshots: escape-string-regexp@5.0.0: {} + eslint-config-prettier@10.1.8(eslint@10.8.0(jiti@2.7.0)): + dependencies: + eslint: 10.8.0(jiti@2.7.0) + eslint-plugin-storybook@10.5.0(eslint@10.8.0(jiti@2.7.0))(storybook@10.5.5(@types/react@19.2.18)(prettier@3.9.6)(react@19.2.8))(typescript@5.9.3): dependencies: '@typescript-eslint/types': 8.65.0 -- 2.54.0 From 5211b5f76aee5a9a8f9fc95e251685708ee0c195 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 15:25:31 +0200 Subject: [PATCH 79/88] fix(ci): adjust root lint script to execute eslint directly within project directory --- package.json | 3 +- pnpm-lock.yaml | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index e2e51e0..c3feffc 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "eslint": "^10.6.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-storybook": "10.5.0", - "prettier": "^3.9.4" + "prettier": "^3.9.4", + "typescript-eslint": "^8.65.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 13ff9a2..a7cc300 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -225,6 +225,9 @@ importers: prettier: specifier: ^3.9.4 version: 3.9.6 + typescript-eslint: + specifier: ^8.65.0 + version: 8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3) docs: dependencies: @@ -1710,6 +1713,21 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@typescript-eslint/eslint-plugin@8.65.0': + resolution: {integrity: sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.65.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/parser@8.65.0': + resolution: {integrity: sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/project-service@8.65.0': resolution: {integrity: sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1726,6 +1744,13 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/type-utils@8.65.0': + resolution: {integrity: sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/types@8.65.0': resolution: {integrity: sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2469,6 +2494,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.6: + resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==} + engines: {node: '>= 4'} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -3480,6 +3509,13 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + typescript-eslint@8.65.0: + resolution: {integrity: sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} @@ -5096,6 +5132,34 @@ snapshots: '@types/unist@3.0.3': {} + '@typescript-eslint/eslint-plugin@8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.65.0 + '@typescript-eslint/type-utils': 8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.65.0 + eslint: 10.8.0(jiti@2.7.0) + ignore: 7.0.6 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.65.0 + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.65.0 + debug: 4.4.3 + eslint: 10.8.0(jiti@2.7.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/project-service@8.65.0(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@5.9.3) @@ -5114,6 +5178,18 @@ snapshots: dependencies: typescript: 5.9.3 + '@typescript-eslint/type-utils@8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3) + debug: 4.4.3 + eslint: 10.8.0(jiti@2.7.0) + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.65.0': {} '@typescript-eslint/typescript-estree@8.65.0(typescript@5.9.3)': @@ -6115,6 +6191,8 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.6: {} + imurmurhash@0.1.4: {} indent-string@4.0.0: {} @@ -7500,6 +7578,17 @@ snapshots: dependencies: prelude-ls: 1.2.1 + typescript-eslint@8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.8.0(jiti@2.7.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + typescript@5.9.3: {} ufo@1.6.4: {} -- 2.54.0 From 88154775de2affd89bbc3c9ed2a1e4a231d7828a Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 15:25:53 +0200 Subject: [PATCH 80/88] eslint(error): removed double line --- packages/luna-charts/src/components.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/luna-charts/src/components.d.ts b/packages/luna-charts/src/components.d.ts index 896f526..1985796 100644 --- a/packages/luna-charts/src/components.d.ts +++ b/packages/luna-charts/src/components.d.ts @@ -1,4 +1,4 @@ -/* eslint-disable */ + /* tslint:disable */ /** * This is an autogenerated file created by the Stencil compiler. -- 2.54.0 From 9089a4ef6039b1d18199f6bf2d712bf349d346ab Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 15:26:15 +0200 Subject: [PATCH 81/88] fix(eslint): fix: allow stencil jsx helper in eslint --- eslint.config.js | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index 5fd53cd..3b75804 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,8 +1,34 @@ // For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format import storybook from "eslint-plugin-storybook"; +import js from "@eslint/js"; +import tseslint from "typescript-eslint"; -import js from '@eslint/js'; +export default [ + { + ignores: [ + "**/dist/**", + "**/www/**", + "**/node_modules/**", + "**/.stencil/**", + "**/loader/**", + ], + }, -export default [js.configs.recommended, { - ignores: ['**/dist/**', '**/www/**', '**/node_modules/**', '**/.stencil/**'], -}, ...storybook.configs["flat/recommended"]]; \ No newline at end of file + js.configs.recommended, + + ...tseslint.configs.recommended, + + ...storybook.configs["flat/recommended"], + + { + files: ["**/*.tsx"], + rules: { + "@typescript-eslint/no-unused-vars": [ + "error", + { + varsIgnorePattern: "^h$", + }, + ], + }, + }, +]; \ No newline at end of file -- 2.54.0 From 75d46320528a8dc9923352d109c704ddf4b7a249 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 15:38:24 +0200 Subject: [PATCH 82/88] chore: update prettier configuration --- .prettierrc.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.prettierrc.json b/.prettierrc.json index 83311fa..04f9b30 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -2,5 +2,6 @@ "singleQuote": true, "semi": true, "trailingComma": "es5", - "printWidth": 100 + "printWidth": 100, + "bracketSameLine": true } \ No newline at end of file -- 2.54.0 From 3b9a78bf9dfc8fe98a28e93a9e902a9a3c4f8d78 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 15:38:45 +0200 Subject: [PATCH 83/88] style: format luna charts source --- packages/luna-charts/.storybook/main.ts | 2 +- packages/luna-charts/.storybook/preview.tsx | 2 +- packages/luna-charts/custom-elements.d.ts | 7 +- packages/luna-charts/custom-elements.json | 2 +- packages/luna-charts/readme.md | 8 +- packages/luna-charts/src/components.d.ts | 104 +++++++++--------- .../my-component/my-component.stories.tsx | 4 +- .../src/components/my-component/readme.md | 8 +- packages/luna-charts/src/index.html | 2 +- .../testing/a11y/checkers/axe-core.checker.ts | 6 +- .../src/testing/a11y/checkers/types.ts | 2 +- .../luna-charts/src/testing/a11y/index.ts | 8 +- .../luna-charts/src/testing/a11y/matchers.ts | 10 +- packages/luna-charts/tsconfig.json | 17 +-- packages/luna-charts/vitest-setup.ts | 4 +- 15 files changed, 82 insertions(+), 104 deletions(-) diff --git a/packages/luna-charts/.storybook/main.ts b/packages/luna-charts/.storybook/main.ts index e5ee77d..4af35eb 100644 --- a/packages/luna-charts/.storybook/main.ts +++ b/packages/luna-charts/.storybook/main.ts @@ -6,4 +6,4 @@ const config = { }, }; -export default config; \ No newline at end of file +export default config; diff --git a/packages/luna-charts/.storybook/preview.tsx b/packages/luna-charts/.storybook/preview.tsx index 2e504bc..69cdb2d 100644 --- a/packages/luna-charts/.storybook/preview.tsx +++ b/packages/luna-charts/.storybook/preview.tsx @@ -12,4 +12,4 @@ defineCustomElements(); * Loads and registers component metadata for Storybook. * This enables automatic generation of props, methods, events, slots, shadow parts, and CSS variables tables. */ -setCustomElementsManifest(customElements); \ No newline at end of file +setCustomElementsManifest(customElements); diff --git a/packages/luna-charts/custom-elements.d.ts b/packages/luna-charts/custom-elements.d.ts index 66d9c08..b5bff8f 100644 --- a/packages/luna-charts/custom-elements.d.ts +++ b/packages/luna-charts/custom-elements.d.ts @@ -1,4 +1,3 @@ - /** * This is an autogenerated file created by the Stencil compiler. * DO NOT MODIFY IT MANUALLY @@ -29,7 +28,7 @@ interface ComponentCompilerTypeReference { * - globally * - by importing it into a file (and is defined elsewhere) */ - location: "local" | "global" | "import"; + location: 'local' | 'global' | 'import'; /** * The path to the type reference, if applicable (global types should not need a path associated with them) */ @@ -152,7 +151,7 @@ export interface JsonDocsComponent { /** * The encapsulation strategy for a component */ - encapsulation: "shadow" | "scoped" | "none"; + encapsulation: 'shadow' | 'scoped' | 'none'; /** * The tag name for the component, for use in HTML */ @@ -467,7 +466,7 @@ export interface StyleDoc { * Used to inform Stencil where the start of a new property's description starts (and where the previous description * ends). */ - annotation: "prop"; + annotation: 'prop'; /** * The Stencil style-mode that is associated with this property. */ diff --git a/packages/luna-charts/custom-elements.json b/packages/luna-charts/custom-elements.json index 0edd695..d20ef26 100644 --- a/packages/luna-charts/custom-elements.json +++ b/packages/luna-charts/custom-elements.json @@ -107,4 +107,4 @@ } ], "typeLibrary": {} -} \ No newline at end of file +} diff --git a/packages/luna-charts/readme.md b/packages/luna-charts/readme.md index 66e26f8..dc50f3a 100644 --- a/packages/luna-charts/readme.md +++ b/packages/luna-charts/readme.md @@ -95,11 +95,7 @@ function App() { return ( <>
- +
); @@ -108,4 +104,4 @@ function App() { export default App; ``` -Check out this [Live Demo](https://stackblitz.com/edit/vitejs-vite-b6zuds?file=src%2FApp.tsx). \ No newline at end of file +Check out this [Live Demo](https://stackblitz.com/edit/vitejs-vite-b6zuds?file=src%2FApp.tsx). diff --git a/packages/luna-charts/src/components.d.ts b/packages/luna-charts/src/components.d.ts index 1985796..3b2e246 100644 --- a/packages/luna-charts/src/components.d.ts +++ b/packages/luna-charts/src/components.d.ts @@ -1,68 +1,68 @@ - /* tslint:disable */ /** * This is an autogenerated file created by the Stencil compiler. * It contains typing information for all components that exist in this project. */ -import { HTMLStencilElement, JSXBase } from "@stencil/core/internal"; +import { HTMLStencilElement, JSXBase } from '@stencil/core/internal'; export namespace Components { - interface MyComponent { - /** - * The first name - */ - "first"?: string; - /** - * The last name - */ - "last"?: string; - /** - * The middle name - */ - "middle"?: string; - } + interface MyComponent { + /** + * The first name + */ + first?: string; + /** + * The last name + */ + last?: string; + /** + * The middle name + */ + middle?: string; + } } declare global { - interface HTMLMyComponentElement extends Components.MyComponent, HTMLStencilElement { - } - var HTMLMyComponentElement: { - prototype: HTMLMyComponentElement; - new (): HTMLMyComponentElement; - }; - interface HTMLElementTagNameMap { - "my-component": HTMLMyComponentElement; - } + interface HTMLMyComponentElement extends Components.MyComponent, HTMLStencilElement {} + var HTMLMyComponentElement: { + prototype: HTMLMyComponentElement; + new (): HTMLMyComponentElement; + }; + interface HTMLElementTagNameMap { + 'my-component': HTMLMyComponentElement; + } } declare namespace LocalJSX { - interface MyComponent { - /** - * The first name - */ - "first"?: string; - /** - * The last name - */ - "last"?: string; - /** - * The middle name - */ - "middle"?: string; - } + interface MyComponent { + /** + * The first name + */ + first?: string; + /** + * The last name + */ + last?: string; + /** + * The middle name + */ + middle?: string; + } - interface MyComponentAttributes { - "first": string; - "middle": string; - "last": string; - } + interface MyComponentAttributes { + first: string; + middle: string; + last: string; + } - interface IntrinsicElements { - "my-component": Omit & { [K in keyof MyComponent & keyof MyComponentAttributes]?: MyComponent[K] } & { [K in keyof MyComponent & keyof MyComponentAttributes as `attr:${K}`]?: MyComponentAttributes[K] } & { [K in keyof MyComponent & keyof MyComponentAttributes as `prop:${K}`]?: MyComponent[K] }; - } + interface IntrinsicElements { + 'my-component': Omit & { [K in keyof MyComponent & keyof MyComponentAttributes]?: MyComponent[K] } & { + [K in keyof MyComponent & keyof MyComponentAttributes as `attr:${K}`]?: MyComponentAttributes[K]; + } & { [K in keyof MyComponent & keyof MyComponentAttributes as `prop:${K}`]?: MyComponent[K] }; + } } export { LocalJSX as JSX }; -declare module "@stencil/core" { - export namespace JSX { - interface IntrinsicElements { - "my-component": LocalJSX.IntrinsicElements["my-component"] & JSXBase.HTMLAttributes; - } +declare module '@stencil/core' { + export namespace JSX { + interface IntrinsicElements { + 'my-component': LocalJSX.IntrinsicElements['my-component'] & JSXBase.HTMLAttributes; } + } } diff --git a/packages/luna-charts/src/components/my-component/my-component.stories.tsx b/packages/luna-charts/src/components/my-component/my-component.stories.tsx index 429ad0d..5a50ae7 100644 --- a/packages/luna-charts/src/components/my-component/my-component.stories.tsx +++ b/packages/luna-charts/src/components/my-component/my-component.stories.tsx @@ -26,7 +26,7 @@ export const Primary: Story = { last: 'Doe', middle: 'Michael', }, - render: (props) => , + render: props => , }; /** @@ -38,4 +38,4 @@ export const Secondary: Story = { last: 'Smith', middle: 'Marie', }, -}; \ No newline at end of file +}; diff --git a/packages/luna-charts/src/components/my-component/readme.md b/packages/luna-charts/src/components/my-component/readme.md index 9788a67..4532119 100644 --- a/packages/luna-charts/src/components/my-component/readme.md +++ b/packages/luna-charts/src/components/my-component/readme.md @@ -1,10 +1,7 @@ # my-component - - - ## Properties | Property | Attribute | Description | Type | Default | @@ -13,7 +10,6 @@ | `last` | `last` | The last name | `string \| undefined` | `undefined` | | `middle` | `middle` | The middle name | `string \| undefined` | `undefined` | +--- ----------------------------------------------- - -*Built with [StencilJS](https://stenciljs.com/)* +_Built with [StencilJS](https://stenciljs.com/)_ diff --git a/packages/luna-charts/src/index.html b/packages/luna-charts/src/index.html index 0653289..cc529b8 100644 --- a/packages/luna-charts/src/index.html +++ b/packages/luna-charts/src/index.html @@ -1,4 +1,4 @@ - + diff --git a/packages/luna-charts/src/testing/a11y/checkers/axe-core.checker.ts b/packages/luna-charts/src/testing/a11y/checkers/axe-core.checker.ts index edef231..83d7028 100644 --- a/packages/luna-charts/src/testing/a11y/checkers/axe-core.checker.ts +++ b/packages/luna-charts/src/testing/a11y/checkers/axe-core.checker.ts @@ -9,13 +9,13 @@ export const axeCoreChecker: A11yChecker = { return { checkerName: 'axe-core', - violations: results.violations.map((violations) => ({ + violations: results.violations.map(violations => ({ id: violations.id, impact: violations.impact ?? null, description: violations.help, helpUrl: violations.helpUrl, - nodes: violations.nodes.map((node) => node.target.join(' ')), + nodes: violations.nodes.map(node => node.target.join(' ')), })), }; }, -}; \ No newline at end of file +}; diff --git a/packages/luna-charts/src/testing/a11y/checkers/types.ts b/packages/luna-charts/src/testing/a11y/checkers/types.ts index 2254aaa..0d618a7 100644 --- a/packages/luna-charts/src/testing/a11y/checkers/types.ts +++ b/packages/luna-charts/src/testing/a11y/checkers/types.ts @@ -14,4 +14,4 @@ export interface A11yCheckResult { export interface A11yChecker { name: string; run(root: Element): Promise; -} \ No newline at end of file +} diff --git a/packages/luna-charts/src/testing/a11y/index.ts b/packages/luna-charts/src/testing/a11y/index.ts index 7a840e8..1020bee 100644 --- a/packages/luna-charts/src/testing/a11y/index.ts +++ b/packages/luna-charts/src/testing/a11y/index.ts @@ -1,12 +1,10 @@ import type { A11yChecker, A11yCheckResult } from './checkers/types'; import { axeCoreChecker } from './checkers/axe-core.checker'; -const a11yCheckerRegistry: A11yChecker[] = [ - axeCoreChecker, -]; +const a11yCheckerRegistry: A11yChecker[] = [axeCoreChecker]; export async function runA11yChecks(rootElement: Element): Promise { - return Promise.all(a11yCheckerRegistry.map((a11yChecker) => a11yChecker.run(rootElement))); + return Promise.all(a11yCheckerRegistry.map(a11yChecker => a11yChecker.run(rootElement))); } -export type { A11yChecker, A11yCheckResult, A11yViolation } from './checkers/types'; \ No newline at end of file +export type { A11yChecker, A11yCheckResult, A11yViolation } from './checkers/types'; diff --git a/packages/luna-charts/src/testing/a11y/matchers.ts b/packages/luna-charts/src/testing/a11y/matchers.ts index ac44fcb..f4e1b9f 100644 --- a/packages/luna-charts/src/testing/a11y/matchers.ts +++ b/packages/luna-charts/src/testing/a11y/matchers.ts @@ -3,7 +3,7 @@ import type { A11yCheckResult } from './checkers/types'; expect.extend({ toHaveNoA11yViolations(results: A11yCheckResult[]) { - const failing = results.filter((results) => results.violations.length > 0); + const failing = results.filter(results => results.violations.length > 0); if (failing.length === 0) { return { @@ -14,11 +14,9 @@ expect.extend({ const message = failing .map( - (results) => + results => `[${results.checkerName}] ${results.violations.length} violation(s):\n` + - results.violations - .map((validation) => ` - ${validation.id} (${validation.impact}): ${validation.description}\n affected: ${validation.nodes.join(', ')}`) - .join('\n') + results.violations.map(validation => ` - ${validation.id} (${validation.impact}): ${validation.description}\n affected: ${validation.nodes.join(', ')}`).join('\n'), ) .join('\n\n'); @@ -33,4 +31,4 @@ declare module 'vitest' { interface Assertion { toHaveNoA11yViolations(): void; } -} \ No newline at end of file +} diff --git a/packages/luna-charts/tsconfig.json b/packages/luna-charts/tsconfig.json index 7d136f0..ad70cfd 100644 --- a/packages/luna-charts/tsconfig.json +++ b/packages/luna-charts/tsconfig.json @@ -5,10 +5,7 @@ "allowUnreachableCode": false, "declaration": false, "experimentalDecorators": true, - "lib": [ - "dom", - "es2022" - ], + "lib": ["dom", "es2022"], "moduleResolution": "bundler", "module": "esnext", "target": "es2022", @@ -18,14 +15,8 @@ "jsx": "react", "jsxFactory": "h", "jsxFragmentFactory": "h.Fragment", - "types": [ - "@stencil/vitest/globals" - ] + "types": ["@stencil/vitest/globals"] }, - "include": [ - "src" - ], - "exclude": [ - "node_modules" - ] + "include": ["src"], + "exclude": ["node_modules"] } diff --git a/packages/luna-charts/vitest-setup.ts b/packages/luna-charts/vitest-setup.ts index e046bc4..82b5356 100644 --- a/packages/luna-charts/vitest-setup.ts +++ b/packages/luna-charts/vitest-setup.ts @@ -1,4 +1,4 @@ -import { defineCustomElements } from "./loader"; +import { defineCustomElements } from './loader'; import './src/testing/a11y/matchers'; -defineCustomElements(); \ No newline at end of file +defineCustomElements(); -- 2.54.0 From 856fea304a0e5fd9de85023aa31085b38e5d8418 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Sun, 2 Aug 2026 15:39:19 +0200 Subject: [PATCH 84/88] chore: scope workspace commands with pnpm filter --- package.json | 2 +- packages/luna-charts/package.json | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index c3feffc..11d0c23 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "docs": "pnpm --filter docs run dev", "lint": "pnpm --filter luna-charts run lint", "format": "prettier --write .", - "format:check": "prettier --check .", + "format:check": "pnpm --filter luna-charts run format:check", "changeset": "changeset", "version": "changeset version", "release": "changeset publish", diff --git a/packages/luna-charts/package.json b/packages/luna-charts/package.json index d91274f..007f903 100644 --- a/packages/luna-charts/package.json +++ b/packages/luna-charts/package.json @@ -33,6 +33,8 @@ ], "scripts": { "lint": "eslint .", + "format:check": "prettier --check .", + "format": "prettier --write .", "build": "stencil build", "start": "stencil build --dev --watch --serve", "test": "stencil-test --prod", -- 2.54.0 From caf0f3de2d6a69c2299eef9bbbd2602db6afaff0 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Mon, 3 Aug 2026 22:18:14 +0200 Subject: [PATCH 85/88] ci(component-tests): add containerized component test workflow Introduce dedicated CI container images and improve the component test execution in Gitea Actions. The workflow now uses reproducible runner environments, private registry authentication and executes Playwright component tests inside a prepared container. --- .gitea/runners/Dockerfile | 18 +++++++++++++ .gitea/workflows/quality-gate.yml | 44 ++++++++++++++++++------------- 2 files changed, 43 insertions(+), 19 deletions(-) create mode 100644 .gitea/runners/Dockerfile diff --git a/.gitea/runners/Dockerfile b/.gitea/runners/Dockerfile new file mode 100644 index 0000000..30354bd --- /dev/null +++ b/.gitea/runners/Dockerfile @@ -0,0 +1,18 @@ +FROM node:22-bullseye + +# Install Docker CLI + Compose V2 plugin from Docker's official apt repo +# (Debian's own docker.io package ships an outdated Docker version and +# does not include the compose plugin at all). +RUN apt-get update \ + && apt-get install -y ca-certificates curl gnupg \ + && install -m 0755 -d /etc/apt/keyrings \ + && curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc \ + && chmod a+r /etc/apt/keyrings/docker.asc \ + && echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian bullseye stable" \ + | tee /etc/apt/sources.list.d/docker.list > /dev/null \ + && apt-get update \ + && apt-get install -y docker-ce-cli docker-compose-plugin \ + && rm -rf /var/lib/apt/lists/* + +RUN corepack enable \ No newline at end of file diff --git a/.gitea/workflows/quality-gate.yml b/.gitea/workflows/quality-gate.yml index 398408d..27e3eec 100644 --- a/.gitea/workflows/quality-gate.yml +++ b/.gitea/workflows/quality-gate.yml @@ -10,13 +10,14 @@ on: jobs: lint-and-format: runs-on: ubuntu-docker-dind + container: + image: git.byting-pandas.ninja/ci/node22-docker:latest + credentials: + username: ${{ secrets.REGISTRY_USER }} + password: ${{ secrets.REGISTRY_TOKEN }} steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "22" - - run: corepack enable - run: corepack prepare pnpm@11.11.0 --activate @@ -30,15 +31,16 @@ jobs: changeset-check: runs-on: ubuntu-docker-dind + container: + image: git.byting-pandas.ninja/ci/node22-docker:latest + credentials: + username: ${{ secrets.REGISTRY_USER }} + password: ${{ secrets.REGISTRY_TOKEN }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: actions/setup-node@v4 - with: - node-version: "22" - - run: corepack enable - run: corepack prepare pnpm@11.11.0 --activate @@ -50,13 +52,14 @@ jobs: unit-tests: runs-on: ubuntu-docker-dind + container: + image: git.byting-pandas.ninja/ci/node22-docker:latest + credentials: + username: ${{ secrets.REGISTRY_USER }} + password: ${{ secrets.REGISTRY_TOKEN }} steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "22" - - run: corepack enable - run: corepack prepare pnpm@11.11.0 --activate @@ -67,18 +70,21 @@ jobs: component-tests: runs-on: ubuntu-docker-dind + container: + image: git.byting-pandas.ninja/ci/luna-charts-test:v1.62.1 + credentials: + username: ${{ secrets.REGISTRY_USER }} + password: ${{ secrets.REGISTRY_TOKEN }} + steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "22" - - run: corepack enable + - run: corepack prepare pnpm@11.11.0 --activate - run: pnpm install --frozen-lockfile - # ======================================================== - - name: Run component tests (Docker) - run: pnpm test:component + - name: Run component tests (Playwright) + working-directory: packages/luna-charts + run: pnpm test:browser \ No newline at end of file -- 2.54.0 From 2ddf8961c20296a489044d9d60a3ee59656e46f7 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Wed, 5 Aug 2026 17:00:52 +0200 Subject: [PATCH 86/88] docs(update): update README to reflect .gitea/ CI setup and test image sourcing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds the .gitea/ directory to the project structure overview and corrects the claim that local and CI test environments are identical. Both are built from the same Dockerfile.test, but locally the image is built on demand while CI pulls a prebuilt version — see ADR-0002 and the Technology Architecture doc for details. --- README.md | 8 +- .../adm/technology-architecture.mdx | 64 ++++++++++++-- .../adr/000200-technology-stack.mdx | 88 ++++++++++++++++++- 3 files changed, 148 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index d75c34c..1d2dacd 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,9 @@ luna-charts/ │ ├── .changeset/ # Release/versioning configuration │ -└── .github/ # Community health files (Code of Conduct, etc.) +├── .github/ # Community health files (Code of Conduct, etc.) +│ +└── .gitea/ # CI workflows (Gitea Actions) and CI runner image ``` ## Getting Started @@ -98,7 +100,7 @@ pnpm run storybook > **Note:** Running Storybook from the repository root isn't set up yet. This is a known gap — contributions to add a root-level `pnpm --filter` script are welcome. -Component and browser tests run inside Docker (`docker-compose.test.yaml`) to guarantee a reproducible browser environment across all contributors and CI — you don't need Playwright browsers installed locally. +Component and browser tests run inside Docker (`docker-compose.test.yaml`), based on the same `Dockerfile.test` used to build the image CI tests against, to guarantee a reproducible browser environment — you don't need Playwright browsers installed locally. Locally this image is built on demand; in CI a prebuilt version of the same image is pulled directly (see [ADR-0002](./docs/src/content/docs/architecture/adr/000200-technology-stack.mdx) and the [Technology Architecture](./docs/src/content/docs/architecture/adm/technology-architecture.mdx#66-test-execution-environment) doc for details). ## Documentation @@ -108,4 +110,4 @@ Component and browser tests run inside Docker (`docker-compose.test.yaml`) to gu ## License -LUNA Charts is licensed under the [GNU Lesser General Public License v3.0 (LGPL-3.0)](./LICENSE). +LUNA Charts is licensed under the [GNU Lesser General Public License v3.0 (LGPL-3.0)](./LICENSE). \ No newline at end of file diff --git a/docs/src/content/docs/architecture/adm/technology-architecture.mdx b/docs/src/content/docs/architecture/adm/technology-architecture.mdx index 9e3cc82..2cdddd3 100644 --- a/docs/src/content/docs/architecture/adm/technology-architecture.mdx +++ b/docs/src/content/docs/architecture/adm/technology-architecture.mdx @@ -150,19 +150,39 @@ LUNA Charts follows a multi-layer quality assurance model. ### 6.6 Test Execution Environment -Component and browser tests (Vitest browser mode, see ADR-0002) run inside a **containerized Playwright environment** rather than directly on contributor or CI host machines. +Component and browser tests (Vitest browser mode, see ADR-0002) run inside +a **containerized Playwright environment** rather than directly on +contributor or CI host machines. #### Characteristics -- A dedicated `Dockerfile.test`, based on the official Playwright container image, provides a reproducible browser environment with pinned browser versions -- `docker-compose.test.yaml` orchestrates the test execution, isolating dependencies from the host system -- The same containerized environment is used locally by contributors and in Continuous Integration, avoiding "works on my machine" discrepancies caused by differing local Playwright/browser installations +- A dedicated `Dockerfile.test`, based on the official Playwright container + image, provides a reproducible browser environment with pinned browser + versions +- Locally, `docker-compose.test.yaml` builds this image from source and + orchestrates test execution, isolating dependencies from the host system +- In Continuous Integration, the same `Dockerfile.test` is built and + pushed to the project's container registry out-of-band (tagged by + Playwright version, e.g. `luna-charts-test:v1.62.1`); CI jobs pull this + prebuilt image directly rather than rebuilding it on every run, then + check out the current commit and install dependencies inside the running + container before executing tests +- `Dockerfile.test` remains the single source of truth for the test + environment definition in both cases — only *when* the image is built + (on demand locally, ahead of time for CI) differs #### Rationale -- Ensures deterministic, reproducible accessibility and browser test results independent of the host operating system -- Removes the need for contributors to install and maintain matching Playwright browser binaries locally -- Aligns automated testing (Section 6.1–6.4) with a single, version-controlled execution environment +- Ensures deterministic, reproducible accessibility and browser test + results independent of the host operating system +- Removes the need for contributors to install and maintain matching + Playwright browser binaries locally +- Avoids rebuilding the Playwright/browser image on every CI run, which + would otherwise require Docker-in-Docker access inside the CI runner — + significant infrastructure complexity for a single-service image build +- Aligns automated testing (Section 6.1–6.4) with a single, + version-controlled execution environment definition, even though the + build trigger differs between local development and CI ## 7. Release & Distribution Model @@ -255,4 +275,32 @@ Component and browser tests are executed inside a Docker-based Playwright enviro **Impact** -This clarifies an already-implemented part of the testing strategy (Section 6) and does not change any other architectural decision in this document. \ No newline at end of file +This clarifies an already-implemented part of the testing strategy (Section 6) and does not change any other architectural decision in this document. + +### 2026-08-04 – CI uses a prebuilt test image instead of rebuilding per run + +**Reason** + +The initial implementation of Section 6.6 assumed CI would build +`Dockerfile.test` fresh on every run, identical to local execution. In +practice, this required Docker-in-Docker access inside the CI runner +purely to build a single-service image — disproportionate operational +complexity (privileged sidecar container, custom pod networking, +runner-level configuration) for the orchestration value actually needed, +since `docker-compose.test.yaml` defines only one service with no +inter-service dependencies. + +**Changes** + +- Section 6.6 updated to describe the actual CI flow: `Dockerfile.test` is + built and pushed to the registry out-of-band (not on every CI run), and + CI jobs pull the prebuilt image, then check out the current commit and + install dependencies at runtime +- Clarified that `Dockerfile.test` remains the single source of truth for + the test environment definition; only the build trigger differs between + local and CI usage + +**Impact** + +No other architectural decision in this document is affected. Local +component testing (`pnpm test:component`) is unchanged. \ No newline at end of file diff --git a/docs/src/content/docs/architecture/adr/000200-technology-stack.mdx b/docs/src/content/docs/architecture/adr/000200-technology-stack.mdx index 8e7fe6d..9333e7f 100644 --- a/docs/src/content/docs/architecture/adr/000200-technology-stack.mdx +++ b/docs/src/content/docs/architecture/adr/000200-technology-stack.mdx @@ -235,4 +235,90 @@ During implementation, Jest was replaced with Vitest as the unit testing tool. S **Impact** -Playwright remains part of the technology stack, but its architectural role changes from an independent browser test runner to the browser engine used by Vitest. No other decisions in this ADR are affected. \ No newline at end of file +Playwright remains part of the technology stack, but its architectural role changes from an independent browser test runner to the browser engine used by Vitest. No other decisions in this ADR are affected. + +### 2026-08-03 – Continuous Integration: GitHub Actions replaced with Gitea Actions + +**Reason** + +During implementation, the project moved to a self-hosted Gitea instance +with Gitea Actions (`act_runner`) instead of GitHub Actions. The ADR's +"Considered Alternatives" and "Decision" tables still listed GitHub +Actions, which no longer matched the actual CI/CD tooling in use. + +**Changes** + +- "Considered Alternatives" table: `Continuous Integration` row updated — + considered alternatives changed to *GitHub Actions, GitLab CI, Azure + Pipelines, Gitea Actions*; selected technology changed to **Gitea + Actions** +- "Decision" table: **GitHub Actions** entry replaced with **Gitea + Actions** +- "Rationale" section: `GitHub Actions` subsection replaced with `Gitea + Actions`, noting that workflows run on a self-hosted `act_runner` + (Docker-in-Docker mode) against the project's own Gitea instance + +**Impact** + +Only the Continuous Integration technology choice is affected. Workflow +syntax remains GitHub-Actions-compatible (Gitea Actions is designed to be +largely compatible with the GitHub Actions workflow format), so no other +architectural decisions in this ADR are impacted. + +### 2026-08-04 – Component test CI execution: prebuilt image instead of Docker-in-Docker + +**Reason** + +Component tests run inside a container built from `Dockerfile.test` +(based on the official Playwright image). Running this build step inside +every CI job would require Docker-in-Docker (DinD) access on the +self-hosted Gitea Actions runner — a privileged sidecar container, custom +pod networking, and runner-level configuration — solely to build a +single-service image with no inter-service orchestration need. + +**Considered Alternatives** + +| Alternative | Description | +| ----------- | ----------- | +| Build `Dockerfile.test` fresh on every CI run (DinD) | Mirrors the local `docker compose up --build` flow exactly inside a DinD-enabled CI job. | +| Replicate `Dockerfile.test`'s steps directly as CI workflow steps, using the public Playwright image | Avoids Docker entirely in CI, but duplicates the test environment definition in two places (`Dockerfile.test` and the workflow YAML), risking drift between local and CI environments. | +| **Build and push `Dockerfile.test` out-of-band, pull the prebuilt image in CI (selected)** | `Dockerfile.test` remains the only definition of the test environment; the resulting image is built and pushed to the registry separately (tagged by Playwright version), and CI jobs simply pull it and run tests — no Docker access needed at test time. | + +Building fresh on every run was rejected due to the disproportionate DinD +infrastructure complexity for a single-service build. Replicating the +steps in the workflow file was rejected because it reintroduces a second, +manually-synchronized source of truth for the test environment. + +**Decision** + +`Dockerfile.test` is built and pushed to the project's container registry +out-of-band (not as part of the CI pipeline), tagged by Playwright +version (e.g. `luna-charts-test:v1.62.1`). The `component-tests` CI job +pulls this prebuilt image directly, checks out the current commit, and +runs the test command — no Docker access is required inside the CI job +container. + +**Consequences** + +*Positive* + +- `Dockerfile.test` remains the single source of truth for the test + environment definition +- No Docker-in-Docker, privileged containers, or custom pod networking + required in the CI job itself +- Faster, simpler `component-tests` job + +*Negative* + +- The test image must be rebuilt and pushed manually (or via a separate, + intentionally-triggered process) whenever `Dockerfile.test` changes; + forgetting this step means CI runs against a stale image +- This is considered an acceptable trade-off given how infrequently + `Dockerfile.test` changes, versus the ongoing operational cost of + maintaining DinD access in the runner + +**Impact** + +Local component testing (`pnpm test:component` via Docker Compose) is +unaffected — it continues to build `Dockerfile.test` fresh via +`docker-compose.test.yaml`. Only the CI-side image sourcing changes. \ No newline at end of file -- 2.54.0 From 9091bdcfae4b9a0ec2be26f37d12a5ec24ab876d Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Wed, 5 Aug 2026 17:18:27 +0200 Subject: [PATCH 87/88] docs(update): update README to reflect .gitea/ CI setup and test image sourcing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds the .gitea/ directory to the project structure overview and corrects the claim that local and CI test environments are identical. Both are built from the same Dockerfile.test, but locally the image is built on demand while CI pulls a prebuilt version — see ADR-0002 and the Technology Architecture doc for details. --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 1d2dacd..aca884b 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,9 @@ pnpm install | `pnpm test` | Run the full test suite (unit + component) | | `pnpm changeset` | Record a changeset for your change (required for any user-facing change) | | `pnpm run docs` | Start the documentation site locally (astroJS) | +| `pnpm run lint` | Run the linter to check for code style and quality issues | +| `pnpm run format` | Run the formatter to automatically fix code style issues | +| `pnpm run test:browser` | Run browser tests (only works inside the `packages/luna-charts` directory) | ### Storybook -- 2.54.0 From 72c49e6b0f3f3e665eaaac69216b0ef678bdad49 Mon Sep 17 00:00:00 2001 From: Ninosaurier Date: Wed, 5 Aug 2026 17:28:41 +0200 Subject: [PATCH 88/88] chore(changeset): prepare v0.1.0 release --- .changeset/ten-rules-bet.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/ten-rules-bet.md diff --git a/.changeset/ten-rules-bet.md b/.changeset/ten-rules-bet.md new file mode 100644 index 0000000..4a752ff --- /dev/null +++ b/.changeset/ten-rules-bet.md @@ -0,0 +1,5 @@ +--- +'luna-charts': minor +--- + +Establish the initial project foundation with architecture, documentation, governance, and development tooling. -- 2.54.0