From 7bbb1e1feabef136e8f8e5353d4d837f6c705b8b Mon Sep 17 00:00:00 2001 From: Eric Fennis Date: Thu, 11 Sep 2025 14:38:34 +0200 Subject: [PATCH 001/234] feat(@lucide/vue): Rename Vue package name to `@lucide/vue` (#3337) * Remove old vue 2 package * Add @lucide/vue package * Remove old vue 2 doc * Update docs * Adjust export template * Adjust vue package! * Fix tests * Format code * Update packages/vue/src/Icon.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Adjust vue package in docs * Update deadlinks --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/lucide-vue.yml | 43 + .github/workflows/release.yml | 1 + docs/.vitepress/data/packageData.json | 16 +- .../lib/codeExamples/createCodeExamples.ts | 2 +- docs/.vitepress/sidebar.ts | 2 +- .../home/HomePackagesSection.data.ts | 4 +- docs/guide/installation.md | 21 +- docs/guide/packages/lucide-static.md | 9 +- docs/guide/packages/lucide-vue-next.md | 141 -- docs/guide/packages/lucide-vue.md | 101 +- docs/vercel.json | 5 + packages/lucide-preact/package.json | 2 +- packages/lucide-react-native/package.json | 2 +- packages/lucide-react/package.json | 2 +- packages/lucide-solid/package.json | 2 +- packages/lucide-svelte/package.json | 2 +- packages/lucide-vue-next/package.json | 2 +- .../lucide-vue-next/src/createLucideIcon.ts | 14 +- packages/lucide-vue-next/tsconfig.json | 1 + packages/lucide-vue/nuxt.js | 11 - packages/lucide-vue/src/aliases/index.ts | 1 - packages/lucide-vue/src/createLucideIcon.ts | 66 - packages/lucide-vue/src/lucide-vue.ts | 3 - packages/lucide-vue/tests/lucide-vue.spec.ts | 132 -- packages/lucide-vue/tests/setupVitest.js | 1 - packages/lucide-vue/vitest.config.ts | 19 - packages/svelte/package.json | 2 +- packages/{lucide-vue => vue}/README.md | 25 +- packages/{lucide-vue => vue}/package.json | 38 +- .../{lucide-vue => vue}/rollup.config.mjs | 57 +- .../scripts/exportTemplate.mts} | 17 +- packages/vue/src/Icon.ts | 54 + packages/vue/src/aliases/index.ts | 3 + packages/vue/src/createLucideIcon.ts | 28 + .../src/defaultAttributes.ts | 4 +- .../{lucide-vue => vue}/src/icons/.gitkeep | 0 packages/vue/src/lucide-vue.prefixed.ts | 6 + packages/vue/src/lucide-vue.suffixed.ts | 6 + packages/vue/src/lucide-vue.ts | 7 + packages/vue/src/types.ts | 13 + packages/vue/tests/Icon.spec.ts | 35 + .../vue/tests/__snapshots__/Icon.spec.ts.snap | 29 + .../lucide-vue-next.spec.ts.snap | 197 +++ .../__snapshots__/lucide-vue.spec.ts.snap | 34 +- packages/vue/tests/lucide-vue.spec.ts | 183 +++ packages/vue/tests/setupVitest.js | 7 + packages/vue/tests/testIconNodes.ts | 22 + packages/{lucide-vue => vue}/tsconfig.json | 3 +- packages/vue/vitest.config.mts | 11 + pnpm-lock.yaml | 1452 +++-------------- 50 files changed, 1110 insertions(+), 1728 deletions(-) create mode 100644 .github/workflows/lucide-vue.yml delete mode 100644 docs/guide/packages/lucide-vue-next.md delete mode 100644 packages/lucide-vue/nuxt.js delete mode 100644 packages/lucide-vue/src/aliases/index.ts delete mode 100644 packages/lucide-vue/src/createLucideIcon.ts delete mode 100644 packages/lucide-vue/src/lucide-vue.ts delete mode 100644 packages/lucide-vue/tests/lucide-vue.spec.ts delete mode 100644 packages/lucide-vue/tests/setupVitest.js delete mode 100644 packages/lucide-vue/vitest.config.ts rename packages/{lucide-vue => vue}/README.md (69%) rename packages/{lucide-vue => vue}/package.json (66%) rename packages/{lucide-vue => vue}/rollup.config.mjs (52%) rename packages/{lucide-vue/scripts/exportTemplate.mjs => vue/scripts/exportTemplate.mts} (57%) create mode 100644 packages/vue/src/Icon.ts create mode 100644 packages/vue/src/aliases/index.ts create mode 100644 packages/vue/src/createLucideIcon.ts rename packages/{lucide-vue => vue}/src/defaultAttributes.ts (77%) rename packages/{lucide-vue => vue}/src/icons/.gitkeep (100%) create mode 100644 packages/vue/src/lucide-vue.prefixed.ts create mode 100644 packages/vue/src/lucide-vue.suffixed.ts create mode 100644 packages/vue/src/lucide-vue.ts create mode 100644 packages/vue/src/types.ts create mode 100644 packages/vue/tests/Icon.spec.ts create mode 100644 packages/vue/tests/__snapshots__/Icon.spec.ts.snap create mode 100644 packages/vue/tests/__snapshots__/lucide-vue-next.spec.ts.snap rename packages/{lucide-vue => vue}/tests/__snapshots__/lucide-vue.spec.ts.snap (82%) create mode 100644 packages/vue/tests/lucide-vue.spec.ts create mode 100644 packages/vue/tests/setupVitest.js create mode 100644 packages/vue/tests/testIconNodes.ts rename packages/{lucide-vue => vue}/tsconfig.json (80%) create mode 100644 packages/vue/vitest.config.mts diff --git a/.github/workflows/lucide-vue.yml b/.github/workflows/lucide-vue.yml new file mode 100644 index 000000000..a4694f85c --- /dev/null +++ b/.github/workflows/lucide-vue.yml @@ -0,0 +1,43 @@ +name: Lucide Vue checks + +on: + pull_request: + paths: + - packages/lucide-vue/** + - packages/shared/** + - tools/build-icons/** + - tools/rollup-plugins/** + - pnpm-lock.yaml + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 + with: + cache: 'pnpm' + node-version-file: 'package.json' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Build + run: pnpm --filter @lucide/vue build + + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 + with: + cache: 'pnpm' + node-version-file: 'package.json' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Test + run: pnpm --filter @lucide/vue test diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7e1371df2..3c2a23f3a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -55,6 +55,7 @@ jobs: 'lucide-svelte', '@lucide/astro', '@lucide/svelte', + '@lucide/vue', ] steps: - uses: actions/checkout@v4 diff --git a/docs/.vitepress/data/packageData.json b/docs/.vitepress/data/packageData.json index 6ad333133..9027c2c75 100644 --- a/docs/.vitepress/data/packageData.json +++ b/docs/.vitepress/data/packageData.json @@ -31,20 +31,12 @@ } ] }, - "lucide-vue-next": { + "@lucide/vue": { "order": 2, - "icon": "vue-next", + "icon": "vue", + "docsAlias": "lucide-vue", + "packageDirname": "vue", "shields": [ - { - "alt": "npm", - "src": "https://img.shields.io/npm/v/lucide-vue-next", - "href": "https://www.npmjs.com/package/lucide-vue-next" - }, - { - "alt": "npm", - "src": "https://img.shields.io/npm/dw/lucide-vue-next", - "href": "https://www.npmjs.com/package/lucide-vue-next" - } ] }, "lucide-svelte": { diff --git a/docs/.vitepress/lib/codeExamples/createCodeExamples.ts b/docs/.vitepress/lib/codeExamples/createCodeExamples.ts index 0539dd37b..33ac112f3 100644 --- a/docs/.vitepress/lib/codeExamples/createCodeExamples.ts +++ b/docs/.vitepress/lib/codeExamples/createCodeExamples.ts @@ -37,7 +37,7 @@ export default App; language: 'vue', title: 'Vue', code: ` ``` +## With Lucide lab or custom icons + +[Lucide lab](https://github.com/lucide-icons/lucide-lab) is a collection of icons that are not part of the Lucide main library. + +They can be used by using the `Icon` component. +All props like regular lucide icons can be passed to adjust the icon appearance. + +### Using the `Icon` component + +This creates a single icon based on the iconNode passed and renders a Lucide icon component. + +```vue + + + +``` + ## One generic icon component It is possible to create one generic icon component to load icons, but it is not recommended. @@ -84,30 +100,37 @@ The example below imports all ES Modules, so exercise caution when using it. Imp ### Icon Component Example ```vue - + + + ``` -#### Using the Icon Component +### Using the Icon Component + +All other props listed above also work on the `Icon` Component. ```vue ``` + +## Accessibility + +By default, we hide icons from screen readers using `aria-hidden="true"`. + +You can add accessibility attributes using aria-labels. + +```vue + + + +``` + +For best practices on accessibility, please see our [accessibility guide](../advanced/accessibility.md). From cb9ee36df8632f52bc8819fdd0207eee5117af7e Mon Sep 17 00:00:00 2001 From: Eric Fennis Date: Fri, 23 Jan 2026 11:11:51 +0100 Subject: [PATCH 006/234] ci: Run checks on next branch --- .github/workflows/linting-icons.yml | 3 +++ .github/workflows/lucide-angular.yml | 3 +++ .github/workflows/lucide-astro.yml | 3 +++ .github/workflows/lucide-font.yml | 3 +++ .github/workflows/lucide-preact.yml | 3 +++ .github/workflows/lucide-react-native.yml | 3 +++ .github/workflows/lucide-react.yml | 3 +++ .github/workflows/lucide-shared.yml | 3 +++ .github/workflows/lucide-solid.yml | 3 +++ .github/workflows/lucide-svelte-5.yml | 3 +++ .github/workflows/lucide-svelte.yml | 3 +++ .github/workflows/lucide-vue-next.yml | 3 +++ .github/workflows/lucide-vue.yml | 3 +++ .github/workflows/lucide.yml | 3 +++ 14 files changed, 42 insertions(+) diff --git a/.github/workflows/linting-icons.yml b/.github/workflows/linting-icons.yml index fc399cd3a..1d7c48375 100644 --- a/.github/workflows/linting-icons.yml +++ b/.github/workflows/linting-icons.yml @@ -1,6 +1,9 @@ name: Linting Icons on: + push: + branches: + - next pull_request: paths: - 'icons/*' diff --git a/.github/workflows/lucide-angular.yml b/.github/workflows/lucide-angular.yml index 0812c0ea4..4da339437 100644 --- a/.github/workflows/lucide-angular.yml +++ b/.github/workflows/lucide-angular.yml @@ -1,6 +1,9 @@ name: Lucide Angular checks on: + push: + branches: + - next pull_request: paths: - packages/lucide-angular/** diff --git a/.github/workflows/lucide-astro.yml b/.github/workflows/lucide-astro.yml index 74b9043c3..09bcb19b8 100644 --- a/.github/workflows/lucide-astro.yml +++ b/.github/workflows/lucide-astro.yml @@ -1,6 +1,9 @@ name: Lucide Astro Checks on: + push: + branches: + - next pull_request: paths: - packages/astro/** diff --git a/.github/workflows/lucide-font.yml b/.github/workflows/lucide-font.yml index 19430dea3..4b4cd1977 100644 --- a/.github/workflows/lucide-font.yml +++ b/.github/workflows/lucide-font.yml @@ -1,6 +1,9 @@ name: Lucide font checks on: + push: + branches: + - next pull_request: paths: - tools/build-font/** diff --git a/.github/workflows/lucide-preact.yml b/.github/workflows/lucide-preact.yml index 1da3cf236..fc7b1c824 100644 --- a/.github/workflows/lucide-preact.yml +++ b/.github/workflows/lucide-preact.yml @@ -1,6 +1,9 @@ name: Lucide Preact Checks on: + push: + branches: + - next pull_request: paths: - packages/lucide-preact/** diff --git a/.github/workflows/lucide-react-native.yml b/.github/workflows/lucide-react-native.yml index 7ed5cc039..99436b33e 100644 --- a/.github/workflows/lucide-react-native.yml +++ b/.github/workflows/lucide-react-native.yml @@ -1,6 +1,9 @@ name: Lucide React Native checks on: + push: + branches: + - next pull_request: paths: - packages/lucide-react-native/** diff --git a/.github/workflows/lucide-react.yml b/.github/workflows/lucide-react.yml index 2fe551f81..77f85f7d0 100644 --- a/.github/workflows/lucide-react.yml +++ b/.github/workflows/lucide-react.yml @@ -1,6 +1,9 @@ name: Lucide React Checks on: + push: + branches: + - next pull_request: paths: - packages/lucide-react/** diff --git a/.github/workflows/lucide-shared.yml b/.github/workflows/lucide-shared.yml index 69e7268db..56c4b1931 100644 --- a/.github/workflows/lucide-shared.yml +++ b/.github/workflows/lucide-shared.yml @@ -1,6 +1,9 @@ name: Lucide Shared Checks on: + push: + branches: + - next pull_request: paths: - packages/shared/** diff --git a/.github/workflows/lucide-solid.yml b/.github/workflows/lucide-solid.yml index 9c5e07424..a8515c761 100644 --- a/.github/workflows/lucide-solid.yml +++ b/.github/workflows/lucide-solid.yml @@ -1,6 +1,9 @@ name: Lucide Solid Checks on: + push: + branches: + - next pull_request: paths: - packages/lucide-solid/** diff --git a/.github/workflows/lucide-svelte-5.yml b/.github/workflows/lucide-svelte-5.yml index 64863d714..7912be539 100644 --- a/.github/workflows/lucide-svelte-5.yml +++ b/.github/workflows/lucide-svelte-5.yml @@ -1,6 +1,9 @@ name: Lucide Svelte 5 checks on: + push: + branches: + - next pull_request: paths: - packages/svelte/** diff --git a/.github/workflows/lucide-svelte.yml b/.github/workflows/lucide-svelte.yml index ec4d8e8e8..8623787dd 100644 --- a/.github/workflows/lucide-svelte.yml +++ b/.github/workflows/lucide-svelte.yml @@ -1,6 +1,9 @@ name: Lucide Svelte checks on: + push: + branches: + - next pull_request: paths: - packages/lucide-svelte/** diff --git a/.github/workflows/lucide-vue-next.yml b/.github/workflows/lucide-vue-next.yml index eb2ff1663..f1fa885c6 100644 --- a/.github/workflows/lucide-vue-next.yml +++ b/.github/workflows/lucide-vue-next.yml @@ -1,6 +1,9 @@ name: Lucide Vue Next checks on: + push: + branches: + - next pull_request: paths: - packages/lucide-vue-next/** diff --git a/.github/workflows/lucide-vue.yml b/.github/workflows/lucide-vue.yml index a4694f85c..c653429bb 100644 --- a/.github/workflows/lucide-vue.yml +++ b/.github/workflows/lucide-vue.yml @@ -1,6 +1,9 @@ name: Lucide Vue checks on: + push: + branches: + - next pull_request: paths: - packages/lucide-vue/** diff --git a/.github/workflows/lucide.yml b/.github/workflows/lucide.yml index 57fe6947d..578b71f36 100644 --- a/.github/workflows/lucide.yml +++ b/.github/workflows/lucide.yml @@ -1,6 +1,9 @@ name: Lucide checks on: + push: + branches: + - next pull_request: paths: - packages/lucide/** From c619ce988c895b3d76edcc9e899bbe5df5ef555e Mon Sep 17 00:00:00 2001 From: Eric Fennis Date: Fri, 6 Feb 2026 11:55:03 +0100 Subject: [PATCH 007/234] Fix tests --- packages/lucide-preact/tests/__snapshots__/Icon.spec.tsx.snap | 2 +- .../lucide-preact/tests/__snapshots__/context.spec.tsx.snap | 1 + packages/lucide-solid/src/Icon.tsx | 1 - packages/lucide-solid/tests/__snapshots__/context.spec.tsx.snap | 1 + 4 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/lucide-preact/tests/__snapshots__/Icon.spec.tsx.snap b/packages/lucide-preact/tests/__snapshots__/Icon.spec.tsx.snap index 0908247fd..956aa8168 100644 --- a/packages/lucide-preact/tests/__snapshots__/Icon.spec.tsx.snap +++ b/packages/lucide-preact/tests/__snapshots__/Icon.spec.tsx.snap @@ -3,7 +3,7 @@ exports[`Using Icon Component > should render icon and match snapshot 1`] = ` ` +- CSS `background-image` +- Canvas drawing +- Inline data URLs in HTML or SVG + +::: tip Environment notes +- The SVG is encoded as UTF-8 before base64 conversion to ensure correct handling of non-ASCII characters. +- No runtime configuration is required โ€” the function automatically selects the appropriate encoding strategy. +- If neither `btoa` nor `Buffer` is available, an error is thrown. +::: + +## Dynamic imports + +Dynamic imports are useful when you only know the icon name at runtime (for example, icon names stored in a database or a CMS). For purely static use cases, prefer direct imports for the best tree-shaking results. + +::: tip +Validate `iconName` before indexing the map (and provide a fallback icon) to avoid runtime errors. +::: +## Dynamic imports + +Dynamic imports are useful when the icon name is only known at runtime (for example, icon names stored in a CMS or database). For purely static usage, prefer direct imports for maximum tree-shaking. + +```ts +import { lucideDynamicIconImports } from '@lucide/icons/dynamic'; + +const name = 'house'; +const icon = await lucideDynamicIconImports[name]?.(); + +if (!icon) { + // handle unknown icon name (fallback) +} +``` diff --git a/docs/public/framework-logos/ts.svg b/docs/public/framework-logos/ts.svg new file mode 100644 index 000000000..cb42df855 --- /dev/null +++ b/docs/public/framework-logos/ts.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/public/package-logos/icons.svg b/docs/public/package-logos/icons.svg new file mode 100644 index 000000000..30396d6e0 --- /dev/null +++ b/docs/public/package-logos/icons.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/icons/.npmignore b/packages/icons/.npmignore new file mode 100644 index 000000000..fc28543eb --- /dev/null +++ b/packages/icons/.npmignore @@ -0,0 +1,10 @@ +stats +node_modules +tests +scripts +build +src +babel.config.js +jest.config.js +rollup.config.js +yarn.error.log diff --git a/packages/icons/README.md b/packages/icons/README.md new file mode 100644 index 000000000..971e2cb34 --- /dev/null +++ b/packages/icons/README.md @@ -0,0 +1,82 @@ +

+ + + +

+ +

+Lucide helper library that exports icon data. +

+ +
+ [![npm](https://img.shields.io/npm/v/@lucide/icons?color=blue)](https://www.npmjs.com/package/@lucide/icons) + ![NPM Downloads](https://img.shields.io/npm/dw/@lucide/icons) + [![GitHub](https://img.shields.io/github/license/lucide-icons/lucide)](https://lucide.dev/license) +
+ +

+ About + ยท + Icons + ยท + Documentation + ยท + License +

+ +# @lucide/icons + +A helper library that exports Lucide icon data in a tree-shakable format, also providing utilities for dynamic importing icons. + +## Installation + +```sh +pnpm add @lucide/icons +``` + +```sh +npm install @lucide/icons +``` + +```sh +yarn add @lucide/icons +``` + +```sh +bun add @lucide/icons +``` + +### CDN + +```html + + + + + +``` + +## Documentation + +For full documentation, visit [lucide.dev](https://lucide.dev/guide/packages/icons) + +## Community + +Join the [Discord server](https://discord.gg/EH6nSts) to chat with the maintainers and other users. + +## License + +Lucide is licensed under the ISC license. See [LICENSE](https://lucide.dev/license). + +## Sponsors + + + Powered by Vercel + + +DigitalOcean Referral Badge + +### Awesome backers ๐Ÿบ + +Scipress sponsor badge +pdfme sponsor badge diff --git a/packages/icons/package.json b/packages/icons/package.json new file mode 100644 index 000000000..165cbd181 --- /dev/null +++ b/packages/icons/package.json @@ -0,0 +1,77 @@ +{ + "name": "@lucide/icons", + "description": "A Lucide icon library that contains icon data in a standard Lucide format.", + "version": "0.0.1", + "license": "ISC", + "homepage": "https://lucide.dev", + "bugs": "https://github.com/lucide-icons/lucide/issues", + "repository": { + "type": "git", + "url": "https://github.com/lucide-icons/lucide.git", + "directory": "packages/lucide" + }, + "keywords": [ + "Lucide", + "HTML", + "Feather", + "Icons", + "Icon", + "SVG", + "Feather Icons" + ], + "amdName": "lucide-icons", + "source": "src/lucide-icons.ts", + "main": "dist/cjs/lucide-icons.cjs", + "module": "dist/esm/lucide-icons.mjs", + "types": "dist/esm/lucide-icons.d.ts", + "sideEffects": false, + "exports": { + ".": { + "types": "./dist/esm/lucide-icons.d.ts", + "import": "./dist/esm/lucide-icons.mjs", + "require": "./dist/cjs/lucide-icons.cjs", + "default": "./dist/esm/lucide-icons.mjs" + }, + "./icons/*": { + "import": "./dist/esm/icons/*.mjs", + "default": "./dist/esm/icons/*.mjs" + }, + "./dynamic": { + "types": "./dist/esm/dynamic.d.ts", + "import": "./dist/esm/dynamic.mjs", + "require": "./dist/cjs/dynamic.cjs", + "default": "./dist/esm/dynamic.mjs" + }, + "./build": { + "types": "./dist/esm/build.d.ts", + "import": "./dist/esm/build.mjs", + "require": "./dist/cjs/build.cjs", + "default": "./dist/esm/build.mjs" + } + }, + "scripts": { + "build": "pnpm clean && pnpm copy:license && pnpm build:icons && pnpm build:bundle", + "copy:license": "cp ../../LICENSE ./LICENSE", + "clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.ts", + "build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mjs --renderUniqueKey --withAliases --withDynamicImports --separateAliasesFile --aliasesFileExtension=.ts --iconFileExtension=.ts --exportFileName=index.ts", + "build:bundle": "rollup -c rollup.config.mjs", + "test": "pnpm build:icons && vitest run", + "test:watch": "vitest watch", + "test:update": "vitest -u", + "version": "pnpm version --git-tag-version=false" + }, + "devDependencies": { + "@lucide/build-icons": "workspace:*", + "@lucide/helpers": "^1.0.0", + "@lucide/rollup-plugins": "workspace:*", + "@rollup/plugin-replace": "^6.0.2", + "@testing-library/jest-dom": "^6.6.3", + "jest-serializer-html": "^7.1.0", + "rollup": "^4.53.3", + "rollup-plugin-dts": "^6.2.3", + "rollup-plugin-preserve-directives": "^0.4.0", + "typescript": "^5.8.3", + "vite": "^7.2.4", + "vitest": "^4.0.12" + } +} diff --git a/packages/icons/rollup.config.mjs b/packages/icons/rollup.config.mjs new file mode 100644 index 000000000..232afd24f --- /dev/null +++ b/packages/icons/rollup.config.mjs @@ -0,0 +1,87 @@ +import plugins from '@lucide/rollup-plugins'; +import pkg from './package.json' with { type: 'json' }; +import dts from 'rollup-plugin-dts'; + +const packageName = '@lucide/icons'; +const outputFileName = 'lucide-icons'; +const inputs = [`src/lucide-icons.ts`]; +const bundles = [ + { + format: 'cjs', + inputs, + extension: 'cjs', + }, + { + format: 'esm', + inputs: [...inputs, './src/dynamic.ts', './src/build.ts'], + preserveModules: true, + extension: 'mjs', + }, +]; + +const configs = bundles + .map( + ({ + inputs, + outputDir = 'dist', + outputFile, + format, + minify, + preserveModules, + entryFileNames, + external = [], + paths, + extension = 'js', + }) => + inputs.map((input) => ({ + input, + plugins: [...plugins({ pkg, minify })], + external, + output: { + name: packageName, + entryFileNames, + ...(preserveModules + ? { + dir: `${outputDir}/${format}`, + entryFileNames: `[name].${extension}`, + } + : { + file: + outputFile ?? + `${outputDir}/${format}/${outputFileName}${minify ? '.min' : ''}.${extension}`, + }), + paths, + format, + sourcemap: true, + preserveModules, + exports: 'named', + globals: {}, + preserveModulesRoot: 'src', + }, + })), + ) + .flat(); + +export default [ + ...[ + outputFileName, + `${outputFileName}.prefixed`, + `${outputFileName}.suffixed`, + 'dynamic', + 'build', + ].map((filename) => ({ + input: `./src/${filename}.ts`, + output: [ + { + file: `dist/esm/${filename}.d.ts`, + format: 'esm', + }, + { + file: `dist/cjs/${filename}.d.cts`, + format: 'cjs', + }, + ], + plugins: [dts()], + })), + ...configs, +]; diff --git a/packages/icons/scripts/exportTemplate.mjs b/packages/icons/scripts/exportTemplate.mjs new file mode 100644 index 000000000..5c5280496 --- /dev/null +++ b/packages/icons/scripts/exportTemplate.mjs @@ -0,0 +1,32 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import base64SVG from '@lucide/build-icons/utils/base64SVG'; + +export default async ({ + componentName, + iconName, + getSvg, + deprecated, + deprecationReason, + iconData, +}) => { + const svgContents = await getSvg(); + const svgBase64 = base64SVG(svgContents); + + return ` +import type { LucideIconData } from '../types'; + +/** + * @name ${iconName} + * @description Lucide SVG icon node. + * + * @preview ![img](data:image/svg+xml;base64,${svgBase64}) - https://lucide.dev/icons/${iconName} + * @see https://lucide.dev/guide/packages/lucide - Documentation + * + * @returns {Array} + * ${deprecated ? `@deprecated ${deprecationReason}` : ''} + */ +const ${componentName}: LucideIconData = ${JSON.stringify(iconData)} + +export default ${componentName}; +`; +}; diff --git a/packages/icons/src/aliases/index.ts b/packages/icons/src/aliases/index.ts new file mode 100644 index 000000000..bbe66d0a2 --- /dev/null +++ b/packages/icons/src/aliases/index.ts @@ -0,0 +1,3 @@ +export * from './aliases'; +export * from './prefixed'; +export * from './suffixed'; diff --git a/packages/icons/src/build.ts b/packages/icons/src/build.ts new file mode 100644 index 000000000..7ede1c55f --- /dev/null +++ b/packages/icons/src/build.ts @@ -0,0 +1,4 @@ +export { default as buildLucideIconNode } from './buildLucideIconNode'; +export { default as buildLucideDataUri } from './buildLucideDataUri'; +export { default as buildLucideIconElement } from './buildLucideIconElement'; +export { default as buildLucideSvg } from './buildLucideSvg'; diff --git a/packages/icons/src/buildLucideDataUri.ts b/packages/icons/src/buildLucideDataUri.ts new file mode 100644 index 000000000..64aa7526c --- /dev/null +++ b/packages/icons/src/buildLucideDataUri.ts @@ -0,0 +1,30 @@ +import { LucideBuildParams, LucideIconData } from './types'; +import buildLucideSvg from './buildLucideSvg'; + +/** + * Creates a base64 encoded data URI from a Lucide icon object. + * + * @param icon The icon to build. + * @param params Additional build parameters. + */ +function buildLucideDataUri(icon: LucideIconData, params: LucideBuildParams = {}) { + const svg = buildLucideSvg(icon, params); + + // Browser + if (typeof btoa === 'function') { + // Ensure proper UTF-8 handling before base64 + const utf8Bytes = new TextEncoder().encode(svg); + let binary = ''; + for (const element of utf8Bytes) binary += String.fromCodePoint(element); + return `data:image/svg+xml;base64,${btoa(binary)}`; + } + + // Node.js (and other JS runtimes with Buffer) + if (typeof Buffer !== 'undefined') { + return `data:image/svg+xml;base64,${Buffer.from(svg, 'utf8').toString('base64')}`; + } + + throw new Error('No base64 encoder available in this environment.'); +} + +export default buildLucideDataUri; diff --git a/packages/icons/src/buildLucideIconElement.ts b/packages/icons/src/buildLucideIconElement.ts new file mode 100644 index 000000000..a819d0fde --- /dev/null +++ b/packages/icons/src/buildLucideIconElement.ts @@ -0,0 +1,34 @@ +import { LucideBuildParams, LucideIconData, LucideIconNode } from './types'; +import buildLucideIconNode from './buildLucideIconNode'; + +const buildDomElement = ( + document: Document, + [tagName, attributes, children = []]: LucideIconNode, +): Element => { + const element = document.createElementNS('http://www.w3.org/2000/svg', tagName); + for (const [attrName, value] of Object.entries(attributes)) { + element.setAttribute(attrName, value); + } + for (const node of children) { + const childNode = buildDomElement(document, node); + element.appendChild(childNode); + } + return element; +}; + +/** + * Creates an SvgElement from a Lucide icon object. + * + * @param document The document to create the Element in. + * @param icon The icon to build. + * @param params Additional build parameters. + */ +function buildLucideIconElement( + document: Document, + icon: LucideIconData, + params: LucideBuildParams = {}, +) { + return buildDomElement(document, buildLucideIconNode(icon, params)); +} + +export default buildLucideIconElement; diff --git a/packages/icons/src/buildLucideIconNode.ts b/packages/icons/src/buildLucideIconNode.ts new file mode 100644 index 000000000..a918ffbbd --- /dev/null +++ b/packages/icons/src/buildLucideIconNode.ts @@ -0,0 +1,55 @@ +import { LucideBuildParams, LucideIconData, LucideIconNode } from './types'; + +const defaultAttributes = { + xmlns: 'http://www.w3.org/2000/svg', + width: '24', + height: '24', + viewBox: '0 0 24 24', + fill: 'none', + stroke: 'currentColor', + 'stroke-width': '2', + 'stroke-linecap': 'round', + 'stroke-linejoin': 'round', +}; + +/** + * Creates a Lucide icon node (an svgson-like format) from a Lucide icon object. + * + * @param icon The icon to build. + * @param params Additional build parameters. + */ +function buildLucideIconNode(icon: LucideIconData, params: LucideBuildParams = {}): LucideIconNode { + const viewBoxWidth = ('size' in icon ? icon.size : icon.width) ?? defaultAttributes.width; + const viewBoxHeight = ('size' in icon ? icon.size : icon.height) ?? defaultAttributes.height; + const aliasClassNames = icon.aliases?.map((alias) => `lucide-${alias}`) ?? []; + const classList = ['lucide', `lucide-${icon.name}`, ...aliasClassNames]; + if (params['className']) { + classList.push(params['className']); + } + const attributes = { + ...defaultAttributes, + ...('color' in params && { stroke: params['color'] }), + ...('size' in params && + params['size'] && { + width: params['size'].toString(10), + height: params['size'].toString(10), + }), + ...('width' in params && params['width'] && { width: params['width'].toString(10) }), + ...('height' in params && params['height'] && { height: params['height'].toString(10) }), + ...('strokeWidth' in params && + params['strokeWidth'] && { 'stroke-width': params['strokeWidth'].toString(10) }), + class: classList.join(' '), + viewBox: `0 0 ${viewBoxWidth} ${viewBoxHeight}`, + ...('attributes' in params && params.attributes), + }; + return [ + 'svg', + attributes, + icon.node.map(([name, attrs]) => [ + name, + params['absoluteStrokeWidth'] ? { 'vector-effect': 'non-scaling-stroke', ...attrs } : attrs, + ]), + ]; +} + +export default buildLucideIconNode; diff --git a/packages/icons/src/buildLucideSvg.ts b/packages/icons/src/buildLucideSvg.ts new file mode 100644 index 000000000..27bca4a91 --- /dev/null +++ b/packages/icons/src/buildLucideSvg.ts @@ -0,0 +1,19 @@ +import { LucideBuildParams, LucideIconData, LucideIconNode } from './types'; +import buildLucideIconNode from './buildLucideIconNode'; + +const buildDomNode = ([tagName, attributes, children = []]: LucideIconNode): string => + `<${tagName} ${Object.entries(attributes) + .map(([attrName, value]) => `${attrName}="${value}"`) + .join(' ')}>${children?.map((child) => buildDomNode(child)).join('')}`; + +/** + * Creates an SVG string from a Lucide icon object. + * + * @param icon The icon to build. + * @param params Additional build parameters. + */ +function buildLucideSvg(icon: LucideIconData, params: LucideBuildParams = {}) { + return buildDomNode(buildLucideIconNode(icon, params)); +} + +export default buildLucideSvg; diff --git a/packages/icons/src/dynamic.ts b/packages/icons/src/dynamic.ts new file mode 100644 index 000000000..098da1204 --- /dev/null +++ b/packages/icons/src/dynamic.ts @@ -0,0 +1,2 @@ +export { lucideIconNames, type LucideIconName } from './dynamicIcon'; +export { default as lucideDynamicIconImports } from './dynamicIconImports'; diff --git a/packages/icons/src/dynamicIcon.ts b/packages/icons/src/dynamicIcon.ts new file mode 100644 index 000000000..2b1432652 --- /dev/null +++ b/packages/icons/src/dynamicIcon.ts @@ -0,0 +1,8 @@ +import dynamicIconImports from './dynamicIconImports'; + +export type LucideIconName = keyof typeof dynamicIconImports; + +/** + * The list of available Lucide icon names. + */ +export const lucideIconNames = Object.keys(dynamicIconImports) as Array; diff --git a/packages/icons/src/icons/.gitkeep b/packages/icons/src/icons/.gitkeep new file mode 100644 index 000000000..e3d85f774 --- /dev/null +++ b/packages/icons/src/icons/.gitkeep @@ -0,0 +1 @@ +Folder for generated icons diff --git a/packages/icons/src/lucide-icons.prefixed.ts b/packages/icons/src/lucide-icons.prefixed.ts new file mode 100644 index 000000000..367f9b8ca --- /dev/null +++ b/packages/icons/src/lucide-icons.prefixed.ts @@ -0,0 +1,5 @@ +export * as icons from './icons'; +export * from './aliases/prefixed'; +export * from './types'; + +export * from './build'; diff --git a/packages/icons/src/lucide-icons.suffixed.ts b/packages/icons/src/lucide-icons.suffixed.ts new file mode 100644 index 000000000..551638884 --- /dev/null +++ b/packages/icons/src/lucide-icons.suffixed.ts @@ -0,0 +1,3 @@ +export * as icons from './icons'; +export * from './aliases/suffixed'; +export * from './types'; diff --git a/packages/icons/src/lucide-icons.ts b/packages/icons/src/lucide-icons.ts new file mode 100644 index 000000000..0d4146674 --- /dev/null +++ b/packages/icons/src/lucide-icons.ts @@ -0,0 +1,4 @@ +export * as icons from './icons'; +export * from './icons'; +export * from './aliases/index'; +export * from './types'; diff --git a/packages/icons/src/types.ts b/packages/icons/src/types.ts new file mode 100644 index 000000000..563c93fd7 --- /dev/null +++ b/packages/icons/src/types.ts @@ -0,0 +1,43 @@ +export type SVGProps = Record; + +/** + * A Lucide icon node (an svgson-like internal format) + */ +export type LucideIconNode = + | [attrName: string, attributes: SVGProps] + | [attrName: string, attributes: SVGProps, children: LucideIconNode[]]; + +/** + * A Lucide icon object that fully describes an icon to be displayed. + */ +export type LucideIconData = { + name: string; + node: LucideIconNode[]; + aliases?: string[]; +} & ({ size: number } | { width: number; height: number }); + +/** + * Build parameters for creating a Lucide icon instance for display. + */ +export type LucideBuildParams = { + /** + * The color of the icon. + */ + color?: string; + /** + * The stroke width. + */ + strokeWidth?: number; + /** + * Adds [`vector-effect="non-scaling-stroke"`](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/vector-effect) to child elements. + */ + absoluteStrokeWidth?: boolean; + /** + * Extra CSS class names to pass to the SVG element. + */ + className?: string; + /** + * Any extra attributes to pass to the SVG element. + */ + attributes?: SVGProps; +} & ({ size?: number } | { width?: number; height?: number }); diff --git a/packages/icons/tests/__snapshots__/buildLucideIconElement.spec.ts.snap b/packages/icons/tests/__snapshots__/buildLucideIconElement.spec.ts.snap new file mode 100644 index 000000000..2963eecb8 --- /dev/null +++ b/packages/icons/tests/__snapshots__/buildLucideIconElement.spec.ts.snap @@ -0,0 +1,24 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`buildLucideIconElement > should match the snapshot 1`] = ` + + + + + + +`; diff --git a/packages/icons/tests/__snapshots__/buildLucideIconNode.spec.ts.snap b/packages/icons/tests/__snapshots__/buildLucideIconNode.spec.ts.snap new file mode 100644 index 000000000..75854cf7e --- /dev/null +++ b/packages/icons/tests/__snapshots__/buildLucideIconNode.spec.ts.snap @@ -0,0 +1,3 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`buildLucideIconNode > should match the snapshot 1`] = `"{"xmlns":"http://www.w3.org/2000/svg","width":"24","height":"24","viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","class":"lucide lucide-house lucide-home"}"`; diff --git a/packages/icons/tests/__snapshots__/buildLucideSvg.spec.ts.snap b/packages/icons/tests/__snapshots__/buildLucideSvg.spec.ts.snap new file mode 100644 index 000000000..97b586b69 --- /dev/null +++ b/packages/icons/tests/__snapshots__/buildLucideSvg.spec.ts.snap @@ -0,0 +1,26 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`buildLucideSvg > should match the snapshot 1`] = ` + + + + + + +`; + +exports[`buildLucideSvgDataUri > should match the snapshot 1`] = `"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWhvdXNlIGx1Y2lkZS1ob21lIj48cGF0aCBkPSJNMTUgMjF2LThhMSAxIDAgMCAwLTEtMWgtNGExIDEgMCAwIDAtMSAxdjgiIGtleT0iNXd3bHI1Ij48L3BhdGg+PHBhdGggZD0iTTMgMTBhMiAyIDAgMCAxIC43MDktMS41MjhsNy02YTIgMiAwIDAgMSAyLjU4MiAwbDcgNkEyIDIgMCAwIDEgMjEgMTB2OWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnoiIGtleT0icjZuc3MxIj48L3BhdGg+PC9zdmc+"`; diff --git a/packages/icons/tests/buildLucideIconElement.spec.ts b/packages/icons/tests/buildLucideIconElement.spec.ts new file mode 100644 index 000000000..88c9cc559 --- /dev/null +++ b/packages/icons/tests/buildLucideIconElement.spec.ts @@ -0,0 +1,50 @@ +import { describe, expect, it } from 'vitest'; +import { House } from '../src/lucide-icons'; +import { getOriginalSvg, removeKeys } from './helpers'; +import buildLucideIconElement from '../src/buildLucideIconElement'; + +describe('buildLucideIconElement', () => { + it('should create SVG Element', () => { + const HomeSVG = buildLucideIconElement(document, House); + + expect(HomeSVG.tagName).toBe('svg'); + }); + + it('should match the snapshot', () => { + const HomeSVG = buildLucideIconElement(document, House); + + expect(HomeSVG.outerHTML).toMatchSnapshot(); + }); + + it('should create SVG Element with attributes', () => { + const HomeSVG = buildLucideIconElement(document, House, { attributes: { fill: 'red' } }); + + expect(HomeSVG.getAttribute('fill')).toBe('red'); + }); + + it('should create SVG Element with class name', () => { + const HomeSVG = buildLucideIconElement(document, House, { attributes: { class: 'icon' } }); + + expect(HomeSVG.getAttribute('class')).toBe('icon'); + }); + + it('should add backwards-compatible classes', () => { + const HomeSVG = buildLucideIconElement(document, House); + + expect(HomeSVG.getAttribute('class')).toBe('lucide lucide-house lucide-home'); + }); + + it('should merge classes', () => { + const HomeSVG = buildLucideIconElement(document, House, { className: 'icon' }); + + expect(HomeSVG.getAttribute('class')).toBe('lucide lucide-house lucide-home icon'); + }); + + it('should create the correct svg element', () => { + const HomeSVG = buildLucideIconElement(document, House); + + const svg = getOriginalSvg('house', ['home']); + + expect(removeKeys(HomeSVG.outerHTML)).toBe(svg); + }); +}); diff --git a/packages/icons/tests/buildLucideIconNode.spec.ts b/packages/icons/tests/buildLucideIconNode.spec.ts new file mode 100644 index 000000000..dc3345ac5 --- /dev/null +++ b/packages/icons/tests/buildLucideIconNode.spec.ts @@ -0,0 +1,92 @@ +import { describe, expect, it } from 'vitest'; +import { House } from '../src/lucide-icons'; +import buildLucideIconNode from '../src/buildLucideIconNode'; + +describe('buildLucideIconNode', () => { + it('should create icon node', () => { + const HouseSVG = buildLucideIconNode(House); + + expect(HouseSVG.at(0)).toBe('svg'); + }); + + it('should match the snapshot', () => { + const HouseSVG = buildLucideIconNode(House); + + expect(JSON.stringify(HouseSVG.at(1))).toMatchSnapshot(); + }); + + it('should override dimensions, but not viewBox', () => { + const HouseSVG = buildLucideIconNode(House, { size: 12 }); + + expect(HouseSVG[1]['width']).toBe('12'); + expect(HouseSVG[1]['height']).toBe('12'); + expect(HouseSVG[1]['viewBox']).toBe('0 0 24 24'); + }); + + it('should override width, but not height', () => { + const HouseSVG = buildLucideIconNode(House, { width: 12 }); + + expect(HouseSVG[1]['width']).toBe('12'); + expect(HouseSVG[1]['height']).toBe('24'); + expect(HouseSVG[1]['viewBox']).toBe('0 0 24 24'); + }); + + it('should override height, but not width', () => { + const HouseSVG = buildLucideIconNode(House, { height: 12 }); + + expect(HouseSVG[1]['width']).toBe('24'); + expect(HouseSVG[1]['height']).toBe('12'); + expect(HouseSVG[1]['viewBox']).toBe('0 0 24 24'); + }); + + it('should override color', () => { + const HouseSVG = buildLucideIconNode(House, { color: 'pink' }); + + expect(HouseSVG[1]['stroke']).toBe('pink'); + expect(HouseSVG[1]['fill']).toBe('none'); + }); + + it('should override stroke width', () => { + const HouseSVG = buildLucideIconNode(House, { strokeWidth: 12 }); + + expect(HouseSVG[1]['stroke-width']).toBe('12'); + }); + + it('should set non-scaling-stroke to child nodes', () => { + const HouseSVG = buildLucideIconNode(House, { absoluteStrokeWidth: true }); + + for (const node of HouseSVG[2]!) { + expect(node[1]['vector-effect']).toBe('non-scaling-stroke'); + } + }); + + it('should not set non-scaling-stroke', () => { + const HouseSVG = buildLucideIconNode(House, { absoluteStrokeWidth: false }); + + expect(HouseSVG[1]['vector-effect']).toBeUndefined(); + }); + + it('should create icon node with attributes', () => { + const HouseSVG = buildLucideIconNode(House, { attributes: { fill: 'red' } }); + + expect(HouseSVG[1]['fill']).toBe('red'); + }); + + it('should create icon node with class name', () => { + const HouseSVG = buildLucideIconNode(House, { attributes: { class: 'icon' } }); + + expect(HouseSVG[1]['class']).toBe('icon'); + }); + + it('should add backwards-compatible classes', () => { + const HouseSVG = buildLucideIconNode(House); + + expect(HouseSVG[1]['class']).toBe('lucide lucide-house lucide-home'); + }); + + it('should merge classes', () => { + const HouseSVG = buildLucideIconNode(House, { className: 'icon' }); + + expect(HouseSVG[1]['class']).toBe('lucide lucide-house lucide-home icon'); + }); +}); diff --git a/packages/icons/tests/buildLucideSvg.spec.ts b/packages/icons/tests/buildLucideSvg.spec.ts new file mode 100644 index 000000000..7858aa732 --- /dev/null +++ b/packages/icons/tests/buildLucideSvg.spec.ts @@ -0,0 +1,29 @@ +import { describe, expect, it } from 'vitest'; +import { House } from '../src/lucide-icons'; +import { getOriginalSvg, removeKeys } from './helpers'; +import buildLucideSvg from '../src/buildLucideSvg'; +import buildLucideDataUri from '../src/buildLucideDataUri'; + +describe('buildLucideSvg', () => { + it('should match the snapshot', () => { + const HouseSVG = buildLucideSvg(House); + + expect(HouseSVG).toMatchSnapshot(); + }); + + it('should create the correct svg element', () => { + const HouseSVG = buildLucideSvg(House); + + const svg = getOriginalSvg('house', ['home']); + + expect(removeKeys(HouseSVG)).toBe(svg); + }); +}); + +describe('buildLucideSvgDataUri', () => { + it('should match the snapshot', () => { + const HouseDataUri = buildLucideDataUri(House); + + expect(HouseDataUri).toMatchSnapshot(); + }); +}); diff --git a/packages/icons/tests/helpers.ts b/packages/icons/tests/helpers.ts new file mode 100644 index 000000000..b684d99dd --- /dev/null +++ b/packages/icons/tests/helpers.ts @@ -0,0 +1,19 @@ +import fs from 'fs'; +import path from 'path'; +import { parseSync, stringify } from 'svgson'; + +const ICONS_DIR = path.resolve(__dirname, '../../../icons'); + +export const getOriginalSvg = (iconName: string, aliasNames?: string[]) => { + const svgContent = fs.readFileSync(path.join(ICONS_DIR, `${iconName}.svg`), 'utf8'); + const svgParsed = parseSync(svgContent); + + if (aliasNames) { + svgParsed.attributes['class'] = + `lucide lucide-${iconName} ${aliasNames.map((alias) => `lucide-${alias}`).join(' ')}`; + } + + return stringify(svgParsed, { selfClose: false }); +}; + +export const removeKeys = (svg: string) => svg.replaceAll(/ key="[^"]+"/g, ''); diff --git a/packages/icons/tests/lucide-icons.spec.ts b/packages/icons/tests/lucide-icons.spec.ts new file mode 100644 index 000000000..6658b3988 --- /dev/null +++ b/packages/icons/tests/lucide-icons.spec.ts @@ -0,0 +1,10 @@ +import { describe, expect, it } from 'vitest'; +import { House } from '../src/lucide-icons'; + +describe('lucide-icons', () => { + it('should init', () => { + const HouseSVG = House; + + expect(House).toMatchObject(House); + }); +}); diff --git a/packages/icons/tests/setupVitest.js b/packages/icons/tests/setupVitest.js new file mode 100644 index 000000000..03a0244af --- /dev/null +++ b/packages/icons/tests/setupVitest.js @@ -0,0 +1,5 @@ +import { expect } from 'vitest'; +import '@testing-library/jest-dom/vitest'; +import htmlSerializer from 'jest-serializer-html'; + +expect.addSnapshotSerializer(htmlSerializer); diff --git a/packages/icons/tsconfig.json b/packages/icons/tsconfig.json new file mode 100644 index 000000000..2e5db9189 --- /dev/null +++ b/packages/icons/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "strict": true, + "declaration": false, + "noEmitOnError": true, + "noEmit": true, + "noFallthroughCasesInSwitch": true, + "moduleResolution": "node", + "module": "ESNext", + "target": "ESNext", + "esModuleInterop": true, + "isolatedModules": true, + "lib": ["esnext", "dom"], + "skipLibCheck": true, + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + "downlevelIteration": true, + "sourceMap": true, + "outDir": "./dist", + }, + "exclude": ["**/node_modules"], +} diff --git a/packages/icons/vitest.config.mts b/packages/icons/vitest.config.mts new file mode 100644 index 000000000..295f35b09 --- /dev/null +++ b/packages/icons/vitest.config.mts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + globals: true, + environment: 'jsdom', + setupFiles: './tests/setupVitest.js', + } +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 313f353e0..3e413aa91 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -246,6 +246,45 @@ importers: specifier: ^4.0.12 version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + packages/icons: + devDependencies: + '@lucide/build-icons': + specifier: workspace:* + version: link:../../tools/build-icons + '@lucide/helpers': + specifier: ^1.0.0 + version: 1.0.0 + '@lucide/rollup-plugins': + specifier: workspace:* + version: link:../../tools/rollup-plugins + '@rollup/plugin-replace': + specifier: ^6.0.2 + version: 6.0.3(rollup@4.59.0) + '@testing-library/jest-dom': + specifier: ^6.6.3 + version: 6.9.1 + jest-serializer-html: + specifier: ^7.1.0 + version: 7.1.0 + rollup: + specifier: ^4.53.3 + version: 4.59.0 + rollup-plugin-dts: + specifier: ^6.2.3 + version: 6.2.3(rollup@4.59.0)(typescript@5.9.3) + rollup-plugin-preserve-directives: + specifier: ^0.4.0 + version: 0.4.0(rollup@4.59.0) + typescript: + specifier: ^5.8.3 + version: 5.9.3 + vite: + specifier: ^7.2.4 + version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vitest: + specifier: ^4.0.12 + version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + packages/lucide: devDependencies: '@lucide/build-icons': @@ -3849,6 +3888,9 @@ packages: '@lezer/lr@1.4.3': resolution: {integrity: sha512-yenN5SqAxAPv/qMnpWW0AT7l+SxVrgG+u0tNsRQWqbrz66HIl8DnEbBObvy21J5K7+I1v7gsAnlE2VQ5yYVSeA==} + '@lucide/helpers@1.0.0': + resolution: {integrity: sha512-9dfxrgLLaoCfr3R/eh6wwlUcY+ZPdEv6SDwFMUhYoO6HhGL8yN8hb5ZwI/OfzbK9mdJpa+jYfwP4nF4ZlZwZLA==} + '@mapbox/node-pre-gyp@2.0.3': resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==} engines: {node: '>=18'} @@ -4547,15 +4589,6 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.1.0': - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} engines: {node: '>=14.0.0'} @@ -9588,9 +9621,6 @@ packages: resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} engines: {node: '>=12'} - magic-string@0.30.11: - resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} - magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} @@ -17134,6 +17164,8 @@ snapshots: dependencies: '@lezer/common': 1.3.0 + '@lucide/helpers@1.0.0': {} + '@mapbox/node-pre-gyp@2.0.3(encoding@0.1.13)': dependencies: consola: 3.4.2 @@ -17921,14 +17953,6 @@ snapshots: optionalDependencies: rollup: 4.59.0 - '@rollup/pluginutils@5.1.0(rollup@4.59.0)': - dependencies: - '@types/estree': 1.0.8 - estree-walker: 2.0.2 - picomatch: 2.3.1 - optionalDependencies: - rollup: 4.59.0 - '@rollup/pluginutils@5.3.0(rollup@4.59.0)': dependencies: '@types/estree': 1.0.8 @@ -23770,10 +23794,6 @@ snapshots: dependencies: sourcemap-codec: 1.4.8 - magic-string@0.30.11: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -26509,8 +26529,8 @@ snapshots: rollup-plugin-preserve-directives@0.4.0(rollup@4.59.0): dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.59.0) - magic-string: 0.30.11 + '@rollup/pluginutils': 5.3.0(rollup@4.59.0) + magic-string: 0.30.21 rollup: 4.59.0 rollup-plugin-sourcemaps@0.6.3(@types/node@12.20.55)(rollup@2.79.2): diff --git a/tools/build-icons/building/generateIconFiles.ts b/tools/build-icons/building/generateIconFiles.ts index 9babf1cf2..b401fa2bd 100644 --- a/tools/build-icons/building/generateIconFiles.ts +++ b/tools/build-icons/building/generateIconFiles.ts @@ -48,15 +48,27 @@ function generateIconFiles({ ]); const getSvg = () => readSvg(`${iconName}.svg`, iconsDir); - const { deprecated = false, toBeRemovedInVersion = undefined } = iconMetaData[iconName]; + const { + deprecated = false, + toBeRemovedInVersion = undefined, + aliases = [], + } = iconMetaData[iconName]; const deprecationReason = deprecated - ? deprecationReasonTemplate(iconMetaData[iconName]?.deprecationReason ?? '', { + ? deprecationReasonTemplate(iconMetaData[iconName].deprecationReason ?? '', { componentName, iconName, toBeRemovedInVersion, }) : ''; + const iconData = { + name: iconName, + size: 24, + node: children, + ...((aliases?.length ?? 0) > 0 && { + aliases: aliases.map((alias) => (typeof alias === 'string' ? alias : alias.name)), + }), + }; const elementTemplate = await template({ componentName, iconName, @@ -64,6 +76,7 @@ function generateIconFiles({ getSvg, deprecated, deprecationReason, + iconData, }); const output = pretty diff --git a/tools/build-icons/types.ts b/tools/build-icons/types.ts index 7656f5ecc..a12b3ca75 100644 --- a/tools/build-icons/types.ts +++ b/tools/build-icons/types.ts @@ -6,14 +6,24 @@ export type IconNode = [tag: string, attrs: SVGProps][]; export type IconNodeWithChildren = [tag: string, attrs: SVGProps, children: IconNode]; -export type TemplateFunction = (params: { +export type IconData = { + name: string; + node: IconNode; + aliases?: string[]; +} & ({ size: number } | { width: number; height: number }); + +export interface ExportTemplate { componentName: string; iconName: string; children: IconNode; getSvg: () => Promise; - deprecated?: boolean; - deprecationReason?: string; -}) => Promise; + deprecated: boolean; + deprecationReason: string; + aliases?: (string | AliasDeprecation)[]; + iconData: IconData; +} + +export type TemplateFunction = (params: ExportTemplate) => Promise; export type Path = string; diff --git a/tools/build-icons/utils/defineExportTemplate.ts b/tools/build-icons/utils/defineExportTemplate.ts index 201937439..87b521152 100644 --- a/tools/build-icons/utils/defineExportTemplate.ts +++ b/tools/build-icons/utils/defineExportTemplate.ts @@ -1,15 +1,4 @@ -import { type IconNode } from '../types.ts'; - -export interface ExportTemplate { - componentName: string; - iconName: string; - children: IconNode; - getSvg: () => Promise; - deprecated: boolean; - deprecationReason: string; -} - -export type TemplateFunction = (params: ExportTemplate) => Promise; +import type { TemplateFunction } from '../types.ts'; const defineExportTemplate = (exportFunction: TemplateFunction) => exportFunction; diff --git a/tools/build-icons/utils/deprecationReasonTemplate.ts b/tools/build-icons/utils/deprecationReasonTemplate.ts index a82c2e7da..a8c2c8e4e 100644 --- a/tools/build-icons/utils/deprecationReasonTemplate.ts +++ b/tools/build-icons/utils/deprecationReasonTemplate.ts @@ -11,10 +11,9 @@ export default function deprecationReasonTemplate( toBeRemovedInVersion?: string; }, ) { + const resourceName = deprecationReason.startsWith('icon') ? 'icon' : 'alias'; const removalNotice = toBeRemovedInVersion - ? ` This ${ - deprecationReason.startsWith('icon') ? 'icon' : 'alias' - } will be removed in ${toBeRemovedInVersion}` + ? ` This ${resourceName} will be removed in ${toBeRemovedInVersion}` : ''; switch (deprecationReason) { @@ -24,6 +23,7 @@ export default function deprecationReasonTemplate( return `The icon was combined with another icon that shares the same use case, use {@link ${componentName}} instead.${removalNotice}`; case 'alias.name': return `The name of this icon was changed because it didn't meet our guidelines anymore, use {@link ${componentName}} instead.${removalNotice}`; + default: throw new Error(`Unknown deprecation reason: ${deprecationReason}`); } } From f910edc0075040acf10085a64d722f2380d59d1e Mon Sep 17 00:00:00 2001 From: Sorin Hadjiu <33622711+shx08@users.noreply.github.com> Date: Sat, 14 Mar 2026 21:49:14 +0200 Subject: [PATCH 015/234] docs(site): add strapi lucide icons package (#4112) --- .../data/packageData.thirdParty.json | 19 +++++++++++++++++++ docs/public/framework-logos/strapi.svg | 7 +++++++ 2 files changed, 26 insertions(+) create mode 100644 docs/public/framework-logos/strapi.svg diff --git a/docs/.vitepress/data/packageData.thirdParty.json b/docs/.vitepress/data/packageData.thirdParty.json index db39dc98d..2e6fa4c53 100644 --- a/docs/.vitepress/data/packageData.thirdParty.json +++ b/docs/.vitepress/data/packageData.thirdParty.json @@ -190,5 +190,24 @@ ], "source": "https://github.com/Polydile/dile-components", "documentation": "https://github.com/Polydile/dile-components/blob/master/packages/iconlib/README.md" + }, + { + "name": "strapi-lucide-icons", + "description": "Lucide icon picker custom field for Strapi.", + "icon": "/framework-logos/strapi.svg", + "shields": [ + { + "alt": "Latest Stable Version", + "src": "https://img.shields.io/npm/v/strapi-lucide-icons", + "href": "https://www.npmjs.com/package/strapi-lucide-icons" + }, + { + "alt": "Total Downloads", + "src": "https://img.shields.io/npm/dw/strapi-lucide-icons", + "href": "https://www.npmjs.com/package/strapi-lucide-icons" + } + ], + "source": "https://github.com/shx08/strapi-lucide-icons", + "documentation": "https://github.com/shx08/strapi-lucide-icons/blob/main/README.md" } ] diff --git a/docs/public/framework-logos/strapi.svg b/docs/public/framework-logos/strapi.svg new file mode 100644 index 000000000..42b7ba4ca --- /dev/null +++ b/docs/public/framework-logos/strapi.svg @@ -0,0 +1,7 @@ + + + + + + + From f8ee8d7287b4c2d22638ab21f64e1fb9452e3fa8 Mon Sep 17 00:00:00 2001 From: Jakob Guddas Date: Sat, 14 Mar 2026 20:55:52 +0100 Subject: [PATCH 016/234] docs: add rule about consistent use of shapes (#3975) --- docs/guide/design/icon-design-guide.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/guide/design/icon-design-guide.md b/docs/guide/design/icon-design-guide.md index f6b8a4844..c62c47cec 100644 --- a/docs/guide/design/icon-design-guide.md +++ b/docs/guide/design/icon-design-guide.md @@ -90,6 +90,15 @@ Here are rules that should be followed to keep quality and consistency when maki **Tip:** whenever possible align elements and arc centers to the grid. +### 14. Icons should share common shapes + +You should try to create consistent groups and variants, reuse and try to create uniformity. +Consistency inside groups and variants has a lower priority than the rules above. + +**Example:** All `-off` icons should look the same unless it for example violates the optical volume rule. + +**Tip:** Try to not move the base shape to enable better use in a toggle context. + ## Naming conventions 1. Icon names use lower kebab case.\ From 2a7eeb2d8715383eb2f03a3a5fa87fdbbebe0ac1 Mon Sep 17 00:00:00 2001 From: Eric Fennis Date: Sat, 14 Mar 2026 20:57:27 +0100 Subject: [PATCH 017/234] ci(version-1): Prepare CI.yml for next release tag (#4145) --- .github/workflows/ci.yml | 12 ++++++++++++ .github/workflows/release.yml | 32 ++++++++++++++++++-------------- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 072118298..9e7b75052 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,6 +12,16 @@ on: version: description: Version required: true + tag: + required: true + description: NPM tag + default: 'latest' + type: choice + options: + - latest + - next + - beta + - alpha permissions: id-token: write # Required for OIDC @@ -79,9 +89,11 @@ jobs: with: version: ${{ needs.create-release.outputs.VERSION }} + dispatch-release: if: github.event_name == 'workflow_dispatch' uses: './.github/workflows/release.yml' secrets: inherit with: version: ${{ inputs.version }} + tag: ${{ inputs.tag }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e1798f55c..fffc87d62 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,6 +11,10 @@ on: required: true description: Version type: string + tag: + description: NPM tag + default: 'latest' + type: string permissions: id-token: write # Required for OIDC @@ -20,7 +24,7 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} jobs: - pre-release: + prepare: if: github.repository == 'lucide-icons/lucide' && contains('["ericfennis", "karsa-mistmere", "jguddas"]', github.actor) runs-on: ubuntu-latest outputs: @@ -38,7 +42,7 @@ jobs: release: if: github.repository == 'lucide-icons/lucide' runs-on: ubuntu-latest - needs: pre-release + needs: prepare permissions: id-token: write # Required for OIDC contents: read @@ -50,7 +54,7 @@ jobs: 'lucide', 'lucide-react', 'lucide-react-native', - 'lucide-vue-next', + # 'lucide-vue-next', 'lucide-angular', 'lucide-preact', 'lucide-solid', @@ -72,7 +76,7 @@ jobs: run: pnpm install --frozen-lockfile - name: Set new version - run: pnpm --filter ${{ matrix.package }} version --new-version ${{ needs.pre-release.outputs.VERSION }} --no-git-tag-version + run: pnpm --filter ${{ matrix.package }} version --new-version ${{ needs.prepare.outputs.VERSION }} --no-git-tag-version - name: Build run: pnpm --filter ${{ matrix.package }} build @@ -81,14 +85,14 @@ jobs: run: pnpm --filter ${{ matrix.package }} test - name: Publish - run: pnpm --filter ${{ matrix.package }} publish --access public --no-git-checks --ignore-scripts + run: pnpm --filter ${{ matrix.package }} publish --access public --no-git-checks --ignore-scripts --tag ${{ inputs.tag }} env: NPM_CONFIG_PROVENANCE: true lucide-static: if: github.repository == 'lucide-icons/lucide' runs-on: ubuntu-latest - needs: [pre-release, lucide-font] + needs: [prepare, lucide-font] permissions: id-token: write # Required for OIDC contents: read @@ -106,7 +110,7 @@ jobs: run: pnpm install --frozen-lockfile - name: Set new version - run: pnpm --filter lucide-static version --new-version ${{ needs.pre-release.outputs.VERSION }} --no-git-tag-version + run: pnpm --filter lucide-static version --new-version ${{ needs.prepare.outputs.VERSION }} --no-git-tag-version - name: Move Font run: cp -r lucide-font packages/lucide-static/font @@ -122,7 +126,7 @@ jobs: lucide-font: if: github.repository == 'lucide-icons/lucide' runs-on: ubuntu-latest - needs: pre-release + needs: prepare steps: - uses: actions/checkout@v6 - uses: pnpm/action-setup@v4 @@ -148,7 +152,7 @@ jobs: post-release: if: github.repository == 'lucide-icons/lucide' runs-on: ubuntu-latest - needs: [pre-release, lucide-font] + needs: [prepare, lucide-font] permissions: id-token: write # Required for OIDC contents: write @@ -157,13 +161,13 @@ jobs: - uses: actions/download-artifact@v4 - name: Zip font and icons run: | - zip -r lucide-font-${{ needs.pre-release.outputs.VERSION }}.zip lucide-font - zip -r lucide-icons-${{ needs.pre-release.outputs.VERSION }}.zip icons + zip -r lucide-font-${{ needs.prepare.outputs.VERSION }}.zip lucide-font + zip -r lucide-icons-${{ needs.prepare.outputs.VERSION }}.zip icons - name: Release zip and fonts uses: softprops/action-gh-release@v2 with: - tag_name: ${{ needs.pre-release.outputs.VERSION }} + tag_name: ${{ needs.prepare.outputs.VERSION }} files: | - lucide-font-${{ needs.pre-release.outputs.VERSION }}.zip - lucide-icons-${{ needs.pre-release.outputs.VERSION }}.zip + lucide-font-${{ needs.prepare.outputs.VERSION }}.zip + lucide-icons-${{ needs.prepare.outputs.VERSION }}.zip From 4af2f7e78bb4ecda75ff2430a5b942113999ada6 Mon Sep 17 00:00:00 2001 From: Jakob Guddas Date: Sat, 14 Mar 2026 20:58:03 +0100 Subject: [PATCH 018/234] Updated icons/gpu.svg (#4147) --- icons/gpu.svg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/icons/gpu.svg b/icons/gpu.svg index 880fcaaba..2ac1b7236 100644 --- a/icons/gpu.svg +++ b/icons/gpu.svg @@ -9,9 +9,9 @@ stroke-linecap="round" stroke-linejoin="round" > + - - \ No newline at end of file + From 7f19f6adf1e66dce3e2e5b2d423fd9159dc624d6 Mon Sep 17 00:00:00 2001 From: Eric Fennis Date: Thu, 19 Mar 2026 11:03:29 +0100 Subject: [PATCH 019/234] ci(release.yml): Fix access public --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fffc87d62..37de9e32a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -85,7 +85,7 @@ jobs: run: pnpm --filter ${{ matrix.package }} test - name: Publish - run: pnpm --filter ${{ matrix.package }} publish --access public --no-git-checks --ignore-scripts --tag ${{ inputs.tag }} + run: pnpm --filter ${{ matrix.package }} publish --access public --no-git-checks --ignore-scripts --tag ${{ inputs.tag }} --access public env: NPM_CONFIG_PROVENANCE: true @@ -119,7 +119,7 @@ jobs: run: pnpm --filter lucide-static build - name: Publish - run: pnpm --filter lucide-static publish --no-git-checks + run: pnpm --filter lucide-static publish --no-git-checks --ignore-scripts --tag ${{ inputs.tag }} --access public env: NPM_CONFIG_PROVENANCE: true From 0d7bb4f4a7ddaa967308bcb5a5ad1676805aa6b0 Mon Sep 17 00:00:00 2001 From: Eric Fennis Date: Thu, 19 Mar 2026 12:09:04 +0100 Subject: [PATCH 020/234] chore: Format code --- .github/workflows/ci.yml | 1 - .github/workflows/release.yml | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9e7b75052..31237a5ae 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -89,7 +89,6 @@ jobs: with: version: ${{ needs.create-release.outputs.VERSION }} - dispatch-release: if: github.event_name == 'workflow_dispatch' uses: './.github/workflows/release.yml' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 37de9e32a..3f3743031 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -49,8 +49,7 @@ jobs: strategy: fail-fast: false matrix: - package: - [ + package: [ 'lucide', 'lucide-react', 'lucide-react-native', From 6c00c2e74a3912564ad64202e09be064a83ee334 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 16:24:45 +0100 Subject: [PATCH 021/234] chore(deps-dev): bump h3 from 1.15.4 to 1.15.6 (#4163) Bumps [h3](https://github.com/h3js/h3) from 1.15.4 to 1.15.6. - [Release notes](https://github.com/h3js/h3/releases) - [Changelog](https://github.com/h3js/h3/blob/v1.15.6/CHANGELOG.md) - [Commits](https://github.com/h3js/h3/compare/v1.15.4...v1.15.6) --- updated-dependencies: - dependency-name: h3 dependency-version: 1.15.6 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/package.json | 2 +- pnpm-lock.yaml | 92 ++++++++++++++++++++++------------------------- 2 files changed, 43 insertions(+), 51 deletions(-) diff --git a/docs/package.json b/docs/package.json index 324a54de6..e2228b5e1 100644 --- a/docs/package.json +++ b/docs/package.json @@ -31,7 +31,7 @@ "@lucide/shared": "workspace:*", "@rollup/plugin-replace": "^6.0.3", "@types/semver": "^7.7.1", - "h3": "^1.15.4", + "h3": "^1.15.6", "nitropack": "^2.12.4", "rollup-plugin-copy": "^3.5.0", "svg-path-commander": "^2.1.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 55268507f..69ab52e91 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -195,8 +195,8 @@ importers: specifier: ^7.7.1 version: 7.7.1 h3: - specifier: ^1.15.4 - version: 1.15.4 + specifier: ^1.15.6 + version: 1.15.8 nitropack: specifier: ^2.12.4 version: 2.13.1(@vercel/blob@2.3.0)(encoding@0.1.13)(xml2js@0.6.2) @@ -1457,6 +1457,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} engines: {node: '>=6.9.0'} @@ -2573,17 +2578,20 @@ packages: '@emnapi/core@1.4.3': resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} - '@emnapi/core@1.8.1': - resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} + '@emnapi/core@1.9.0': + resolution: {integrity: sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==} '@emnapi/runtime@1.8.1': resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} + '@emnapi/runtime@1.9.0': + resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==} + '@emnapi/wasi-threads@1.0.2': resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} - '@emnapi/wasi-threads@1.1.0': - resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@emnapi/wasi-threads@1.2.0': + resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} @@ -8528,11 +8536,8 @@ packages: resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - h3@1.15.4: - resolution: {integrity: sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==} - - h3@1.15.5: - resolution: {integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==} + h3@1.15.8: + resolution: {integrity: sha512-iOH6Vl8mGd9nNfu9C0IZ+GuOAfJHcyf3VriQxWaSWIB76Fg4BnFuk4cxBxjmQSSxJS664+pgjP6e7VBnUzFfcg==} handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} @@ -10240,9 +10245,6 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-mock-http@1.0.3: - resolution: {integrity: sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==} - node-mock-http@1.0.4: resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} @@ -11651,8 +11653,8 @@ packages: sax@1.4.3: resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} - sax@1.5.0: - resolution: {integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==} + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} engines: {node: '>=11.0.0'} saxes@6.0.0: @@ -12657,9 +12659,6 @@ packages: ua-parser-js@0.7.38: resolution: {integrity: sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA==} - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - ufo@1.6.3: resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} @@ -14317,7 +14316,7 @@ snapshots: '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 @@ -14680,6 +14679,10 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@babel/parser@7.29.2': + dependencies: + '@babel/types': 7.29.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -15973,7 +15976,7 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/types': 7.29.0 debug: 4.4.3 @@ -16209,9 +16212,9 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/core@1.8.1': + '@emnapi/core@1.9.0': dependencies: - '@emnapi/wasi-threads': 1.1.0 + '@emnapi/wasi-threads': 1.2.0 tslib: 2.8.1 optional: true @@ -16220,12 +16223,17 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.9.0': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.0.2': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.1.0': + '@emnapi/wasi-threads@1.2.0': dependencies: tslib: 2.8.1 optional: true @@ -17197,8 +17205,8 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.8.1 - '@emnapi/runtime': 1.8.1 + '@emnapi/core': 1.9.0 + '@emnapi/runtime': 1.9.0 '@tybys/wasm-util': 0.10.1 optional: true @@ -22527,19 +22535,7 @@ snapshots: dependencies: duplexer: 0.1.2 - h3@1.15.4: - dependencies: - cookie-es: 1.2.2 - crossws: 0.3.5 - defu: 6.1.4 - destr: 2.0.5 - iron-webcrypto: 1.2.1 - node-mock-http: 1.0.3 - radix3: 1.1.2 - ufo: 1.6.1 - uncrypto: 0.1.3 - - h3@1.15.5: + h3@1.15.8: dependencies: cookie-es: 1.2.2 crossws: 0.3.5 @@ -23711,7 +23707,7 @@ snapshots: crossws: 0.3.5 defu: 6.1.4 get-port-please: 3.2.0 - h3: 1.15.5 + h3: 1.15.8 http-shutdown: 1.2.2 jiti: 2.6.1 mlly: 1.8.0 @@ -24241,7 +24237,7 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/generator': 7.29.1 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 flow-enums-runtime: 0.0.6 metro: 0.81.5 @@ -24792,7 +24788,7 @@ snapshots: exsolve: 1.0.8 globby: 16.1.1 gzip-size: 7.0.0 - h3: 1.15.5 + h3: 1.15.8 hookable: 5.5.3 httpxy: 0.1.7 ioredis: 5.10.0 @@ -24940,8 +24936,6 @@ snapshots: node-int64@0.4.0: {} - node-mock-http@1.0.3: {} - node-mock-http@1.0.4: {} node-releases@2.0.18: {} @@ -26793,7 +26787,7 @@ snapshots: sax@1.4.3: {} - sax@1.5.0: + sax@1.6.0: optional: true saxes@6.0.0: @@ -28022,8 +28016,6 @@ snapshots: ua-parser-js@0.7.38: {} - ufo@1.6.1: {} - ufo@1.6.3: {} uhyphen@0.2.0: {} @@ -28244,7 +28236,7 @@ snapshots: anymatch: 3.1.3 chokidar: 4.0.3 destr: 2.0.5 - h3: 1.15.5 + h3: 1.15.8 lru-cache: 10.4.3 node-fetch-native: 1.6.7 ofetch: 1.5.1 @@ -28259,7 +28251,7 @@ snapshots: anymatch: 3.1.3 chokidar: 5.0.0 destr: 2.0.5 - h3: 1.15.5 + h3: 1.15.8 lru-cache: 11.2.2 node-fetch-native: 1.6.7 ofetch: 1.5.1 @@ -28890,7 +28882,7 @@ snapshots: xml2js@0.6.2: dependencies: - sax: 1.5.0 + sax: 1.6.0 xmlbuilder: 11.0.1 optional: true From a0e202d759da95c243b541f8d3c1c26eada32b2e Mon Sep 17 00:00:00 2001 From: Karsa Date: Fri, 20 Mar 2026 15:31:34 +0100 Subject: [PATCH 022/234] feat(packages/angular): add new @lucide/angular package (#3897) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add new lucide angular package * feat(packages/angular): added initial @lucide/angular package * feat(packages/angular): update readme * feat(packages/angular): update angular.json * docs(packages/angular): added (for now) full documentation for @lucide/angular * docs(packages/angular): added migration guide from lucide-angular * fix(github): fix package label syntax ๐Ÿ˜… * fix(lint): fix linting issues * fix(github/angular): add prebuild stage * fix(github/angular): add prebuild stage & fix tests * fix(github/angular): fix LucideIconComponentType, update with _real_ public members * fix(github/angular): add prebuild to build step manually * fix(github/angular): downgrade vitest * fix(packages/angular): fix migration guide code example * fix(packages): add vitest + @vitest/* to pnpm overrides * fix(packages): update pnpm-lock with merged version * Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix(packages): fix aria-hidden logic * fix(packages): update pnpm-lock * fix(packages): extract vitest and jsdom to root devDependencies * Fix copy utils script * Format code * feat(packages/angular): switched to self-describing IconData object from separate node+name โ€“ no more toKebabCase hackery feat(packages/angular): renamed LucideIconComponentType => LucideIcon, and LucideIcon => LucideDynamicIcon feat(packages/angular): added backwards compatible CSS class support feat(packages/angular): switched to vector-effect: non-scaling-stroke implementation from computed stroke width feat(packages/angular): rewrote icon provider to only accept a list of self-described icons โ€“ no more toKebabCase hackery & as an added bonus automatic backwards compatible alias support ๐Ÿš€ feat(packages/angular): added legacy icon node helper function for passing legacy icons to providers test(packages/angular): added unit tests on LUCIDE_CONFIG provider usage * fix(packages/angular): fix linting issues * feat(packages/angular): extract createLucideIcon logic into helper function, refactor export template to use the iconData object as defined in ExportTemplate * Replace author * Remove private field * fix(packages/angular): remove createLucideIcon, it breaks the package :'( * fix(packages/angular): fix rendering order of child elements (_before_ projected content) * Format package.json * Update docs/guide/packages/angular.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update packages/angular/MIGRATION.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Eric Fennis Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .eslintignore | 1 + .github/ISSUE_TEMPLATE/02_bug_report.yml | 8 +- .github/ISSUE_TEMPLATE/04_feature_request.yml | 9 +- .github/labeler.yml | 1 + .github/workflows/angular.yml | 41 + .github/workflows/release.yml | 1 + docs/.vitepress/data/packageData.json | 24 +- docs/.vitepress/sidebar.ts | 20 +- .../home/HomePackagesSection.data.ts | 2 +- docs/guide/index.md | 2 +- docs/guide/packages/angular.md | 277 + docs/guide/packages/lucide-angular.md | 6 + package.json | 16 +- packages/angular/.eslintrc.js | 38 + packages/angular/.vscode/extensions.json | 4 + packages/angular/.vscode/launch.json | 20 + packages/angular/.vscode/tasks.json | 42 + packages/angular/MIGRATION.md | 187 + packages/angular/README.md | 77 + packages/angular/angular.json | 51 + packages/angular/ng-package.json | 7 + packages/angular/package.json | 72 + packages/angular/scripts/exportTemplate.mts | 72 + packages/angular/src/default-attributes.ts | 11 + packages/angular/src/lucide-config.spec.ts | 25 + packages/angular/src/lucide-config.ts | 67 + .../angular/src/lucide-dynamic-icon.spec.ts | 132 + packages/angular/src/lucide-dynamic-icon.ts | 43 + packages/angular/src/lucide-icon-base.spec.ts | 249 + packages/angular/src/lucide-icon-base.ts | 134 + packages/angular/src/lucide-icon-template.ts | 10 + packages/angular/src/lucide-icons.spec.ts | 64 + packages/angular/src/lucide-icons.ts | 105 + packages/angular/src/public-api.ts | 10 + packages/angular/src/types.ts | 61 + packages/angular/tsconfig.json | 38 + packages/angular/tsconfig.lib.json | 14 + packages/angular/tsconfig.lib.prod.json | 11 + packages/angular/tsconfig.spec.json | 10 + packages/astro/package.json | 1 - packages/lucide-preact/package.json | 3 +- packages/lucide-react-native/package.json | 3 +- packages/lucide-react/package.json | 3 +- packages/lucide-solid/package.json | 1 - packages/lucide-svelte/package.json | 6 +- packages/lucide/package.json | 3 +- packages/shared/package.json | 3 +- packages/svelte/package.json | 3 +- packages/vue/package.json | 1 - pnpm-lock.yaml | 5134 +++++++++++++++-- .../building/generateExportsFile.ts | 5 +- .../build-icons/building/generateIconFiles.ts | 2 +- tools/build-icons/cli.ts | 3 + tools/build-icons/types.ts | 1 - 54 files changed, 6672 insertions(+), 462 deletions(-) create mode 100644 .github/workflows/angular.yml create mode 100644 docs/guide/packages/angular.md create mode 100644 packages/angular/.eslintrc.js create mode 100644 packages/angular/.vscode/extensions.json create mode 100644 packages/angular/.vscode/launch.json create mode 100644 packages/angular/.vscode/tasks.json create mode 100644 packages/angular/MIGRATION.md create mode 100644 packages/angular/README.md create mode 100644 packages/angular/angular.json create mode 100644 packages/angular/ng-package.json create mode 100644 packages/angular/package.json create mode 100644 packages/angular/scripts/exportTemplate.mts create mode 100644 packages/angular/src/default-attributes.ts create mode 100644 packages/angular/src/lucide-config.spec.ts create mode 100644 packages/angular/src/lucide-config.ts create mode 100644 packages/angular/src/lucide-dynamic-icon.spec.ts create mode 100644 packages/angular/src/lucide-dynamic-icon.ts create mode 100644 packages/angular/src/lucide-icon-base.spec.ts create mode 100644 packages/angular/src/lucide-icon-base.ts create mode 100644 packages/angular/src/lucide-icon-template.ts create mode 100644 packages/angular/src/lucide-icons.spec.ts create mode 100644 packages/angular/src/lucide-icons.ts create mode 100644 packages/angular/src/public-api.ts create mode 100644 packages/angular/src/types.ts create mode 100644 packages/angular/tsconfig.json create mode 100644 packages/angular/tsconfig.lib.json create mode 100644 packages/angular/tsconfig.lib.prod.json create mode 100644 packages/angular/tsconfig.spec.json diff --git a/.eslintignore b/.eslintignore index ffae92223..afce5388f 100644 --- a/.eslintignore +++ b/.eslintignore @@ -8,3 +8,4 @@ node_modules docs/images docs/**/examples/ packages/lucide-react/dynamicIconImports.js +packages/angular/.angular diff --git a/.github/ISSUE_TEMPLATE/02_bug_report.yml b/.github/ISSUE_TEMPLATE/02_bug_report.yml index 113b0dbc9..b486650a5 100644 --- a/.github/ISSUE_TEMPLATE/02_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/02_bug_report.yml @@ -13,13 +13,17 @@ body: description: Which Lucide packages are affected? You may select more than one. options: - label: lucide - - label: lucide-angular + - label: lucide-angular (old version) + - label: '@lucide/angular (new version)' + - label: '@lucide/astro' - label: lucide-flutter - label: lucide-preact - label: lucide-react - label: lucide-react-native - label: lucide-solid - - label: lucide-svelte + - label: lucide-static + - label: lucide-svelte (old version) + - label: '@lucide/svelte (new version)' - label: lucide-vue - label: lucide-vue-next - label: lucide-astro diff --git a/.github/ISSUE_TEMPLATE/04_feature_request.yml b/.github/ISSUE_TEMPLATE/04_feature_request.yml index 1fb43bcfa..1431faa2c 100644 --- a/.github/ISSUE_TEMPLATE/04_feature_request.yml +++ b/.github/ISSUE_TEMPLATE/04_feature_request.yml @@ -13,13 +13,17 @@ body: description: Which Lucide project do you wish this feature were added to? You may select more than one. options: - label: lucide - - label: lucide-angular + - label: lucide-angular (old version) + - label: '@lucide/angular (new version)' + - label: '@lucide/astro' - label: lucide-flutter - label: lucide-preact - label: lucide-react - label: lucide-react-native - label: lucide-solid - - label: lucide-svelte + - label: lucide-static + - label: lucide-svelte (old version) + - label: '@lucide/svelte (new version)' - label: lucide-vue - label: lucide-vue-next - label: lucide-astro @@ -27,6 +31,7 @@ body: - label: Figma plugin - label: all JS packages - label: site + - label: other/not relevant validations: required: true - type: textarea diff --git a/.github/labeler.yml b/.github/labeler.yml index 8f87a6e86..109b18937 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -59,6 +59,7 @@ ๐Ÿ…ฐ๏ธ angular package: - changed-files: - any-glob-to-any-file: + - 'packages/angular/*' - 'packages/lucide-angular/*' # For changes in the lucide preact package diff --git a/.github/workflows/angular.yml b/.github/workflows/angular.yml new file mode 100644 index 000000000..64ec0c903 --- /dev/null +++ b/.github/workflows/angular.yml @@ -0,0 +1,41 @@ +name: Lucide Angular checks + +on: + pull_request: + paths: + - packages/angular/** + - tools/build-icons/** + - pnpm-lock.yaml + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v6 + with: + cache: 'pnpm' + node-version-file: 'package.json' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Build + run: pnpm --filter @lucide/angular build + + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v6 + with: + cache: 'pnpm' + node-version-file: 'package.json' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Test + run: pnpm --filter @lucide/angular test diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3f3743031..0f1590d01 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,6 +58,7 @@ jobs: 'lucide-preact', 'lucide-solid', 'lucide-svelte', + '@lucide/angular', '@lucide/astro', '@lucide/svelte', '@lucide/icons', diff --git a/docs/.vitepress/data/packageData.json b/docs/.vitepress/data/packageData.json index ff3c8bc4d..edcda5e41 100644 --- a/docs/.vitepress/data/packageData.json +++ b/docs/.vitepress/data/packageData.json @@ -87,9 +87,25 @@ } ] }, - "lucide-angular": { + "@lucide/angular": { "order": 6, "icon": "angular", + "shields": [ + { + "alt": "npm", + "src": "https://img.shields.io/npm/v/@lucide/angular", + "href": "https://www.npmjs.com/package/@lucide/angular" + }, + { + "alt": "npm", + "src": "https://img.shields.io/npm/dw/@lucide/angular", + "href": "https://www.npmjs.com/package/@lucide/angular" + } + ] + }, + "lucide-angular": { + "order": 7, + "icon": "angular", "shields": [ { "alt": "npm", @@ -104,7 +120,7 @@ ] }, "lucide-preact": { - "order": 7, + "order": 8, "icon": "preact", "shields": [ { @@ -122,7 +138,7 @@ "@lucide/astro": { "docsAlias": "lucide-astro", "packageDirname": "astro", - "order": 8, + "order": 9, "icon": "astro", "iconDark": "astro-dark", "shields": [ @@ -139,7 +155,7 @@ ] }, "lucide-static": { - "order": 9, + "order": 10, "icon": "svg", "shields": [ { diff --git a/docs/.vitepress/sidebar.ts b/docs/.vitepress/sidebar.ts index 79eeba485..26d8eae88 100644 --- a/docs/.vitepress/sidebar.ts +++ b/docs/.vitepress/sidebar.ts @@ -69,39 +69,39 @@ const sidebar: UserConfig['themeConfig']['sidebar'] = { link: '/guide/packages/lucide', }, { - text: 'Lucide React', + text: 'React', link: '/guide/packages/lucide-react', }, { - text: 'Lucide Vue', + text: 'Vue', link: '/guide/packages/lucide-vue', }, { - text: 'Lucide Svelte', + text: 'Svelte', link: '/guide/packages/lucide-svelte', }, { - text: 'Lucide Solid', + text: 'Solid', link: '/guide/packages/lucide-solid', }, { - text: 'Lucide React Native', + text: 'React Native', link: '/guide/packages/lucide-react-native', }, { - text: 'Lucide Angular', - link: '/guide/packages/lucide-angular', + text: 'Angular', + link: '/guide/packages/angular', }, { - text: 'Lucide Preact', + text: 'Preact', link: '/guide/packages/lucide-preact', }, { - text: 'Lucide Astro', + text: 'Astro', link: '/guide/packages/lucide-astro', }, { - text: 'Lucide Static', + text: 'Static', link: '/guide/packages/lucide-static', }, { diff --git a/docs/.vitepress/theme/components/home/HomePackagesSection.data.ts b/docs/.vitepress/theme/components/home/HomePackagesSection.data.ts index 42feb7114..3f9bff16f 100644 --- a/docs/.vitepress/theme/components/home/HomePackagesSection.data.ts +++ b/docs/.vitepress/theme/components/home/HomePackagesSection.data.ts @@ -33,7 +33,7 @@ export default { label: 'Lucide documentation for Preact', }, { - name: 'lucide-angular', + name: 'angular', logo: '/framework-logos/angular.svg', label: 'Lucide documentation for Angular', }, diff --git a/docs/guide/index.md b/docs/guide/index.md index e079fcf5e..b09064264 100644 --- a/docs/guide/index.md +++ b/docs/guide/index.md @@ -29,7 +29,7 @@ However, not everyone can understand them easily. Read more about [how to use Lu ## Official Packages -Lucide's official packages are designed to work on different platforms, making it easier for users to integrate icons into their projects. The packages are available for various technologies, including [Web (Vanilla)](https://lucide.dev/guide/packages/lucide), [React](https://lucide.dev/guide/packages/lucide-react), [React Native](https://lucide.dev/guide/packages/lucide-react-native), [Vue](https://lucide.dev/guide/packages/lucide-vue), [Vue 3](https://lucide.dev/guide/packages/lucide-vue-next), [Svelte](https://lucide.dev/guide/packages/lucide-svelte), [Preact](https://lucide.dev/guide/packages/lucide-preact), [Solid](https://lucide.dev/guide/packages/lucide-solid), [Angular](https://lucide.dev/guide/packages/lucide-angular), [Astro](https://lucide.dev/guide/packages/lucide-astro), and [NodeJS](https://lucide.dev/guide/packages/lucide-static#nodejs). +Lucide's official packages are designed to work on different platforms, making it easier for users to integrate icons into their projects. The packages are available for various technologies, including [Web (Vanilla)](https://lucide.dev/guide/packages/lucide), [React](https://lucide.dev/guide/packages/lucide-react), [React Native](https://lucide.dev/guide/packages/lucide-react-native), [Vue](https://lucide.dev/guide/packages/lucide-vue), [Vue 3](https://lucide.dev/guide/packages/lucide-vue-next), [Svelte](https://lucide.dev/guide/packages/lucide-svelte), [Preact](https://lucide.dev/guide/packages/lucide-preact), [Solid](https://lucide.dev/guide/packages/lucide-solid), [Angular](https://lucide.dev/guide/packages/angular), [Astro](https://lucide.dev/guide/packages/lucide-astro), and [NodeJS](https://lucide.dev/guide/packages/lucide-static#nodejs). ## Community diff --git a/docs/guide/packages/angular.md b/docs/guide/packages/angular.md new file mode 100644 index 000000000..f271457c9 --- /dev/null +++ b/docs/guide/packages/angular.md @@ -0,0 +1,277 @@ +# `@lucide/angular` + +::: warning +This documentation is for `@lucide/angular`. + +To learn about our legacy package for Angular, please refer to [`lucide-angular`](./lucide-angular). +::: + +A standalone, signal-based, zoneless implementation of Lucide icons for Angular. + +**What you can accomplish:** +- Use icons as standalone Angular components with full dependency injection support +- Configure icons globally through modern Angular providers +- Integrate with Angular's reactive forms and data binding +- Build scalable applications with tree-shaken icons and lazy loading support + +## Prerequisites + +This package requires Angular 17+ and uses standalone components, signals, and zoneless change detection. + +## Installation + +::: code-group + +```sh [pnpm] +pnpm add @lucide/angular +``` + +```sh [yarn] +yarn add @lucide/angular +``` + +```sh [npm] +npm install @lucide/angular +``` + +```sh [bun] +bun add @lucide/angular +``` + +::: + +## How to use + +### Standalone icons + +Every icon can be imported as a ready-to-use standalone component: + +```html + +``` + +```ts{2,7} +import { Component } from '@angular/core'; +import { LucideFileText } from '@lucide/angular'; + +@Component({ + selector: 'app-foobar', + templateUrl: './foobar.html', + imports: [LucideFileText], +}) +export class Foobar { } +``` + +::: tip +Standalone icon components use the selector `svg[lucide{PascalCaseIconName}]`. + +This ensures minimal bloating of the DOM and the ability to directly manipulate all attributes of the resulting SVG element. +::: + +### Dynamic icon component + +You may also use the dynamic `LucideIcon` component to dynamically render icons. + +#### With tree-shaken imports + +You may pass imported icons directly to the component: + +```html{3} +@for (item of items) { + + + {{ item.title }} + +} +``` + +```ts{2,8,14,19} +import { Component } from '@angular/core'; +import { LucideIcon, LucideHouse, LucideUsersRound } from '@lucide/angular'; +import { NavbarItem, NavbarItemModel } from './navbar-item'; + +@Component({ + selector: 'app-navbar', + templateUrl: './navbar.html', + imports: [LucideIcon, NavbarItem], +}) +export class Navbar { + readonly items: NavbarItemModel[] = [ + { + title: 'Home', + icon: LucideHouse, + routerLink: [''], + }, + { + title: 'Users', + icon: LucideUsersRound, + routerLink: ['admin/users'], + }, + ]; +} +``` + +#### With icons provided via dependency injection + +Alternatively, the component also accepts string inputs. + +To use icons this way, first, you have to provide icons via `provideLucideIcons`: + +:::code-group +```ts{7-10} [app.config.ts] +import { ApplicationConfig } from '@angular/core'; +import { provideLucideIcons, LucideCircleCheck, LucideCircleX } from '@lucide/angular'; + +export const appConfig: ApplicationConfig = { + providers: [ + // ... + provideLucideIcons( + LucideCircleCheck, + LucideCircleX, + ), + ] +}; +``` + +```html [foobar.html] + +``` + +```ts{7} [foobar.ts] +import { Component } from '@angular/core'; +import { LucideIcon } from '@lucide/angular'; + +@Component({ + selector: 'app-foobar', + templateUrl: './template-url', + imports: [LucideIcon], +}) +export class Foobar { } +``` +::: + +::: tip +For optimal bundle size, provide icons at the highest appropriate level in your application. + +Providing all icons at the root level may increase your initial bundle size, while providing them at feature module level enables better code splitting. +::: + +::: warning +While you may provide your icons at any level of the dependency injection tree, be aware that [Angular's DI system is hierarchical](https://angular.dev/guide/di/defining-dependency-providers#injector-hierarchy-in-angular): `LucideIcon` will only have access to the icons provided closest to it in the tree. +::: + +## Accessible labels + +You can use the `title` input property to set the [accessible name element](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Element/title) on the SVG: + +```html + +``` + +This will result in the following output: + +```html{2} + + Go to dashboard + + +``` + +## Props + +You can pass additional props to adjust the icon appearance. + +| name | type | default | +|-----------------------|-----------|--------------| +| `size` | *number* | 24 | +| `color` | *string* | currentColor | +| `strokeWidth` | *number* | 2 | +| `absoluteStrokeWidth` | *boolean* | false | + +```html + +``` + +## Global configuration + +You can use `provideLucideConfig` to configure the default property values as defined above: + +```ts{2,7-9} +import { ApplicationConfig } from '@angular/core'; +import { provideLucideConfig } from '@lucide/angular'; + +export const appConfig: ApplicationConfig = { + providers: [ + // ... + provideLucideConfig({ + strokeWidth: 1.5 + }), + ] +}; +``` + +## Styling via CSS + +Icons can also be styled by using custom CSS classes: + +```html + +``` + +```css +svg.my-icon { + width: 12px; + height: 12px; + stroke-width: 3; +} +``` + +## With Lucide lab or custom icons + +[Lucide lab](https://github.com/lucide-icons/lucide-lab) is a collection of icons that are not part of the Lucide main library. + +While they aren't provided as standalone components, they can be still be passed to the `LucideIcon` component the same way as official icons: + +```html + + + + + +``` + +```ts{2,6-7,11-12} +import { provideLucideIcons } from '@lucide/angular'; +import { coconut } from '@lucide/lab'; + +@Component({ + templateUrl: './foobar.html', + // For using by name via provider: + providers: [provideLucideIcons({ coconut })], + imports: [LucideIcon] +}) +export class Foobar { + // For passing directly as LucideIconData: + readonly CoconutIcon = coconut; +} +``` + +## Troubleshooting + +### The icon is not being displayed +If using per-icon-components: +1. Ensure that the icon component is being imported, if using per-icon-components +2. Check that the icon name matches exactly (case-sensitive) + +If using the dynamic component: +1. Ensure the icon is provided via `provideLucideIcons()` if using string names +2. Verify the icon is imported from `@lucide/angular` and not the legacy package + +### TypeScript errors? +Make sure you're importing from `@lucide/angular` and not `lucide-angular`. + +### Icons render with wrong defaults +Ensure `provideLucideConfig()` is used at the right level. + +## Migration guide +Migrating from `lucide-angular`? Read our [comprehensive migration guide](https://github.com/lucide-icons/lucide/blob/main/packages/angular/MIGRATION.md). diff --git a/docs/guide/packages/lucide-angular.md b/docs/guide/packages/lucide-angular.md index 240f75472..db0aed4f2 100644 --- a/docs/guide/packages/lucide-angular.md +++ b/docs/guide/packages/lucide-angular.md @@ -1,5 +1,11 @@ # Lucide Angular +::: warning +This documentation is for our legacy package for Angular. + +For our modern, standalone-first implementation, please refer to [`@lucide/angular`](./angular). +::: + Angular components and services for Lucide icons that integrate with Angular's dependency injection and component system. Provides both traditional module-based and modern standalone component approaches for maximum flexibility in Angular applications. **What you can accomplish:** diff --git a/package.json b/package.json index 9079851b8..5a6f46285 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,8 @@ "@types/yargs": "^17.0.33", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", + "@vitest/coverage-v8": "4.0.12", + "@vitest/ui": "4.0.12", "ajv-cli": "^5.0.0", "dotenv": "^17.0.0", "eslint": "^8.57.1", @@ -60,6 +62,7 @@ "eslint-import-resolver-typescript": "^3.10.1", "eslint-plugin-import": "^2.31.0", "husky": "^8.0.3", + "jsdom": "^27.3.0", "lint-staged": "^13.3.0", "minimist": "^1.2.8", "openai": "^5.8.1", @@ -70,6 +73,7 @@ "simple-git": "^3.32.3", "svgo": "^3.3.2", "svgson": "^5.3.1", + "vitest": "4.0.12", "yargs": "^17.7.2", "zod": "^3.25.67" }, @@ -86,13 +90,13 @@ } }, "overrides": { - "cross-spawn": "7.0.5", - "form-data": "^4.0.4", - "fast-json-patch": "^3.1.1", - "webpack-dev-middleware": "^5.3.4", - "semver": "^7.7.3", "axios": "^1.12.0", - "vite-prerender-plugin": "0.5.12" + "cross-spawn": "7.0.5", + "fast-json-patch": "^3.1.1", + "form-data": "^4.0.4", + "semver": "^7.7.3", + "vite-prerender-plugin": "0.5.12", + "webpack-dev-middleware": "^5.3.4" } } } diff --git a/packages/angular/.eslintrc.js b/packages/angular/.eslintrc.js new file mode 100644 index 000000000..c77f60499 --- /dev/null +++ b/packages/angular/.eslintrc.js @@ -0,0 +1,38 @@ +module.exports = { + root: true, + overrides: [ + { + files: ['*.ts'], + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:@angular-eslint/recommended', + 'plugin:@angular-eslint/template/process-inline-templates', + 'prettier', + ], + rules: { + '@angular-eslint/directive-selector': [ + 'error', + { + type: 'attribute', + prefix: 'lucide', + style: 'camelCase', + }, + ], + '@angular-eslint/component-selector': [ + 'error', + { + type: 'attribute', + prefix: ['lucide'], + style: 'camelCase', + }, + ], + }, + }, + { + files: ['*.html'], + extends: ['plugin:@angular-eslint/template/recommended'], + rules: {}, + }, + ], +}; diff --git a/packages/angular/.vscode/extensions.json b/packages/angular/.vscode/extensions.json new file mode 100644 index 000000000..77b374577 --- /dev/null +++ b/packages/angular/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 + "recommendations": ["angular.ng-template"] +} diff --git a/packages/angular/.vscode/launch.json b/packages/angular/.vscode/launch.json new file mode 100644 index 000000000..925af8370 --- /dev/null +++ b/packages/angular/.vscode/launch.json @@ -0,0 +1,20 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "ng serve", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: start", + "url": "http://localhost:4200/" + }, + { + "name": "ng test", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: test", + "url": "http://localhost:9876/debug.html" + } + ] +} diff --git a/packages/angular/.vscode/tasks.json b/packages/angular/.vscode/tasks.json new file mode 100644 index 000000000..a298b5bd8 --- /dev/null +++ b/packages/angular/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "start", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + }, + { + "type": "npm", + "script": "test", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + } + ] +} diff --git a/packages/angular/MIGRATION.md b/packages/angular/MIGRATION.md new file mode 100644 index 000000000..c12d70966 --- /dev/null +++ b/packages/angular/MIGRATION.md @@ -0,0 +1,187 @@ +# Migrating from `lucide-angular` โ‡’ `@lucide/angular` + +## What changed + +`@lucide/angular` moves from a module + single component based API to a more modern Angular approach: + +- The library defines modern signal-based, standalone components, without zone.js based change detection. +- Icons are consumed as standalone imports (one component per icon). +- Dynamic icon registration is done via `provideLucideIcons()`, not using `NgModule`. +- Static icons use per-icon components for better tree-shaking. +- Dynamic icons still use a single dynamic component (`svg[lucideIcon]`). +- Global defaults are configured via `provideLucideConfig()`. + +--- + +## Step 1 โ€“ Update dependencies + +Remove `lucide-angular`, add `@lucide/angular`, see http://lucide.dev/guide/packages/angular#installation + +--- + +## Step 2 โ€“ Replace `LucideAngularModule.pick(...)` with `provideLucideIcons(...)` + +> Notes: +> - Old imports like `AirVentIcon` / `AlarmClock` from `lucide-angular` should be replaced with the new per-icon exports `LucideAirVent` and `LucideAlarmClock`. +> - If you mostly used static icons, you may not need to provide them **at all**, please refer to Step 3. + +### Before + +#### NgModule based +```ts +import { BrowserModule, NgModule } from '@angular/core'; +import { LucideAngularModule, AirVent, AlarmClock } from 'lucide-angular'; + +@NgModule({ + imports: [ + BrowserModule, + LucideAngularModule.pick({ AirVent, AlarmClock }), + ], +}) +export class AppModule {} +``` + +#### Standalone + +```ts +import { ApplicationConfig } from '@angular/core'; +import { LucideAngularModule, AirVent, AlarmClock } from 'lucide-angular'; + +export const appConfig: ApplicationConfig = { + providers: [ + // ... + importProvidersFrom(LucideAngularModule.pick({ AirVent, AlarmClock })), + ] +}; +``` + +### After +```ts +import { ApplicationConfig } from '@angular/core'; +import { provideLucideIcons, LucideAirVent, LucideAlarmClock } from '@lucide/angular'; + +export const appConfig: ApplicationConfig = { + providers: [ + // ... + provideLucideIcons( + LucideAirVent, + LucideAlarmClock, + ), + ] +}; +``` + +--- + +## Step 3 โ€“ Replace `` / `` / `` / `` + +The legacy package rendered everything through a single component. All of these selectors must be migrated to `` usage. + +### A. Static icons by name + +If the icon is known at build time, just use a static import: + +#### Before +```html + +``` + +#### After +```html + +``` + +### B. Static icons with icon data binding + +#### Before +```ts +import { CircleCheck } from 'lucide-angular'; +``` + +```html + +``` + +#### After + +```ts +import { LucideCircleCheck } from '@lucide/angular'; +``` + +```html + +``` + +...and import `LucideCircleCheck` from `@lucide/angular`. + +--- + +### C. Dynamic icons + +If the icon varies at runtime, use the dynamic component: + +#### Before +```html + +``` + +#### After +```html + +``` + +--- + +## Step 4 โ€“ Replace `LucideIconConfig` with `provideLucideConfig()` + +### Before +```ts +import { inject } from '@angular/core'; +import { LucideIconConfig } from 'lucide-angular'; + +inject(LucideIconConfig).size = 12; +``` + +### After +```ts +import { provideLucideConfig } from '@lucide/angular'; + +providers: [ + provideLucideConfig({ size: 12 }), +] +``` + +### Where to place it + +- App-wide: `AppModule.providers` or `bootstrapApplication(...providers)` +- Feature-level: feature module providers +- Component-level (standalone): component `providers` + +--- + +## Troubleshooting + +### The icon is not being displayed +If using per-icon-components: +1. Ensure that the icon component is being imported, if using per-icon-components +2. Check that the icon name matches exactly (case-sensitive) + +If using the dynamic component: +1. Ensure the icon is provided via `provideLucideIcons()` if using string names +2. Verify the icon is imported from `@lucide/angular` and not the legacy package + +### TypeScript errors? +Make sure you're importing from `@lucide/angular` and not `lucide-angular`. + +### Icons render with wrong defaults +Ensure `provideLucideConfig()` is used at the right level. + +--- + +## TL;DR +- `LucideAngularModule` โ‡’ static: removed; dynamic: `LucideIcon` +- `LucideAngularModule.pick(...)` โ‡’ `provideLucideIcons(...)` +- `` โ‡’ `` +- `` โ‡’ `` +- `` โ‡’ `` +- `LucideIconConfig` โ‡’ `provideLucideConfig(...)` diff --git a/packages/angular/README.md b/packages/angular/README.md new file mode 100644 index 000000000..46919d11d --- /dev/null +++ b/packages/angular/README.md @@ -0,0 +1,77 @@ +

+ + Lucide icon library for Angular applications. + +

+ +

+Lucide icon library for Angular applications. +

+ +
+ + [![npm](https://img.shields.io/npm/v/@lucide/angular?color=blue)](https://www.npmjs.com/package/@lucide/angular) + ![NPM Downloads](https://img.shields.io/npm/dw/@lucide/angular) + [![GitHub](https://img.shields.io/github/license/lucide-icons/lucide)](https://lucide.dev/license) +
+ +

+ About + ยท + Icons + ยท + Documentation + ยท + License +

+ +# Lucide Angular + +A standalone, signal based, zoneless implementation of the Lucide icon library for Angular applications. + +## Installation + +```sh +pnpm add @lucide/angular +``` + +```sh +npm install @lucide/angular +``` + +```sh +yarn add @lucide/angular +``` + +```sh +bun add @lucide/angular +``` + +## Documentation + +For full documentation, visit [lucide.dev](https://lucide.dev/guide/packages/angular) + +## Migration guide + +Migrating from `lucide-angular`? Read our [comprehensive migration guide](./MIGRATION.md). + +## Community + +Join the [Discord server](https://discord.gg/EH6nSts) to chat with the maintainers and other users. + +## License + +Lucide is licensed under the ISC license. See [LICENSE](https://lucide.dev/license). + +## Sponsors + + + Powered by Vercel + + +DigitalOcean Referral Badge + +### Awesome backers ๐Ÿบ + +Scipress sponsor badge +pdfme sponsor badge diff --git a/packages/angular/angular.json b/packages/angular/angular.json new file mode 100644 index 000000000..05907e728 --- /dev/null +++ b/packages/angular/angular.json @@ -0,0 +1,51 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "cli": { + "packageManager": "pnpm" + }, + "newProjectRoot": ".", + "projects": { + "@lucide/angular": { + "projectType": "library", + "root": ".", + "sourceRoot": "./src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular/build:ng-packagr", + "configurations": { + "production": { + "tsConfig": "./tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "./tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular/build:unit-test", + "options": { + "tsConfig": "./tsconfig.spec.json", + "coverage": true, + "coverageReporters": ["html", "lcov"], + "coverageExclude": ["src/icons/*"], + "coverageThresholds": { + "statements": 80, + "branches": 80, + "functions": 80, + "lines": 80 + } + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": ["src/**/*.ts", "src/**/*.html"] + } + } + } + } + } +} diff --git a/packages/angular/ng-package.json b/packages/angular/ng-package.json new file mode 100644 index 000000000..f9c1f2d88 --- /dev/null +++ b/packages/angular/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "./node_modules/ng-packagr/ng-package.schema.json", + "dest": "./dist", + "lib": { + "entryFile": "./src/public-api.ts" + } +} diff --git a/packages/angular/package.json b/packages/angular/package.json new file mode 100644 index 000000000..b68520ad0 --- /dev/null +++ b/packages/angular/package.json @@ -0,0 +1,72 @@ +{ + "name": "@lucide/angular", + "description": "A Lucide icon library package for Angular applications.", + "version": "0.0.1", + "author": "karsa-mistmere", + "license": "ISC", + "homepage": "https://lucide.dev", + "bugs": "https://github.com/lucide-icons/lucide/issues", + "repository": { + "type": "git", + "url": "https://github.com/lucide-icons/lucide.git", + "directory": "packages/angular" + }, + "publishConfig": { + "directory": "dist" + }, + "scripts": { + "ng": "ng", + "watch": "ng build --watch --configuration development", + "prebuild": "pnpm clean && pnpm copy:license && pnpm build:icons", + "build": "pnpm prebuild && pnpm build:ng", + "copy:license": "cp ../../LICENSE ./LICENSE", + "clean": "rm -rf dist && rm -rf ./src/icons/*.ts", + "build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mts --renderUniqueKey --iconFileExtension=.ts --exportFileName=lucide-angular.ts --useDefaultExports=0", + "build:ng": "ng build --configuration production", + "test": "pnpm prebuild && ng test --no-watch", + "test:watch": "ng test", + "lint": "npx eslint 'src/**/*.{js,jsx,ts,tsx,html,css,scss}' --quiet --fix", + "e2e": "ng e2e", + "version": "pnpm version --git-tag-version=false" + }, + "prettier": { + "printWidth": 100, + "singleQuote": true, + "overrides": [ + { + "files": "*.html", + "options": { + "parser": "angular" + } + } + ] + }, + "devDependencies": { + "@angular-eslint/builder": "~21.1.0", + "@angular-eslint/eslint-plugin": "~21.1.0", + "@angular-eslint/eslint-plugin-template": "~21.1.0", + "@angular-eslint/schematics": "~21.1.0", + "@angular-eslint/template-parser": "~21.1.0", + "@angular/build": "^21.0.3", + "@angular/cli": "^21.0.3", + "@angular/common": "^21.0.0", + "@angular/compiler": "^21.0.0", + "@angular/compiler-cli": "^21.0.0", + "@angular/core": "^21.0.0", + "@angular/forms": "^21.0.0", + "@angular/platform-browser": "^21.0.0", + "@angular/router": "^21.0.0", + "@lucide/build-icons": "workspace:*", + "@lucide/helpers": "workspace:*", + "@vitest/browser-playwright": "^4.0.12", + "angular-eslint": "21.1.0", + "ng-packagr": "^21.0.0", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "typescript": "~5.9.2" + }, + "peerDependencies": { + "@angular/common": "17.x - 21.x", + "@angular/core": "17.x - 21.x" + } +} diff --git a/packages/angular/scripts/exportTemplate.mts b/packages/angular/scripts/exportTemplate.mts new file mode 100644 index 000000000..88f6fc68b --- /dev/null +++ b/packages/angular/scripts/exportTemplate.mts @@ -0,0 +1,72 @@ +import base64SVG from '@lucide/build-icons/utils/base64SVG'; +import defineExportTemplate from '@lucide/build-icons/utils/defineExportTemplate'; +import { toPascalCase } from '@lucide/helpers'; + +export default defineExportTemplate(async ({ + componentName, + iconName, + getSvg, + deprecated, + deprecationReason, + iconData, +}) => { + const svgContents = await getSvg(); + const svgBase64 = base64SVG(svgContents); + const angularComponentName = `Lucide${componentName}`; + const selectors = [`svg[lucide${toPascalCase(iconName)}]`]; + const aliasComponentNames: string[] = []; + for (const alias of iconData.aliases ?? []) { + const aliasComponentName = `Lucide${toPascalCase(alias)}`; + const aliasSelector = `svg[lucide${toPascalCase(alias)}]`; + if (!selectors.includes(aliasSelector)) { + selectors.push(aliasSelector); + } + if (aliasComponentName !== angularComponentName && !aliasComponentNames.includes(aliasComponentName)) { + aliasComponentNames.push(aliasComponentName); + } + } + + return `\ +import { LucideIconBase } from '../lucide-icon-base'; +import { lucideIconTemplate } from '../lucide-icon-template'; +import { LucideIconData } from '../types'; +import { + ChangeDetectionStrategy, + Component, + ViewEncapsulation, + signal, +} from '@angular/core'; + +/** + * @component @name ${componentName} + * @description Lucide SVG icon component, renders SVG Element with children. + * + * @preview ![img](data:image/svg+xml;base64,${svgBase64}) - https://lucide.dev/icons/${iconName} + * @see https://lucide.dev/guide/packages/angular - Documentation + * + * @param {Object} props - Lucide icons props and any valid SVG attribute + * ${deprecated ? `@deprecated ${deprecationReason}` : ''} +*/ +@Component({ + selector: '${selectors.join(', ')}', + template: lucideIconTemplate, + standalone: true, + encapsulation: ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ${angularComponentName} extends LucideIconBase { + static readonly icon: LucideIconData = ${JSON.stringify(iconData)}; + protected override readonly icon = signal(${angularComponentName}.icon); +} + +${aliasComponentNames.map((aliasComponentName) => { + return ` +/** + * @deprecated + * @see ${angularComponentName} + */ +export const ${aliasComponentName} = ${angularComponentName}; +`; + }).join(`\n\n`)} +`; +}); diff --git a/packages/angular/src/default-attributes.ts b/packages/angular/src/default-attributes.ts new file mode 100644 index 000000000..f1b11f725 --- /dev/null +++ b/packages/angular/src/default-attributes.ts @@ -0,0 +1,11 @@ +export default { + xmlns: 'http://www.w3.org/2000/svg', + width: '24', + height: '24', + viewBox: '0 0 24 24', + fill: 'none', + stroke: 'currentColor', + 'stroke-width': '2', + 'stroke-linecap': 'round', + 'stroke-linejoin': 'round', +}; diff --git a/packages/angular/src/lucide-config.spec.ts b/packages/angular/src/lucide-config.spec.ts new file mode 100644 index 000000000..de34011be --- /dev/null +++ b/packages/angular/src/lucide-config.spec.ts @@ -0,0 +1,25 @@ +import { TestBed } from '@angular/core/testing'; +import { LUCIDE_CONFIG, lucideDefaultConfig, provideLucideConfig } from './lucide-config'; + +describe('Lucide config', () => { + describe('LUCIDE_CONFIG', () => { + it('should use default', () => { + expect(TestBed.inject(LUCIDE_CONFIG)).toBe(lucideDefaultConfig); + }); + }); + describe('provideLucideConfig', () => { + it('should use defaults', () => { + TestBed.configureTestingModule({ + providers: [ + provideLucideConfig({ + size: 18, + }), + ], + }); + expect(TestBed.inject(LUCIDE_CONFIG)).toEqual({ + ...lucideDefaultConfig, + size: 18, + }); + }); + }); +}); diff --git a/packages/angular/src/lucide-config.ts b/packages/angular/src/lucide-config.ts new file mode 100644 index 000000000..7d7d32fa0 --- /dev/null +++ b/packages/angular/src/lucide-config.ts @@ -0,0 +1,67 @@ +import { InjectionToken, Provider } from '@angular/core'; + +/** + * Lucide icon configuration options. + */ +export interface LucideConfig { + /** + * Stroke color. + * @default currentColor + */ + color: string; + /** + * Width and height. + * @default 24 + */ + size: number; + /** + * Stroke width + * @default 2 + */ + strokeWidth: number; + /** + * Whether stroke width should be scaled to appear uniform regardless of icon size. + * @default false + * + * @remarks + * Use CSS to set on SVG paths instead: + * ```css + * .lucide * { + * vector-effect: non-scaling-stroke; + * } + * ``` + */ + absoluteStrokeWidth: boolean; +} + +/** + * Default icon configuration options. + */ +export const lucideDefaultConfig: LucideConfig = { + color: 'currentColor', + size: 24, + strokeWidth: 2, + absoluteStrokeWidth: false, +}; + +/** + * Injection token for providing default configuration options. + * + * @internal Use {@link provideLucideConfig} + */ +export const LUCIDE_CONFIG = new InjectionToken('Lucide icon config', { + factory: () => lucideDefaultConfig, +}); + +/** + * Provider for default icon configuration options. + */ +export function provideLucideConfig(config: Partial): Provider { + return { + provide: LUCIDE_CONFIG, + useValue: { + ...lucideDefaultConfig, + ...config, + }, + }; +} diff --git a/packages/angular/src/lucide-dynamic-icon.spec.ts b/packages/angular/src/lucide-dynamic-icon.spec.ts new file mode 100644 index 000000000..04103ea7f --- /dev/null +++ b/packages/angular/src/lucide-dynamic-icon.spec.ts @@ -0,0 +1,132 @@ +import { Component, input, inputBinding, signal, WritableSignal } from '@angular/core'; +import { LucideDynamicIcon } from './lucide-dynamic-icon'; +import { LucideIconData, LucideIconInput } from './types'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { provideLucideIcons } from './lucide-icons'; +import { LucideActivity } from './icons/activity'; +import { By } from '@angular/platform-browser'; + +@Component({ + template: `@if (icon(); as iconData) { + + + + }`, + imports: [LucideDynamicIcon], +}) +class TestHostComponent { + readonly icon = input(); +} + +describe('LucideDynamicIcon', () => { + let component: LucideDynamicIcon; + let fixture: ComponentFixture; + let icon: WritableSignal; + const getSvgAttribute = (attr: string) => fixture.nativeElement.getAttribute(attr); + const testIcon: LucideIconData = { + name: 'demo', + node: [['polyline', { points: '1 1 22 22' }]], + }; + const testIcon2: LucideIconData = { + name: 'demo-other', + node: [ + ['circle', { cx: 12, cy: 12, r: 8 }], + ['polyline', { points: '1 1 22 22' }], + ], + aliases: ['demo-2'], + }; + function createComponent() { + return TestBed.createComponent(LucideDynamicIcon, { + inferTagName: true, + bindings: [inputBinding('lucideIcon', icon)], + }); + } + beforeEach(async () => { + TestBed.configureTestingModule({ + providers: [provideLucideIcons(testIcon)], + }); + icon = signal('demo'); + fixture = createComponent(); + component = fixture.componentInstance; + }); + + it('should create', () => { + fixture.detectChanges(); + expect(component).toBeTruthy(); + }); + + it('should render children', () => { + icon.set(testIcon2); + fixture.detectChanges(); + expect(fixture.nativeElement.innerHTML).toBe( + '', + ); + }); + + it('should remove children on change', () => { + icon.set(null); + fixture.detectChanges(); + expect(fixture.nativeElement.innerHTML).toBe(''); + }); + + describe('iconInput', () => { + it('should support LucideIconData input', () => { + icon.set(testIcon); + fixture.detectChanges(); + expect(component['icon']()).toBe(testIcon); + expect(fixture.nativeElement.innerHTML).toBe( + '', + ); + }); + it('should support LucideIcon input', () => { + icon.set(LucideActivity); + fixture.detectChanges(); + expect(component['icon']()).toBe(LucideActivity.icon); + }); + it('should support string icon name', () => { + icon.set('demo'); + fixture.detectChanges(); + expect(component['icon']()).toBe(testIcon); + }); + it('should throw error if no icon found', () => { + icon.set('invalid'); + expect(() => fixture.detectChanges()).toThrowError(`Unable to resolve icon 'invalid'`); + }); + }); + + describe('class', () => { + it('should add all classes', () => { + fixture.detectChanges(); + expect(getSvgAttribute('class')).toBe('lucide lucide-demo'); + }); + it('should add backwards compatible classes from aliases', () => { + icon.set(testIcon2); + fixture.detectChanges(); + expect(getSvgAttribute('class')).toBe('lucide lucide-demo-other lucide-demo-2'); + }); + it('should add class icon if available', () => { + icon.set(LucideActivity); + fixture.detectChanges(); + + expect(getSvgAttribute('class')).toBe('lucide lucide-activity'); + }); + it('should remove class on change', () => { + icon.set(null); + fixture.detectChanges(); + expect(getSvgAttribute('class')).toBe('lucide'); + }); + }); + + describe('content projection', () => { + it('should project content', () => { + const hostFixture = TestBed.createComponent(TestHostComponent); + hostFixture.componentRef.setInput('icon', testIcon); + hostFixture.detectChanges(); + hostFixture.componentRef.setInput('icon', testIcon2); + hostFixture.detectChanges(); + const rect = hostFixture.debugElement.query(By.css('svg :last-child')).nativeElement; + expect(rect).toBeInstanceOf(SVGElement); + expect(rect.outerHTML).toBe(''); + }); + }); +}); diff --git a/packages/angular/src/lucide-dynamic-icon.ts b/packages/angular/src/lucide-dynamic-icon.ts new file mode 100644 index 000000000..d260d834e --- /dev/null +++ b/packages/angular/src/lucide-dynamic-icon.ts @@ -0,0 +1,43 @@ +import { + ChangeDetectionStrategy, + Component, + computed, + inject, + input, + ViewEncapsulation, +} from '@angular/core'; +import { isLucideIconComponent, isLucideIconData, LucideIconInput } from './types'; +import { LucideIconBase } from './lucide-icon-base'; +import { LUCIDE_ICONS } from './lucide-icons'; +import { lucideIconTemplate } from './lucide-icon-template'; + +/** + * Generic icon component for rendering LucideIconData. + */ +@Component({ + selector: 'svg[lucideIcon]', + template: lucideIconTemplate, + standalone: true, + encapsulation: ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class LucideDynamicIcon extends LucideIconBase { + protected readonly icons = inject(LUCIDE_ICONS); + public readonly lucideIcon = input.required(); + + protected override readonly icon = computed(() => { + const icon = this.lucideIcon(); + if (isLucideIconData(icon)) { + return icon; + } else if (isLucideIconComponent(icon)) { + return icon.icon; + } else if (typeof icon === 'string') { + if (icon in this.icons) { + return this.icons[icon]; + } else { + throw new Error(`Unable to resolve icon '${icon}'`); + } + } + return null; + }); +} diff --git a/packages/angular/src/lucide-icon-base.spec.ts b/packages/angular/src/lucide-icon-base.spec.ts new file mode 100644 index 000000000..7f961ed3c --- /dev/null +++ b/packages/angular/src/lucide-icon-base.spec.ts @@ -0,0 +1,249 @@ +import { + ChangeDetectionStrategy, + Component, + inputBinding, + signal, + ViewEncapsulation, + WritableSignal, +} from '@angular/core'; +import { provideLucideConfig } from './lucide-config'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { lucideIconTemplate } from './lucide-icon-template'; +import { LucideIconBase } from './lucide-icon-base'; +import { LucideIconData } from './types'; + +@Component({ + selector: 'svg[lucideCircleCheck], svg[lucideCheckCircle2]', + template: lucideIconTemplate, + standalone: true, + encapsulation: ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class LucideCircleCheck extends LucideIconBase { + static readonly icon: LucideIconData = { + name: 'circle-check', + size: 24, + node: [ + ['circle', { cx: '12', cy: '12', r: '10' }], + ['path', { d: 'm9 12 2 2 4-4' }], + ], + aliases: ['check-circle-2'], + }; + protected override readonly icon = signal(LucideCircleCheck.icon); +} + +describe('LucideIconBase', () => { + let component: LucideCircleCheck; + let fixture: ComponentFixture; + let title: WritableSignal; + let color: WritableSignal; + let size: WritableSignal; + let strokeWidth: WritableSignal; + let absoluteStrokeWidth: WritableSignal; + const getSvgAttribute = (attr: string) => fixture.nativeElement.getAttribute(attr); + function createComponent() { + return TestBed.createComponent(LucideCircleCheck, { + inferTagName: true, + bindings: [ + inputBinding('title', title), + inputBinding('color', color), + inputBinding('size', size), + inputBinding('strokeWidth', strokeWidth), + inputBinding('absoluteStrokeWidth', absoluteStrokeWidth), + ], + }); + } + beforeEach(async () => { + title = signal(undefined); + color = signal(undefined); + size = signal(undefined); + strokeWidth = signal(undefined); + absoluteStrokeWidth = signal(undefined); + fixture = createComponent(); + component = fixture.componentInstance; + }); + + it('should create', () => { + fixture.detectChanges(); + expect(component).toBeTruthy(); + }); + + it('should render children', () => { + fixture.detectChanges(); + expect(fixture.nativeElement.innerHTML).toBe( + '', + ); + }); + + describe('class', () => { + it('should add all classes', () => { + fixture.detectChanges(); + expect(getSvgAttribute('class')).toBe('lucide lucide-circle-check lucide-check-circle-2'); + }); + }); + + describe('color', () => { + it('should default to currentColor', () => { + fixture.detectChanges(); + expect(getSvgAttribute('stroke')).toBe('currentColor'); + }); + it('should set color', () => { + color.set('red'); + fixture.detectChanges(); + expect(getSvgAttribute('stroke')).toBe('red'); + }); + }); + + describe('size', () => { + it('should default to 24', () => { + fixture.detectChanges(); + expect(getSvgAttribute('width')).toBe('24'); + expect(getSvgAttribute('height')).toBe('24'); + }); + it('should set size', () => { + size.set(12); + fixture.detectChanges(); + expect(getSvgAttribute('width')).toBe('12'); + expect(getSvgAttribute('height')).toBe('12'); + }); + it('should allow string size', () => { + size.set('18'); + fixture.detectChanges(); + expect(getSvgAttribute('width')).toBe('18'); + expect(getSvgAttribute('height')).toBe('18'); + }); + it('should use default on invalid string', () => { + size.set('large'); + fixture.detectChanges(); + expect(getSvgAttribute('width')).toBe('24'); + expect(getSvgAttribute('height')).toBe('24'); + }); + }); + + describe('strokeWidth', () => { + it('should default to 2', () => { + fixture.detectChanges(); + expect(getSvgAttribute('stroke-width')).toBe('2'); + }); + it('should set stroke width', () => { + strokeWidth.set(1.41); + fixture.detectChanges(); + expect(getSvgAttribute('stroke-width')).toBe('1.41'); + }); + it('should allow string stroke width', () => { + strokeWidth.set('1px'); + fixture.detectChanges(); + expect(getSvgAttribute('stroke-width')).toBe('1'); + }); + }); + + describe('absoluteStrokeWidth', () => { + it('should not adjust stroke width', () => { + strokeWidth.set(2); + size.set(12); + absoluteStrokeWidth.set(true); + fixture.detectChanges(); + expect(getSvgAttribute('stroke-width')).toBe('2'); + }); + it('should not set vector-effect on children', () => { + absoluteStrokeWidth.set(false); + for (const child of fixture.nativeElement.children) { + expect(child.getAttribute('vector-effect')).toBeNull(); + } + }); + it('should set vector-effect on children', () => { + absoluteStrokeWidth.set(true); + for (const child of fixture.nativeElement.children) { + expect(child.getAttribute('vector-effect')).toBe('non-scaling-stroke'); + } + }); + }); + + describe('title', () => { + it('should set title if provided', () => { + title.set('Foobar'); + fixture.detectChanges(); + const titleEl = fixture.debugElement.query(By.css('title')).nativeElement; + expect(titleEl).toBeDefined(); + expect(titleEl.textContent).toBe('Foobar'); + }); + it('should not set aria-hidden when title is set', () => { + title.set('Foobar'); + fixture.detectChanges(); + expect(getSvgAttribute('aria-hidden')).toBe('false'); + }); + it('should set aria-hidden if no title is provided', () => { + title.set(undefined); + fixture.detectChanges(); + expect(getSvgAttribute('aria-hidden')).toBe('true'); + }); + }); + + describe('LUCIDE_CONFIG', () => { + beforeEach(async () => { + TestBed.resetTestingModule(); + TestBed.configureTestingModule({ + providers: [ + provideLucideConfig({ + color: 'red', + strokeWidth: 1, + size: 12, + absoluteStrokeWidth: true, + }), + ], + }); + await TestBed.compileComponents(); + fixture = createComponent(); + component = fixture.componentInstance; + }); + describe('color', () => { + it('should use color from config', () => { + fixture.detectChanges(); + expect(getSvgAttribute('stroke')).toBe('red'); + }); + it('should use override color from config', () => { + color.set('pink'); + fixture.detectChanges(); + expect(getSvgAttribute('stroke')).toBe('pink'); + }); + }); + describe('strokeWidth', () => { + it('should use stroke width from config', () => { + fixture.detectChanges(); + expect(getSvgAttribute('stroke-width')).toBe('1'); + }); + it('should use override stroke width from config', () => { + strokeWidth.set(3); + fixture.detectChanges(); + expect(getSvgAttribute('stroke-width')).toBe('3'); + }); + }); + describe('size', () => { + it('should use size from config', () => { + fixture.detectChanges(); + expect(getSvgAttribute('width')).toBe('12'); + expect(getSvgAttribute('height')).toBe('12'); + }); + it('should use override size from config', () => { + size.set('48'); + fixture.detectChanges(); + expect(getSvgAttribute('width')).toBe('48'); + expect(getSvgAttribute('height')).toBe('48'); + }); + }); + describe('absoluteStrokeWidth', () => { + it('should use absoluteStrokeWidth from config', () => { + for (const child of fixture.nativeElement.children) { + expect(child.getAttribute('vector-effect')).toBe('non-scaling-stroke'); + } + }); + it('should override absoluteStrokeWidth', () => { + absoluteStrokeWidth.set(false); + for (const child of fixture.nativeElement.children) { + expect(child.getAttribute('vector-effect')).toBeNull(); + } + }); + }); + }); +}); diff --git a/packages/angular/src/lucide-icon-base.ts b/packages/angular/src/lucide-icon-base.ts new file mode 100644 index 000000000..0a0c73ae2 --- /dev/null +++ b/packages/angular/src/lucide-icon-base.ts @@ -0,0 +1,134 @@ +import { + Component, + effect, + ElementRef, + inject, + input, + Renderer2, + Signal, + viewChild, +} from '@angular/core'; +import { LUCIDE_CONFIG } from './lucide-config'; +import { LucideIconData, Nullable } from './types'; +import defaultAttributes from './default-attributes'; +import { lucideIconTemplate } from './lucide-icon-template'; + +function transformNumericStringInput( + value: Nullable, + defaultValue: number, +): number { + if (typeof value === 'string') { + const parsedValue = parseInt(value, 10); + if (isNaN(parsedValue)) { + return defaultValue; + } + return parsedValue; + } + return value ?? defaultValue; +} + +/** + * @internal + */ +@Component({ + // eslint-disable-next-line @angular-eslint/component-selector + selector: 'svg[lucideIcon]', + template: lucideIconTemplate, + host: { + ...defaultAttributes, + class: 'lucide', + '[attr.width]': 'size().toString(10)', + '[attr.height]': 'size().toString(10)', + '[attr.stroke]': 'color()', + '[attr.stroke-width]': 'strokeWidth().toString(10)', + '[attr.aria-hidden]': '!title()', + }, +}) +export abstract class LucideIconBase { + protected abstract readonly icon: Signal>; + protected readonly iconConfig = inject(LUCIDE_CONFIG); + protected readonly elRef = inject(ElementRef); + protected readonly renderer = inject(Renderer2); + protected readonly contentRef = viewChild.required('contentRef'); + /** + * An optional accessible label for the icon. + * - If provided, it will add the title as an [`` element](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Element/title). + * - If not provided, the component will add an `aria-hidden="true"` attribute automatically. + * + * @remarks + * Please refer to our [Accessibility guide](https://lucide.dev/guide/advanced/accessibility) regarding this matter. + * Adding accessible labels to icons is normally not necessary: + * - If your icon is decorative (as most icons are) just leave it as hidden from screen readers. + * - If your icon is interactive, it should be contained within an interactive element (e.g. button), and you should probably set your accessible label on that element. + * - If your icon is functional (e.g. used in place of a label), feel free to use this property. + */ + readonly title = input>(); + /** + * Width and height. + * @default 24 + */ + readonly size = input(this.iconConfig.size, { + transform: (value: Nullable) => + transformNumericStringInput(value, this.iconConfig.size), + }); + /** + * Stroke color. + * @default currentColor + */ + readonly color = input(this.iconConfig.color, { + transform: (value: Nullable) => value ?? this.iconConfig.color, + }); + /** + * Stroke width + * @default 2 + */ + readonly strokeWidth = input(this.iconConfig.strokeWidth, { + transform: (value: Nullable) => + transformNumericStringInput(value, this.iconConfig.strokeWidth), + }); + /** + * If set to true, it adds [`vector-effect="non-scaling-stroke"`](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/vector-effect) to child elements. + */ + readonly absoluteStrokeWidth = input(this.iconConfig.absoluteStrokeWidth, { + transform: (value: Nullable) => value ?? this.iconConfig.absoluteStrokeWidth, + }); + + constructor() { + effect((onCleanup) => { + const icon = this.icon(); + if (icon) { + const absoluteStrokeWidth = this.absoluteStrokeWidth(); + const { name, node, aliases = [] } = icon; + const classes = [name, ...aliases].map((item) => `lucide-${item}`); + for (const cssClass of classes) { + this.renderer.addClass(this.elRef.nativeElement, cssClass); + } + const contentRef = this.contentRef(); + const refChild = contentRef.nativeElement; + const elements = node.map(([name, attrs]) => { + const element = this.renderer.createElement(name, 'http://www.w3.org/2000/svg'); + if (absoluteStrokeWidth) { + this.renderer.setAttribute(element, 'vector-effect', 'non-scaling-stroke'); + } + Object.entries(attrs).forEach(([name, value]) => + this.renderer.setAttribute( + element, + name, + typeof value === 'number' ? value.toString(10) : value, + ), + ); + this.renderer.insertBefore(this.elRef.nativeElement, element, refChild); + return element; + }); + onCleanup(() => { + elements.forEach((element) => + this.renderer.removeChild(this.elRef.nativeElement, element), + ); + for (const cssClass of classes) { + this.renderer.removeClass(this.elRef.nativeElement, cssClass); + } + }); + } + }); + } +} diff --git a/packages/angular/src/lucide-icon-template.ts b/packages/angular/src/lucide-icon-template.ts new file mode 100644 index 000000000..85b2e8b5e --- /dev/null +++ b/packages/angular/src/lucide-icon-template.ts @@ -0,0 +1,10 @@ +/** + * @internal + * The template of all Lucide icon components. + */ +export const lucideIconTemplate = `@if (title(); as titleValue) { + {{ titleValue }} +} + + +`; diff --git a/packages/angular/src/lucide-icons.spec.ts b/packages/angular/src/lucide-icons.spec.ts new file mode 100644 index 000000000..9b6a93d9d --- /dev/null +++ b/packages/angular/src/lucide-icons.spec.ts @@ -0,0 +1,64 @@ +import { TestBed } from '@angular/core/testing'; +import { + LUCIDE_ICONS, + lucideLegacyIcon, + lucideLegacyIconMap, + provideLucideIcons, +} from './lucide-icons'; +import { LucideIconData } from './types'; +import { LucideCircle } from './icons/circle'; + +describe('Lucide icons', () => { + describe('LUCIDE_ICONS', () => { + it('should default to empty map', () => { + expect(TestBed.inject(LUCIDE_ICONS)).toEqual({}); + }); + }); + describe('provideLucideIcons', () => { + const mockIcon: LucideIconData = { + name: 'mock-icon', + node: [['polyline', { points: '1 1 22 22' }]], + }; + const mockIcon2: LucideIconData = { + name: 'mock-icon-circle', + node: [['circle', { cx: 12, cy: 12, r: 8 }]], + aliases: ['mock-icon-2'], + }; + const legacyIconNode: LucideIconData['node'] = [['circle', { cx: 12, cy: 12, r: 8 }]]; + const legacyAlias = 'legacy-old-name'; + const OtherLegacyIcon = legacyIconNode; + it('should accept list of icon object, icon components or legacy icons', () => { + TestBed.configureTestingModule({ + providers: [ + provideLucideIcons( + mockIcon, + mockIcon2, + LucideCircle, + lucideLegacyIcon('legacy-icon', legacyIconNode, [legacyAlias]), + ...lucideLegacyIconMap({ OtherLegacyIcon }), + ), + ], + }); + const legacyIconData = { + name: 'legacy-icon', + node: legacyIconNode, + aliases: [legacyAlias], + }; + const otherLegacyIconData = { + name: 'other-legacy-icon', + node: legacyIconNode, + aliases: ['OtherLegacyIcon'], + }; + expect(TestBed.inject(LUCIDE_ICONS)).toEqual({ + 'mock-icon': mockIcon, + 'mock-icon-circle': mockIcon2, + 'mock-icon-2': mockIcon2, + 'legacy-icon': legacyIconData, + 'legacy-old-name': legacyIconData, + 'other-legacy-icon': otherLegacyIconData, + OtherLegacyIcon: otherLegacyIconData, + ['circle']: LucideCircle.icon, + }); + }); + }); +}); diff --git a/packages/angular/src/lucide-icons.ts b/packages/angular/src/lucide-icons.ts new file mode 100644 index 000000000..0f3136b35 --- /dev/null +++ b/packages/angular/src/lucide-icons.ts @@ -0,0 +1,105 @@ +import { InjectionToken, Provider } from '@angular/core'; +import { isLucideIconComponent, LucideIcon, LucideIconData, LucideIcons } from './types'; + +/** + * Injection token for providing Lucide icons by name. + * + * @internal Use {@link provideLucideIcons} + */ +export const LUCIDE_ICONS = new InjectionToken('Lucide icons', { + factory: () => ({}), +}); + +/** + * Provide Lucide icons by name. + * + * @remarks + * Warning! This provider will convert dictionary keys to lower-kebab-case. + * + * @param icons Either a dictionary of icons or a list of Angular icon components. + * + * @usage + * ```ts + * import { provideLucideIcons, SquareCheck } from '@lucide/angular'; + * import { MyCustomIcon } from './custom-icons/my-custom-icon'; + * + * providers: [ + * provideLucideIcons({ + * SquareCheck, + * MyCustomIcon, // LucideIconData + * }), + * ] + * ``` + * + * ```html + * + * ``` + */ +export function provideLucideIcons(...icons: Array): Provider { + return { + provide: LUCIDE_ICONS, + useValue: icons.reduce((acc, icon) => { + const iconData = isLucideIconComponent(icon) ? icon.icon : icon; + acc[iconData.name] = iconData; + for (const alias of iconData.aliases ?? []) { + acc[alias] = iconData; + } + return acc; + }, {} as LucideIcons), + }; +} + +/** + * Converts a legacy icon node to the new format, for custom icon (e.g. `@lucide/lab`) support. + * + * @usage + * ```ts + * import { provideLucideIcons, lucideLegacyIcon } from '@lucide/angular'; + * import { UserRoundX } from 'lucide-angular'; + * import { burger } from '@lucide/lab'; + * + * provideLucideIcons( + * lucideLegacyIcon('user-round-x', UserRoundX, ['user-circle-x']), + * lucideLegacyIcon('burger', burger, ['hamburger']), + * ), + * ``` + */ +export function lucideLegacyIcon( + name: string, + node: LucideIconData['node'], + aliases: string[] = [], +): LucideIconData { + return { + name, + node, + aliases, + }; +} + +/** + * Converts a map of legacy icon nodes to a list of icon data objects. + * + * @usage + * ```ts + * import { provideLucideIcons, lucideLegacyIconMap, LucideCircle } from '@lucide/angular'; + * import { UserRoundX } from 'lucide-angular'; + * import { burger } from '@lucide/lab'; + * + * provideLucideIcons( + * LucideCircle, + * ...lucideLegacyIconMap({ UserRoundX, burger }), + * ), + * ``` + */ +export function lucideLegacyIconMap( + icons: Record, +): LucideIconData[] { + return Object.entries(icons).map(([pascalName, node]) => { + const name: string = pascalName.replaceAll(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase(); + return { + name, + node, + aliases: [pascalName], + }; + }); +} diff --git a/packages/angular/src/public-api.ts b/packages/angular/src/public-api.ts new file mode 100644 index 000000000..04b50fc8e --- /dev/null +++ b/packages/angular/src/public-api.ts @@ -0,0 +1,10 @@ +import * as icons from './icons/lucide-angular'; + +export * from './lucide-config'; +export * from './lucide-dynamic-icon'; +export * from './lucide-icon-base'; +export * from './lucide-icon-template'; +export * from './lucide-icons'; +export * from './types'; +export * from './icons/lucide-angular'; +export { icons }; diff --git a/packages/angular/src/types.ts b/packages/angular/src/types.ts new file mode 100644 index 000000000..301e94ed7 --- /dev/null +++ b/packages/angular/src/types.ts @@ -0,0 +1,61 @@ +import { Signal, Type } from '@angular/core'; + +type HtmlAttributes = { [key: string]: string | number }; +export type LucideIconNode = readonly [string, HtmlAttributes]; +export type LucideIcons = { [key: string]: LucideIconData }; + +/** + * A Lucide icon object that fully describes an icon to be displayed. + */ +export type LucideIconData = { + name: string; + size?: number; + node: LucideIconNode[]; + aliases?: string[]; +}; + +/** + * Input signal map of Lucide icon components. + */ +interface LucideIconProps { + title: Signal>; + size: Signal>; + color: Signal>; + strokeWidth: Signal>; + absoluteStrokeWidth: Signal>; +} + +/** + * Represents a Lucide icon component type that has `iconName` and `iconData` signals inherited from `LucideIconBase` and respective static members accessible without instantiating the component. + */ +export interface LucideIcon extends Type { + icon: LucideIconData; +} + +/** + * Type guard for {@link LucideIconData} + */ +export function isLucideIconData(icon: unknown): icon is LucideIconData { + return ( + !!icon && + typeof icon === 'object' && + 'name' in icon && + typeof icon.name === 'string' && + 'node' in icon && + Array.isArray(icon.node) + ); +} + +/** + * Type guard for {@link LucideIcon} + */ +export function isLucideIconComponent(icon: unknown): icon is LucideIcon { + return icon instanceof Type && 'icon' in icon && isLucideIconData(icon.icon); +} + +export type LucideIconInput = LucideIcon | LucideIconData | string; + +/** + * @internal + */ +export type Nullable = T | null | undefined; diff --git a/packages/angular/tsconfig.json b/packages/angular/tsconfig.json new file mode 100644 index 000000000..65b5c1a3d --- /dev/null +++ b/packages/angular/tsconfig.json @@ -0,0 +1,38 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "compileOnSave": false, + "compilerOptions": { + "paths": { + "@lucide/angular": ["./dist"], + }, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "isolatedModules": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "importHelpers": true, + "target": "ES2022", + "module": "preserve", + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true, + }, + "files": [], + "references": [ + { + "path": "./tsconfig.lib.json", + }, + { + "path": "./tsconfig.spec.json", + }, + ], +} diff --git a/packages/angular/tsconfig.lib.json b/packages/angular/tsconfig.lib.json new file mode 100644 index 000000000..a1fc35682 --- /dev/null +++ b/packages/angular/tsconfig.lib.json @@ -0,0 +1,14 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/lib", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "include": ["src/**/*.ts"], + "exclude": ["**/*.spec.ts"] +} diff --git a/packages/angular/tsconfig.lib.prod.json b/packages/angular/tsconfig.lib.prod.json new file mode 100644 index 000000000..9215caac4 --- /dev/null +++ b/packages/angular/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial" + } +} diff --git a/packages/angular/tsconfig.spec.json b/packages/angular/tsconfig.spec.json new file mode 100644 index 000000000..26230b0b3 --- /dev/null +++ b/packages/angular/tsconfig.spec.json @@ -0,0 +1,10 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": ["vitest/globals"] + }, + "include": ["src/**/*.d.ts", "src/**/*.spec.ts"] +} diff --git a/packages/astro/package.json b/packages/astro/package.json index 4bb49e7c8..5b1e06300 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -58,7 +58,6 @@ "prettier": "^3.4.2", "typescript": "^5.8.3", "vite": "^6.3.6", - "vitest": "^4.0.12", "astro": "^5.16.0" }, "peerDependencies": { diff --git a/packages/lucide-preact/package.json b/packages/lucide-preact/package.json index b1125c149..07bf592aa 100644 --- a/packages/lucide-preact/package.json +++ b/packages/lucide-preact/package.json @@ -52,8 +52,7 @@ "rollup": "^4.59.0", "rollup-plugin-dts": "^6.2.3", "typescript": "^5.8.3", - "vite": "^7.2.4", - "vitest": "^4.0.12" + "vite": "^7.2.4" }, "peerDependencies": { "preact": "^10.27.2" diff --git a/packages/lucide-react-native/package.json b/packages/lucide-react-native/package.json index 6c492982b..361d48363 100644 --- a/packages/lucide-react-native/package.json +++ b/packages/lucide-react-native/package.json @@ -72,8 +72,7 @@ "rollup": "^4.59.0", "rollup-plugin-dts": "^6.2.3", "typescript": "^5.8.3", - "vite": "^7.2.4", - "vitest": "^4.0.12" + "vite": "^7.2.4" }, "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0", diff --git a/packages/lucide-react/package.json b/packages/lucide-react/package.json index 4c87194ea..55936ddbe 100644 --- a/packages/lucide-react/package.json +++ b/packages/lucide-react/package.json @@ -63,8 +63,7 @@ "rollup-plugin-dts": "^6.2.3", "rollup-plugin-preserve-directives": "^0.4.0", "typescript": "^5.8.3", - "vite": "^7.2.4", - "vitest": "^4.0.12" + "vite": "^7.2.4" }, "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" diff --git a/packages/lucide-solid/package.json b/packages/lucide-solid/package.json index d96f45c81..ccbc7bab4 100644 --- a/packages/lucide-solid/package.json +++ b/packages/lucide-solid/package.json @@ -85,7 +85,6 @@ "typescript": "^5.8.3", "vite": "^7.2.4", "vite-plugin-solid": "^2.11.6", - "vitest": "^4.0.12", "esbuild": "^0.25.0" }, "peerDependencies": { diff --git a/packages/lucide-svelte/package.json b/packages/lucide-svelte/package.json index e56c5443c..779fe8d1b 100644 --- a/packages/lucide-svelte/package.json +++ b/packages/lucide-svelte/package.json @@ -49,7 +49,7 @@ "build": "pnpm clean && pnpm copy:license && pnpm copy:utils && pnpm build:icons && pnpm build:package && pnpm build:license", "copy:license": "cp ../../LICENSE ./LICENSE", "copy:utils": "mkdir -p ./src/utils && for f in hasA11yProp mergeClasses; do cp -f ../../packages/shared/src/utils/$f.ts ./src/utils/; done", - "clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.svelte && rm -f index.js", + "clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.svelte && rm -rf ./src/icons/*.ts && rm -f index.js", "build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mts --exportFileName=index.ts --iconFileExtension=.svelte --importImportFileExtension=.svelte --separateIconFileExport --separateIconFileExportExtension=.ts --withAliases --aliasesFileExtension=.ts --separateAliasesFile --separateAliasesFileExtension=.ts --aliasImportFileExtension=.js --pretty=false", "build:package": "svelte-package --input ./src", "build:license": "node ./scripts/appendBlockComments.mts", @@ -66,13 +66,11 @@ "@testing-library/svelte": "^4.0.2", "@tsconfig/svelte": "^5.0.0", "jest-serializer-html": "^7.1.0", - "jsdom": "^20.0.3", "svelte": "^4.2.19", "svelte-check": "^3.4.4", "svelte-preprocess": "^5.0.4", "typescript": "^5.8.3", - "vite": "^7.2.4", - "vitest": "^4.0.12" + "vite": "^7.2.4" }, "peerDependencies": { "svelte": "^3 || ^4 || ^5.0.0-next.42" diff --git a/packages/lucide/package.json b/packages/lucide/package.json index f85fa90ae..ae9cc8eba 100644 --- a/packages/lucide/package.json +++ b/packages/lucide/package.json @@ -52,7 +52,6 @@ "rollup": "^4.59.0", "rollup-plugin-dts": "^6.2.3", "typescript": "^5.8.3", - "vite": "^7.2.4", - "vitest": "^4.0.12" + "vite": "^7.2.4" } } diff --git a/packages/shared/package.json b/packages/shared/package.json index 419d118a7..4c75951a2 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -13,7 +13,6 @@ "test:watch": "vitest watch" }, "devDependencies": { - "vite": "^7.2.4", - "vitest": "^4.0.12" + "vite": "^7.2.4" } } diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 4472a6b9c..4c9fd3e43 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -72,8 +72,7 @@ "svelte-check": "^4.3.4", "svelte-preprocess": "^6.0.3", "typescript": "^5.8.3", - "vite": "^6.3.6", - "vitest": "^4.0.12" + "vite": "^6.3.6" }, "peerDependencies": { "svelte": "^5" diff --git a/packages/vue/package.json b/packages/vue/package.json index 0b5c6b7e5..9b57838f1 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -54,7 +54,6 @@ "rollup": "^4.59.0", "typescript": "^5.8.3", "vite": "^7.2.4", - "vitest": "^4.0.12", "vue": "^3.4.21" }, "peerDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9e033de9a..d00c42650 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,6 +43,12 @@ importers: '@typescript-eslint/parser': specifier: ^6.21.0 version: 6.21.0(eslint@8.57.1)(typescript@5.9.3) + '@vitest/coverage-v8': + specifier: 4.0.12 + version: 4.0.12(vitest@4.0.12) + '@vitest/ui': + specifier: 4.0.12 + version: 4.0.12(vitest@4.0.12) ajv-cli: specifier: ^5.0.0 version: 5.0.0(ts-node@10.9.2(@swc/core@1.7.23(@swc/helpers@0.5.17))(@types/node@24.10.1)(typescript@5.9.3)) @@ -76,6 +82,9 @@ importers: husky: specifier: ^8.0.3 version: 8.0.3 + jsdom: + specifier: ^27.3.0 + version: 27.4.0 lint-staged: specifier: ^13.3.0 version: 13.3.0(enquirer@2.3.6) @@ -84,7 +93,7 @@ importers: version: 1.2.8 openai: specifier: ^5.8.1 - version: 5.23.2(ws@8.18.0)(zod@3.25.76) + version: 5.23.2(ws@8.19.0)(zod@3.25.76) p-memoize: specifier: ^7.1.1 version: 7.1.1 @@ -106,6 +115,9 @@ importers: svgson: specifier: ^5.3.1 version: 5.3.1 + vitest: + specifier: 4.0.12 + version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/ui@4.0.12)(jiti@2.6.1)(jsdom@27.4.0)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) yargs: specifier: ^17.7.2 version: 17.7.2 @@ -199,7 +211,7 @@ importers: version: 1.15.8 nitropack: specifier: ^2.12.4 - version: 2.13.1(@vercel/blob@2.3.0)(encoding@0.1.13)(xml2js@0.6.2) + version: 2.13.1(@vercel/blob@2.3.0)(encoding@0.1.13)(rolldown@1.0.0-rc.4)(xml2js@0.6.2) rollup-plugin-copy: specifier: ^3.5.0 version: 3.5.0 @@ -208,7 +220,77 @@ importers: version: 2.1.11 vitepress: specifier: ^1.6.4 - version: 1.6.4(@algolia/client-search@5.44.0)(@types/node@24.10.1)(@types/react@18.3.27)(axios@1.13.2)(fuse.js@7.1.0)(less@4.2.0)(postcss@8.5.6)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8)(search-insights@2.8.2)(stylus@0.56.0)(terser@5.44.1)(typescript@5.9.3) + version: 1.6.4(@algolia/client-search@5.48.1)(@types/node@24.10.1)(@types/react@18.3.27)(axios@1.13.2)(fuse.js@7.1.0)(less@4.2.0)(postcss@8.5.6)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.98.0)(search-insights@2.8.2)(stylus@0.56.0)(terser@5.44.1)(typescript@5.9.3) + + packages/angular: + devDependencies: + '@angular-eslint/builder': + specifier: ~21.1.0 + version: 21.1.0(@angular/cli@21.2.2(@types/node@24.10.1)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@8.57.1)(typescript@5.9.3) + '@angular-eslint/eslint-plugin': + specifier: ~21.1.0 + version: 21.1.0(@typescript-eslint/utils@8.57.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@angular-eslint/eslint-plugin-template': + specifier: ~21.1.0 + version: 21.1.0(@angular-eslint/template-parser@21.1.0(eslint@8.57.1)(typescript@5.9.3))(@typescript-eslint/types@8.57.0)(@typescript-eslint/utils@8.57.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@angular-eslint/schematics': + specifier: ~21.1.0 + version: 21.1.0(@angular-eslint/template-parser@21.1.0(eslint@8.57.1)(typescript@5.9.3))(@angular/cli@21.2.2(@types/node@24.10.1)(chokidar@5.0.0))(@typescript-eslint/types@8.57.0)(@typescript-eslint/utils@8.57.0(eslint@8.57.1)(typescript@5.9.3))(chokidar@5.0.0)(eslint@8.57.1)(typescript@5.9.3) + '@angular-eslint/template-parser': + specifier: ~21.1.0 + version: 21.1.0(eslint@8.57.1)(typescript@5.9.3) + '@angular/build': + specifier: ^21.0.3 + version: 21.2.2(@angular/compiler-cli@21.2.4(@angular/compiler@21.2.4)(typescript@5.9.3))(@angular/compiler@21.2.4)(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(@angular/platform-browser@21.2.4(@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2)))(@types/node@24.10.1)(chokidar@5.0.0)(jiti@2.6.1)(less@4.2.0)(ng-packagr@21.2.0(@angular/compiler-cli@21.2.4(@angular/compiler@21.2.4)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.6)(stylus@0.56.0)(terser@5.44.1)(tslib@2.8.1)(typescript@5.9.3)(vitest@4.0.12)(yaml@2.8.0) + '@angular/cli': + specifier: ^21.0.3 + version: 21.2.2(@types/node@24.10.1)(chokidar@5.0.0) + '@angular/common': + specifier: ^21.0.0 + version: 21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/compiler': + specifier: ^21.0.0 + version: 21.2.4 + '@angular/compiler-cli': + specifier: ^21.0.0 + version: 21.2.4(@angular/compiler@21.2.4)(typescript@5.9.3) + '@angular/core': + specifier: ^21.0.0 + version: 21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2) + '@angular/forms': + specifier: ^21.0.0 + version: 21.2.4(@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(@angular/platform-browser@21.2.4(@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2)))(rxjs@7.8.2) + '@angular/platform-browser': + specifier: ^21.0.0 + version: 21.2.4(@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2)) + '@angular/router': + specifier: ^21.0.0 + version: 21.2.4(@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(@angular/platform-browser@21.2.4(@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2)))(rxjs@7.8.2) + '@lucide/build-icons': + specifier: workspace:* + version: link:../../tools/build-icons + '@lucide/helpers': + specifier: workspace:* + version: link:../../tools/build-helpers + '@vitest/browser-playwright': + specifier: ^4.0.12 + version: 4.1.0(playwright@1.58.2)(vite@7.3.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vitest@4.0.12) + angular-eslint: + specifier: 21.1.0 + version: 21.1.0(@angular/cli@21.2.2(@types/node@24.10.1)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@8.57.1)(typescript-eslint@8.57.0(eslint@8.57.1)(typescript@5.9.3))(typescript@5.9.3) + ng-packagr: + specifier: ^21.0.0 + version: 21.2.0(@angular/compiler-cli@21.2.4(@angular/compiler@21.2.4)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) + rxjs: + specifier: ~7.8.0 + version: 7.8.2 + tslib: + specifier: ^2.3.0 + version: 2.8.1 + typescript: + specifier: ~5.9.2 + version: 5.9.3 + publishDirectory: dist packages/astro: devDependencies: @@ -226,7 +308,7 @@ importers: version: 6.9.1 astro: specifier: ^5.16.0 - version: 5.16.0(@types/node@24.10.1)(@vercel/blob@2.3.0)(db0@0.3.4)(ioredis@5.10.0)(jiti@2.6.1)(less@4.2.0)(rollup@4.59.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.0) + version: 5.16.0(@types/node@24.10.1)(@vercel/blob@2.3.0)(db0@0.3.4)(ioredis@5.10.0)(jiti@2.6.1)(less@4.2.0)(rollup@4.59.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.0) jest-serializer-html: specifier: ^7.1.0 version: 7.1.0 @@ -241,10 +323,7 @@ importers: version: 5.9.3 vite: specifier: ^6.3.6 - version: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vitest: - specifier: ^4.0.12 - version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) packages/icons: devDependencies: @@ -280,10 +359,10 @@ importers: version: 5.9.3 vite: specifier: ^7.2.4 - version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) vitest: specifier: ^4.0.12 - version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/ui@4.0.12)(jiti@2.6.1)(jsdom@27.4.0)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) packages/lucide: devDependencies: @@ -316,10 +395,7 @@ importers: version: 5.9.3 vite: specifier: ^7.2.4 - version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vitest: - specifier: ^4.0.12 - version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) packages/lucide-angular: devDependencies: @@ -440,7 +516,7 @@ importers: version: link:../shared '@preact/preset-vite': specifier: ^2.10.2 - version: 2.10.2(@babel/core@7.28.5)(preact@10.28.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + version: 2.10.2(@babel/core@7.29.0)(preact@10.28.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) '@testing-library/jest-dom': specifier: ^6.8.0 version: 6.9.1 @@ -464,10 +540,7 @@ importers: version: 5.9.3 vite: specifier: ^7.2.4 - version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vitest: - specifier: ^4.0.12 - version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) packages/lucide-react: devDependencies: @@ -491,7 +564,7 @@ importers: version: 18.3.27 '@vitejs/plugin-react': specifier: ^4.6.0 - version: 4.7.0(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + version: 4.7.0(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) jest-serializer-html: specifier: ^7.1.0 version: 7.1.0 @@ -515,10 +588,7 @@ importers: version: 5.9.3 vite: specifier: ^7.2.4 - version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vitest: - specifier: ^4.0.12 - version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) packages/lucide-react-native: devDependencies: @@ -545,7 +615,7 @@ importers: version: 18.3.27 '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.7.0(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + version: 4.7.0(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) jest-serializer-html: specifier: ^7.1.0 version: 7.1.0 @@ -557,10 +627,10 @@ importers: version: 18.3.1(react@18.3.1) react-native: specifier: ^0.76.0 - version: 0.76.9(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1) + version: 0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.28.5(@babel/core@7.29.0))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1) react-native-svg: specifier: ^15.8.0 - version: 15.15.0(react-native@0.76.9(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1) + version: 15.15.0(react-native@0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.28.5(@babel/core@7.29.0))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1) rollup: specifier: ^4.59.0 version: 4.59.0 @@ -572,10 +642,7 @@ importers: version: 5.9.3 vite: specifier: ^7.2.4 - version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vitest: - specifier: ^4.0.12 - version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) packages/lucide-solid: devDependencies: @@ -626,13 +693,10 @@ importers: version: 5.9.3 vite: specifier: ^7.2.4 - version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) vite-plugin-solid: specifier: ^2.11.6 - version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.10)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) - vitest: - specifier: ^4.0.12 - version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + version: 2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.10)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) packages/lucide-static: devDependencies: @@ -674,7 +738,7 @@ importers: version: 2.5.6(svelte@4.2.20)(typescript@5.9.3) '@sveltejs/vite-plugin-svelte': specifier: ^2.4.2 - version: 2.5.3(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0)) + version: 2.5.3(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) '@testing-library/jest-dom': specifier: ^6.8.0 version: 6.9.1 @@ -687,27 +751,21 @@ importers: jest-serializer-html: specifier: ^7.1.0 version: 7.1.0 - jsdom: - specifier: ^20.0.3 - version: 20.0.3 svelte: specifier: ^4.2.19 version: 4.2.20 svelte-check: specifier: ^3.4.4 - version: 3.8.6(@babel/core@7.28.5)(less@4.2.0)(postcss@8.5.6)(sass@1.77.8)(svelte@4.2.20) + version: 3.8.6(@babel/core@7.29.0)(less@4.2.0)(postcss@8.5.6)(sass@1.98.0)(stylus@0.56.0)(svelte@4.2.20) svelte-preprocess: specifier: ^5.0.4 - version: 5.1.4(@babel/core@7.28.5)(less@4.2.0)(postcss@8.5.6)(sass@1.77.8)(svelte@4.2.20)(typescript@5.9.3) + version: 5.1.4(@babel/core@7.29.0)(less@4.2.0)(postcss@8.5.6)(sass@1.98.0)(stylus@0.56.0)(svelte@4.2.20)(typescript@5.9.3) typescript: specifier: ^5.8.3 version: 5.9.3 vite: specifier: ^7.2.4 - version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vitest: - specifier: ^4.0.12 - version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) packages/lucide-vue-next: devDependencies: @@ -728,7 +786,7 @@ importers: version: 8.1.0(@vue/compiler-sfc@3.5.24)(vue@3.5.24(typescript@5.9.3)) '@vitejs/plugin-vue': specifier: ^6.0.2 - version: 6.0.2(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@3.5.24(typescript@5.9.3)) + version: 6.0.2(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@3.5.24(typescript@5.9.3)) '@vue/test-utils': specifier: 2.4.6 version: 2.4.6 @@ -740,10 +798,10 @@ importers: version: 6.2.3(rollup@4.59.0)(typescript@5.9.3) vite: specifier: ^7.2.4 - version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) vitest: specifier: ^4.0.12 - version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/ui@4.0.12)(jiti@2.6.1)(jsdom@27.4.0)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) vue: specifier: ^3.5.20 version: 3.5.24(typescript@5.9.3) @@ -752,10 +810,7 @@ importers: devDependencies: vite: specifier: ^7.2.4 - version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vitest: - specifier: ^4.0.12 - version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) packages/svelte: devDependencies: @@ -770,13 +825,13 @@ importers: version: 2.5.6(svelte@5.43.14)(typescript@5.9.3) '@sveltejs/vite-plugin-svelte': specifier: ^6.1.3 - version: 6.2.4(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) '@testing-library/jest-dom': specifier: ^6.8.0 version: 6.9.1 '@testing-library/svelte': specifier: ^5.2.8 - version: 5.2.9(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vitest@4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + version: 5.2.9(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vitest@4.0.12) '@tsconfig/svelte': specifier: ^5.0.4 version: 5.0.6 @@ -794,16 +849,13 @@ importers: version: 4.3.4(picomatch@4.0.3)(svelte@5.43.14)(typescript@5.9.3) svelte-preprocess: specifier: ^6.0.3 - version: 6.0.3(@babel/core@7.28.5)(less@4.2.0)(postcss@8.5.6)(sass@1.77.8)(stylus@0.56.0)(svelte@5.43.14)(typescript@5.9.3) + version: 6.0.3(@babel/core@7.29.0)(less@4.2.0)(postcss@8.5.6)(sass@1.98.0)(stylus@0.56.0)(svelte@5.43.14)(typescript@5.9.3) typescript: specifier: ^5.8.3 version: 5.9.3 vite: specifier: ^6.3.6 - version: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vitest: - specifier: ^4.0.12 - version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) packages/vue: devDependencies: @@ -824,10 +876,10 @@ importers: version: 8.1.0(@vue/compiler-sfc@3.5.24)(vue@3.5.24(typescript@5.9.3)) '@vitejs/plugin-vue': specifier: ^4.6.2 - version: 4.6.2(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@3.5.24(typescript@5.9.3)) + version: 4.6.2(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@3.5.24(typescript@5.9.3)) '@vitejs/plugin-vue2': specifier: 2.2.0 - version: 2.2.0(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@3.5.24(typescript@5.9.3)) + version: 2.2.0(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@3.5.24(typescript@5.9.3)) '@vue/test-utils': specifier: 2.4.5 version: 2.4.5 @@ -842,10 +894,7 @@ importers: version: 5.9.3 vite: specifier: ^7.2.4 - version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vitest: - specifier: ^4.0.12 - version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) vue: specifier: ^3.4.21 version: 3.5.24(typescript@5.9.3) @@ -937,10 +986,13 @@ importers: version: 3.0.1(rollup@4.59.0) rollup-plugin-visualizer: specifier: ^6.0.5 - version: 6.0.5(rollup@4.59.0) + version: 6.0.5(rolldown@1.0.0-rc.4)(rollup@4.59.0) packages: + '@acemir/cssom@0.9.31': + resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} + '@actions/core@1.11.1': resolution: {integrity: sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==} @@ -963,6 +1015,10 @@ packages: resolution: {integrity: sha512-mQT3jwuTgX8QMoqbIR7mPlWkqQqBPQaPabQzm37xg2txMlaMogK/4hCiiESGdg39MlHZOVHeV+0VJuE7f5UK8A==} engines: {node: '>= 14.0.0'} + '@algolia/abtesting@1.14.1': + resolution: {integrity: sha512-Dkj0BgPiLAaim9sbQ97UKDFHJE/880wgStAM18U++NaJ/2Cws34J5731ovJifr6E3Pv4T2CqvMXf8qLCC417Ew==} + engines: {node: '>= 14.0.0'} + '@algolia/autocomplete-core@1.17.7': resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} @@ -987,54 +1043,106 @@ packages: resolution: {integrity: sha512-KY5CcrWhRTUo/lV7KcyjrZkPOOF9bjgWpMj9z98VA+sXzVpZtkuskBLCKsWYFp2sbwchZFTd3wJM48H0IGgF7g==} engines: {node: '>= 14.0.0'} + '@algolia/client-abtesting@5.48.1': + resolution: {integrity: sha512-LV5qCJdj+/m9I+Aj91o+glYszrzd7CX6NgKaYdTOj4+tUYfbS62pwYgUfZprYNayhkQpVFcrW8x8ZlIHpS23Vw==} + engines: {node: '>= 14.0.0'} + '@algolia/client-analytics@5.44.0': resolution: {integrity: sha512-LKOCE8S4ewI9bN3ot9RZoYASPi8b78E918/DVPW3HHjCMUe6i+NjbNG6KotU4RpP6AhRWZjjswbOkWelUO+OoA==} engines: {node: '>= 14.0.0'} + '@algolia/client-analytics@5.48.1': + resolution: {integrity: sha512-/AVoMqHhPm14CcHq7mwB+bUJbfCv+jrxlNvRjXAuO+TQa+V37N8k1b0ijaRBPdmSjULMd8KtJbQyUyabXOu6Kg==} + engines: {node: '>= 14.0.0'} + '@algolia/client-common@5.44.0': resolution: {integrity: sha512-1yyJm4OYC2cztbS28XYVWwLXdwpLsMG4LoZLOltVglQ2+hc/i9q9fUDZyjRa2Bqt4DmkIfezagfMrokhyH4uxQ==} engines: {node: '>= 14.0.0'} + '@algolia/client-common@5.48.1': + resolution: {integrity: sha512-VXO+qu2Ep6ota28ktvBm3sG53wUHS2n7bgLWmce5jTskdlCD0/JrV4tnBm1l7qpla1CeoQb8D7ShFhad+UoSOw==} + engines: {node: '>= 14.0.0'} + '@algolia/client-insights@5.44.0': resolution: {integrity: sha512-wVQWK6jYYsbEOjIMI+e5voLGPUIbXrvDj392IckXaCPvQ6vCMTXakQqOYCd+znQdL76S+3wHDo77HZWiAYKrtA==} engines: {node: '>= 14.0.0'} + '@algolia/client-insights@5.48.1': + resolution: {integrity: sha512-zl+Qyb0nLg+Y5YvKp1Ij+u9OaPaKg2/EPzTwKNiVyOHnQJlFxmXyUZL1EInczAZsEY8hVpPCLtNfhMhfxluXKQ==} + engines: {node: '>= 14.0.0'} + '@algolia/client-personalization@5.44.0': resolution: {integrity: sha512-lkgRjOjOkqmIkebHjHpU9rLJcJNUDMm+eVSW/KJQYLjGqykEZxal+nYJJTBbLceEU2roByP/+27ZmgIwCdf0iA==} engines: {node: '>= 14.0.0'} + '@algolia/client-personalization@5.48.1': + resolution: {integrity: sha512-r89Qf9Oo9mKWQXumRu/1LtvVJAmEDpn8mHZMc485pRfQUMAwSSrsnaw1tQ3sszqzEgAr1c7rw6fjBI+zrAXTOw==} + engines: {node: '>= 14.0.0'} + '@algolia/client-query-suggestions@5.44.0': resolution: {integrity: sha512-sYfhgwKu6NDVmZHL1WEKVLsOx/jUXCY4BHKLUOcYa8k4COCs6USGgz6IjFkUf+niwq8NCECMmTC4o/fVQOalsA==} engines: {node: '>= 14.0.0'} + '@algolia/client-query-suggestions@5.48.1': + resolution: {integrity: sha512-TPKNPKfghKG/bMSc7mQYD9HxHRUkBZA4q1PEmHgICaSeHQscGqL4wBrKkhfPlDV1uYBKW02pbFMUhsOt7p4ZpA==} + engines: {node: '>= 14.0.0'} + '@algolia/client-search@5.44.0': resolution: {integrity: sha512-/FRKUM1G4xn3vV8+9xH1WJ9XknU8rkBGlefruq9jDhYUAvYozKimhrmC2pRqw/RyHhPivmgZCRuC8jHP8piz4Q==} engines: {node: '>= 14.0.0'} + '@algolia/client-search@5.48.1': + resolution: {integrity: sha512-4Fu7dnzQyQmMFknYwTiN/HxPbH4DyxvQ1m+IxpPp5oslOgz8m6PG5qhiGbqJzH4HiT1I58ecDiCAC716UyVA8Q==} + engines: {node: '>= 14.0.0'} + '@algolia/ingestion@1.44.0': resolution: {integrity: sha512-5+S5ynwMmpTpCLXGjTDpeIa81J+R4BLH0lAojOhmeGSeGEHQTqacl/4sbPyDTcidvnWhaqtyf8m42ue6lvISAw==} engines: {node: '>= 14.0.0'} + '@algolia/ingestion@1.48.1': + resolution: {integrity: sha512-/RFq3TqtXDUUawwic/A9xylA2P3LDMO8dNhphHAUOU51b1ZLHrmZ6YYJm3df1APz7xLY1aht6okCQf+/vmrV9w==} + engines: {node: '>= 14.0.0'} + '@algolia/monitoring@1.44.0': resolution: {integrity: sha512-xhaTN8pXJjR6zkrecg4Cc9YZaQK2LKm2R+LkbAq+AYGBCWJxtSGlNwftozZzkUyq4AXWoyoc0x2SyBtq5LRtqQ==} engines: {node: '>= 14.0.0'} + '@algolia/monitoring@1.48.1': + resolution: {integrity: sha512-Of0jTeAZRyRhC7XzDSjJef0aBkgRcvRAaw0ooYRlOw57APii7lZdq+layuNdeL72BRq1snaJhoMMwkmLIpJScw==} + engines: {node: '>= 14.0.0'} + '@algolia/recommend@5.44.0': resolution: {integrity: sha512-GNcite/uOIS7wgRU1MT7SdNIupGSW+vbK9igIzMePvD2Dl8dy0O3urKPKIbTuZQqiVH1Cb84y5cgLvwNrdCj/Q==} engines: {node: '>= 14.0.0'} + '@algolia/recommend@5.48.1': + resolution: {integrity: sha512-bE7JcpFXzxF5zHwj/vkl2eiCBvyR1zQ7aoUdO+GDXxGp0DGw7nI0p8Xj6u8VmRQ+RDuPcICFQcCwRIJT5tDJFw==} + engines: {node: '>= 14.0.0'} + '@algolia/requester-browser-xhr@5.44.0': resolution: {integrity: sha512-YZHBk72Cd7pcuNHzbhNzF/FbbYszlc7JhZlDyQAchnX5S7tcemSS96F39Sy8t4O4WQLpFvUf1MTNedlitWdOsQ==} engines: {node: '>= 14.0.0'} + '@algolia/requester-browser-xhr@5.48.1': + resolution: {integrity: sha512-MK3wZ2koLDnvH/AmqIF1EKbJlhRS5j74OZGkLpxI4rYvNi9Jn/C7vb5DytBnQ4KUWts7QsmbdwHkxY5txQHXVw==} + engines: {node: '>= 14.0.0'} + '@algolia/requester-fetch@5.44.0': resolution: {integrity: sha512-B9WHl+wQ7uf46t9cq+vVM/ypVbOeuldVDq9OtKsX2ApL2g/htx6ImB9ugDOOJmB5+fE31/XPTuCcYz/j03+idA==} engines: {node: '>= 14.0.0'} + '@algolia/requester-fetch@5.48.1': + resolution: {integrity: sha512-2oDT43Y5HWRSIQMPQI4tA/W+TN/N2tjggZCUsqQV440kxzzoPGsvv9QP1GhQ4CoDa+yn6ygUsGp6Dr+a9sPPSg==} + engines: {node: '>= 14.0.0'} + '@algolia/requester-node-http@5.44.0': resolution: {integrity: sha512-MULm0qeAIk4cdzZ/ehJnl1o7uB5NMokg83/3MKhPq0Pk7+I0uELGNbzIfAkvkKKEYcHALemKdArtySF9eKzh/A==} engines: {node: '>= 14.0.0'} + '@algolia/requester-node-http@5.48.1': + resolution: {integrity: sha512-xcaCqbhupVWhuBP1nwbk1XNvwrGljozutEiLx06mvqDf3o8cHyEgQSHS4fKJM+UAggaWVnnFW+Nne5aQ8SUJXg==} + engines: {node: '>= 14.0.0'} + '@ampproject/remapping@2.2.0': resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} engines: {node: '>=6.0.0'} @@ -1051,6 +1159,11 @@ packages: resolution: {integrity: sha512-JwrWomNqNGjAeKlqV2pimUFlCgFxQy+Vioz9+QAPIrUkvvjbkQ1dZKOe8Ul8eosb1N3Ln282U6qzOpHKfJ4TOg==} engines: {node: ^12.20.0 || ^14.15.0 || >=16.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular-devkit/architect@0.2102.2': + resolution: {integrity: sha512-CDvFtXwyBtMRkTQnm+LfBNLL0yLV8ZGskrM1T6VkcGwXGFDott1FxUdj96ViodYsYL5fbJr0MNA6TlLcanV3kQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + hasBin: true + '@angular-devkit/build-angular@13.3.11': resolution: {integrity: sha512-H4tpdmRu+6HSjsL+swV/8qj8v0YSDq6lpb31EYajlBB6fDj+YJQvHgaWvexSWl6eIqgDKXcujhNUjNi1enjwHw==} engines: {node: ^12.20.0 || ^14.15.0 || >=16.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -1093,53 +1206,161 @@ packages: chokidar: optional: true + '@angular-devkit/core@21.2.2': + resolution: {integrity: sha512-xUeKGe4BDQpkz0E6fnAPIJXE0y0nqtap0KhJIBhvN7xi3NenIzTmoi6T9Yv5OOBUdLZbOm4SOel8MhdXiIBpAQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^5.0.0 + peerDependenciesMeta: + chokidar: + optional: true + '@angular-devkit/schematics@13.3.11': resolution: {integrity: sha512-ben+EGXpCrClnIVAAnEQmhQdKmnnqFhMp5BqMxgOslSYBAmCutLA6rBu5vsc8kZcGian1wt+lueF7G1Uk5cGBg==} engines: {node: ^12.20.0 || ^14.15.0 || >=16.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular-devkit/schematics@21.2.2': + resolution: {integrity: sha512-CCeyQxGUq+oyGnHd7PfcYIVbj9pRnqjQq0rAojoAqs1BJdtInx9weLBCLy+AjM3NHePeZrnwm+wEVr8apED8kg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular-eslint/builder@13.0.1': resolution: {integrity: sha512-z43jUpA4xm767ze/yWwvoy5PdvSe57DAvXHlHywv0iYxXl1OhytPIA0CdOA3ZWkbSWWVmWmFzELeYfGnE3+igg==} peerDependencies: eslint: ^7.0.0 || ^8.0.0 typescript: '*' + '@angular-eslint/builder@21.1.0': + resolution: {integrity: sha512-pcUlDkGqeZ+oQC0oEjnkDDlB96gbgHQhnBUKdhYAiAOSuiBod4+npP0xQOq5chYtRNPBprhDqgrJrp5DBeDMOA==} + peerDependencies: + '@angular/cli': '>= 21.0.0 < 22.0.0' + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + '@angular-eslint/bundled-angular-compiler@13.0.1': resolution: {integrity: sha512-Eih9Kh0hxHO4+3in9mgjksQecym0p+3p+287y3LLihIc7gCkAO4xZeHGVGiC8qUX72PNUXkDlyskI9oHjK9Axw==} + '@angular-eslint/bundled-angular-compiler@21.1.0': + resolution: {integrity: sha512-t52J6FszgEHaJ+IjuzU9qaWfVxsjlVNkAP+B5z2t4NDgbbDDsmI+QJh0OtP1qdlqzjh2pbocEml30KhYmNZm/Q==} + '@angular-eslint/eslint-plugin-template@13.0.1': resolution: {integrity: sha512-8FclNMjEzb87CtE3TdsXXWk1SRCp/tSSHI0cYVv6YpU7f/9Mnej+ZY3MdvqI/amD8zJueTMdnjNRP/jiwX2XhQ==} peerDependencies: eslint: ^7.0.0 || ^8.0.0 typescript: '*' + '@angular-eslint/eslint-plugin-template@21.1.0': + resolution: {integrity: sha512-FlbRfOCn8IUHvP1ebcCSQFVNh+4X/HqZqL7SW5oj9WIYPiOX9ijS03ndNbfX/pBPSIi8GHLKMjLt8zIy1l5Lww==} + peerDependencies: + '@angular-eslint/template-parser': 21.1.0 + '@typescript-eslint/types': ^7.11.0 || ^8.0.0 + '@typescript-eslint/utils': ^7.11.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + '@angular-eslint/eslint-plugin@13.0.1': resolution: {integrity: sha512-WxqgMLTfE45dqjzg/Nq0dOEDwzpdB+zYOWrA41MT3jt0UbukFEx8+FMrAgBLIeDaHzwWomiAEV5Tm5mQAKA4VA==} peerDependencies: eslint: ^7.0.0 || ^8.0.0 typescript: '*' + '@angular-eslint/eslint-plugin@21.1.0': + resolution: {integrity: sha512-oNp+4UzN2M3KwGwEw03NUdXz93vqJd9sMzTbGXWF9+KVfA2LjckGDTrI6g6asGcJMdyTo07rDcnw0m0MkLB5VA==} + peerDependencies: + '@typescript-eslint/utils': ^7.11.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + '@angular-eslint/schematics@13.0.1': resolution: {integrity: sha512-LiPUVff6fexQNa6Ttgb+yhIoQc9oXc1qb34kmntvQDw59xBeEyrUojG2P2I5VS+1ZoVUWNY86cqEaxkFJVkY7w==} peerDependencies: '@angular/cli': '>= 13.0.0 < 14.0.0' + '@angular-eslint/schematics@21.1.0': + resolution: {integrity: sha512-Hal1mYwx4MTjCcNHqfIlua31xrk2tZJoyTiXiGQ21cAeK4sFuY+9V7/8cxbwJMGftX0G4J7uhx8woOdIFuqiZw==} + peerDependencies: + '@angular/cli': '>= 21.0.0 < 22.0.0' + '@angular-eslint/template-parser@13.0.1': resolution: {integrity: sha512-GEJzVLS4Sb4UdurqaPD1/ucGhagGAQCp17CIgjpcXRwzxBZ9OLqbO/rx8diRbADp+1rceVq4BhADsg3VdsOsuw==} peerDependencies: eslint: ^7.0.0 || ^8.0.0 typescript: '*' + '@angular-eslint/template-parser@21.1.0': + resolution: {integrity: sha512-PYVgNbjNtuD5/QOuS6cHR8A7bRqsVqxtUUXGqdv76FYMAajQcAvyfR0QxOkqf3NmYxgNgO3hlUHWq0ILjVbcow==} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + '@angular-eslint/utils@13.0.1': resolution: {integrity: sha512-makSpu8kr5yHIz0c6WaWwix+tk5DN5Uix9vQulVisZWchTmSqEovJih/UC+4XspM9kQbjcbWHohYKiBbBEQpbA==} peerDependencies: eslint: ^7.0.0 || ^8.0.0 typescript: '*' + '@angular-eslint/utils@21.1.0': + resolution: {integrity: sha512-rWINgxGREu+NFUPCpAVsBGG8B4hfXxyswM0N5GbjykvsfB5W6PUix2Gsoh++iEsZPT+c9lvgXL5GbpwfanjOow==} + peerDependencies: + '@typescript-eslint/utils': ^7.11.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + + '@angular/build@21.2.2': + resolution: {integrity: sha512-Vq2eIneNxzhHm1MwEmRqEJDwHU9ODfSRDaMWwtysGMhpoMQmLdfTqkQDmkC2qVUr8mV8Z1i5I+oe5ZJaMr/PlQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + '@angular/compiler': ^21.0.0 + '@angular/compiler-cli': ^21.0.0 + '@angular/core': ^21.0.0 + '@angular/localize': ^21.0.0 + '@angular/platform-browser': ^21.0.0 + '@angular/platform-server': ^21.0.0 + '@angular/service-worker': ^21.0.0 + '@angular/ssr': ^21.2.2 + karma: ^6.4.0 + less: ^4.2.0 + ng-packagr: ^21.0.0 + postcss: ^8.4.0 + tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0 + tslib: ^2.3.0 + typescript: '>=5.9 <6.0' + vitest: ^4.0.8 + peerDependenciesMeta: + '@angular/core': + optional: true + '@angular/localize': + optional: true + '@angular/platform-browser': + optional: true + '@angular/platform-server': + optional: true + '@angular/service-worker': + optional: true + '@angular/ssr': + optional: true + karma: + optional: true + less: + optional: true + ng-packagr: + optional: true + postcss: + optional: true + tailwindcss: + optional: true + vitest: + optional: true + '@angular/cli@13.3.11': resolution: {integrity: sha512-LTuQ1wC/VJiHqHx8nYJCx0EJv1Ek7R6VvP/5vmr/+M8oVvJ2zSh/aIbcPg6BTL0YEfMI6nX41mUjPBUfF0q2OA==} engines: {node: ^12.20.0 || ^14.15.0 || >=16.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true + '@angular/cli@21.2.2': + resolution: {integrity: sha512-eZo8/qX+ZIpIWc0CN+cCX13Lbgi/031wAp8DRVhDDO6SMVtcr/ObOQ2S16+pQdOMXxiG3vby6IhzJuz9WACzMQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + hasBin: true + '@angular/common@13.3.12': resolution: {integrity: sha512-Nk4zNKfda92aFe+cucHRv2keyryR7C1ZnsurwZW9WZSobpY3z2tTT81F+yy35lGoMt5BDBAIpfh1b4j9Ue/vMg==} engines: {node: ^12.20.0 || ^14.15.0 || >=16.10.0} @@ -1147,6 +1368,13 @@ packages: '@angular/core': 13.3.12 rxjs: ^6.5.3 || ^7.4.0 + '@angular/common@21.2.4': + resolution: {integrity: sha512-NrP6qOuUpo3fqq14UJ1b2bIRtWsfvxh1qLqOyFV4gfBrHhXd0XffU1LUlUw1qp4w1uBSgPJ0/N5bSPUWrAguVg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + '@angular/core': 21.2.4 + rxjs: ^6.5.3 || ^7.4.0 + '@angular/compiler-cli@13.3.12': resolution: {integrity: sha512-6jrdVwexPihWlyitopc3rn2ReEkhAaMI8UWR0SOTnt3NaqNYWeio4bpeWlumgNPElDyY5rmyrmJgeaY8ICa8qA==} engines: {node: ^12.20.0 || ^14.15.0 || >=16.10.0} @@ -1155,10 +1383,25 @@ packages: '@angular/compiler': 13.3.12 typescript: '>=4.4.2 <4.7' + '@angular/compiler-cli@21.2.4': + resolution: {integrity: sha512-vGjd7DZo/Ox50pQCm5EycmBu91JclimPtZoyNXu/2hSxz3oAkzwiHCwlHwk2g58eheSSp+lYtYRLmHAqSVZLjg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@angular/compiler': 21.2.4 + typescript: '>=5.9 <6.1' + peerDependenciesMeta: + typescript: + optional: true + '@angular/compiler@13.3.12': resolution: {integrity: sha512-F5vJYrjbNvEWoVz9J/CqiT3Iod6g9bV0dGI5EeURcW4yHXHZ12ioQpfU3+bE7qXcTlnofbdDhK8cGxGx01SzBA==} engines: {node: ^12.20.0 || ^14.15.0 || >=16.10.0} + '@angular/compiler@21.2.4': + resolution: {integrity: sha512-9+ulVK3idIo/Tu4X2ic7/V0+Uj7pqrOAbOuIirYe6Ymm3AjexuFRiGBbfcH0VJhQ5cf8TvIJ1fuh+MI4JiRIxA==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + '@angular/core@13.3.12': resolution: {integrity: sha512-jx0YC+NbPMbxGr5bXECkCEQv2RdVxR8AJNnabkPk8ZjwCpDzROrbELwwS1kunrZUhffcD15IhWGBvf1EGHAYDw==} engines: {node: ^12.20.0 || ^14.15.0 || >=16.10.0} @@ -1166,6 +1409,28 @@ packages: rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.11.4 + '@angular/core@21.2.4': + resolution: {integrity: sha512-2+gd67ZuXHpGOqeb2o7XZPueEWEP81eJza2tSHkT5QMV8lnYllDEmaNnkPxnIjSLGP1O3PmiXxo4z8ibHkLZwg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + '@angular/compiler': 21.2.4 + rxjs: ^6.5.3 || ^7.4.0 + zone.js: ~0.15.0 || ~0.16.0 + peerDependenciesMeta: + '@angular/compiler': + optional: true + zone.js: + optional: true + + '@angular/forms@21.2.4': + resolution: {integrity: sha512-1fOhctA9ADEBYjI3nPQUR5dHsK2+UWAjup37Ksldk/k0w8UpD5YsN7JVNvsDMZRFMucKYcGykPblU7pABtsqnQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + '@angular/common': 21.2.4 + '@angular/core': 21.2.4 + '@angular/platform-browser': 21.2.4 + rxjs: ^6.5.3 || ^7.4.0 + '@angular/platform-browser-dynamic@13.3.12': resolution: {integrity: sha512-/hBggov0PxK/KNJqIu3MVc5k8f0iDbygDP8Z1k/J0FcllOSRdO4LsQd1fsCfGfwIUf0YWGyD7KraSGpBBiWlFg==} engines: {node: ^12.20.0 || ^14.15.0 || >=16.10.0} @@ -1186,6 +1451,35 @@ packages: '@angular/animations': optional: true + '@angular/platform-browser@21.2.4': + resolution: {integrity: sha512-1A9e/cQVu+3BkRCktLcO3RZGuw8NOTHw1frUUrpAz+iMyvIT4sDRFbL+U1g8qmOCZqRNC1Pi1HZfZ1kl6kvrcQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + '@angular/animations': 21.2.4 + '@angular/common': 21.2.4 + '@angular/core': 21.2.4 + peerDependenciesMeta: + '@angular/animations': + optional: true + + '@angular/router@21.2.4': + resolution: {integrity: sha512-OjWze4XT8i2MThcBXMv7ru1k6/5L6QYZbcXuseqimFCHm2avEJ+mXPovY066fMBZJhqbXdjB82OhHAWkIHjglQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + '@angular/common': 21.2.4 + '@angular/core': 21.2.4 + '@angular/platform-browser': 21.2.4 + rxjs: ^6.5.3 || ^7.4.0 + + '@asamuzakjp/css-color@4.1.2': + resolution: {integrity: sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==} + + '@asamuzakjp/dom-selector@6.8.1': + resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} + + '@asamuzakjp/nwsapi@2.3.9': + resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} + '@assemblyscript/loader@0.10.1': resolution: {integrity: sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==} @@ -1239,6 +1533,10 @@ packages: resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + engines: {node: '>=6.9.0'} + '@babel/core@7.16.12': resolution: {integrity: sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==} engines: {node: '>=6.9.0'} @@ -1255,6 +1553,10 @@ packages: resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} engines: {node: '>=6.9.0'} + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.16.8': resolution: {integrity: sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==} engines: {node: '>=6.9.0'} @@ -1295,6 +1597,10 @@ packages: resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.25.4': resolution: {integrity: sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==} engines: {node: '>=6.9.0'} @@ -1379,6 +1685,10 @@ packages: resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.26.0': resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} @@ -1397,6 +1707,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.24.7': resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} @@ -1449,6 +1765,10 @@ packages: resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.24.7': + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -2447,6 +2767,13 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} + + '@blazediff/core@1.9.1': + resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==} + '@capsizecss/unpack@3.0.1': resolution: {integrity: sha512-8XqW8xGn++Eqqbz3e9wKuK7mxryeRjs4LOHLxbh2lwKeSbuNR4NFifDZT4KzvjU6HMOPbiNTsWpniK5EJfTWkg==} engines: {node: '>=18'} @@ -2496,6 +2823,37 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} + '@csstools/color-helpers@6.0.2': + resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} + engines: {node: '>=20.19.0'} + + '@csstools/css-calc@3.1.1': + resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-color-parser@4.0.2': + resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.1.0': + resolution: {integrity: sha512-H4tuz2nhWgNKLt1inYpoVCfbJbMwX/lQKp3g69rrrIMIYlFD9+zTykOKhNR8uGrAmbS/kT9n6hTFkmDkxLgeTA==} + + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} + '@csstools/postcss-cascade-layers@1.1.1': resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} engines: {node: ^12 || ^14 || >=16} @@ -3411,6 +3769,12 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@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.11.0': resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -3419,6 +3783,10 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.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/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3435,6 +3803,15 @@ packages: resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@exodus/bytes@1.15.0': + resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + '@noble/hashes': ^1.8.0 || ^2.0.0 + peerDependenciesMeta: + '@noble/hashes': + optional: true + '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} @@ -3451,15 +3828,28 @@ packages: '@floating-ui/vue@1.1.9': resolution: {integrity: sha512-BfNqNW6KA83Nexspgb9DZuz578R7HT8MZw1CfK9I6Ah4QReNWEJsXWHN+SdmOVLNGmTPDi+fDT535Df5PzMLbQ==} + '@gar/promise-retry@1.0.2': + resolution: {integrity: sha512-Lm/ZLhDZcBECta3TmCQSngiQykFdfw+QtI1/GYMsZd4l3nG+P8WLB16XuS7WaBGLQ+9E+cOcWQsth9cayuGt8g==} + engines: {node: ^20.17.0 || >=22.9.0} + '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + '@harperfast/extended-iterable@1.0.3': + resolution: {integrity: sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==} + '@headlessui/vue@1.7.23': resolution: {integrity: sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg==} engines: {node: '>=10'} peerDependencies: vue: ^3.2.0 + '@hono/node-server@1.19.11': + resolution: {integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + '@html-eslint/eslint-plugin@0.19.1': resolution: {integrity: sha512-Tn+/GWLtNM6NiZFLbfM+vTK0d7gKaDgnw4Pp+DsZi09lFimi4bOPOgy8dSVnLeyFIfP6LkeuwVm4pfBZZM2qbA==} engines: {node: '>=8.10.0'} @@ -3624,6 +4014,140 @@ packages: cpu: [x64] os: [win32] + '@inquirer/ansi@1.0.2': + resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} + engines: {node: '>=18'} + + '@inquirer/checkbox@4.3.2': + resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.21': + resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.3.2': + resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@4.2.23': + resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@4.0.23': + resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.15': + resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} + engines: {node: '>=18'} + + '@inquirer/input@4.3.1': + resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@3.0.23': + resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@4.0.23': + resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.10.1': + resolution: {integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@4.1.11': + resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@3.2.2': + resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@4.4.2': + resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@3.0.10': + resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@ioredis/commands@1.5.1': resolution: {integrity: sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw==} @@ -3896,6 +4420,48 @@ packages: '@lezer/lr@1.4.3': resolution: {integrity: sha512-yenN5SqAxAPv/qMnpWW0AT7l+SxVrgG+u0tNsRQWqbrz66HIl8DnEbBObvy21J5K7+I1v7gsAnlE2VQ5yYVSeA==} + '@listr2/prompt-adapter-inquirer@3.0.5': + resolution: {integrity: sha512-WELs+hj6xcilkloBXYf9XXK8tYEnKsgLj01Xl5ONUJpKjmT5hGVUzNUS5tooUxs7pGMrw+jFD/41WpqW4V3LDA==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@inquirer/prompts': '>= 3 < 8' + listr2: 9.0.5 + + '@lmdb/lmdb-darwin-arm64@3.5.1': + resolution: {integrity: sha512-tpfN4kKrrMpQ+If1l8bhmoNkECJi0iOu6AEdrTJvWVC+32sLxTARX5Rsu579mPImRP9YFWfWgeRQ5oav7zApQQ==} + cpu: [arm64] + os: [darwin] + + '@lmdb/lmdb-darwin-x64@3.5.1': + resolution: {integrity: sha512-+a2tTfc3rmWhLAolFUWRgJtpSuu+Fw/yjn4rF406NMxhfjbMuiOUTDRvRlMFV+DzyjkwnokisskHbCWkS3Ly5w==} + cpu: [x64] + os: [darwin] + + '@lmdb/lmdb-linux-arm64@3.5.1': + resolution: {integrity: sha512-aoERa5B6ywXdyFeYGQ1gbQpkMkDbEo45qVoXE5QpIRavqjnyPwjOulMkmkypkmsbJ5z4Wi0TBztON8agCTG0Vg==} + cpu: [arm64] + os: [linux] + + '@lmdb/lmdb-linux-arm@3.5.1': + resolution: {integrity: sha512-0EgcE6reYr8InjD7V37EgXcYrloqpxVPINy3ig1MwDSbl6LF/vXTYRH9OE1Ti1D8YZnB35ZH9aTcdfSb5lql2A==} + cpu: [arm] + os: [linux] + + '@lmdb/lmdb-linux-x64@3.5.1': + resolution: {integrity: sha512-SqNDY1+vpji7bh0sFH5wlWyFTOzjbDOl0/kB5RLLYDAFyd/uw3n7wyrmas3rYPpAW7z18lMOi1yKlTPv967E3g==} + cpu: [x64] + os: [linux] + + '@lmdb/lmdb-win32-arm64@3.5.1': + resolution: {integrity: sha512-50v0O1Lt37cwrmR9vWZK5hRW0Aw+KEmxJJ75fge/zIYdvNKB/0bSMSVR5Uc2OV9JhosIUyklOmrEvavwNJ8D6w==} + cpu: [arm64] + os: [win32] + + '@lmdb/lmdb-win32-x64@3.5.1': + resolution: {integrity: sha512-qwosvPyl+zpUlp3gRb7UcJ3H8S28XHCzkv0Y0EgQToXjQP91ZD67EHSCDmaLjtKhe+GVIW5om1KUpzVLA0l6pg==} + cpu: [x64] + os: [win32] + '@lucide/helpers@1.0.0': resolution: {integrity: sha512-9dfxrgLLaoCfr3R/eh6wwlUcY+ZPdEv6SDwFMUhYoO6HhGL8yN8hb5ZwI/OfzbK9mdJpa+jYfwP4nF4ZlZwZLA==} @@ -3907,12 +4473,161 @@ packages: '@marijn/find-cluster-break@1.0.2': resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} + '@modelcontextprotocol/sdk@1.26.0': + resolution: {integrity: sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==} + engines: {node: '>=18'} + peerDependencies: + '@cfworker/json-schema': ^4.1.1 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + '@cfworker/json-schema': + optional: true + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} + cpu: [arm64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==} + cpu: [x64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==} + cpu: [arm64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==} + cpu: [arm] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==} + cpu: [x64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==} + cpu: [x64] + os: [win32] + + '@napi-rs/nice-android-arm-eabi@1.1.1': + resolution: {integrity: sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@napi-rs/nice-android-arm64@1.1.1': + resolution: {integrity: sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/nice-darwin-arm64@1.1.1': + resolution: {integrity: sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/nice-darwin-x64@1.1.1': + resolution: {integrity: sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/nice-freebsd-x64@1.1.1': + resolution: {integrity: sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/nice-linux-arm-gnueabihf@1.1.1': + resolution: {integrity: sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/nice-linux-arm64-gnu@1.1.1': + resolution: {integrity: sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/nice-linux-arm64-musl@1.1.1': + resolution: {integrity: sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/nice-linux-ppc64-gnu@1.1.1': + resolution: {integrity: sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==} + engines: {node: '>= 10'} + cpu: [ppc64] + os: [linux] + + '@napi-rs/nice-linux-riscv64-gnu@1.1.1': + resolution: {integrity: sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + + '@napi-rs/nice-linux-s390x-gnu@1.1.1': + resolution: {integrity: sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==} + engines: {node: '>= 10'} + cpu: [s390x] + os: [linux] + + '@napi-rs/nice-linux-x64-gnu@1.1.1': + resolution: {integrity: sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/nice-linux-x64-musl@1.1.1': + resolution: {integrity: sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/nice-openharmony-arm64@1.1.1': + resolution: {integrity: sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [openharmony] + + '@napi-rs/nice-win32-arm64-msvc@1.1.1': + resolution: {integrity: sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/nice-win32-ia32-msvc@1.1.1': + resolution: {integrity: sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/nice-win32-x64-msvc@1.1.1': + resolution: {integrity: sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/nice@1.1.1': + resolution: {integrity: sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==} + engines: {node: '>= 10'} + '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} '@napi-rs/wasm-runtime@0.2.9': resolution: {integrity: sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==} + '@napi-rs/wasm-runtime@1.1.1': + resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} + '@ngtools/webpack@13.3.11': resolution: {integrity: sha512-gB33hTbc/RJmHyIgSUYj8ErPazhYYm7yfapOnvwHdYhCjrj1TKkR1ierOlhJtpfBYUQg6FChdl2YpyIQNPjWMA==} engines: {node: ^12.20.0 || ^14.15.0 || >=16.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -3941,6 +4656,10 @@ packages: resolution: {integrity: sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==} engines: {node: ^16.14.0 || >=18.0.0} + '@npmcli/agent@4.0.0': + resolution: {integrity: sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==} + engines: {node: ^20.17.0 || >=22.9.0} + '@npmcli/fs@1.1.1': resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} @@ -3952,14 +4671,27 @@ packages: resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@npmcli/fs@5.0.0': + resolution: {integrity: sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==} + engines: {node: ^20.17.0 || >=22.9.0} + '@npmcli/git@2.1.0': resolution: {integrity: sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==} + '@npmcli/git@7.0.2': + resolution: {integrity: sha512-oeolHDjExNAJAnlYP2qzNjMX/Xi9bmu78C9dIGr4xjobrSKbuMYCph8lTzn4vnW3NjIqVmw/f8BCfouqyJXlRg==} + engines: {node: ^20.17.0 || >=22.9.0} + '@npmcli/installed-package-contents@1.0.7': resolution: {integrity: sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==} engines: {node: '>= 10'} hasBin: true + '@npmcli/installed-package-contents@4.0.0': + resolution: {integrity: sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==} + engines: {node: ^20.17.0 || >=22.9.0} + hasBin: true + '@npmcli/move-file@1.1.2': resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} engines: {node: '>=10'} @@ -3973,9 +4705,29 @@ packages: '@npmcli/node-gyp@1.0.3': resolution: {integrity: sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==} + '@npmcli/node-gyp@5.0.0': + resolution: {integrity: sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==} + engines: {node: ^20.17.0 || >=22.9.0} + + '@npmcli/package-json@7.0.5': + resolution: {integrity: sha512-iVuTlG3ORq2iaVa1IWUxAO/jIp77tUKBhoMjuzYW2kL4MLN1bi/ofqkZ7D7OOwh8coAx1/S2ge0rMdGv8sLSOQ==} + engines: {node: ^20.17.0 || >=22.9.0} + '@npmcli/promise-spawn@1.3.2': resolution: {integrity: sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==} + '@npmcli/promise-spawn@9.0.1': + resolution: {integrity: sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==} + engines: {node: ^20.17.0 || >=22.9.0} + + '@npmcli/redact@4.0.0': + resolution: {integrity: sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==} + engines: {node: ^20.17.0 || >=22.9.0} + + '@npmcli/run-script@10.0.4': + resolution: {integrity: sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==} + engines: {node: ^20.17.0 || >=22.9.0} + '@npmcli/run-script@2.0.0': resolution: {integrity: sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==} @@ -4161,6 +4913,9 @@ packages: '@oslojs/encoding@1.1.0': resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + '@oxc-project/types@0.113.0': + resolution: {integrity: sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA==} + '@oxc-resolver/binding-darwin-arm64@1.12.0': resolution: {integrity: sha512-wYe+dlF8npM7cwopOOxbdNjtmJp17e/xF5c0K2WooQXy5VOh74icydM33+Uh/SZDgwyum09/U1FVCX5GdeQk+A==} cpu: [arm64] @@ -4312,6 +5067,9 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@poppinss/colors@4.1.6': resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} @@ -4485,12 +5243,92 @@ packages: resolution: {integrity: sha512-wTOf1zerZX8qYcMmLZw3czR4paI4hXqPjShNwJRh5DeHxvgffUS5KM7XwxtbIheUW6LVYT5fhT2AJiP6mU7U4A==} engines: {node: '>= 10'} + '@rolldown/binding-android-arm64@1.0.0-rc.4': + resolution: {integrity: sha512-vRq9f4NzvbdZavhQbjkJBx7rRebDKYR9zHfO/Wg486+I7bSecdUapzCm5cyXoK+LHokTxgSq7A5baAXUZkIz0w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-rc.4': + resolution: {integrity: sha512-kFgEvkWLqt3YCgKB5re9RlIrx9bRsvyVUnaTakEpOPuLGzLpLapYxE9BufJNvPg8GjT6mB1alN4yN1NjzoeM8Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-rc.4': + resolution: {integrity: sha512-JXmaOJGsL/+rsmMfutcDjxWM2fTaVgCHGoXS7nE8Z3c9NAYjGqHvXrAhMUZvMpHS/k7Mg+X7n/MVKb7NYWKKww==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-rc.4': + resolution: {integrity: sha512-ep3Catd6sPnHTM0P4hNEvIv5arnDvk01PfyJIJ+J3wVCG1eEaPo09tvFqdtcaTrkwQy0VWR24uz+cb4IsK53Qw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.4': + resolution: {integrity: sha512-LwA5ayKIpnsgXJEwWc3h8wPiS33NMIHd9BhsV92T8VetVAbGe2qXlJwNVDGHN5cOQ22R9uYvbrQir2AB+ntT2w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.4': + resolution: {integrity: sha512-AC1WsGdlV1MtGay/OQ4J9T7GRadVnpYRzTcygV1hKnypbYN20Yh4t6O1Sa2qRBMqv1etulUknqXjc3CTIsBu6A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.4': + resolution: {integrity: sha512-lU+6rgXXViO61B4EudxtVMXSOfiZONR29Sys5VGSetUY7X8mg9FCKIIjcPPj8xNDeYzKl+H8F/qSKOBVFJChCQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.4': + resolution: {integrity: sha512-DZaN1f0PGp/bSvKhtw50pPsnln4T13ycDq1FrDWRiHmWt1JeW+UtYg9touPFf8yt993p8tS2QjybpzKNTxYEwg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.4': + resolution: {integrity: sha512-RnGxwZLN7fhMMAItnD6dZ7lvy+TI7ba+2V54UF4dhaWa/p8I/ys1E73KO6HmPmgz92ZkfD8TXS1IMV8+uhbR9g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.4': + resolution: {integrity: sha512-6lcI79+X8klGiGd8yHuTgQRjuuJYNggmEml+RsyN596P23l/zf9FVmJ7K0KVKkFAeYEdg0iMUKyIxiV5vebDNQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.4': + resolution: {integrity: sha512-wz7ohsKCAIWy91blZ/1FlpPdqrsm1xpcEOQVveWoL6+aSPKL4VUcoYmmzuLTssyZxRpEwzuIxL/GDsvpjaBtOw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.4': + resolution: {integrity: sha512-cfiMrfuWCIgsFmcVG0IPuO6qTRHvF7NuG3wngX1RZzc6dU8FuBFb+J3MIR5WrdTNozlumfgL4cvz+R4ozBCvsQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.4': + resolution: {integrity: sha512-p6UeR9y7ht82AH57qwGuFYn69S6CZ7LLKdCKy/8T3zS9VTrJei2/CGsTUV45Da4Z9Rbhc7G4gyWQ/Ioamqn09g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} '@rolldown/pluginutils@1.0.0-beta.50': resolution: {integrity: sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==} + '@rolldown/pluginutils@1.0.0-rc.4': + resolution: {integrity: sha512-1BrrmTu0TWfOP1riA8uakjFc9bpIUGzVKETsOtzY39pPga8zELGDl8eu1Dx7/gjM5CAz14UknsUMpBO8L+YntQ==} + '@rollup/plugin-alias@6.0.0': resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==} engines: {node: '>=20.19.0'} @@ -4841,6 +5679,11 @@ packages: cpu: [x64] os: [win32] + '@rollup/wasm-node@4.59.0': + resolution: {integrity: sha512-cKB/Pe05aJWQYw3UFS79Id+KVXdExBxWful0+CSl24z3ukwOgBSy6l39XZNwfm3vCh/fpUrAAs+T7PsJ6dC8NA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} @@ -4848,6 +5691,10 @@ packages: resolution: {integrity: sha512-imKBnKYEse0SBVELZO/753nkpt3eEgpjrYkB+AFWF9YfO/4RGnYXDHoH8CFkzxPH9QQCgNrmsVFNiYGS+P/S1A==} engines: {node: ^12.20.0 || ^14.15.0 || >=16.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@schematics/angular@21.2.2': + resolution: {integrity: sha512-Ywa6HDtX7TRBQZTVMMnxX3Mk7yVnG8KtSFaXWrkx779+q8tqYdBwNwAqbNd4Zatr1GccKaz9xcptHJta5+DTxw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@shikijs/core@2.5.0': resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} @@ -4890,6 +5737,30 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@sigstore/bundle@4.0.0': + resolution: {integrity: sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==} + engines: {node: ^20.17.0 || >=22.9.0} + + '@sigstore/core@3.1.0': + resolution: {integrity: sha512-o5cw1QYhNQ9IroioJxpzexmPjfCe7gzafd2RY3qnMpxr4ZEja+Jad/U8sgFpaue6bOaF+z7RVkyKVV44FN+N8A==} + engines: {node: ^20.17.0 || >=22.9.0} + + '@sigstore/protobuf-specs@0.5.0': + resolution: {integrity: sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@sigstore/sign@4.1.0': + resolution: {integrity: sha512-Vx1RmLxLGnSUqx/o5/VsCjkuN5L7y+vxEEwawvc7u+6WtX2W4GNa7b9HEjmcRWohw/d6BpATXmvOwc78m+Swdg==} + engines: {node: ^20.17.0 || >=22.9.0} + + '@sigstore/tuf@4.0.1': + resolution: {integrity: sha512-OPZBg8y5Vc9yZjmWCHrlWPMBqW5yd8+wFNl+thMdtcWz3vjVSoJQutF8YkrzI0SLGnkuFof4HSsWUhXrf219Lw==} + engines: {node: ^20.17.0 || >=22.9.0} + + '@sigstore/verify@3.1.0': + resolution: {integrity: sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag==} + engines: {node: ^20.17.0 || >=22.9.0} + '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -5170,6 +6041,14 @@ packages: '@tsconfig/svelte@5.0.6': resolution: {integrity: sha512-yGxYL0I9eETH1/DR9qVJey4DAsCdeau4a9wYPKuXfEhm8lFO8wg+LLYJjIpAm6Fw7HSlhepPhYPDop75485yWQ==} + '@tufjs/canonical-json@2.0.0': + resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@tufjs/models@4.1.0': + resolution: {integrity: sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww==} + engines: {node: ^20.17.0 || >=22.9.0} + '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -5224,6 +6103,9 @@ packages: '@types/eslint@9.6.0': resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==} + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + '@types/estree@0.0.39': resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} @@ -5427,6 +6309,14 @@ packages: typescript: optional: true + '@typescript-eslint/eslint-plugin@8.57.0': + resolution: {integrity: sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.57.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/experimental-utils@5.3.0': resolution: {integrity: sha512-NFVxYTjKj69qB0FM+piah1x3G/63WB8vCBMnlnEHUsiLzXSTWb9FmFn36FD9Zb4APKBLY3xRArOGSMQkuzTF1w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5453,6 +6343,19 @@ packages: typescript: optional: true + '@typescript-eslint/parser@8.57.0': + resolution: {integrity: sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==} + 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.0.0' + + '@typescript-eslint/project-service@8.57.0': + resolution: {integrity: sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/scope-manager@5.3.0': resolution: {integrity: sha512-22Uic9oRlTsPppy5Tcwfj+QET5RWEnZ5414Prby465XxQrQFZ6nnm5KnXgnsAJefG4hEgMnaxTB3kNEyjdjj6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5465,6 +6368,16 @@ packages: resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@8.57.0': + resolution: {integrity: sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.57.0': + resolution: {integrity: sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@5.48.2': resolution: {integrity: sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5485,6 +6398,13 @@ packages: typescript: optional: true + '@typescript-eslint/type-utils@8.57.0': + resolution: {integrity: sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==} + 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.0.0' + '@typescript-eslint/types@5.3.0': resolution: {integrity: sha512-fce5pG41/w8O6ahQEhXmMV+xuh4+GayzqEogN24EK+vECA3I6pUwKuLi5QbXO721EMitpQne5VKXofPonYlAQg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5497,6 +6417,10 @@ packages: resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/types@8.57.0': + resolution: {integrity: sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@5.3.0': resolution: {integrity: sha512-FJ0nqcaUOpn/6Z4Jwbtf+o0valjBLkqc3MWkMvrhA2TvzFXtcclIM8F4MBEmYa2kgcI8EZeSAzwoSrIC8JYkug==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5524,6 +6448,12 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@8.57.0': + resolution: {integrity: sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@5.48.2': resolution: {integrity: sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5536,6 +6466,13 @@ packages: peerDependencies: eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@8.57.0': + resolution: {integrity: sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==} + 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.0.0' + '@typescript-eslint/visitor-keys@5.3.0': resolution: {integrity: sha512-oVIAfIQuq0x2TFDNLVavUn548WL+7hdhxYn+9j3YdJJXB7mH9dAmZNJsPDa7Jc+B9WGqoiex7GUDbyMxV0a/aw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5548,6 +6485,10 @@ packages: resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@8.57.0': + resolution: {integrity: sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -5643,6 +6584,12 @@ packages: engines: {node: '>=20'} hasBin: true + '@vitejs/plugin-basic-ssl@2.1.4': + resolution: {integrity: sha512-HXciTXN/sDBYWgeAD4V4s0DN0g72x5mlxQhHxtYu3Tt8BLa6MzcJZUyDVFCdtjNs3bfENVHVzOsmooTVuNgAAw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + peerDependencies: + vite: ^6.0.0 || ^7.0.0 + '@vitejs/plugin-react@4.7.0': resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -5677,6 +6624,26 @@ packages: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 vue: ^3.2.25 + '@vitest/browser-playwright@4.1.0': + resolution: {integrity: sha512-2RU7pZELY9/aVMLmABNy1HeZ4FX23FXGY1jRuHLHgWa2zaAE49aNW2GLzebW+BmbTZIKKyFF1QXvk7DEWViUCQ==} + peerDependencies: + playwright: '*' + vitest: 4.1.0 + + '@vitest/browser@4.1.0': + resolution: {integrity: sha512-tG/iOrgbiHQks0ew7CdelUyNEHkv8NLrt+CqdTivIuoSnXvO7scWMn4Kqo78/UGY1NJ6Hv+vp8BvRnED/bjFdQ==} + peerDependencies: + vitest: 4.1.0 + + '@vitest/coverage-v8@4.0.12': + resolution: {integrity: sha512-d+w9xAFJJz6jyJRU4BUU7MH409Ush7FWKNkxJU+jASKg6WX33YT0zc+YawMR1JesMWt9QRFQY/uAD3BTn23FaA==} + peerDependencies: + '@vitest/browser': 4.0.12 + vitest: 4.0.12 + peerDependenciesMeta: + '@vitest/browser': + optional: true + '@vitest/expect@4.0.12': resolution: {integrity: sha512-is+g0w8V3/ZhRNrRizrJNr8PFQKwYmctWlU4qg8zy5r9aIV5w8IxXLlfbbxJCwSpsVl2PXPTm2/zruqTqz3QSg==} @@ -5691,9 +6658,23 @@ packages: vite: optional: true + '@vitest/mocker@4.1.0': + resolution: {integrity: sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + '@vitest/pretty-format@4.0.12': resolution: {integrity: sha512-R7nMAcnienG17MvRN8TPMJiCG8rrZJblV9mhT7oMFdBXvS0x+QD6S1G4DxFusR2E0QIS73f7DqSR1n87rrmE+g==} + '@vitest/pretty-format@4.1.0': + resolution: {integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==} + '@vitest/runner@4.0.12': resolution: {integrity: sha512-hDlCIJWuwlcLumfukPsNfPDOJokTv79hnOlf11V+n7E14rHNPz0Sp/BO6h8sh9qw4/UjZiKyYpVxK2ZNi+3ceQ==} @@ -5703,9 +6684,20 @@ packages: '@vitest/spy@4.0.12': resolution: {integrity: sha512-GZjI9PPhiOYNX8Nsyqdw7JQB+u0BptL5fSnXiottAUBHlcMzgADV58A7SLTXXQwcN1yZ6gfd1DH+2bqjuUlCzw==} + '@vitest/spy@4.1.0': + resolution: {integrity: sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==} + + '@vitest/ui@4.0.12': + resolution: {integrity: sha512-RCqeApCnbwd5IFvxk6OeKMXTvzHU/cVqY8HAW0gWk0yAO6wXwQJMKhDfDtk2ss7JCy9u7RNC3kyazwiaDhBA/g==} + peerDependencies: + vitest: 4.0.12 + '@vitest/utils@4.0.12': resolution: {integrity: sha512-DVS/TLkLdvGvj1avRy0LSmKfrcI9MNFvNGN6ECjTUHWJdlcgPDOXhjMis5Dh7rBH62nAmSXnkPbE+DZ5YD75Rw==} + '@vitest/utils@4.1.0': + resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==} + '@volar/language-core@2.4.23': resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==} @@ -5912,6 +6904,10 @@ packages: resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} engines: {node: ^18.17.0 || >=20.5.0} + abbrev@4.0.0: + resolution: {integrity: sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==} + engines: {node: ^20.17.0 || >=22.9.0} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -5920,6 +6916,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} @@ -5980,6 +6980,10 @@ packages: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} engines: {node: '>= 8.0.0'} @@ -6005,6 +7009,14 @@ packages: ajv: optional: true + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -6021,6 +7033,9 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ajv@8.9.0: resolution: {integrity: sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==} @@ -6028,6 +7043,18 @@ packages: resolution: {integrity: sha512-f8IpsbdQjzTjr/4mJ/jv5UplrtyMnnciGax6/B0OnLCs2/GJTK13O4Y7Ff1AvJVAaztanH+m5nzPoUq6EAy+aA==} engines: {node: '>= 14.0.0'} + algoliasearch@5.48.1: + resolution: {integrity: sha512-Rf7xmeuIo7nb6S4mp4abW2faW8DauZyE2faBIKFaUfP3wnpOvNSbiI5AwVhqBNj0jPgBWEvhyCu0sLjN2q77Rg==} + engines: {node: '>= 14.0.0'} + + angular-eslint@21.1.0: + resolution: {integrity: sha512-qXpIEBNYpfgpBaFblnyFegVSQjWCVUdCXTHvMcvtNtmMgtPwIDKvG8wuJo5BbQ/MNt2d8npmnRUaS2ddzdCzww==} + peerDependencies: + '@angular/cli': '>= 21.0.0 < 22.0.0' + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + typescript-eslint: ^8.0.0 + anser@1.4.10: resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==} @@ -6053,6 +7080,10 @@ packages: resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} engines: {node: '>=12'} + ansi-escapes@7.3.0: + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} + ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} @@ -6066,6 +7097,10 @@ packages: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -6078,6 +7113,10 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + ansi-to-vue3@0.1.2: resolution: {integrity: sha512-mkfWeVNBKfmpoWLeLqmAeKQalqvOyAhhMnndqu1oJZEzz8tn56mbUqJC7OfvB8cOEg70ooKjmgeIZoI0i9cdxw==} engines: {node: '>=16', npm: '>=7'} @@ -6191,6 +7230,9 @@ packages: resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} engines: {node: '>=4'} + ast-v8-to-istanbul@0.3.12: + resolution: {integrity: sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g==} + astro@5.16.0: resolution: {integrity: sha512-GaDRs2Mngpw3dr2vc085GnORh98NiXxwIjg/EoQQQl/icZt3Z7s0BRsYHDZ8swkZbOA6wZsqWJdrNirl+iKcDg==} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} @@ -6388,12 +7430,24 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} + baseline-browser-mapping@2.10.7: + resolution: {integrity: sha512-1ghYO3HnxGec0TCGBXiDLVns4eCSx4zJpxnHrlqFQajmhfKMQBzUGDdkMK7fUW7PTHTeLf+j87aTuKuuwWzMGw==} + engines: {node: '>=6.0.0'} + hasBin: true + batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + beasties@0.4.1: + resolution: {integrity: sha512-2Imdcw3LznDuxAbJM26RHniOLAzE6WgrK8OuvVXCQtNBS8rsnD9zsSEa3fHl4hHpUY7BYTlrpvtPVbvu9G6neg==} + engines: {node: '>=18.0.0'} + before-after-hook@2.2.3: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + bidi-js@1.0.3: + resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} @@ -6417,6 +7471,10 @@ packages: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.2.2: + resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} + engines: {node: '>=18'} + bonjour@3.5.0: resolution: {integrity: sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==} @@ -6453,11 +7511,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - browserslist@4.24.2: - resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - browserslist@4.24.5: resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -6468,6 +7521,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -6533,6 +7591,10 @@ packages: resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==} engines: {node: ^16.14.0 || >=18.0.0} + cacache@20.0.3: + resolution: {integrity: sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==} + engines: {node: ^20.17.0 || >=22.9.0} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -6582,6 +7644,9 @@ packages: caniuse-lite@1.0.30001731: resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} + caniuse-lite@1.0.30001778: + resolution: {integrity: sha512-PN7uxFL+ExFJO61aVmP1aIEG4i9whQd4eoSCebav62UwDyp5OHh06zN4jqKSMePVgxHifCw1QJxdRkA1Pisekg==} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -6617,6 +7682,9 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} @@ -6698,6 +7766,10 @@ packages: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + cli-progress@3.12.0: resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} engines: {node: '>=4'} @@ -6710,6 +7782,10 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-spinners@3.4.0: + resolution: {integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==} + engines: {node: '>=18.20'} + cli-table3@0.6.5: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} @@ -6718,10 +7794,18 @@ packages: resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-truncate@5.2.0: + resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} + engines: {node: '>=20'} + cli-width@3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + clipboardy@4.0.0: resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} engines: {node: '>=18'} @@ -6733,6 +7817,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + clone-deep@4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} @@ -6804,6 +7892,10 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -6829,6 +7921,9 @@ packages: common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -6881,6 +7976,10 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-disposition@1.0.1: + resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} + engines: {node: '>=18'} + content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -6900,6 +7999,10 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + cookie@0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} @@ -7015,6 +8118,9 @@ packages: css-select@5.1.0: resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-select@6.0.0: + resolution: {integrity: sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==} + css-tree@1.1.3: resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} engines: {node: '>=8.0.0'} @@ -7035,6 +8141,10 @@ packages: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} + css-what@7.0.0: + resolution: {integrity: sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==} + engines: {node: '>= 6'} + css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} @@ -7066,6 +8176,10 @@ packages: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} + cssstyle@5.3.7: + resolution: {integrity: sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==} + engines: {node: '>=20'} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -7089,6 +8203,10 @@ packages: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} + data-urls@6.0.1: + resolution: {integrity: sha512-euIQENZg6x8mj3fO6o9+fOW8MimUI4PpD/fZBhJfeioZVy9TUpM4UY7KjQNVZFlqwJ0UdzRDzkycB997HEq1BQ==} + engines: {node: '>=20'} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -7210,6 +8328,9 @@ packages: decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + decode-named-character-reference@1.1.0: resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} @@ -7287,6 +8408,10 @@ packages: resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} engines: {node: '>= 0.6.0'} + dependency-graph@1.0.0: + resolution: {integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==} + engines: {node: '>=4'} + deprecation@2.3.1: resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} @@ -7475,6 +8600,9 @@ packages: electron-to-chromium@1.5.198: resolution: {integrity: sha512-G5COfnp3w+ydVu80yprgWSfmfQaYRh9DOxfhAxstLyetKaLyl55QrNjx8C38Pc/C+RaDmb1M0Lk8wPEMQ+bGgQ==} + electron-to-chromium@1.5.313: + resolution: {integrity: sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==} + electron-to-chromium@1.5.47: resolution: {integrity: sha512-zS5Yer0MOYw4rtK2iq43cJagHZ8sXN0jDHDKzB+86gSBSAI4v07S97mcq+Gs2vclAxSh1j7vOAHxSVgduiiuVQ==} @@ -7552,6 +8680,10 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} @@ -8015,6 +9147,10 @@ packages: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + eslint-utils@3.0.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} @@ -8033,6 +9169,10 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + eslint@8.57.1: resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -8114,6 +9254,14 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + eventsource-parser@3.0.6: + resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} + engines: {node: '>=18.0.0'} + + eventsource@3.0.7: + resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} + engines: {node: '>=18.0.0'} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -8136,10 +9284,20 @@ packages: exponential-backoff@3.1.2: resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} + express-rate-limit@8.3.1: + resolution: {integrity: sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==} + engines: {node: '>= 16'} + peerDependencies: + express: '>= 4.11' + express@4.21.2: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + express@5.2.1: + resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} + engines: {node: '>= 18'} + exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} @@ -8215,6 +9373,9 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -8249,6 +9410,10 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} + finalhandler@2.1.1: + resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} + engines: {node: '>= 18.0.0'} + find-cache-dir@2.1.0: resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} engines: {node: '>=6'} @@ -8257,6 +9422,14 @@ packages: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} + find-cache-directory@6.0.0: + resolution: {integrity: sha512-CvFd5ivA6HcSHbD+59P7CyzINHXzwhuQK8RY7CxJZtgDSAtRlHiCaQpZQ2lMR/WRyUIEmzUvL6G2AGurMfegZA==} + engines: {node: '>=20'} + + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} + find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} @@ -8277,9 +9450,6 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} @@ -8376,6 +9546,11 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + 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} @@ -8412,6 +9587,10 @@ packages: resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -8636,6 +9815,10 @@ packages: hermes-parser@0.25.1: resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + hono@4.12.7: + resolution: {integrity: sha512-jq9l1DM0zVIvsm3lv9Nw9nlJnMNPOcAtsbsgiUhWcFzPE99Gvo6yRTlszSLLYacMeQ6quHD6hMfId8crVHvexw==} + engines: {node: '>=16.9.0'} + hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} @@ -8643,6 +9826,10 @@ packages: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} + hosted-git-info@9.0.2: + resolution: {integrity: sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==} + engines: {node: ^20.17.0 || >=22.9.0} + hpack.js@2.1.6: resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} @@ -8650,6 +9837,10 @@ packages: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} + html-encoding-sniffer@6.0.0: + resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + html-entities@2.3.3: resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} @@ -8739,6 +9930,10 @@ packages: resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} engines: {node: '>= 14'} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + httpxy@0.1.7: resolution: {integrity: sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ==} @@ -8770,6 +9965,10 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + icss-utils@5.1.0: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} @@ -8783,6 +9982,10 @@ packages: resolution: {integrity: sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==} engines: {node: '>=10'} + ignore-walk@8.0.0: + resolution: {integrity: sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==} + engines: {node: ^20.17.0 || >=22.9.0} + ignore@5.1.9: resolution: {integrity: sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==} engines: {node: '>= 4'} @@ -8817,6 +10020,9 @@ packages: immutable@4.3.7: resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + immutable@5.1.5: + resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} + import-fresh@2.0.0: resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} engines: {node: '>=4'} @@ -8860,6 +10066,10 @@ packages: resolution: {integrity: sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==} engines: {node: ^18.17.0 || >=20.5.0} + ini@6.0.0: + resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} + engines: {node: ^20.17.0 || >=22.9.0} + injection-js@2.4.0: resolution: {integrity: sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==} @@ -8878,6 +10088,10 @@ packages: resolution: {integrity: sha512-HVBe9OFuqs+Z6n64q09PQvP1/R4Bm+30PAyyD4wIEqssh3v9L21QjCVk4kRLucMBcDokJTcLjsGeVRlq/nH6DA==} engines: {node: '>=12.22.0'} + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} + engines: {node: '>= 12'} + ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} @@ -8983,6 +10197,10 @@ packages: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} + is-function@1.0.2: resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} @@ -9003,6 +10221,10 @@ packages: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + is-lambda@1.0.1: resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} @@ -9063,6 +10285,9 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} @@ -9105,6 +10330,10 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -9157,6 +10386,10 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} + isexe@4.0.0: + resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==} + engines: {node: '>=20'} + isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} @@ -9176,6 +10409,10 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} @@ -9184,10 +10421,18 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + istanbul-reports@3.1.7: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} + jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -9259,6 +10504,9 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + jose@6.2.1: + resolution: {integrity: sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==} + jpeg-js@0.4.4: resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} @@ -9267,6 +10515,9 @@ packages: engines: {node: '>=12'} hasBin: true + js-tokens@10.0.0: + resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -9313,6 +10564,15 @@ packages: canvas: optional: true + jsdom@27.4.0: + resolution: {integrity: sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -9341,6 +10601,10 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-parse-even-better-errors@5.0.0: + resolution: {integrity: sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==} + engines: {node: ^20.17.0 || >=22.9.0} + json-schema-migrate@2.0.0: resolution: {integrity: sha512-r38SVTtojDRp4eD6WsCqiE0eNDt4v1WalBXb9cyZYw9ai5cGtBwzRNWjHzJl38w6TxFkXAIA7h+fyX3tnrAFhQ==} @@ -9350,6 +10614,9 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-schema-typed@8.0.2: + resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -9520,6 +10787,14 @@ packages: enquirer: optional: true + listr2@9.0.5: + resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} + engines: {node: '>=20.0.0'} + + lmdb@3.5.1: + resolution: {integrity: sha512-NYHA0MRPjvNX+vSw8Xxg6FLKxzAG+e7Pt8RqAQA/EehzHVXq9SxDqJIN3JL1hK0dweb884y8kIh6rkWvPyg9Wg==} + hasBin: true + load-bmfont@1.4.1: resolution: {integrity: sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==} @@ -9579,10 +10854,18 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} + log-symbols@7.0.1: + resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} + engines: {node: '>=18'} + log-update@5.0.1: resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + log4js@6.9.1: resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} engines: {node: '>=8.0'} @@ -9604,6 +10887,10 @@ packages: resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==} engines: {node: 20 || >=22} + lru-cache@11.2.6: + resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -9658,6 +10945,10 @@ packages: resolution: {integrity: sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==} engines: {node: ^16.14.0 || >=18.0.0} + make-fetch-happen@15.0.4: + resolution: {integrity: sha512-vM2sG+wbVeVGYcCm16mM3d5fuem9oC28n436HjsGO3LcxoTI8LNVa4rwZDn3f76+cWyT4GGJDxjTYU1I2nr6zw==} + engines: {node: ^20.17.0 || >=22.9.0} + make-fetch-happen@9.1.0: resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} engines: {node: '>= 10'} @@ -9733,6 +11024,10 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + memfs@3.5.3: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} @@ -9747,6 +11042,10 @@ packages: merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -9968,6 +11267,10 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + min-document@2.19.0: resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} @@ -10036,6 +11339,10 @@ packages: resolution: {integrity: sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + minipass-fetch@5.0.2: + resolution: {integrity: sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ==} + engines: {node: ^20.17.0 || >=22.9.0} + minipass-flush@1.0.5: resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} engines: {node: '>= 8'} @@ -10051,6 +11358,10 @@ packages: resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} engines: {node: '>=8'} + minipass-sized@2.0.0: + resolution: {integrity: sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA==} + engines: {node: '>=8'} + minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} @@ -10109,6 +11420,13 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + msgpackr-extract@3.0.3: + resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} + hasBin: true + + msgpackr@1.11.9: + resolution: {integrity: sha512-FkoAAyyA6HM8wL882EcEyFZ9s7hVADSwG9xrVx3dxxNQAtgADTrJoEWivID82Iv1zWDsv/OtbrrcZAzGzOMdNw==} + multicast-dns-service-types@1.1.0: resolution: {integrity: sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==} @@ -10119,6 +11437,10 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -10155,6 +11477,10 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -10171,6 +11497,19 @@ packages: tslib: ^2.3.0 typescript: '>=4.4.0 <4.7' + ng-packagr@21.2.0: + resolution: {integrity: sha512-ASlXEboqt+ZgKzNPx3YCr924xqQRFA5qgm77GHf0Fm13hx7gVFYVm6WCdYZyeX/p9NJjFWAL+mIMfhsx2SHKoA==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@angular/compiler-cli': ^21.0.0 || ^21.2.0-next + tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0 + tslib: ^2.3.0 + typescript: '>=5.9 <6.0' + peerDependenciesMeta: + tailwindcss: + optional: true + nice-napi@1.0.2: resolution: {integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==} os: ['!win32'] @@ -10194,6 +11533,9 @@ packages: node-addon-api@3.2.1: resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + node-addon-api@6.1.0: + resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} @@ -10226,6 +11568,10 @@ packages: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} + node-gyp-build-optional-packages@5.2.2: + resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} + hasBin: true + node-gyp-build@4.8.4: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true @@ -10235,6 +11581,11 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} hasBin: true + node-gyp@12.2.0: + resolution: {integrity: sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ==} + engines: {node: ^20.17.0 || >=22.9.0} + hasBin: true + node-gyp@8.4.1: resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} engines: {node: '>= 10.12.0'} @@ -10255,6 +11606,9 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.36: + resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} + nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} @@ -10275,6 +11629,11 @@ packages: engines: {node: ^18.17.0 || >=20.5.0} hasBin: true + nopt@9.0.0: + resolution: {integrity: sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==} + engines: {node: ^20.17.0 || >=22.9.0} + hasBin: true + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -10286,22 +11645,46 @@ packages: npm-bundled@1.1.2: resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==} + npm-bundled@5.0.0: + resolution: {integrity: sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==} + engines: {node: ^20.17.0 || >=22.9.0} + npm-install-checks@4.0.0: resolution: {integrity: sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==} engines: {node: '>=10'} + npm-install-checks@8.0.0: + resolution: {integrity: sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==} + engines: {node: ^20.17.0 || >=22.9.0} + npm-normalize-package-bin@1.0.1: resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==} + npm-normalize-package-bin@5.0.0: + resolution: {integrity: sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==} + engines: {node: ^20.17.0 || >=22.9.0} + + npm-package-arg@13.0.2: + resolution: {integrity: sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==} + engines: {node: ^20.17.0 || >=22.9.0} + npm-package-arg@8.1.5: resolution: {integrity: sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==} engines: {node: '>=10'} + npm-packlist@10.0.4: + resolution: {integrity: sha512-uMW73iajD8hiH4ZBxEV3HC+eTnppIqwakjOYuvgddnalIw2lJguKviK1pcUJDlIWm1wSJkchpDZDSVVsZEYRng==} + engines: {node: ^20.17.0 || >=22.9.0} + npm-packlist@3.0.0: resolution: {integrity: sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==} engines: {node: '>=10'} hasBin: true + npm-pick-manifest@11.0.3: + resolution: {integrity: sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==} + engines: {node: ^20.17.0 || >=22.9.0} + npm-pick-manifest@6.1.1: resolution: {integrity: sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==} @@ -10309,6 +11692,10 @@ packages: resolution: {integrity: sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA==} engines: {node: ^12.13.0 || ^14.15.0 || >=16} + npm-registry-fetch@19.1.1: + resolution: {integrity: sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==} + engines: {node: ^20.17.0 || >=22.9.0} + npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -10444,6 +11831,10 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + oniguruma-parser@0.12.1: resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} @@ -10485,6 +11876,13 @@ packages: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} + ora@9.3.0: + resolution: {integrity: sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==} + engines: {node: '>=20'} + + ordered-binary@1.6.1: + resolution: {integrity: sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==} + os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -10542,6 +11940,10 @@ packages: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} + p-map@7.0.4: + resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} + engines: {node: '>=18'} + p-memoize@7.1.1: resolution: {integrity: sha512-DZ/bONJILHkQ721hSr/E9wMz5Am/OTJ9P6LhLFo2Tu+jL8044tgc9LwHO8g4PiaYePnlVVRAJcKmgy8J9MVFrA==} engines: {node: '>=14.16'} @@ -10577,6 +11979,11 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16} hasBin: true + pacote@21.3.1: + resolution: {integrity: sha512-O0EDXi85LF4AzdjG74GUwEArhdvawi/YOHcsW6IijKNj7wm8IvEWNF5GnfuxNpQ/ZpO3L37+v8hqdVh8GgWYhg==} + engines: {node: ^20.17.0 || >=22.9.0} + hasBin: true + pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} @@ -10617,6 +12024,9 @@ packages: parse5-html-rewriting-stream@6.0.1: resolution: {integrity: sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==} + parse5-html-rewriting-stream@8.0.0: + resolution: {integrity: sha512-wzh11mj8KKkno1pZEu+l2EVeWsuKDfR5KNWZOTsslfUX8lPDZx77m9T0kIoAVkFtD1nx6YF8oh4BnPHvxMtNMw==} + parse5-htmlparser2-tree-adapter@6.0.1: resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} @@ -10629,6 +12039,9 @@ packages: parse5-sax-parser@6.0.1: resolution: {integrity: sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==} + parse5-sax-parser@8.0.0: + resolution: {integrity: sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==} + parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} @@ -10638,6 +12051,9 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parse5@8.0.0: + resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -10682,6 +12098,9 @@ packages: path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + path-to-regexp@8.3.0: + resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -10753,10 +12172,18 @@ packages: piscina@4.1.0: resolution: {integrity: sha512-sjbLMi3sokkie+qmtZpkfMCUJTpbxJm/wvaPzU28vmYSsTSW8xk9JcFUsbqGJdtPpIQ9tuj+iDcTtgZjwnOSig==} + piscina@5.1.4: + resolution: {integrity: sha512-7uU4ZnKeQq22t9AsmHGD2w4OYQGonwFnTypDypaWi7Qr2EvQIFVtG8J5D/3bE7W123Wdc9+v4CZDu5hJXVCtBg==} + engines: {node: '>=20.x'} + pixelmatch@4.0.2: resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} hasBin: true + pkce-challenge@5.0.1: + resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} + engines: {node: '>=16.20.0'} + pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} @@ -10765,12 +12192,26 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} + pkg-dir@8.0.0: + resolution: {integrity: sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==} + engines: {node: '>=18'} + pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + playwright-core@1.58.2: + resolution: {integrity: sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.58.2: + resolution: {integrity: sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==} + engines: {node: '>=18'} + hasBin: true + pngjs@3.4.0: resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} engines: {node: '>=4.0.0'} @@ -10779,6 +12220,10 @@ packages: resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} engines: {node: '>=12.13.0'} + pngjs@7.0.0: + resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} + engines: {node: '>=14.19.0'} + portfinder@1.0.32: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} @@ -10918,6 +12363,9 @@ packages: peerDependencies: postcss: ^8.1.0 + postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + postcss-modules-extract-imports@3.1.0: resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} @@ -10994,6 +12442,12 @@ packages: peerDependencies: postcss: ^8.0.3 + postcss-safe-parser@7.0.1: + resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + postcss-selector-not@5.0.0: resolution: {integrity: sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==} peerDependencies: @@ -11085,6 +12539,10 @@ packages: resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + proc-log@6.1.0: + resolution: {integrity: sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==} + engines: {node: ^20.17.0 || >=22.9.0} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -11148,6 +12606,10 @@ packages: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} + qs@6.15.0: + resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} + engines: {node: '>=0.6'} + quansync@0.2.11: resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} @@ -11174,6 +12636,10 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} + engines: {node: '>= 0.10'} + rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} @@ -11288,6 +12754,9 @@ packages: reflect-metadata@0.1.14: resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==} + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} @@ -11438,6 +12907,10 @@ packages: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + restructure@3.0.2: resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} @@ -11483,6 +12956,11 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rolldown@1.0.0-rc.4: + resolution: {integrity: sha512-V2tPDUrY3WSevrvU2E41ijZlpF+5PbZu4giH+VpNraaadsJGHa4fR6IFwsocVwEXDoAdIv5qgPPxgrvKAOIPtA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup-plugin-copy@3.5.0: resolution: {integrity: sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==} engines: {node: '>=8.3'} @@ -11556,6 +13034,10 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -11575,6 +13057,9 @@ packages: rxjs@7.5.7: resolution: {integrity: sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + s.color@0.0.15: resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==} @@ -11644,6 +13129,16 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + sass@1.97.3: + resolution: {integrity: sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==} + engines: {node: '>=14.0.0'} + hasBin: true + + sass@1.98.0: + resolution: {integrity: sha512-+4N/u9dZ4PrgzGgPlKnaaRQx64RO0JBKs9sDhQ2pLgN6JQZ25uPQZKQYaBJU48Kd5BxgXoJ4e09Dq7nMcOUW3A==} + engines: {node: '>=14.0.0'} + hasBin: true + sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} @@ -11813,12 +13308,20 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + sigstore@4.1.0: + resolution: {integrity: sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA==} + engines: {node: ^20.17.0 || >=22.9.0} + simple-code-frame@1.3.0: resolution: {integrity: sha512-MB4pQmETUBlNs62BBeRjIFGeuy/x6gGKh7+eRUemn1rCFhqo7K+4slPqsyizCbcbYLnaYqaoZ2FWsZ/jN06D8w==} simple-git@3.32.3: resolution: {integrity: sha512-56a5oxFdWlsGygOXHWrG+xjj5w9ZIt2uQbzqiIGdR/6i5iococ7WQ/bNPzWxCJdEUGUCmyMH0t9zMpRJTaKxmw==} + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -11843,6 +13346,14 @@ packages: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} + engines: {node: '>=18'} + + slice-ansi@8.0.0: + resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} + engines: {node: '>=20'} + smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -11949,6 +13460,9 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@4.0.0: + resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} + spdx-expression-validate@2.0.0: resolution: {integrity: sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==} @@ -11982,6 +13496,10 @@ packages: resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ssri@13.0.1: + resolution: {integrity: sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==} + engines: {node: ^20.17.0 || >=22.9.0} + ssri@8.0.1: resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} engines: {node: '>= 8'} @@ -12032,6 +13550,10 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + stdin-discarder@0.3.1: + resolution: {integrity: sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==} + engines: {node: '>=18'} + stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} @@ -12062,6 +13584,10 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string-width@8.2.0: + resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + engines: {node: '>=20'} + string.prototype.trim@1.2.10: resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} engines: {node: '>= 0.4'} @@ -12091,6 +13617,10 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -12457,6 +13987,13 @@ packages: resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} + tldts-core@7.0.25: + resolution: {integrity: sha512-ZjCZK0rppSBu7rjHYDYsEaMOIbbT+nWF57hKkv4IUmZWBNrBWBOjIElc0mKRgLM8bm7x/BBlof6t2gi/Oq/Asw==} + + tldts@7.0.25: + resolution: {integrity: sha512-keinCnPbwXEUG3ilrWQZU+CqcTTzHq9m2HhoUP2l7Xmi8l1LuijAXLpAJ5zRW+ifKTNscs4NdCkfkDCBYm352w==} + hasBin: true + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -12488,10 +14025,18 @@ packages: resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + tough-cookie@4.1.3: resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} + tough-cookie@6.0.1: + resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} + engines: {node: '>=16'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -12499,6 +14044,10 @@ packages: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} + tr46@6.0.0: + resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} + engines: {node: '>=20'} + transformation-matrix@3.0.0: resolution: {integrity: sha512-C6NlNnD6T8JqDeY4BpGznuve4d8/JlLDZLcJbnnx7gQKoyk01+uk2XYVFjBGqvNsVxJUpUwb3WZpjpdPr+05FQ==} @@ -12518,6 +14067,12 @@ packages: peerDependencies: typescript: '>=4.2.0' + ts-api-utils@2.4.0: + resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -12580,6 +14135,10 @@ packages: resolution: {integrity: sha512-OvmFcj70PhmAsVQKfC15XoKH55cRWuaRzvr2fpTNhTNer6JBpG8n6vOhRrIgxMjcikyYt88xqYXMMVapJ4Rjvg==} hasBin: true + tuf-js@4.1.0: + resolution: {integrity: sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ==} + engines: {node: ^20.17.0 || >=22.9.0} + tunnel@0.0.6: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} @@ -12624,6 +14183,10 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -12643,6 +14206,13 @@ packages: typed-assert@1.0.9: resolution: {integrity: sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==} + typescript-eslint@8.57.0: + resolution: {integrity: sha512-W8GcigEMEeB07xEZol8oJ26rigm3+bfPHxHvwbYUlu1fUDsGuQ7Hiskx5xGW/xM4USc9Ephe3jtv7ZYPQntHeA==} + 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.0.0' + typescript@4.6.4: resolution: {integrity: sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==} engines: {node: '>=4.2.0'} @@ -12693,6 +14263,10 @@ packages: resolution: {integrity: sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==} engines: {node: '>=18.17'} + undici@7.22.0: + resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} + engines: {node: '>=20.18.1'} + unenv@2.0.0-rc.24: resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} @@ -12747,6 +14321,10 @@ packages: resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + unique-filename@5.0.0: + resolution: {integrity: sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg==} + engines: {node: ^20.17.0 || >=22.9.0} + unique-slug@2.0.2: resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} @@ -12758,6 +14336,10 @@ packages: resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + unique-slug@6.0.0: + resolution: {integrity: sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw==} + engines: {node: ^20.17.0 || >=22.9.0} + unist-util-find-after@5.0.0: resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} @@ -12969,6 +14551,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uqr@0.1.2: resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} @@ -13001,6 +14589,10 @@ packages: validate-npm-package-name@3.0.0: resolution: {integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==} + validate-npm-package-name@7.0.2: + resolution: {integrity: sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==} + engines: {node: ^20.17.0 || >=22.9.0} + validator@13.11.0: resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} engines: {node: '>= 0.10'} @@ -13064,46 +14656,6 @@ packages: terser: optional: true - vite@6.3.6: - resolution: {integrity: sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vite@6.4.1: resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -13184,6 +14736,46 @@ packages: yaml: optional: true + vite@7.3.1: + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitefu@0.2.5: resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} peerDependencies: @@ -13299,6 +14891,10 @@ packages: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} @@ -13309,12 +14905,19 @@ packages: resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} + watchpack@2.5.1: + resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} + engines: {node: '>=10.13.0'} + wbuf@1.7.3: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + weak-lru-cache@1.2.2: + resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -13329,6 +14932,10 @@ packages: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} + webidl-conversions@8.0.1: + resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} + engines: {node: '>=20'} + webpack-dev-middleware@5.3.4: resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} engines: {node: '>= 12.13.0'} @@ -13406,10 +15013,18 @@ packages: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} + whatwg-mimetype@5.0.0: + resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} + engines: {node: '>=20'} + whatwg-url@11.0.0: resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} engines: {node: '>=12'} + whatwg-url@15.1.0: + resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==} + engines: {node: '>=20'} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -13447,6 +15062,11 @@ packages: engines: {node: ^16.13.0 || >=18.0.0} hasBin: true + which@6.0.1: + resolution: {integrity: sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==} + engines: {node: ^20.17.0 || >=22.9.0} + hasBin: true + why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} @@ -13466,6 +15086,10 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -13535,6 +15159,18 @@ packages: utf-8-validate: optional: true + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + 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 + xhr@2.6.0: resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} @@ -13545,6 +15181,10 @@ packages: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + xml-parse-from-string@1.0.1: resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} @@ -13624,6 +15264,10 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -13632,6 +15276,10 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yerror@8.0.0: resolution: {integrity: sha512-FemWD5/UqNm8ffj8oZIbjWXIF2KE0mZssggYpdaQkWDDgXBQ/35PNIxEuz6/YLn9o0kOxDBNJe8x8k9ljD7k/g==} engines: {node: '>=18.16.0'} @@ -13652,6 +15300,10 @@ packages: resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==} engines: {node: '>=18.19'} + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} + yoctocolors@2.1.1: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} @@ -13674,6 +15326,11 @@ packages: peerDependencies: zod: ^3.25 || ^4 + zod-to-json-schema@3.25.1: + resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} + peerDependencies: + zod: ^3.25 || ^4 + zod-to-ts@1.2.0: resolution: {integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==} peerDependencies: @@ -13683,6 +15340,9 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zod@4.3.6: + resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + zone.js@0.11.8: resolution: {integrity: sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==} @@ -13691,6 +15351,8 @@ packages: snapshots: + '@acemir/cssom@0.9.31': {} + '@actions/core@1.11.1': dependencies: '@actions/exec': 1.1.1 @@ -13726,32 +15388,39 @@ snapshots: '@algolia/requester-fetch': 5.44.0 '@algolia/requester-node-http': 5.44.0 - '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.44.0)(algoliasearch@5.44.0)(search-insights@2.8.2)': + '@algolia/abtesting@1.14.1': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.44.0)(algoliasearch@5.44.0)(search-insights@2.8.2) - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.44.0)(algoliasearch@5.44.0) + '@algolia/client-common': 5.48.1 + '@algolia/requester-browser-xhr': 5.48.1 + '@algolia/requester-fetch': 5.48.1 + '@algolia/requester-node-http': 5.48.1 + + '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.44.0)(search-insights@2.8.2)': + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.44.0)(search-insights@2.8.2) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.44.0) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.44.0)(algoliasearch@5.44.0)(search-insights@2.8.2)': + '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.44.0)(search-insights@2.8.2)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.44.0)(algoliasearch@5.44.0) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.44.0) search-insights: 2.8.2 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.44.0)(algoliasearch@5.44.0)': + '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.44.0)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.44.0)(algoliasearch@5.44.0) - '@algolia/client-search': 5.44.0 + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.44.0) + '@algolia/client-search': 5.48.1 algoliasearch: 5.44.0 - '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.44.0)(algoliasearch@5.44.0)': + '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.44.0)': dependencies: - '@algolia/client-search': 5.44.0 + '@algolia/client-search': 5.48.1 algoliasearch: 5.44.0 '@algolia/client-abtesting@5.44.0': @@ -13761,6 +15430,13 @@ snapshots: '@algolia/requester-fetch': 5.44.0 '@algolia/requester-node-http': 5.44.0 + '@algolia/client-abtesting@5.48.1': + dependencies: + '@algolia/client-common': 5.48.1 + '@algolia/requester-browser-xhr': 5.48.1 + '@algolia/requester-fetch': 5.48.1 + '@algolia/requester-node-http': 5.48.1 + '@algolia/client-analytics@5.44.0': dependencies: '@algolia/client-common': 5.44.0 @@ -13768,8 +15444,17 @@ snapshots: '@algolia/requester-fetch': 5.44.0 '@algolia/requester-node-http': 5.44.0 + '@algolia/client-analytics@5.48.1': + dependencies: + '@algolia/client-common': 5.48.1 + '@algolia/requester-browser-xhr': 5.48.1 + '@algolia/requester-fetch': 5.48.1 + '@algolia/requester-node-http': 5.48.1 + '@algolia/client-common@5.44.0': {} + '@algolia/client-common@5.48.1': {} + '@algolia/client-insights@5.44.0': dependencies: '@algolia/client-common': 5.44.0 @@ -13777,6 +15462,13 @@ snapshots: '@algolia/requester-fetch': 5.44.0 '@algolia/requester-node-http': 5.44.0 + '@algolia/client-insights@5.48.1': + dependencies: + '@algolia/client-common': 5.48.1 + '@algolia/requester-browser-xhr': 5.48.1 + '@algolia/requester-fetch': 5.48.1 + '@algolia/requester-node-http': 5.48.1 + '@algolia/client-personalization@5.44.0': dependencies: '@algolia/client-common': 5.44.0 @@ -13784,6 +15476,13 @@ snapshots: '@algolia/requester-fetch': 5.44.0 '@algolia/requester-node-http': 5.44.0 + '@algolia/client-personalization@5.48.1': + dependencies: + '@algolia/client-common': 5.48.1 + '@algolia/requester-browser-xhr': 5.48.1 + '@algolia/requester-fetch': 5.48.1 + '@algolia/requester-node-http': 5.48.1 + '@algolia/client-query-suggestions@5.44.0': dependencies: '@algolia/client-common': 5.44.0 @@ -13791,6 +15490,13 @@ snapshots: '@algolia/requester-fetch': 5.44.0 '@algolia/requester-node-http': 5.44.0 + '@algolia/client-query-suggestions@5.48.1': + dependencies: + '@algolia/client-common': 5.48.1 + '@algolia/requester-browser-xhr': 5.48.1 + '@algolia/requester-fetch': 5.48.1 + '@algolia/requester-node-http': 5.48.1 + '@algolia/client-search@5.44.0': dependencies: '@algolia/client-common': 5.44.0 @@ -13798,6 +15504,13 @@ snapshots: '@algolia/requester-fetch': 5.44.0 '@algolia/requester-node-http': 5.44.0 + '@algolia/client-search@5.48.1': + dependencies: + '@algolia/client-common': 5.48.1 + '@algolia/requester-browser-xhr': 5.48.1 + '@algolia/requester-fetch': 5.48.1 + '@algolia/requester-node-http': 5.48.1 + '@algolia/ingestion@1.44.0': dependencies: '@algolia/client-common': 5.44.0 @@ -13805,6 +15518,13 @@ snapshots: '@algolia/requester-fetch': 5.44.0 '@algolia/requester-node-http': 5.44.0 + '@algolia/ingestion@1.48.1': + dependencies: + '@algolia/client-common': 5.48.1 + '@algolia/requester-browser-xhr': 5.48.1 + '@algolia/requester-fetch': 5.48.1 + '@algolia/requester-node-http': 5.48.1 + '@algolia/monitoring@1.44.0': dependencies: '@algolia/client-common': 5.44.0 @@ -13812,6 +15532,13 @@ snapshots: '@algolia/requester-fetch': 5.44.0 '@algolia/requester-node-http': 5.44.0 + '@algolia/monitoring@1.48.1': + dependencies: + '@algolia/client-common': 5.48.1 + '@algolia/requester-browser-xhr': 5.48.1 + '@algolia/requester-fetch': 5.48.1 + '@algolia/requester-node-http': 5.48.1 + '@algolia/recommend@5.44.0': dependencies: '@algolia/client-common': 5.44.0 @@ -13819,18 +15546,37 @@ snapshots: '@algolia/requester-fetch': 5.44.0 '@algolia/requester-node-http': 5.44.0 + '@algolia/recommend@5.48.1': + dependencies: + '@algolia/client-common': 5.48.1 + '@algolia/requester-browser-xhr': 5.48.1 + '@algolia/requester-fetch': 5.48.1 + '@algolia/requester-node-http': 5.48.1 + '@algolia/requester-browser-xhr@5.44.0': dependencies: '@algolia/client-common': 5.44.0 + '@algolia/requester-browser-xhr@5.48.1': + dependencies: + '@algolia/client-common': 5.48.1 + '@algolia/requester-fetch@5.44.0': dependencies: '@algolia/client-common': 5.44.0 + '@algolia/requester-fetch@5.48.1': + dependencies: + '@algolia/client-common': 5.48.1 + '@algolia/requester-node-http@5.44.0': dependencies: '@algolia/client-common': 5.44.0 + '@algolia/requester-node-http@5.48.1': + dependencies: + '@algolia/client-common': 5.48.1 + '@ampproject/remapping@2.2.0': dependencies: '@jridgewell/gen-mapping': 0.1.1 @@ -13853,6 +15599,13 @@ snapshots: transitivePeerDependencies: - chokidar + '@angular-devkit/architect@0.2102.2(chokidar@5.0.0)': + dependencies: + '@angular-devkit/core': 21.2.2(chokidar@5.0.0) + rxjs: 7.8.2 + transitivePeerDependencies: + - chokidar + '@angular-devkit/build-angular@13.3.11(@angular/compiler-cli@13.3.12(@angular/compiler@13.3.12)(typescript@4.6.4))(@swc/core@1.7.23(@swc/helpers@0.5.17))(@types/express@4.17.21)(chokidar@3.6.0)(karma@6.3.20)(ng-packagr@13.3.1(@angular/compiler-cli@13.3.12(@angular/compiler@13.3.12)(typescript@4.6.4))(@types/node@12.20.55)(tslib@2.8.1)(typescript@4.6.4))(typescript@4.6.4)': dependencies: '@ampproject/remapping': 2.2.0 @@ -13960,6 +15713,17 @@ snapshots: optionalDependencies: chokidar: 3.6.0 + '@angular-devkit/core@21.2.2(chokidar@5.0.0)': + dependencies: + ajv: 8.18.0 + ajv-formats: 3.0.1(ajv@8.18.0) + jsonc-parser: 3.3.1 + picomatch: 4.0.3 + rxjs: 7.8.2 + source-map: 0.7.6 + optionalDependencies: + chokidar: 5.0.0 + '@angular-devkit/schematics@13.3.11(chokidar@3.6.0)': dependencies: '@angular-devkit/core': 13.3.11(chokidar@3.6.0) @@ -13970,6 +15734,16 @@ snapshots: transitivePeerDependencies: - chokidar + '@angular-devkit/schematics@21.2.2(chokidar@5.0.0)': + dependencies: + '@angular-devkit/core': 21.2.2(chokidar@5.0.0) + jsonc-parser: 3.3.1 + magic-string: 0.30.21 + ora: 9.3.0 + rxjs: 7.8.2 + transitivePeerDependencies: + - chokidar + '@angular-eslint/builder@13.0.1(@swc-node/register@1.10.9(@swc/core@1.7.23(@swc/helpers@0.5.17))(@swc/types@0.1.25)(typescript@4.6.4))(@swc/core@1.7.23(@swc/helpers@0.5.17))(eslint@8.57.1)(typescript@4.6.4)': dependencies: '@nrwl/devkit': 13.1.3(@swc-node/register@1.10.9(@swc/core@1.7.23(@swc/helpers@0.5.17))(@swc/types@0.1.25)(typescript@4.6.4))(@swc/core@1.7.23(@swc/helpers@0.5.17)) @@ -13980,8 +15754,20 @@ snapshots: - '@swc/core' - debug + '@angular-eslint/builder@21.1.0(@angular/cli@21.2.2(@types/node@24.10.1)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@angular-devkit/architect': 0.2102.2(chokidar@5.0.0) + '@angular-devkit/core': 21.2.2(chokidar@5.0.0) + '@angular/cli': 21.2.2(@types/node@24.10.1)(chokidar@5.0.0) + eslint: 8.57.1 + typescript: 5.9.3 + transitivePeerDependencies: + - chokidar + '@angular-eslint/bundled-angular-compiler@13.0.1': {} + '@angular-eslint/bundled-angular-compiler@21.1.0': {} + '@angular-eslint/eslint-plugin-template@13.0.1(eslint@8.57.1)(typescript@4.6.4)': dependencies: '@angular-eslint/bundled-angular-compiler': 13.0.1 @@ -13993,6 +15779,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@angular-eslint/eslint-plugin-template@21.1.0(@angular-eslint/template-parser@21.1.0(eslint@8.57.1)(typescript@5.9.3))(@typescript-eslint/types@8.57.0)(@typescript-eslint/utils@8.57.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@angular-eslint/bundled-angular-compiler': 21.1.0 + '@angular-eslint/template-parser': 21.1.0(eslint@8.57.1)(typescript@5.9.3) + '@angular-eslint/utils': 21.1.0(@typescript-eslint/utils@8.57.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/utils': 8.57.0(eslint@8.57.1)(typescript@5.9.3) + aria-query: 5.3.2 + axobject-query: 4.1.0 + eslint: 8.57.1 + typescript: 5.9.3 + '@angular-eslint/eslint-plugin@13.0.1(eslint@8.57.1)(typescript@4.6.4)': dependencies: '@angular-eslint/utils': 13.0.1(eslint@8.57.1)(typescript@4.6.4) @@ -14002,6 +15800,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@angular-eslint/eslint-plugin@21.1.0(@typescript-eslint/utils@8.57.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@angular-eslint/bundled-angular-compiler': 21.1.0 + '@angular-eslint/utils': 21.1.0(@typescript-eslint/utils@8.57.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.0(eslint@8.57.1)(typescript@5.9.3) + eslint: 8.57.1 + ts-api-utils: 2.4.0(typescript@5.9.3) + typescript: 5.9.3 + '@angular-eslint/schematics@13.0.1(@angular/cli@13.3.11(chokidar@3.6.0))(eslint@8.57.1)(typescript@4.6.4)': dependencies: '@angular-eslint/eslint-plugin': 13.0.1(eslint@8.57.1)(typescript@4.6.4) @@ -14015,6 +15822,24 @@ snapshots: - supports-color - typescript + '@angular-eslint/schematics@21.1.0(@angular-eslint/template-parser@21.1.0(eslint@8.57.1)(typescript@5.9.3))(@angular/cli@21.2.2(@types/node@24.10.1)(chokidar@5.0.0))(@typescript-eslint/types@8.57.0)(@typescript-eslint/utils@8.57.0(eslint@8.57.1)(typescript@5.9.3))(chokidar@5.0.0)(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@angular-devkit/core': 21.2.2(chokidar@5.0.0) + '@angular-devkit/schematics': 21.2.2(chokidar@5.0.0) + '@angular-eslint/eslint-plugin': 21.1.0(@typescript-eslint/utils@8.57.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@angular-eslint/eslint-plugin-template': 21.1.0(@angular-eslint/template-parser@21.1.0(eslint@8.57.1)(typescript@5.9.3))(@typescript-eslint/types@8.57.0)(@typescript-eslint/utils@8.57.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@angular/cli': 21.2.2(@types/node@24.10.1)(chokidar@5.0.0) + ignore: 7.0.5 + semver: 7.7.3 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - '@angular-eslint/template-parser' + - '@typescript-eslint/types' + - '@typescript-eslint/utils' + - chokidar + - eslint + - typescript + '@angular-eslint/template-parser@13.0.1(eslint@8.57.1)(typescript@4.6.4)': dependencies: '@angular-eslint/bundled-angular-compiler': 13.0.1 @@ -14022,6 +15847,13 @@ snapshots: eslint-scope: 5.1.1 typescript: 4.6.4 + '@angular-eslint/template-parser@21.1.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@angular-eslint/bundled-angular-compiler': 21.1.0 + eslint: 8.57.1 + eslint-scope: 9.1.2 + typescript: 5.9.3 + '@angular-eslint/utils@13.0.1(eslint@8.57.1)(typescript@4.6.4)': dependencies: '@angular-eslint/bundled-angular-compiler': 13.0.1 @@ -14031,6 +15863,67 @@ snapshots: transitivePeerDependencies: - supports-color + '@angular-eslint/utils@21.1.0(@typescript-eslint/utils@8.57.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@angular-eslint/bundled-angular-compiler': 21.1.0 + '@typescript-eslint/utils': 8.57.0(eslint@8.57.1)(typescript@5.9.3) + eslint: 8.57.1 + typescript: 5.9.3 + + '@angular/build@21.2.2(@angular/compiler-cli@21.2.4(@angular/compiler@21.2.4)(typescript@5.9.3))(@angular/compiler@21.2.4)(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(@angular/platform-browser@21.2.4(@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2)))(@types/node@24.10.1)(chokidar@5.0.0)(jiti@2.6.1)(less@4.2.0)(ng-packagr@21.2.0(@angular/compiler-cli@21.2.4(@angular/compiler@21.2.4)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.6)(stylus@0.56.0)(terser@5.44.1)(tslib@2.8.1)(typescript@5.9.3)(vitest@4.0.12)(yaml@2.8.0)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@angular-devkit/architect': 0.2102.2(chokidar@5.0.0) + '@angular/compiler': 21.2.4 + '@angular/compiler-cli': 21.2.4(@angular/compiler@21.2.4)(typescript@5.9.3) + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-split-export-declaration': 7.24.7 + '@inquirer/confirm': 5.1.21(@types/node@24.10.1) + '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + beasties: 0.4.1 + browserslist: 4.28.1 + esbuild: 0.27.3 + https-proxy-agent: 7.0.6 + istanbul-lib-instrument: 6.0.3 + jsonc-parser: 3.3.1 + listr2: 9.0.5 + magic-string: 0.30.21 + mrmime: 2.0.1 + parse5-html-rewriting-stream: 8.0.0 + picomatch: 4.0.3 + piscina: 5.1.4 + rolldown: 1.0.0-rc.4 + sass: 1.97.3 + semver: 7.7.3 + source-map-support: 0.5.21 + tinyglobby: 0.2.15 + tslib: 2.8.1 + typescript: 5.9.3 + undici: 7.22.0 + vite: 7.3.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + watchpack: 2.5.1 + optionalDependencies: + '@angular/core': 21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2) + '@angular/platform-browser': 21.2.4(@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2)) + less: 4.2.0 + lmdb: 3.5.1 + ng-packagr: 21.2.0(@angular/compiler-cli@21.2.4(@angular/compiler@21.2.4)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) + postcss: 8.5.6 + vitest: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(@vitest/ui@4.0.12)(jiti@2.6.1)(jsdom@27.4.0)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + transitivePeerDependencies: + - '@types/node' + - chokidar + - jiti + - lightningcss + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + '@angular/cli@13.3.11(chokidar@3.6.0)': dependencies: '@angular-devkit/architect': 0.1303.11(chokidar@3.6.0) @@ -14057,12 +15950,44 @@ snapshots: - chokidar - supports-color + '@angular/cli@21.2.2(@types/node@24.10.1)(chokidar@5.0.0)': + dependencies: + '@angular-devkit/architect': 0.2102.2(chokidar@5.0.0) + '@angular-devkit/core': 21.2.2(chokidar@5.0.0) + '@angular-devkit/schematics': 21.2.2(chokidar@5.0.0) + '@inquirer/prompts': 7.10.1(@types/node@24.10.1) + '@listr2/prompt-adapter-inquirer': 3.0.5(@inquirer/prompts@7.10.1(@types/node@24.10.1))(@types/node@24.10.1)(listr2@9.0.5) + '@modelcontextprotocol/sdk': 1.26.0(zod@4.3.6) + '@schematics/angular': 21.2.2(chokidar@5.0.0) + '@yarnpkg/lockfile': 1.1.0 + algoliasearch: 5.48.1 + ini: 6.0.0 + jsonc-parser: 3.3.1 + listr2: 9.0.5 + npm-package-arg: 13.0.2 + pacote: 21.3.1 + parse5-html-rewriting-stream: 8.0.0 + semver: 7.7.3 + yargs: 18.0.0 + zod: 4.3.6 + transitivePeerDependencies: + - '@cfworker/json-schema' + - '@types/node' + - chokidar + - supports-color + '@angular/common@13.3.12(@angular/core@13.3.12(rxjs@7.5.7)(zone.js@0.11.8))(rxjs@7.5.7)': dependencies: '@angular/core': 13.3.12(rxjs@7.5.7)(zone.js@0.11.8) rxjs: 7.5.7 tslib: 2.8.1 + '@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2)': + dependencies: + '@angular/core': 21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2) + rxjs: 7.8.2 + tslib: 2.8.1 + '@angular/compiler-cli@13.3.12(@angular/compiler@13.3.12)(typescript@4.6.4)': dependencies: '@angular/compiler': 13.3.12 @@ -14080,16 +16005,52 @@ snapshots: transitivePeerDependencies: - supports-color + '@angular/compiler-cli@21.2.4(@angular/compiler@21.2.4)(typescript@5.9.3)': + dependencies: + '@angular/compiler': 21.2.4 + '@babel/core': 7.29.0 + '@jridgewell/sourcemap-codec': 1.5.5 + chokidar: 5.0.0 + convert-source-map: 1.9.0 + reflect-metadata: 0.2.2 + semver: 7.7.3 + tslib: 2.8.1 + yargs: 18.0.0 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@angular/compiler@13.3.12': dependencies: tslib: 2.8.1 + '@angular/compiler@21.2.4': + dependencies: + tslib: 2.8.1 + '@angular/core@13.3.12(rxjs@7.5.7)(zone.js@0.11.8)': dependencies: rxjs: 7.5.7 tslib: 2.8.1 zone.js: 0.11.8 + '@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2)': + dependencies: + rxjs: 7.8.2 + tslib: 2.8.1 + optionalDependencies: + '@angular/compiler': 21.2.4 + + '@angular/forms@21.2.4(@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(@angular/platform-browser@21.2.4(@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2)))(rxjs@7.8.2)': + dependencies: + '@angular/common': 21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/core': 21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2) + '@angular/platform-browser': 21.2.4(@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2)) + '@standard-schema/spec': 1.0.0 + rxjs: 7.8.2 + tslib: 2.8.1 + '@angular/platform-browser-dynamic@13.3.12(@angular/common@13.3.12(@angular/core@13.3.12(rxjs@7.5.7)(zone.js@0.11.8))(rxjs@7.5.7))(@angular/compiler@13.3.12)(@angular/core@13.3.12(rxjs@7.5.7)(zone.js@0.11.8))(@angular/platform-browser@13.3.12(@angular/common@13.3.12(@angular/core@13.3.12(rxjs@7.5.7)(zone.js@0.11.8))(rxjs@7.5.7))(@angular/core@13.3.12(rxjs@7.5.7)(zone.js@0.11.8)))': dependencies: '@angular/common': 13.3.12(@angular/core@13.3.12(rxjs@7.5.7)(zone.js@0.11.8))(rxjs@7.5.7) @@ -14104,6 +16065,38 @@ snapshots: '@angular/core': 13.3.12(rxjs@7.5.7)(zone.js@0.11.8) tslib: 2.8.1 + '@angular/platform-browser@21.2.4(@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))': + dependencies: + '@angular/common': 21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/core': 21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2) + tslib: 2.8.1 + + '@angular/router@21.2.4(@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(@angular/platform-browser@21.2.4(@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2)))(rxjs@7.8.2)': + dependencies: + '@angular/common': 21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/core': 21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2) + '@angular/platform-browser': 21.2.4(@angular/common@21.2.4(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.4(@angular/compiler@21.2.4)(rxjs@7.8.2)) + rxjs: 7.8.2 + tslib: 2.8.1 + + '@asamuzakjp/css-color@4.1.2': + dependencies: + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + lru-cache: 11.2.6 + + '@asamuzakjp/dom-selector@6.8.1': + dependencies: + '@asamuzakjp/nwsapi': 2.3.9 + bidi-js: 1.0.3 + css-tree: 3.1.0 + is-potential-custom-element-name: 1.0.1 + lru-cache: 11.2.6 + + '@asamuzakjp/nwsapi@2.3.9': {} + '@assemblyscript/loader@0.10.1': {} '@astrojs/compiler@2.11.0': {} @@ -14192,6 +16185,8 @@ snapshots: '@babel/compat-data@7.28.5': {} + '@babel/compat-data@7.29.0': {} + '@babel/core@7.16.12': dependencies: '@babel/code-frame': 7.27.1 @@ -14272,6 +16267,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.16.8': dependencies: '@babel/types': 7.28.6 @@ -14281,7 +16296,7 @@ snapshots: '@babel/generator@7.27.1': dependencies: '@babel/parser': 7.29.0 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 @@ -14316,12 +16331,12 @@ snapshots: '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': dependencies: '@babel/traverse': 7.28.5 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -14329,7 +16344,7 @@ snapshots: dependencies: '@babel/compat-data': 7.28.5 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.24.2 + browserslist: 4.25.1 lru-cache: 5.1.1 semver: 7.7.3 @@ -14341,6 +16356,14 @@ snapshots: lru-cache: 5.1.1 semver: 7.7.3 + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.1 + lru-cache: 5.1.1 + semver: 7.7.3 + '@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -14380,6 +16403,19 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.5 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -14393,6 +16429,19 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.5 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -14406,6 +16455,19 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.5 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + '@babel/helper-create-regexp-features-plugin@7.22.9(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -14413,6 +16475,13 @@ snapshots: regexpu-core: 5.3.2 semver: 7.7.3 + '@babel/helper-create-regexp-features-plugin@7.22.9(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 5.3.2 + semver: 7.7.3 + '@babel/helper-create-regexp-features-plugin@7.25.2(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -14427,10 +16496,17 @@ snapshots: regexpu-core: 6.2.0 semver: 7.7.3 + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.2.0 + semver: 7.7.3 + '@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 - '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.25.9 debug: 4.4.3 lodash.debounce: 4.0.8 @@ -14450,32 +16526,43 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + debug: 4.4.3 + lodash.debounce: 4.0.8 + resolve: 1.22.11 + transitivePeerDependencies: + - supports-color + '@babel/helper-globals@7.28.0': {} '@babel/helper-member-expression-to-functions@7.24.8': dependencies: - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-member-expression-to-functions@7.28.5': dependencies: - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.18.6': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@babel/helper-module-imports@7.22.15': dependencies: @@ -14495,6 +16582,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.26.0(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -14540,6 +16634,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.28.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.24.7': dependencies: '@babel/types': 7.29.0 @@ -14570,12 +16682,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.27.1 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + '@babel/helper-replace-supers@7.25.0(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 '@babel/helper-member-expression-to-functions': 7.24.8 '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -14597,17 +16718,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-replace-supers@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + '@babel/helper-simple-access@7.24.7': dependencies: '@babel/traverse': 7.28.5 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: '@babel/traverse': 7.28.5 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -14618,6 +16748,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-split-export-declaration@7.24.7': + dependencies: + '@babel/types': 7.29.0 + '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.27.1': {} @@ -14631,15 +16765,15 @@ snapshots: '@babel/helper-wrap-function@7.25.0': dependencies: '@babel/template': 7.28.6 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-wrap-function@7.27.1': dependencies: '@babel/template': 7.28.6 - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -14647,7 +16781,7 @@ snapshots: '@babel/helpers@7.26.9': dependencies: '@babel/template': 7.27.1 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@babel/helpers@7.28.2': dependencies: @@ -14679,11 +16813,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -14694,6 +16841,11 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -14712,6 +16864,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -14720,6 +16881,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + '@babel/plugin-proposal-async-generator-functions@7.16.8(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -14760,9 +16929,9 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.16.12) - '@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.16.12)': @@ -14846,6 +17015,10 @@ snapshots: dependencies: '@babel/core': 7.28.5 + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -14867,14 +17040,14 @@ snapshots: '@babel/core': 7.16.12 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.5)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.5)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.16.12)': @@ -14882,9 +17055,9 @@ snapshots: '@babel/core': 7.16.12 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.16.12)': @@ -14892,9 +17065,9 @@ snapshots: '@babel/core': 7.16.12 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.5)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.16.12)': @@ -14902,14 +17075,14 @@ snapshots: '@babel/core': 7.16.12 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.28.5)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-export-default-from@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-syntax-export-default-from@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.16.12)': @@ -14922,19 +17095,34 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.16.12)': @@ -14942,9 +17130,9 @@ snapshots: '@babel/core': 7.16.12 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.5)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': @@ -14952,14 +17140,19 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.16.12)': @@ -14972,14 +17165,19 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.5)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.16.12)': @@ -14987,9 +17185,9 @@ snapshots: '@babel/core': 7.16.12 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.5)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.16.12)': @@ -14997,9 +17195,9 @@ snapshots: '@babel/core': 7.16.12 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.5)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.16.12)': @@ -15012,14 +17210,19 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.16.12)': @@ -15027,9 +17230,9 @@ snapshots: '@babel/core': 7.16.12 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.5)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': @@ -15037,12 +17240,23 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15053,6 +17267,11 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -15062,6 +17281,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-async-to-generator@7.16.8(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15080,6 +17308,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15090,6 +17327,11 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-block-scoping@7.25.0(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15100,6 +17342,11 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-block-scoping@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -15108,6 +17355,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -15116,6 +17371,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-classes@7.25.4(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15140,6 +17403,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-classes@7.28.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-globals': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.0) + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15152,6 +17427,12 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/template': 7.27.2 + '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15165,6 +17446,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15177,6 +17466,12 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15187,17 +17482,33 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -15206,6 +17517,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15219,17 +17538,33 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-exponentiation-operator@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15246,6 +17581,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-function-name@7.25.1(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15264,11 +17607,25 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-literals@7.25.2(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15279,11 +17636,21 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-logical-assignment-operators@7.28.5(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-logical-assignment-operators@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15294,6 +17661,11 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15310,6 +17682,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15327,6 +17707,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-modules-systemjs@7.25.0(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15347,6 +17735,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-systemjs@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15363,6 +17761,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15375,6 +17781,12 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15385,16 +17797,31 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -15406,6 +17833,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15422,11 +17860,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15443,6 +17894,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15453,6 +17912,11 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -15461,6 +17925,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -15470,6 +17942,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15480,15 +17961,20 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-display-name@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.28.5)': + '@babel/plugin-transform-react-display-name@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -15497,9 +17983,9 @@ snapshots: '@babel/core': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.0)': @@ -15507,18 +17993,18 @@ snapshots: '@babel/core': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) '@babel/types': 7.28.6 transitivePeerDependencies: - supports-color @@ -15534,12 +18020,23 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15550,6 +18047,11 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-runtime@7.16.10(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15562,14 +18064,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-runtime@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-runtime@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.5) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.28.5) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.29.0) semver: 7.7.3 transitivePeerDependencies: - supports-color @@ -15584,6 +18086,11 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-spread@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15600,6 +18107,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15610,6 +18125,11 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15620,6 +18140,11 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15630,6 +18155,11 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -15641,6 +18171,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-typescript@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15651,12 +18192,23 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.16.12)': dependencies: '@babel/core': 7.16.12 @@ -15669,12 +18221,24 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/preset-env@7.16.11(@babel/core@7.16.12)': dependencies: '@babel/compat-data': 7.26.8 @@ -15831,6 +18395,82 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-env@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/compat-data': 7.28.5 + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.29.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.29.0) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.29.0) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.29.0) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.29.0) + '@babel/plugin-transform-exponentiation-operator': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-systemjs': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.29.0) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.29.0) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.29.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.29.0) + core-js-compat: 3.45.0 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + '@babel/preset-flow@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -15844,7 +18484,7 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.16.12) '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.16.12) - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 esutils: 2.0.3 '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.5)': @@ -15854,6 +18494,13 @@ snapshots: '@babel/types': 7.28.6 esutils: 2.0.3 + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 7.28.6 + esutils: 2.0.3 + '@babel/preset-typescript@7.28.5(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -15905,7 +18552,7 @@ snapshots: dependencies: '@babel/code-frame': 7.27.1 '@babel/parser': 7.29.0 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@babel/template@7.27.2': dependencies: @@ -15925,7 +18572,7 @@ snapshots: '@babel/generator': 7.27.1 '@babel/parser': 7.29.0 '@babel/template': 7.27.2 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 debug: 4.4.3 globals: 11.12.0 transitivePeerDependencies: @@ -15982,6 +18629,10 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@bcoe/v8-coverage@1.0.2': {} + + '@blazediff/core@1.9.1': {} + '@capsizecss/unpack@3.0.1': dependencies: fontkit: 2.0.4 @@ -16078,6 +18729,28 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 + '@csstools/color-helpers@6.0.2': {} + + '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-color-parser@4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/color-helpers': 6.0.2 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.1.0': {} + + '@csstools/css-tokenizer@4.0.0': {} + '@csstools/postcss-cascade-layers@1.1.1(postcss@8.4.41)': dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.2) @@ -16165,9 +18838,9 @@ snapshots: '@docsearch/css@3.8.2': {} - '@docsearch/js@3.8.2(@algolia/client-search@5.44.0)(@types/react@18.3.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.8.2)': + '@docsearch/js@3.8.2(@algolia/client-search@5.48.1)(@types/react@18.3.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.8.2)': dependencies: - '@docsearch/react': 3.8.2(@algolia/client-search@5.44.0)(@types/react@18.3.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.8.2) + '@docsearch/react': 3.8.2(@algolia/client-search@5.48.1)(@types/react@18.3.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.8.2) preact: 10.28.2 transitivePeerDependencies: - '@algolia/client-search' @@ -16176,10 +18849,10 @@ snapshots: - react-dom - search-insights - '@docsearch/react@3.8.2(@algolia/client-search@5.44.0)(@types/react@18.3.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.8.2)': + '@docsearch/react@3.8.2(@algolia/client-search@5.48.1)(@types/react@18.3.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.8.2)': dependencies: - '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.44.0)(algoliasearch@5.44.0)(search-insights@2.8.2) - '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.44.0)(algoliasearch@5.44.0) + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.44.0)(search-insights@2.8.2) + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.44.0) '@docsearch/css': 3.8.2 algoliasearch: 5.44.0 optionalDependencies: @@ -16616,10 +19289,17 @@ snapshots: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.11.0': {} '@eslint-community/regexpp@4.12.1': {} + '@eslint-community/regexpp@4.12.2': {} + '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 @@ -16652,6 +19332,8 @@ snapshots: '@eslint/js@9.39.1': {} + '@exodus/bytes@1.15.0': {} + '@fastify/busboy@2.1.1': {} '@floating-ui/core@1.7.3': @@ -16674,13 +19356,24 @@ snapshots: - '@vue/composition-api' - vue + '@gar/promise-retry@1.0.2': + dependencies: + retry: 0.13.1 + '@gar/promisify@1.1.3': {} + '@harperfast/extended-iterable@1.0.3': + optional: true + '@headlessui/vue@1.7.23(vue@3.5.24(typescript@5.9.3))': dependencies: '@tanstack/vue-virtual': 3.13.12(vue@3.5.24(typescript@5.9.3)) vue: 3.5.24(typescript@5.9.3) + '@hono/node-server@1.19.11(hono@4.12.7)': + dependencies: + hono: 4.12.7 + '@html-eslint/eslint-plugin@0.19.1': {} '@html-eslint/parser@0.19.1': @@ -16801,6 +19494,131 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true + '@inquirer/ansi@1.0.2': {} + + '@inquirer/checkbox@4.3.2(@types/node@24.10.1)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@24.10.1) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@24.10.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.10.1 + + '@inquirer/confirm@5.1.21(@types/node@24.10.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.10.1) + '@inquirer/type': 3.0.10(@types/node@24.10.1) + optionalDependencies: + '@types/node': 24.10.1 + + '@inquirer/core@10.3.2(@types/node@24.10.1)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@24.10.1) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.10.1 + + '@inquirer/editor@4.2.23(@types/node@24.10.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.10.1) + '@inquirer/external-editor': 1.0.3(@types/node@24.10.1) + '@inquirer/type': 3.0.10(@types/node@24.10.1) + optionalDependencies: + '@types/node': 24.10.1 + + '@inquirer/expand@4.0.23(@types/node@24.10.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.10.1) + '@inquirer/type': 3.0.10(@types/node@24.10.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.10.1 + + '@inquirer/external-editor@1.0.3(@types/node@24.10.1)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 24.10.1 + + '@inquirer/figures@1.0.15': {} + + '@inquirer/input@4.3.1(@types/node@24.10.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.10.1) + '@inquirer/type': 3.0.10(@types/node@24.10.1) + optionalDependencies: + '@types/node': 24.10.1 + + '@inquirer/number@3.0.23(@types/node@24.10.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.10.1) + '@inquirer/type': 3.0.10(@types/node@24.10.1) + optionalDependencies: + '@types/node': 24.10.1 + + '@inquirer/password@4.0.23(@types/node@24.10.1)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@24.10.1) + '@inquirer/type': 3.0.10(@types/node@24.10.1) + optionalDependencies: + '@types/node': 24.10.1 + + '@inquirer/prompts@7.10.1(@types/node@24.10.1)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@24.10.1) + '@inquirer/confirm': 5.1.21(@types/node@24.10.1) + '@inquirer/editor': 4.2.23(@types/node@24.10.1) + '@inquirer/expand': 4.0.23(@types/node@24.10.1) + '@inquirer/input': 4.3.1(@types/node@24.10.1) + '@inquirer/number': 3.0.23(@types/node@24.10.1) + '@inquirer/password': 4.0.23(@types/node@24.10.1) + '@inquirer/rawlist': 4.1.11(@types/node@24.10.1) + '@inquirer/search': 3.2.2(@types/node@24.10.1) + '@inquirer/select': 4.4.2(@types/node@24.10.1) + optionalDependencies: + '@types/node': 24.10.1 + + '@inquirer/rawlist@4.1.11(@types/node@24.10.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.10.1) + '@inquirer/type': 3.0.10(@types/node@24.10.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.10.1 + + '@inquirer/search@3.2.2(@types/node@24.10.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.10.1) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@24.10.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.10.1 + + '@inquirer/select@4.4.2(@types/node@24.10.1)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@24.10.1) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@24.10.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.10.1 + + '@inquirer/type@3.0.10(@types/node@24.10.1)': + optionalDependencies: + '@types/node': 24.10.1 + '@ioredis/commands@1.5.1': {} '@isaacs/cliui@8.0.2': @@ -17172,6 +19990,35 @@ snapshots: dependencies: '@lezer/common': 1.3.0 + '@listr2/prompt-adapter-inquirer@3.0.5(@inquirer/prompts@7.10.1(@types/node@24.10.1))(@types/node@24.10.1)(listr2@9.0.5)': + dependencies: + '@inquirer/prompts': 7.10.1(@types/node@24.10.1) + '@inquirer/type': 3.0.10(@types/node@24.10.1) + listr2: 9.0.5 + transitivePeerDependencies: + - '@types/node' + + '@lmdb/lmdb-darwin-arm64@3.5.1': + optional: true + + '@lmdb/lmdb-darwin-x64@3.5.1': + optional: true + + '@lmdb/lmdb-linux-arm64@3.5.1': + optional: true + + '@lmdb/lmdb-linux-arm@3.5.1': + optional: true + + '@lmdb/lmdb-linux-x64@3.5.1': + optional: true + + '@lmdb/lmdb-win32-arm64@3.5.1': + optional: true + + '@lmdb/lmdb-win32-x64@3.5.1': + optional: true + '@lucide/helpers@1.0.0': {} '@mapbox/node-pre-gyp@2.0.3(encoding@0.1.13)': @@ -17189,6 +20036,118 @@ snapshots: '@marijn/find-cluster-break@1.0.2': {} + '@modelcontextprotocol/sdk@1.26.0(zod@4.3.6)': + dependencies: + '@hono/node-server': 1.19.11(hono@4.12.7) + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + content-type: 1.0.5 + cors: 2.8.5 + cross-spawn: 7.0.5 + eventsource: 3.0.7 + eventsource-parser: 3.0.6 + express: 5.2.1 + express-rate-limit: 8.3.1(express@5.2.1) + hono: 4.12.7 + jose: 6.2.1 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 4.3.6 + zod-to-json-schema: 3.25.1(zod@4.3.6) + transitivePeerDependencies: + - supports-color + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + optional: true + + '@napi-rs/nice-android-arm-eabi@1.1.1': + optional: true + + '@napi-rs/nice-android-arm64@1.1.1': + optional: true + + '@napi-rs/nice-darwin-arm64@1.1.1': + optional: true + + '@napi-rs/nice-darwin-x64@1.1.1': + optional: true + + '@napi-rs/nice-freebsd-x64@1.1.1': + optional: true + + '@napi-rs/nice-linux-arm-gnueabihf@1.1.1': + optional: true + + '@napi-rs/nice-linux-arm64-gnu@1.1.1': + optional: true + + '@napi-rs/nice-linux-arm64-musl@1.1.1': + optional: true + + '@napi-rs/nice-linux-ppc64-gnu@1.1.1': + optional: true + + '@napi-rs/nice-linux-riscv64-gnu@1.1.1': + optional: true + + '@napi-rs/nice-linux-s390x-gnu@1.1.1': + optional: true + + '@napi-rs/nice-linux-x64-gnu@1.1.1': + optional: true + + '@napi-rs/nice-linux-x64-musl@1.1.1': + optional: true + + '@napi-rs/nice-openharmony-arm64@1.1.1': + optional: true + + '@napi-rs/nice-win32-arm64-msvc@1.1.1': + optional: true + + '@napi-rs/nice-win32-ia32-msvc@1.1.1': + optional: true + + '@napi-rs/nice-win32-x64-msvc@1.1.1': + optional: true + + '@napi-rs/nice@1.1.1': + optionalDependencies: + '@napi-rs/nice-android-arm-eabi': 1.1.1 + '@napi-rs/nice-android-arm64': 1.1.1 + '@napi-rs/nice-darwin-arm64': 1.1.1 + '@napi-rs/nice-darwin-x64': 1.1.1 + '@napi-rs/nice-freebsd-x64': 1.1.1 + '@napi-rs/nice-linux-arm-gnueabihf': 1.1.1 + '@napi-rs/nice-linux-arm64-gnu': 1.1.1 + '@napi-rs/nice-linux-arm64-musl': 1.1.1 + '@napi-rs/nice-linux-ppc64-gnu': 1.1.1 + '@napi-rs/nice-linux-riscv64-gnu': 1.1.1 + '@napi-rs/nice-linux-s390x-gnu': 1.1.1 + '@napi-rs/nice-linux-x64-gnu': 1.1.1 + '@napi-rs/nice-linux-x64-musl': 1.1.1 + '@napi-rs/nice-openharmony-arm64': 1.1.1 + '@napi-rs/nice-win32-arm64-msvc': 1.1.1 + '@napi-rs/nice-win32-ia32-msvc': 1.1.1 + '@napi-rs/nice-win32-x64-msvc': 1.1.1 + optional: true + '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.9.0 @@ -17203,6 +20162,13 @@ snapshots: '@tybys/wasm-util': 0.9.0 optional: true + '@napi-rs/wasm-runtime@1.1.1': + dependencies: + '@emnapi/core': 1.8.1 + '@emnapi/runtime': 1.8.1 + '@tybys/wasm-util': 0.10.1 + optional: true + '@ngtools/webpack@13.3.11(@angular/compiler-cli@13.3.12(@angular/compiler@13.3.12)(typescript@4.6.4))(typescript@4.6.4)(webpack@5.76.1(@swc/core@1.7.23(@swc/helpers@0.5.17))(esbuild@0.14.22))': dependencies: '@angular/compiler-cli': 13.3.12(@angular/compiler@13.3.12)(typescript@4.6.4) @@ -17233,6 +20199,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@npmcli/agent@4.0.0': + dependencies: + agent-base: 7.1.1 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + lru-cache: 11.2.2 + socks-proxy-agent: 8.0.4 + transitivePeerDependencies: + - supports-color + '@npmcli/fs@1.1.1': dependencies: '@gar/promisify': 1.1.3 @@ -17247,6 +20223,10 @@ snapshots: dependencies: semver: 7.7.3 + '@npmcli/fs@5.0.0': + dependencies: + semver: 7.7.3 + '@npmcli/git@2.1.0': dependencies: '@npmcli/promise-spawn': 1.3.2 @@ -17260,11 +20240,27 @@ snapshots: transitivePeerDependencies: - bluebird + '@npmcli/git@7.0.2': + dependencies: + '@gar/promise-retry': 1.0.2 + '@npmcli/promise-spawn': 9.0.1 + ini: 6.0.0 + lru-cache: 11.2.2 + npm-pick-manifest: 11.0.3 + proc-log: 6.1.0 + semver: 7.7.3 + which: 6.0.1 + '@npmcli/installed-package-contents@1.0.7': dependencies: npm-bundled: 1.1.2 npm-normalize-package-bin: 1.0.1 + '@npmcli/installed-package-contents@4.0.0': + dependencies: + npm-bundled: 5.0.0 + npm-normalize-package-bin: 5.0.0 + '@npmcli/move-file@1.1.2': dependencies: mkdirp: 1.0.4 @@ -17277,10 +20273,38 @@ snapshots: '@npmcli/node-gyp@1.0.3': {} + '@npmcli/node-gyp@5.0.0': {} + + '@npmcli/package-json@7.0.5': + dependencies: + '@npmcli/git': 7.0.2 + glob: 13.0.6 + hosted-git-info: 9.0.2 + json-parse-even-better-errors: 5.0.0 + proc-log: 6.1.0 + semver: 7.7.3 + spdx-expression-parse: 4.0.0 + '@npmcli/promise-spawn@1.3.2': dependencies: infer-owner: 1.0.4 + '@npmcli/promise-spawn@9.0.1': + dependencies: + which: 6.0.1 + + '@npmcli/redact@4.0.0': {} + + '@npmcli/run-script@10.0.4': + dependencies: + '@npmcli/node-gyp': 5.0.0 + '@npmcli/package-json': 7.0.5 + '@npmcli/promise-spawn': 9.0.1 + node-gyp: 12.2.0 + proc-log: 6.1.0 + transitivePeerDependencies: + - supports-color + '@npmcli/run-script@2.0.0': dependencies: '@npmcli/node-gyp': 1.0.3 @@ -17510,6 +20534,8 @@ snapshots: '@oslojs/encoding@1.1.0': {} + '@oxc-project/types@0.113.0': {} + '@oxc-resolver/binding-darwin-arm64@1.12.0': optional: true @@ -17618,6 +20644,8 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@polka/url@1.0.0-next.29': {} + '@poppinss/colors@4.1.6': dependencies: kleur: 4.1.5 @@ -17630,18 +20658,18 @@ snapshots: '@poppinss/exception@1.2.3': {} - '@preact/preset-vite@2.10.2(@babel/core@7.28.5)(preact@10.28.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': + '@preact/preset-vite@2.10.2(@babel/core@7.29.0)(preact@10.28.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.28.5) - '@prefresh/vite': 2.4.1(preact@10.28.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.29.0) + '@prefresh/vite': 2.4.1(preact@10.28.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) '@rollup/pluginutils': 4.2.1 - babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.28.5) + babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.29.0) debug: 4.4.3 picocolors: 1.1.1 - vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vite-prerender-plugin: 0.5.12(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vite-prerender-plugin: 0.5.12(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) transitivePeerDependencies: - preact - supports-color @@ -17654,7 +20682,7 @@ snapshots: '@prefresh/utils@1.2.0': {} - '@prefresh/vite@2.4.1(preact@10.28.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': + '@prefresh/vite@2.4.1(preact@10.28.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': dependencies: '@babel/core': 7.28.5 '@prefresh/babel-plugin': 0.5.0 @@ -17662,88 +20690,88 @@ snapshots: '@prefresh/utils': 1.2.0 '@rollup/pluginutils': 4.2.1 preact: 10.28.2 - vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) transitivePeerDependencies: - supports-color '@react-native/assets-registry@0.76.9': {} - '@react-native/babel-plugin-codegen@0.76.9(@babel/preset-env@7.28.5(@babel/core@7.28.5))': + '@react-native/babel-plugin-codegen@0.76.9(@babel/preset-env@7.28.5(@babel/core@7.29.0))': dependencies: - '@react-native/codegen': 0.76.9(@babel/preset-env@7.28.5(@babel/core@7.28.5)) + '@react-native/codegen': 0.76.9(@babel/preset-env@7.28.5(@babel/core@7.29.0)) transitivePeerDependencies: - '@babel/preset-env' - supports-color - '@react-native/babel-preset@0.76.9(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))': + '@react-native/babel-preset@0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.28.5(@babel/core@7.29.0))': dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-export-default-from': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.5) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.28.5) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.5) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) - '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.28.5) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.5) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-react-display-name': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.5) - '@babel/plugin-transform-runtime': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-export-default-from': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.29.0) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.29.0) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.29.0) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-display-name': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.29.0) + '@babel/plugin-transform-runtime': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) '@babel/template': 7.28.6 - '@react-native/babel-plugin-codegen': 0.76.9(@babel/preset-env@7.28.5(@babel/core@7.28.5)) + '@react-native/babel-plugin-codegen': 0.76.9(@babel/preset-env@7.28.5(@babel/core@7.29.0)) babel-plugin-syntax-hermes-parser: 0.25.1 - babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.28.5) + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.0) react-refresh: 0.14.0 transitivePeerDependencies: - '@babel/preset-env' - supports-color - '@react-native/codegen@0.76.9(@babel/preset-env@7.28.5(@babel/core@7.28.5))': + '@react-native/codegen@0.76.9(@babel/preset-env@7.28.5(@babel/core@7.29.0))': dependencies: '@babel/parser': 7.29.0 - '@babel/preset-env': 7.28.5(@babel/core@7.28.5) + '@babel/preset-env': 7.28.5(@babel/core@7.29.0) glob: 7.2.3 hermes-parser: 0.23.1 invariant: 2.2.4 - jscodeshift: 0.14.0(@babel/preset-env@7.28.5(@babel/core@7.28.5)) + jscodeshift: 0.14.0(@babel/preset-env@7.28.5(@babel/core@7.29.0)) mkdirp: 0.5.6 nullthrows: 1.1.1 yargs: 17.7.2 transitivePeerDependencies: - supports-color - '@react-native/community-cli-plugin@0.76.9(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(encoding@0.1.13)': + '@react-native/community-cli-plugin@0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.28.5(@babel/core@7.29.0))(encoding@0.1.13)': dependencies: '@react-native/dev-middleware': 0.76.9 - '@react-native/metro-babel-transformer': 0.76.9(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5)) + '@react-native/metro-babel-transformer': 0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.28.5(@babel/core@7.29.0)) chalk: 4.1.2 execa: 5.1.1 invariant: 2.2.4 @@ -17786,10 +20814,10 @@ snapshots: '@react-native/js-polyfills@0.76.9': {} - '@react-native/metro-babel-transformer@0.76.9(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))': + '@react-native/metro-babel-transformer@0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.28.5(@babel/core@7.29.0))': dependencies: - '@babel/core': 7.28.5 - '@react-native/babel-preset': 0.76.9(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5)) + '@babel/core': 7.29.0 + '@react-native/babel-preset': 0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.28.5(@babel/core@7.29.0)) hermes-parser: 0.23.1 nullthrows: 1.1.1 transitivePeerDependencies: @@ -17798,12 +20826,12 @@ snapshots: '@react-native/normalize-colors@0.76.9': {} - '@react-native/virtualized-lists@0.76.9(@types/react@18.3.27)(react-native@0.76.9(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1)': + '@react-native/virtualized-lists@0.76.9(@types/react@18.3.27)(react-native@0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.28.5(@babel/core@7.29.0))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 18.3.1 - react-native: 0.76.9(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.28.5(@babel/core@7.29.0))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1) optionalDependencies: '@types/react': 18.3.27 @@ -17858,10 +20886,53 @@ snapshots: '@resvg/resvg-js-win32-ia32-msvc': 2.4.1 '@resvg/resvg-js-win32-x64-msvc': 2.4.1 + '@rolldown/binding-android-arm64@1.0.0-rc.4': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-rc.4': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-rc.4': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-rc.4': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.4': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.4': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.4': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.4': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.4': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.4': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.4': + dependencies: + '@napi-rs/wasm-runtime': 1.1.1 + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.4': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.4': + optional: true + '@rolldown/pluginutils@1.0.0-beta.27': {} '@rolldown/pluginutils@1.0.0-beta.50': {} + '@rolldown/pluginutils@1.0.0-rc.4': {} + '@rollup/plugin-alias@6.0.0(rollup@4.59.0)': optionalDependencies: rollup: 4.59.0 @@ -18110,6 +21181,12 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true + '@rollup/wasm-node@4.59.0': + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + '@rtsao/scc@1.1.0': {} '@schematics/angular@13.3.11(chokidar@3.6.0)': @@ -18120,6 +21197,14 @@ snapshots: transitivePeerDependencies: - chokidar + '@schematics/angular@21.2.2(chokidar@5.0.0)': + dependencies: + '@angular-devkit/core': 21.2.2(chokidar@5.0.0) + '@angular-devkit/schematics': 21.2.2(chokidar@5.0.0) + jsonc-parser: 3.3.1 + transitivePeerDependencies: + - chokidar + '@shikijs/core@2.5.0': dependencies: '@shikijs/engine-javascript': 2.5.0 @@ -18191,6 +21276,38 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} + '@sigstore/bundle@4.0.0': + dependencies: + '@sigstore/protobuf-specs': 0.5.0 + + '@sigstore/core@3.1.0': {} + + '@sigstore/protobuf-specs@0.5.0': {} + + '@sigstore/sign@4.1.0': + dependencies: + '@sigstore/bundle': 4.0.0 + '@sigstore/core': 3.1.0 + '@sigstore/protobuf-specs': 0.5.0 + make-fetch-happen: 15.0.4 + proc-log: 6.1.0 + promise-retry: 2.0.1 + transitivePeerDependencies: + - supports-color + + '@sigstore/tuf@4.0.1': + dependencies: + '@sigstore/protobuf-specs': 0.5.0 + tuf-js: 4.1.0 + transitivePeerDependencies: + - supports-color + + '@sigstore/verify@3.1.0': + dependencies: + '@sigstore/bundle': 4.0.0 + '@sigstore/core': 3.1.0 + '@sigstore/protobuf-specs': 0.5.0 + '@sinclair/typebox@0.27.8': {} '@sindresorhus/is@7.2.0': {} @@ -18251,45 +21368,45 @@ snapshots: transitivePeerDependencies: - typescript - '@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0)))(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0))': + '@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)))(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0)) + '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) debug: 4.4.3 svelte: 4.2.20 - vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)))(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)))(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) obug: 2.1.1 svelte: 5.43.14 - vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - '@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0))': + '@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0)))(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0)) + '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)))(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) debug: 4.4.0 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 svelte: 4.2.20 svelte-hmr: 0.15.3(svelte@4.2.20) - vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vitefu: 0.2.5(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0)) + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vitefu: 0.2.5(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': + '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)))(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)))(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 svelte: 5.43.14 - vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vitefu: 1.1.1(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vitefu: 1.1.1(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) '@swc-node/core@1.14.1(@swc/core@1.7.23(@swc/helpers@0.5.17))(@swc/types@0.1.25)': dependencies: @@ -18454,13 +21571,13 @@ snapshots: '@testing-library/dom': 9.3.4 svelte: 4.2.20 - '@testing-library/svelte@5.2.9(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vitest@4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': + '@testing-library/svelte@5.2.9(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vitest@4.0.12)': dependencies: '@testing-library/dom': 10.4.1 svelte: 5.43.14 optionalDependencies: - vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vitest: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vitest: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/ui@4.0.12)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) '@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.24)(vue@3.5.24(typescript@5.9.3))': dependencies: @@ -18491,6 +21608,13 @@ snapshots: '@tsconfig/svelte@5.0.6': {} + '@tufjs/canonical-json@2.0.0': {} + + '@tufjs/models@4.1.0': + dependencies: + '@tufjs/canonical-json': 2.0.0 + minimatch: 10.2.4 + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 @@ -18568,6 +21692,8 @@ snapshots: '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 + '@types/esrecurse@4.3.1': {} + '@types/estree@0.0.39': {} '@types/estree@0.0.51': {} @@ -18798,6 +21924,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.57.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.0 + '@typescript-eslint/type-utils': 8.57.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.0 + eslint: 8.57.1 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.4.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/experimental-utils@5.3.0(eslint@8.57.1)(typescript@4.6.4)': dependencies: '@types/json-schema': 7.0.15 @@ -18836,6 +21978,27 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.57.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.57.0 + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.0 + debug: 4.4.3 + eslint: 8.57.1 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.57.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3) + '@typescript-eslint/types': 8.57.0 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@5.3.0': dependencies: '@typescript-eslint/types': 5.3.0 @@ -18851,6 +22014,15 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/scope-manager@8.57.0': + dependencies: + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/visitor-keys': 8.57.0 + + '@typescript-eslint/tsconfig-utils@8.57.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + '@typescript-eslint/type-utils@5.48.2(eslint@8.57.1)(typescript@4.6.4)': dependencies: '@typescript-eslint/typescript-estree': 5.48.2(typescript@4.6.4) @@ -18875,12 +22047,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.57.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.0(eslint@8.57.1)(typescript@5.9.3) + debug: 4.4.3 + eslint: 8.57.1 + ts-api-utils: 2.4.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@5.3.0': {} '@typescript-eslint/types@5.48.2': {} '@typescript-eslint/types@6.21.0': {} + '@typescript-eslint/types@8.57.0': {} + '@typescript-eslint/typescript-estree@5.3.0(typescript@4.6.4)': dependencies: '@typescript-eslint/types': 5.3.0 @@ -18924,6 +22110,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.57.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.57.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3) + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/visitor-keys': 8.57.0 + debug: 4.4.3 + minimatch: 10.2.4 + semver: 7.7.3 + tinyglobby: 0.2.15 + ts-api-utils: 2.4.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@5.48.2(eslint@8.57.1)(typescript@4.6.4)': dependencies: '@types/json-schema': 7.0.15 @@ -18953,6 +22154,17 @@ snapshots: - supports-color - typescript + '@typescript-eslint/utils@8.57.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.57.0 + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) + eslint: 8.57.1 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@5.3.0': dependencies: '@typescript-eslint/types': 5.3.0 @@ -18968,6 +22180,11 @@ snapshots: '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@8.57.0': + dependencies: + '@typescript-eslint/types': 8.57.0 + eslint-visitor-keys: 5.0.1 + '@ungap/structured-clone@1.2.0': {} '@ungap/structured-clone@1.3.0': {} @@ -19049,7 +22266,11 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-react@4.7.0(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': + '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': + dependencies: + vite: 7.3.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + + '@vitejs/plugin-react@4.7.0(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0) @@ -19057,31 +22278,78 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue2@2.2.0(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@3.5.24(typescript@5.9.3))': + '@vitejs/plugin-vue2@2.2.0(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@3.5.24(typescript@5.9.3))': dependencies: - vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) vue: 3.5.24(typescript@5.9.3) - '@vitejs/plugin-vue@4.6.2(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@3.5.24(typescript@5.9.3))': + '@vitejs/plugin-vue@4.6.2(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@3.5.24(typescript@5.9.3))': dependencies: - vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) vue: 3.5.24(typescript@5.9.3) - '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@24.10.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1))(vue@3.5.24(typescript@5.9.3))': + '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@24.10.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1))(vue@3.5.24(typescript@5.9.3))': dependencies: - vite: 5.4.21(@types/node@24.10.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1) + vite: 5.4.21(@types/node@24.10.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1) vue: 3.5.24(typescript@5.9.3) - '@vitejs/plugin-vue@6.0.2(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@3.5.24(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.2(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@3.5.24(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.50 - vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) vue: 3.5.24(typescript@5.9.3) + '@vitest/browser-playwright@4.1.0(playwright@1.58.2)(vite@7.3.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vitest@4.0.12)': + dependencies: + '@vitest/browser': 4.1.0(vite@7.3.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vitest@4.0.12) + '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + playwright: 1.58.2 + tinyrainbow: 3.0.3 + vitest: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(@vitest/ui@4.0.12)(jiti@2.6.1)(jsdom@27.4.0)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/browser@4.1.0(vite@7.3.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vitest@4.0.12)': + dependencies: + '@blazediff/core': 1.9.1 + '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + '@vitest/utils': 4.1.0 + magic-string: 0.30.21 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.0.3 + vitest: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(@vitest/ui@4.0.12)(jiti@2.6.1)(jsdom@27.4.0)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + ws: 8.19.0 + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/coverage-v8@4.0.12(vitest@4.0.12)': + dependencies: + '@bcoe/v8-coverage': 1.0.2 + '@vitest/utils': 4.0.12 + ast-v8-to-istanbul: 0.3.12 + debug: 4.4.3 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.2.0 + magicast: 0.5.1 + std-env: 3.10.0 + tinyrainbow: 3.0.3 + vitest: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/ui@4.0.12)(jiti@2.6.1)(jsdom@27.4.0)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + transitivePeerDependencies: + - supports-color + '@vitest/expect@4.0.12': dependencies: '@standard-schema/spec': 1.0.0 @@ -19091,18 +22359,38 @@ snapshots: chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.12(vite@6.3.6(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0))': + '@vitest/mocker@4.0.12(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': dependencies: '@vitest/spy': 4.0.12 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 6.3.6(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + + '@vitest/mocker@4.0.12(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': + dependencies: + '@vitest/spy': 4.0.12 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + + '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))': + dependencies: + '@vitest/spy': 4.1.0 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.3.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) '@vitest/pretty-format@4.0.12': dependencies: tinyrainbow: 3.0.3 + '@vitest/pretty-format@4.1.0': + dependencies: + tinyrainbow: 3.0.3 + '@vitest/runner@4.0.12': dependencies: '@vitest/utils': 4.0.12 @@ -19116,11 +22404,30 @@ snapshots: '@vitest/spy@4.0.12': {} + '@vitest/spy@4.1.0': {} + + '@vitest/ui@4.0.12(vitest@4.0.12)': + dependencies: + '@vitest/utils': 4.0.12 + fflate: 0.8.2 + flatted: 3.3.3 + pathe: 2.0.3 + sirv: 3.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vitest: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/ui@4.0.12)(jiti@2.6.1)(jsdom@27.4.0)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + '@vitest/utils@4.0.12': dependencies: '@vitest/pretty-format': 4.0.12 tinyrainbow: 3.0.3 + '@vitest/utils@4.1.0': + dependencies: + '@vitest/pretty-format': 4.1.0 + convert-source-map: 2.0.0 + tinyrainbow: 3.0.3 + '@volar/language-core@2.4.23': dependencies: '@volar/source-map': 2.4.23 @@ -19366,6 +22673,8 @@ snapshots: abbrev@3.0.1: {} + abbrev@4.0.0: {} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -19375,6 +22684,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.2 + negotiator: 1.0.0 + acorn-globals@7.0.1: dependencies: acorn: 8.16.0 @@ -19427,6 +22741,8 @@ snapshots: transitivePeerDependencies: - supports-color + agent-base@7.1.4: {} + agentkeepalive@4.5.0: dependencies: humanize-ms: 1.2.1 @@ -19456,6 +22772,14 @@ snapshots: optionalDependencies: ajv: 8.9.0 + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-formats@3.0.1(ajv@8.18.0): + optionalDependencies: + ajv: 8.18.0 + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 @@ -19479,6 +22803,13 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + ajv@8.18.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ajv@8.9.0: dependencies: fast-deep-equal: 3.1.3 @@ -19503,6 +22834,42 @@ snapshots: '@algolia/requester-fetch': 5.44.0 '@algolia/requester-node-http': 5.44.0 + algoliasearch@5.48.1: + dependencies: + '@algolia/abtesting': 1.14.1 + '@algolia/client-abtesting': 5.48.1 + '@algolia/client-analytics': 5.48.1 + '@algolia/client-common': 5.48.1 + '@algolia/client-insights': 5.48.1 + '@algolia/client-personalization': 5.48.1 + '@algolia/client-query-suggestions': 5.48.1 + '@algolia/client-search': 5.48.1 + '@algolia/ingestion': 1.48.1 + '@algolia/monitoring': 1.48.1 + '@algolia/recommend': 5.48.1 + '@algolia/requester-browser-xhr': 5.48.1 + '@algolia/requester-fetch': 5.48.1 + '@algolia/requester-node-http': 5.48.1 + + angular-eslint@21.1.0(@angular/cli@21.2.2(@types/node@24.10.1)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@8.57.1)(typescript-eslint@8.57.0(eslint@8.57.1)(typescript@5.9.3))(typescript@5.9.3): + dependencies: + '@angular-devkit/core': 21.2.2(chokidar@5.0.0) + '@angular-devkit/schematics': 21.2.2(chokidar@5.0.0) + '@angular-eslint/builder': 21.1.0(@angular/cli@21.2.2(@types/node@24.10.1)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@8.57.1)(typescript@5.9.3) + '@angular-eslint/eslint-plugin': 21.1.0(@typescript-eslint/utils@8.57.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@angular-eslint/eslint-plugin-template': 21.1.0(@angular-eslint/template-parser@21.1.0(eslint@8.57.1)(typescript@5.9.3))(@typescript-eslint/types@8.57.0)(@typescript-eslint/utils@8.57.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@angular-eslint/schematics': 21.1.0(@angular-eslint/template-parser@21.1.0(eslint@8.57.1)(typescript@5.9.3))(@angular/cli@21.2.2(@types/node@24.10.1)(chokidar@5.0.0))(@typescript-eslint/types@8.57.0)(@typescript-eslint/utils@8.57.0(eslint@8.57.1)(typescript@5.9.3))(chokidar@5.0.0)(eslint@8.57.1)(typescript@5.9.3) + '@angular-eslint/template-parser': 21.1.0(eslint@8.57.1)(typescript@5.9.3) + '@angular/cli': 21.2.2(@types/node@24.10.1)(chokidar@5.0.0) + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/utils': 8.57.0(eslint@8.57.1)(typescript@5.9.3) + eslint: 8.57.1 + typescript: 5.9.3 + typescript-eslint: 8.57.0(eslint@8.57.1)(typescript@5.9.3) + transitivePeerDependencies: + - chokidar + - supports-color + anser@1.4.10: {} anser@2.3.3: {} @@ -19523,12 +22890,18 @@ snapshots: dependencies: type-fest: 1.4.0 + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 + ansi-html-community@0.0.8: {} ansi-regex@5.0.1: {} ansi-regex@6.0.1: {} + ansi-regex@6.2.2: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -19537,6 +22910,8 @@ snapshots: ansi-styles@6.2.1: {} + ansi-styles@6.2.3: {} + ansi-to-vue3@0.1.2(vue@3.5.24(typescript@5.9.3)): dependencies: anser: 2.3.3 @@ -19676,7 +23051,13 @@ snapshots: dependencies: tslib: 2.8.1 - astro@5.16.0(@types/node@24.10.1)(@vercel/blob@2.3.0)(db0@0.3.4)(ioredis@5.10.0)(jiti@2.6.1)(less@4.2.0)(rollup@4.59.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.0): + ast-v8-to-istanbul@0.3.12: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + estree-walker: 3.0.3 + js-tokens: 10.0.0 + + astro@5.16.0(@types/node@24.10.1)(@vercel/blob@2.3.0)(db0@0.3.4)(ioredis@5.10.0)(jiti@2.6.1)(less@4.2.0)(rollup@4.59.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(typescript@5.9.3)(yaml@2.8.0): dependencies: '@astrojs/compiler': 2.13.0 '@astrojs/internal-helpers': 0.7.5 @@ -19733,8 +23114,8 @@ snapshots: unist-util-visit: 5.0.0 unstorage: 1.17.3(@vercel/blob@2.3.0)(db0@0.3.4)(ioredis@5.10.0) vfile: 6.0.3 - vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vitefu: 1.1.1(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vitefu: 1.1.1(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -19812,7 +23193,7 @@ snapshots: autoprefixer@10.4.20(postcss@8.4.41): dependencies: - browserslist: 4.24.2 + browserslist: 4.25.1 caniuse-lite: 1.0.30001673 fraction.js: 4.3.7 normalize-range: 0.1.2 @@ -19822,7 +23203,7 @@ snapshots: autoprefixer@10.4.20(postcss@8.4.5): dependencies: - browserslist: 4.24.2 + browserslist: 4.25.1 caniuse-lite: 1.0.30001673 fraction.js: 4.3.7 normalize-range: 0.1.2 @@ -19852,13 +23233,13 @@ snapshots: dependencies: '@babel/core': 7.28.5 - babel-jest@29.7.0(@babel/core@7.28.5): + babel-jest@29.7.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.28.5) + babel-preset-jest: 29.6.3(@babel/core@7.29.0) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -19918,10 +23299,19 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.28.5): + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.5 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) + '@babel/compat-data': 7.28.5 + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.29.0) + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.29.0) core-js-compat: 3.45.0 transitivePeerDependencies: - supports-color @@ -19934,6 +23324,14 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.29.0) + core-js-compat: 3.45.0 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-corejs3@0.5.3(@babel/core@7.16.12): dependencies: '@babel/core': 7.16.12 @@ -19956,6 +23354,13 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + babel-plugin-syntax-hermes-parser@0.23.1: dependencies: hermes-parser: 0.23.1 @@ -19964,40 +23369,40 @@ snapshots: dependencies: hermes-parser: 0.25.1 - babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.28.5): + babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.29.0): dependencies: - '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - '@babel/core' - babel-plugin-transform-hook-names@1.0.2(@babel/core@7.28.5): + babel-plugin-transform-hook-names@1.0.2(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 - babel-preset-current-node-syntax@1.1.0(@babel/core@7.28.5): + babel-preset-current-node-syntax@1.1.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.0) - babel-preset-jest@29.6.3(@babel/core@7.28.5): + babel-preset-jest@29.6.3(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.28.5) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.29.0) babel-preset-solid@1.9.10(@babel/core@7.28.5)(solid-js@1.9.10): dependencies: @@ -20020,10 +23425,28 @@ snapshots: base64id@2.0.0: {} + baseline-browser-mapping@2.10.7: {} + batch@0.6.1: {} + beasties@0.4.1: + dependencies: + css-select: 6.0.0 + css-what: 7.0.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + htmlparser2: 10.0.0 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-media-query-parser: 0.2.3 + postcss-safe-parser: 7.0.1(postcss@8.5.6) + before-after-hook@2.2.3: {} + bidi-js@1.0.3: + dependencies: + require-from-string: 2.0.2 + big.js@5.2.2: {} binary-extensions@2.3.0: {} @@ -20059,6 +23482,20 @@ snapshots: transitivePeerDependencies: - supports-color + body-parser@2.2.2: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.3 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + on-finished: 2.4.1 + qs: 6.15.0 + raw-body: 3.0.2 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color + bonjour@3.5.0: dependencies: array-flatten: 2.1.2 @@ -20113,13 +23550,6 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.23.3) - browserslist@4.24.2: - dependencies: - caniuse-lite: 1.0.30001673 - electron-to-chromium: 1.5.47 - node-releases: 2.0.18 - update-browserslist-db: 1.1.1(browserslist@4.24.2) - browserslist@4.24.5: dependencies: caniuse-lite: 1.0.30001718 @@ -20134,6 +23564,14 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.1) + browserslist@4.28.1: + dependencies: + baseline-browser-mapping: 2.10.7 + caniuse-lite: 1.0.30001778 + electron-to-chromium: 1.5.313 + node-releases: 2.0.36 + update-browserslist-db: 1.2.3(browserslist@4.28.1) + bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -20249,6 +23687,20 @@ snapshots: tar: 6.2.1 unique-filename: 3.0.0 + cacache@20.0.3: + dependencies: + '@npmcli/fs': 5.0.0 + fs-minipass: 3.0.3 + glob: 13.0.6 + lru-cache: 11.2.2 + minipass: 7.1.3 + minipass-collect: 2.0.1 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + p-map: 7.0.4 + ssri: 13.0.1 + unique-filename: 5.0.0 + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -20290,6 +23742,8 @@ snapshots: caniuse-lite@1.0.30001731: {} + caniuse-lite@1.0.30001778: {} + ccount@2.0.1: {} chai@6.2.1: {} @@ -20316,6 +23770,8 @@ snapshots: chardet@0.7.0: {} + chardet@2.1.1: {} + cheerio-select@2.1.0: dependencies: boolbase: 1.0.0 @@ -20415,6 +23871,10 @@ snapshots: dependencies: restore-cursor: 4.0.0 + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + cli-progress@3.12.0: dependencies: string-width: 4.2.3 @@ -20423,6 +23883,8 @@ snapshots: cli-spinners@2.9.2: {} + cli-spinners@3.4.0: {} + cli-table3@0.6.5: dependencies: string-width: 4.2.3 @@ -20434,8 +23896,15 @@ snapshots: slice-ansi: 5.0.0 string-width: 5.1.2 + cli-truncate@5.2.0: + dependencies: + slice-ansi: 8.0.0 + string-width: 8.2.0 + cli-width@3.0.0: {} + cli-width@4.1.0: {} + clipboardy@4.0.0: dependencies: execa: 8.0.1 @@ -20454,6 +23923,12 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + clone-deep@4.0.1: dependencies: is-plain-object: 2.0.4 @@ -20506,6 +23981,8 @@ snapshots: commander@12.1.0: {} + commander@14.0.3: {} + commander@2.20.3: {} commander@4.1.1: {} @@ -20520,6 +23997,8 @@ snapshots: common-ancestor-path@1.0.1: {} + common-path-prefix@3.0.0: {} + commondir@1.0.1: {} compatx@0.2.0: {} @@ -20580,6 +24059,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 + content-disposition@1.0.1: {} + content-type@1.0.5: {} convert-source-map@1.9.0: {} @@ -20592,6 +24073,8 @@ snapshots: cookie-signature@1.0.6: {} + cookie-signature@1.2.2: {} + cookie@0.4.2: {} cookie@0.7.1: {} @@ -20618,7 +24101,7 @@ snapshots: core-js-compat@3.38.1: dependencies: - browserslist: 4.24.2 + browserslist: 4.25.1 core-js-compat@3.45.0: dependencies: @@ -20738,6 +24221,14 @@ snapshots: domutils: 3.2.2 nth-check: 2.1.1 + css-select@6.0.0: + dependencies: + boolbase: 1.0.0 + css-what: 7.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + css-tree@1.1.3: dependencies: mdn-data: 2.0.14 @@ -20760,6 +24251,8 @@ snapshots: css-what@6.1.0: {} + css-what@7.0.0: {} + css.escape@1.5.1: {} css@3.0.0: @@ -20786,6 +24279,13 @@ snapshots: dependencies: cssom: 0.3.8 + cssstyle@5.3.7: + dependencies: + '@asamuzakjp/css-color': 4.1.2 + '@csstools/css-syntax-patches-for-csstree': 1.1.0 + css-tree: 3.1.0 + lru-cache: 11.2.6 + csstype@3.1.3: {} csstype@3.2.3: {} @@ -20804,6 +24304,11 @@ snapshots: whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 + data-urls@6.0.1: + dependencies: + whatwg-mimetype: 5.0.0 + whatwg-url: 15.1.0 + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -20864,6 +24369,8 @@ snapshots: decimal.js@10.4.3: {} + decimal.js@10.6.0: {} + decode-named-character-reference@1.1.0: dependencies: character-entities: 2.0.2 @@ -20958,6 +24465,8 @@ snapshots: dependency-graph@0.11.0: {} + dependency-graph@1.0.0: {} + deprecation@2.3.1: {} dequal@2.0.3: {} @@ -21131,6 +24640,8 @@ snapshots: electron-to-chromium@1.5.198: {} + electron-to-chromium@1.5.313: {} + electron-to-chromium@1.5.47: {} element-to-path@1.2.1: {} @@ -21205,6 +24716,8 @@ snapshots: env-paths@2.2.1: {} + environment@1.1.0: {} + err-code@2.0.3: {} errno@0.1.8: @@ -21817,6 +25330,13 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 + eslint-scope@9.1.2: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.8 + esrecurse: 4.3.0 + estraverse: 5.3.0 + eslint-utils@3.0.0(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -21828,6 +25348,8 @@ snapshots: eslint-visitor-keys@4.2.1: {} + eslint-visitor-keys@5.0.1: {} + eslint@8.57.1: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) @@ -21933,6 +25455,12 @@ snapshots: events@3.3.0: {} + eventsource-parser@3.0.6: {} + + eventsource@3.0.7: + dependencies: + eventsource-parser: 3.0.6 + execa@5.1.1: dependencies: cross-spawn: 7.0.5 @@ -21975,6 +25503,11 @@ snapshots: exponential-backoff@3.1.2: {} + express-rate-limit@8.3.1(express@5.2.1): + dependencies: + express: 5.2.1 + ip-address: 10.1.0 + express@4.21.2: dependencies: accepts: 1.3.8 @@ -22011,6 +25544,39 @@ snapshots: transitivePeerDependencies: - supports-color + express@5.2.1: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.2 + content-disposition: 1.0.1 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.2.2 + debug: 4.4.3 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.1 + fresh: 2.0.0 + http-errors: 2.0.1 + merge-descriptors: 2.0.0 + mime-types: 3.0.2 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.15.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.1 + serve-static: 2.2.1 + statuses: 2.0.2 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + exsolve@1.0.8: {} extend@3.0.2: {} @@ -22078,6 +25644,8 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.2.1 + fflate@0.8.2: {} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -22128,6 +25696,17 @@ snapshots: transitivePeerDependencies: - supports-color + finalhandler@2.1.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + find-cache-dir@2.1.0: dependencies: commondir: 1.0.1 @@ -22140,6 +25719,13 @@ snapshots: make-dir: 3.1.0 pkg-dir: 4.2.0 + find-cache-directory@6.0.0: + dependencies: + common-path-prefix: 3.0.0 + pkg-dir: 8.0.0 + + find-up-simple@1.0.1: {} + find-up@3.0.0: dependencies: locate-path: 3.0.0 @@ -22162,8 +25748,6 @@ snapshots: flat@5.0.2: {} - flatted@3.3.1: {} - flatted@3.3.3: {} flattie@1.1.1: {} @@ -22263,6 +25847,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -22298,6 +25885,8 @@ snapshots: get-east-asian-width@1.3.0: {} + get-east-asian-width@1.5.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -22634,12 +26223,18 @@ snapshots: dependencies: hermes-estree: 0.25.1 + hono@4.12.7: {} + hookable@5.5.3: {} hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 + hosted-git-info@9.0.2: + dependencies: + lru-cache: 11.2.2 + hpack.js@2.1.6: dependencies: inherits: 2.0.4 @@ -22651,6 +26246,12 @@ snapshots: dependencies: whatwg-encoding: 2.0.0 + html-encoding-sniffer@6.0.0: + dependencies: + '@exodus/bytes': 1.15.0 + transitivePeerDependencies: + - '@noble/hashes' + html-entities@2.3.3: {} html-entities@2.5.2: {} @@ -22781,6 +26382,13 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + httpxy@0.1.7: {} human-signals@2.1.0: {} @@ -22803,6 +26411,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + icss-utils@5.1.0(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -22813,6 +26425,10 @@ snapshots: dependencies: minimatch: 3.1.2 + ignore-walk@8.0.0: + dependencies: + minimatch: 10.2.4 + ignore@5.1.9: {} ignore@5.3.2: {} @@ -22838,6 +26454,8 @@ snapshots: immutable@4.3.7: {} + immutable@5.1.5: {} + import-fresh@2.0.0: dependencies: caller-path: 2.0.0 @@ -22871,6 +26489,8 @@ snapshots: ini@5.0.0: {} + ini@6.0.0: {} + injection-js@2.4.0: dependencies: tslib: 2.8.1 @@ -22916,6 +26536,8 @@ snapshots: transitivePeerDependencies: - supports-color + ip-address@10.1.0: {} + ip-address@9.0.5: dependencies: jsbn: 1.1.0 @@ -23008,6 +26630,10 @@ snapshots: is-fullwidth-code-point@4.0.0: {} + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.5.0 + is-function@1.0.2: {} is-generator-function@1.1.0: @@ -23027,6 +26653,8 @@ snapshots: is-interactive@1.0.0: {} + is-interactive@2.0.0: {} + is-lambda@1.0.1: {} is-map@2.0.3: {} @@ -23064,6 +26692,8 @@ snapshots: is-potential-custom-element-name@1.0.1: {} + is-promise@4.0.0: {} + is-reference@1.2.1: dependencies: '@types/estree': 1.0.8 @@ -23106,6 +26736,8 @@ snapshots: is-unicode-supported@0.1.0: {} + is-unicode-supported@2.1.0: {} + is-weakmap@2.0.2: {} is-weakref@1.1.1: @@ -23145,6 +26777,8 @@ snapshots: isexe@3.1.1: {} + isexe@4.0.0: {} + isobject@3.0.1: {} isomorphic-fetch@3.0.0(encoding@0.1.13): @@ -23167,7 +26801,17 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.16.12 + '@babel/core': 7.28.5 + '@babel/parser': 7.29.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.29.0 '@babel/parser': 7.29.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 @@ -23189,11 +26833,24 @@ snapshots: transitivePeerDependencies: - supports-color + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + debug: 4.4.3 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + istanbul-reports@3.1.7: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + istanbul-reports@3.2.0: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -23312,6 +26969,8 @@ snapshots: jiti@2.6.1: {} + jose@6.2.1: {} + jpeg-js@0.4.4: {} js-beautify@1.14.9: @@ -23321,6 +26980,8 @@ snapshots: glob: 8.1.0 nopt: 6.0.0 + js-tokens@10.0.0: {} + js-tokens@4.0.0: {} js-tokens@9.0.1: {} @@ -23349,7 +27010,7 @@ snapshots: jsc-safe-url@0.2.4: {} - jscodeshift@0.14.0(@babel/preset-env@7.28.5(@babel/core@7.28.5)): + jscodeshift@0.14.0(@babel/preset-env@7.28.5(@babel/core@7.29.0)): dependencies: '@babel/core': 7.28.5 '@babel/parser': 7.29.0 @@ -23357,7 +27018,7 @@ snapshots: '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.28.5) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.28.5) '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5) - '@babel/preset-env': 7.28.5(@babel/core@7.28.5) + '@babel/preset-env': 7.28.5(@babel/core@7.29.0) '@babel/preset-flow': 7.27.1(@babel/core@7.28.5) '@babel/preset-typescript': 7.28.5(@babel/core@7.28.5) '@babel/register': 7.27.1(@babel/core@7.28.5) @@ -23407,6 +27068,34 @@ snapshots: - supports-color - utf-8-validate + jsdom@27.4.0: + dependencies: + '@acemir/cssom': 0.9.31 + '@asamuzakjp/dom-selector': 6.8.1 + '@exodus/bytes': 1.15.0 + cssstyle: 5.3.7 + data-urls: 6.0.1 + decimal.js: 10.6.0 + html-encoding-sniffer: 6.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + parse5: 8.0.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 6.0.1 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 8.0.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 15.1.0 + ws: 8.19.0 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - '@noble/hashes' + - bufferutil + - supports-color + - utf-8-validate + jsesc@0.5.0: {} jsesc@2.5.2: {} @@ -23421,6 +27110,8 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-parse-even-better-errors@5.0.0: {} + json-schema-migrate@2.0.0: dependencies: ajv: 8.17.1 @@ -23429,6 +27120,8 @@ snapshots: json-schema-traverse@1.0.0: {} + json-schema-typed@8.0.2: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@1.0.2: @@ -23677,6 +27370,33 @@ snapshots: optionalDependencies: enquirer: 2.3.6 + listr2@9.0.5: + dependencies: + cli-truncate: 5.2.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + + lmdb@3.5.1: + dependencies: + '@harperfast/extended-iterable': 1.0.3 + msgpackr: 1.11.9 + node-addon-api: 6.1.0 + node-gyp-build-optional-packages: 5.2.2 + ordered-binary: 1.6.1 + weak-lru-cache: 1.2.2 + optionalDependencies: + '@lmdb/lmdb-darwin-arm64': 3.5.1 + '@lmdb/lmdb-darwin-x64': 3.5.1 + '@lmdb/lmdb-linux-arm': 3.5.1 + '@lmdb/lmdb-linux-arm64': 3.5.1 + '@lmdb/lmdb-linux-x64': 3.5.1 + '@lmdb/lmdb-win32-arm64': 3.5.1 + '@lmdb/lmdb-win32-x64': 3.5.1 + optional: true + load-bmfont@1.4.1: dependencies: buffer-equal: 0.0.1 @@ -23738,6 +27458,11 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 + log-symbols@7.0.1: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.1.1 + log-update@5.0.1: dependencies: ansi-escapes: 5.0.0 @@ -23746,11 +27471,19 @@ snapshots: strip-ansi: 7.1.0 wrap-ansi: 8.1.0 + log-update@6.1.0: + dependencies: + ansi-escapes: 7.3.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.2 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + log4js@6.9.1: dependencies: date-format: 4.0.14 debug: 4.4.3 - flatted: 3.3.1 + flatted: 3.3.3 rfdc: 1.4.1 streamroller: 3.1.5 transitivePeerDependencies: @@ -23770,6 +27503,8 @@ snapshots: lru-cache@11.2.2: {} + lru-cache@11.2.6: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -23801,7 +27536,7 @@ snapshots: magicast@0.5.1: dependencies: '@babel/parser': 7.29.0 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 source-map-js: 1.2.1 make-dir@2.1.0: @@ -23858,6 +27593,22 @@ snapshots: transitivePeerDependencies: - supports-color + make-fetch-happen@15.0.4: + dependencies: + '@gar/promise-retry': 1.0.2 + '@npmcli/agent': 4.0.0 + cacache: 20.0.3 + http-cache-semantics: 4.2.0 + minipass: 7.1.3 + minipass-fetch: 5.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 1.0.0 + proc-log: 6.1.0 + ssri: 13.0.1 + transitivePeerDependencies: + - supports-color + make-fetch-happen@9.1.0: dependencies: agentkeepalive: 4.5.0 @@ -24022,6 +27773,8 @@ snapshots: media-typer@0.3.0: {} + media-typer@1.1.0: {} + memfs@3.5.3: dependencies: fs-monkey: 1.0.6 @@ -24034,6 +27787,8 @@ snapshots: merge-descriptors@1.0.3: {} + merge-descriptors@2.0.0: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -24130,7 +27885,7 @@ snapshots: metro-source-map@0.81.5: dependencies: - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.29.0 '@babel/traverse--for-generate-function-map': '@babel/traverse@7.29.0' '@babel/types': 7.29.0 flow-enums-runtime: 0.0.6 @@ -24171,7 +27926,7 @@ snapshots: '@babel/core': 7.28.5 '@babel/generator': 7.29.1 '@babel/template': 7.28.6 - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.29.0 flow-enums-runtime: 0.0.6 nullthrows: 1.1.1 transitivePeerDependencies: @@ -24205,7 +27960,7 @@ snapshots: '@babel/parser': 7.29.0 '@babel/template': 7.27.2 '@babel/traverse': 7.28.5 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 accepts: 1.3.8 chalk: 4.1.2 ci-info: 2.0.0 @@ -24471,6 +28226,8 @@ snapshots: mimic-fn@4.0.0: {} + mimic-function@5.0.1: {} + min-document@2.19.0: dependencies: dom-walk: 0.1.2 @@ -24550,6 +28307,14 @@ snapshots: optionalDependencies: encoding: 0.1.13 + minipass-fetch@5.0.2: + dependencies: + minipass: 7.1.3 + minipass-sized: 2.0.0 + minizlib: 3.1.0 + optionalDependencies: + iconv-lite: 0.7.2 + minipass-flush@1.0.5: dependencies: minipass: 3.3.6 @@ -24567,6 +28332,10 @@ snapshots: dependencies: minipass: 3.3.6 + minipass-sized@2.0.0: + dependencies: + minipass: 7.1.3 + minipass@3.3.6: dependencies: yallist: 4.0.0 @@ -24613,6 +28382,23 @@ snapshots: ms@2.1.3: {} + msgpackr-extract@3.0.3: + dependencies: + node-gyp-build-optional-packages: 5.2.2 + optionalDependencies: + '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 + optional: true + + msgpackr@1.11.9: + optionalDependencies: + msgpackr-extract: 3.0.3 + optional: true + multicast-dns-service-types@1.1.0: {} multicast-dns@6.2.3: @@ -24622,6 +28408,8 @@ snapshots: mute-stream@0.0.8: {} + mute-stream@2.0.0: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -24655,6 +28443,8 @@ snapshots: negotiator@0.6.3: {} + negotiator@1.0.0: {} + neo-async@2.6.2: {} neotraverse@0.6.18: {} @@ -24695,13 +28485,42 @@ snapshots: - bluebird - supports-color + ng-packagr@21.2.0(@angular/compiler-cli@21.2.4(@angular/compiler@21.2.4)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3): + dependencies: + '@ampproject/remapping': 2.3.0 + '@angular/compiler-cli': 21.2.4(@angular/compiler@21.2.4)(typescript@5.9.3) + '@rollup/plugin-json': 6.1.0(rollup@4.59.0) + '@rollup/wasm-node': 4.59.0 + ajv: 8.17.1 + ansi-colors: 4.1.3 + browserslist: 4.28.1 + chokidar: 5.0.0 + commander: 14.0.3 + dependency-graph: 1.0.0 + esbuild: 0.27.3 + find-cache-directory: 6.0.0 + injection-js: 2.4.0 + jsonc-parser: 3.3.1 + less: 4.2.0 + ora: 9.3.0 + piscina: 5.1.4 + postcss: 8.5.6 + rollup-plugin-dts: 6.2.3(rollup@4.59.0)(typescript@5.9.3) + rxjs: 7.8.2 + sass: 1.98.0 + tinyglobby: 0.2.15 + tslib: 2.8.1 + typescript: 5.9.3 + optionalDependencies: + rollup: 4.59.0 + nice-napi@1.0.2: dependencies: node-addon-api: 3.2.1 node-gyp-build: 4.8.4 optional: true - nitropack@2.13.1(@vercel/blob@2.3.0)(encoding@0.1.13)(xml2js@0.6.2): + nitropack@2.13.1(@vercel/blob@2.3.0)(encoding@0.1.13)(rolldown@1.0.0-rc.4)(xml2js@0.6.2): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.59.0) @@ -24754,7 +28573,7 @@ snapshots: pretty-bytes: 7.1.0 radix3: 1.1.2 rollup: 4.59.0 - rollup-plugin-visualizer: 6.0.5(rollup@4.59.0) + rollup-plugin-visualizer: 6.0.5(rolldown@1.0.0-rc.4)(rollup@4.59.0) scule: 1.3.0 semver: 7.7.3 serve-placeholder: 2.0.2 @@ -24816,6 +28635,9 @@ snapshots: node-addon-api@3.2.1: {} + node-addon-api@6.1.0: + optional: true + node-addon-api@7.1.1: {} node-dir@0.1.17: @@ -24840,6 +28662,11 @@ snapshots: node-forge@1.3.1: {} + node-gyp-build-optional-packages@5.2.2: + dependencies: + detect-libc: 2.1.2 + optional: true + node-gyp-build@4.8.4: {} node-gyp@10.2.0: @@ -24857,6 +28684,21 @@ snapshots: transitivePeerDependencies: - supports-color + node-gyp@12.2.0: + dependencies: + env-paths: 2.2.1 + exponential-backoff: 3.1.2 + graceful-fs: 4.2.11 + make-fetch-happen: 15.0.4 + nopt: 9.0.0 + proc-log: 6.1.0 + semver: 7.7.3 + tar: 7.5.9 + tinyglobby: 0.2.15 + which: 6.0.1 + transitivePeerDependencies: + - supports-color + node-gyp@8.4.1: dependencies: env-paths: 2.2.1 @@ -24886,6 +28728,8 @@ snapshots: node-releases@2.0.19: {} + node-releases@2.0.36: {} + nopt@5.0.0: dependencies: abbrev: 1.1.1 @@ -24902,6 +28746,10 @@ snapshots: dependencies: abbrev: 3.0.1 + nopt@9.0.0: + dependencies: + abbrev: 4.0.0 + normalize-path@3.0.0: {} normalize-range@0.1.2: {} @@ -24910,18 +28758,40 @@ snapshots: dependencies: npm-normalize-package-bin: 1.0.1 + npm-bundled@5.0.0: + dependencies: + npm-normalize-package-bin: 5.0.0 + npm-install-checks@4.0.0: dependencies: semver: 7.7.3 + npm-install-checks@8.0.0: + dependencies: + semver: 7.7.3 + npm-normalize-package-bin@1.0.1: {} + npm-normalize-package-bin@5.0.0: {} + + npm-package-arg@13.0.2: + dependencies: + hosted-git-info: 9.0.2 + proc-log: 6.1.0 + semver: 7.7.3 + validate-npm-package-name: 7.0.2 + npm-package-arg@8.1.5: dependencies: hosted-git-info: 4.1.0 semver: 7.7.3 validate-npm-package-name: 3.0.0 + npm-packlist@10.0.4: + dependencies: + ignore-walk: 8.0.0 + proc-log: 6.1.0 + npm-packlist@3.0.0: dependencies: glob: 7.2.3 @@ -24929,6 +28799,13 @@ snapshots: npm-bundled: 1.1.2 npm-normalize-package-bin: 1.0.1 + npm-pick-manifest@11.0.3: + dependencies: + npm-install-checks: 8.0.0 + npm-normalize-package-bin: 5.0.0 + npm-package-arg: 13.0.2 + semver: 7.7.3 + npm-pick-manifest@6.1.1: dependencies: npm-install-checks: 4.0.0 @@ -24948,6 +28825,19 @@ snapshots: - bluebird - supports-color + npm-registry-fetch@19.1.1: + dependencies: + '@npmcli/redact': 4.0.0 + jsonparse: 1.3.1 + make-fetch-happen: 15.0.4 + minipass: 7.1.3 + minipass-fetch: 5.0.2 + minizlib: 3.1.0 + npm-package-arg: 13.0.2 + proc-log: 6.1.0 + transitivePeerDependencies: + - supports-color + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -25136,6 +29026,10 @@ snapshots: dependencies: mimic-fn: 4.0.0 + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + oniguruma-parser@0.12.1: {} oniguruma-to-es@3.1.1: @@ -25167,9 +29061,9 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openai@5.23.2(ws@8.18.0)(zod@3.25.76): + openai@5.23.2(ws@8.19.0)(zod@3.25.76): optionalDependencies: - ws: 8.18.0 + ws: 8.19.0 zod: 3.25.76 optionator@0.9.4: @@ -25193,6 +29087,20 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 + ora@9.3.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 3.4.0 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 7.0.1 + stdin-discarder: 0.3.1 + string-width: 8.2.0 + + ordered-binary@1.6.1: + optional: true + os-tmpdir@1.0.2: {} oslllo-potrace@3.0.0(encoding@0.1.13): @@ -25279,6 +29187,8 @@ snapshots: dependencies: aggregate-error: 3.1.0 + p-map@7.0.4: {} + p-memoize@7.1.1: dependencies: mimic-fn: 4.0.0 @@ -25329,6 +29239,28 @@ snapshots: - bluebird - supports-color + pacote@21.3.1: + dependencies: + '@npmcli/git': 7.0.2 + '@npmcli/installed-package-contents': 4.0.0 + '@npmcli/package-json': 7.0.5 + '@npmcli/promise-spawn': 9.0.1 + '@npmcli/run-script': 10.0.4 + cacache: 20.0.3 + fs-minipass: 3.0.3 + minipass: 7.1.3 + npm-package-arg: 13.0.2 + npm-packlist: 10.0.4 + npm-pick-manifest: 11.0.3 + npm-registry-fetch: 19.1.1 + proc-log: 6.1.0 + promise-retry: 2.0.1 + sigstore: 4.1.0 + ssri: 13.0.1 + tar: 7.5.9 + transitivePeerDependencies: + - supports-color + pako@0.2.9: {} pako@1.0.11: {} @@ -25376,6 +29308,12 @@ snapshots: parse5: 6.0.1 parse5-sax-parser: 6.0.1 + parse5-html-rewriting-stream@8.0.0: + dependencies: + entities: 6.0.1 + parse5: 8.0.0 + parse5-sax-parser: 8.0.0 + parse5-htmlparser2-tree-adapter@6.0.1: dependencies: parse5: 6.0.1 @@ -25393,6 +29331,10 @@ snapshots: dependencies: parse5: 6.0.1 + parse5-sax-parser@8.0.0: + dependencies: + parse5: 8.0.0 + parse5@6.0.1: {} parse5@7.1.2: @@ -25403,6 +29345,10 @@ snapshots: dependencies: entities: 6.0.1 + parse5@8.0.0: + dependencies: + entities: 6.0.1 + parseurl@1.3.3: {} pascal-case@3.1.2: @@ -25436,6 +29382,8 @@ snapshots: path-to-regexp@0.1.12: {} + path-to-regexp@8.3.0: {} + path-type@4.0.0: {} pathe@1.1.2: {} @@ -25492,10 +29440,16 @@ snapshots: optionalDependencies: nice-napi: 1.0.2 + piscina@5.1.4: + optionalDependencies: + '@napi-rs/nice': 1.1.1 + pixelmatch@4.0.2: dependencies: pngjs: 3.4.0 + pkce-challenge@5.0.1: {} + pkg-dir@3.0.0: dependencies: find-up: 3.0.0 @@ -25504,6 +29458,10 @@ snapshots: dependencies: find-up: 4.1.0 + pkg-dir@8.0.0: + dependencies: + find-up-simple: 1.0.1 + pkg-types@1.3.1: dependencies: confbox: 0.1.8 @@ -25516,10 +29474,20 @@ snapshots: exsolve: 1.0.8 pathe: 2.0.3 + playwright-core@1.58.2: {} + + playwright@1.58.2: + dependencies: + playwright-core: 1.58.2 + optionalDependencies: + fsevents: 2.3.2 + pngjs@3.4.0: {} pngjs@6.0.0: {} + pngjs@7.0.0: {} + portfinder@1.0.32: dependencies: async: 2.6.4 @@ -25734,6 +29702,8 @@ snapshots: dependencies: postcss: 8.4.5 + postcss-media-query-parser@0.2.3: {} + postcss-modules-extract-imports@3.1.0(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -25802,7 +29772,7 @@ snapshots: postcss-preset-env@7.2.3(postcss@8.4.5): dependencies: autoprefixer: 10.4.20(postcss@8.4.5) - browserslist: 4.24.2 + browserslist: 4.25.1 caniuse-lite: 1.0.30001673 css-blank-pseudo: 3.0.3(postcss@8.4.5) css-has-pseudo: 3.0.4(postcss@8.4.5) @@ -25853,7 +29823,7 @@ snapshots: '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.41) '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.41) autoprefixer: 10.4.20(postcss@8.4.41) - browserslist: 4.24.2 + browserslist: 4.25.1 css-blank-pseudo: 3.0.3(postcss@8.4.41) css-has-pseudo: 3.0.4(postcss@8.4.41) css-prefers-color-scheme: 6.0.3(postcss@8.4.41) @@ -25907,6 +29877,10 @@ snapshots: dependencies: postcss: 8.4.5 + postcss-safe-parser@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-not@5.0.0(postcss@8.4.5): dependencies: balanced-match: 1.0.2 @@ -25988,6 +29962,8 @@ snapshots: proc-log@4.2.0: {} + proc-log@6.1.0: {} + process-nextick-args@2.0.1: {} process@0.11.10: {} @@ -26036,6 +30012,10 @@ snapshots: dependencies: side-channel: 1.1.0 + qs@6.15.0: + dependencies: + side-channel: 1.1.0 + quansync@0.2.11: {} querystringify@2.2.0: {} @@ -26061,6 +30041,13 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + raw-body@3.0.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + unpipe: 1.0.0 + rc9@2.1.2: dependencies: defu: 6.1.4 @@ -26090,28 +30077,28 @@ snapshots: react-is@18.2.0: {} - react-native-svg@15.15.0(react-native@0.76.9(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1): + react-native-svg@15.15.0(react-native@0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.28.5(@babel/core@7.29.0))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1): dependencies: css-select: 5.1.0 css-tree: 1.1.3 react: 18.3.1 - react-native: 0.76.9(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.28.5(@babel/core@7.29.0))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1) warn-once: 0.1.1 - react-native@0.76.9(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1): + react-native@0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.28.5(@babel/core@7.29.0))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native/assets-registry': 0.76.9 - '@react-native/codegen': 0.76.9(@babel/preset-env@7.28.5(@babel/core@7.28.5)) - '@react-native/community-cli-plugin': 0.76.9(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(encoding@0.1.13) + '@react-native/codegen': 0.76.9(@babel/preset-env@7.28.5(@babel/core@7.29.0)) + '@react-native/community-cli-plugin': 0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.28.5(@babel/core@7.29.0))(encoding@0.1.13) '@react-native/gradle-plugin': 0.76.9 '@react-native/js-polyfills': 0.76.9 '@react-native/normalize-colors': 0.76.9 - '@react-native/virtualized-lists': 0.76.9(@types/react@18.3.27)(react-native@0.76.9(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1) + '@react-native/virtualized-lists': 0.76.9(@types/react@18.3.27)(react-native@0.76.9(@babel/core@7.29.0)(@babel/preset-env@7.28.5(@babel/core@7.29.0))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 - babel-jest: 29.7.0(@babel/core@7.28.5) + babel-jest: 29.7.0(@babel/core@7.29.0) babel-plugin-syntax-hermes-parser: 0.23.1 base64-js: 1.5.1 chalk: 4.1.2 @@ -26233,6 +30220,8 @@ snapshots: reflect-metadata@0.1.14: {} + reflect-metadata@0.2.2: {} + reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.8 @@ -26433,6 +30422,11 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + restructure@3.0.2: {} retext-latin@4.0.0: @@ -26480,6 +30474,25 @@ snapshots: dependencies: glob: 7.2.3 + rolldown@1.0.0-rc.4: + dependencies: + '@oxc-project/types': 0.113.0 + '@rolldown/pluginutils': 1.0.0-rc.4 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.4 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.4 + '@rolldown/binding-darwin-x64': 1.0.0-rc.4 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.4 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.4 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.4 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.4 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.4 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.4 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.4 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.4 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.4 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.4 + rollup-plugin-copy@3.5.0: dependencies: '@types/fs-extra': 8.1.5 @@ -26549,13 +30562,14 @@ snapshots: transitivePeerDependencies: - supports-color - rollup-plugin-visualizer@6.0.5(rollup@4.59.0): + rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.4)(rollup@4.59.0): dependencies: open: 8.4.2 picomatch: 4.0.3 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: + rolldown: 1.0.0-rc.4 rollup: 4.59.0 rollup@2.79.2: @@ -26621,6 +30635,16 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 + router@2.2.0: + dependencies: + debug: 4.4.3 + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.3.0 + transitivePeerDependencies: + - supports-color + run-async@2.4.1: {} run-parallel@1.2.0: @@ -26639,6 +30663,10 @@ snapshots: dependencies: tslib: 2.8.1 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + s.color@0.0.15: {} sade@1.8.1: @@ -26721,6 +30749,22 @@ snapshots: immutable: 4.3.7 source-map-js: 1.2.1 + sass@1.97.3: + dependencies: + chokidar: 4.0.3 + immutable: 5.1.5 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.1 + + sass@1.98.0: + dependencies: + chokidar: 4.0.3 + immutable: 5.1.5 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.1 + sax@1.2.4: {} sax@1.4.3: {} @@ -26988,6 +31032,17 @@ snapshots: signal-exit@4.1.0: {} + sigstore@4.1.0: + dependencies: + '@sigstore/bundle': 4.0.0 + '@sigstore/core': 3.1.0 + '@sigstore/protobuf-specs': 0.5.0 + '@sigstore/sign': 4.1.0 + '@sigstore/tuf': 4.0.1 + '@sigstore/verify': 3.1.0 + transitivePeerDependencies: + - supports-color + simple-code-frame@1.3.0: dependencies: kolorist: 1.8.0 @@ -27000,6 +31055,12 @@ snapshots: transitivePeerDependencies: - supports-color + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + sisteransi@1.0.5: {} sitemap@7.1.2: @@ -27020,6 +31081,16 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 + slice-ansi@7.1.2: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.1.0 + + slice-ansi@8.0.0: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + smart-buffer@4.2.0: {} smob@1.5.0: {} @@ -27159,6 +31230,11 @@ snapshots: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.13 + spdx-expression-parse@4.0.0: + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.13 + spdx-expression-validate@2.0.0: dependencies: spdx-expression-parse: 3.0.1 @@ -27204,6 +31280,10 @@ snapshots: dependencies: minipass: 7.1.3 + ssri@13.0.1: + dependencies: + minipass: 7.1.3 + ssri@8.0.1: dependencies: minipass: 3.3.6 @@ -27245,6 +31325,8 @@ snapshots: std-env@3.10.0: {} + stdin-discarder@0.3.1: {} + stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 @@ -27289,6 +31371,11 @@ snapshots: get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 + string-width@8.2.0: + dependencies: + get-east-asian-width: 1.5.0 + strip-ansi: 7.2.0 + string.prototype.trim@1.2.10: dependencies: call-bind: 1.0.8 @@ -27333,6 +31420,10 @@ snapshots: dependencies: ansi-regex: 6.0.1 + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + strip-bom@3.0.0: {} strip-final-newline@2.0.0: {} @@ -27411,14 +31502,14 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@3.8.6(@babel/core@7.28.5)(less@4.2.0)(postcss@8.5.6)(sass@1.77.8)(svelte@4.2.20): + svelte-check@3.8.6(@babel/core@7.29.0)(less@4.2.0)(postcss@8.5.6)(sass@1.98.0)(stylus@0.56.0)(svelte@4.2.20): dependencies: '@jridgewell/trace-mapping': 0.3.25 chokidar: 3.6.0 picocolors: 1.1.1 sade: 1.8.1 svelte: 4.2.20 - svelte-preprocess: 5.1.4(@babel/core@7.28.5)(less@4.2.0)(postcss@8.5.6)(sass@1.77.8)(svelte@4.2.20)(typescript@5.9.3) + svelte-preprocess: 5.1.4(@babel/core@7.29.0)(less@4.2.0)(postcss@8.5.6)(sass@1.98.0)(stylus@0.56.0)(svelte@4.2.20)(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - '@babel/core' @@ -27447,7 +31538,7 @@ snapshots: dependencies: svelte: 4.2.20 - svelte-preprocess@5.1.4(@babel/core@7.28.5)(less@4.2.0)(postcss@8.5.6)(sass@1.77.8)(svelte@4.2.20)(typescript@5.9.3): + svelte-preprocess@5.1.4(@babel/core@7.29.0)(less@4.2.0)(postcss@8.5.6)(sass@1.98.0)(stylus@0.56.0)(svelte@4.2.20)(typescript@5.9.3): dependencies: '@types/pug': 2.0.6 detect-indent: 6.1.0 @@ -27456,20 +31547,21 @@ snapshots: strip-indent: 3.0.0 svelte: 4.2.20 optionalDependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 less: 4.2.0 postcss: 8.5.6 - sass: 1.77.8 + sass: 1.98.0 + stylus: 0.56.0 typescript: 5.9.3 - svelte-preprocess@6.0.3(@babel/core@7.28.5)(less@4.2.0)(postcss@8.5.6)(sass@1.77.8)(stylus@0.56.0)(svelte@5.43.14)(typescript@5.9.3): + svelte-preprocess@6.0.3(@babel/core@7.29.0)(less@4.2.0)(postcss@8.5.6)(sass@1.98.0)(stylus@0.56.0)(svelte@5.43.14)(typescript@5.9.3): dependencies: svelte: 5.43.14 optionalDependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 less: 4.2.0 postcss: 8.5.6 - sass: 1.77.8 + sass: 1.98.0 stylus: 0.56.0 typescript: 5.9.3 @@ -27741,6 +31833,12 @@ snapshots: tinyrainbow@3.0.3: {} + tldts-core@7.0.25: {} + + tldts@7.0.25: + dependencies: + tldts-core: 7.0.25 + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -27768,6 +31866,8 @@ snapshots: dependencies: eslint-visitor-keys: 3.4.3 + totalist@3.0.1: {} + tough-cookie@4.1.3: dependencies: psl: 1.9.0 @@ -27775,12 +31875,20 @@ snapshots: universalify: 0.2.0 url-parse: 1.5.10 + tough-cookie@6.0.1: + dependencies: + tldts: 7.0.25 + tr46@0.0.3: {} tr46@3.0.0: dependencies: punycode: 2.3.1 + tr46@6.0.0: + dependencies: + punycode: 2.3.1 + transformation-matrix@3.0.0: {} tree-kill@1.2.2: {} @@ -27793,6 +31901,10 @@ snapshots: dependencies: typescript: 5.9.3 + ts-api-utils@2.4.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + ts-interface-checker@0.1.13: {} ts-node@10.9.2(@swc/core@1.7.23(@swc/helpers@0.5.17))(@types/node@12.20.55)(typescript@4.6.4): @@ -27884,6 +31996,14 @@ snapshots: argparse: 2.0.1 pako: 1.0.11 + tuf-js@4.1.0: + dependencies: + '@tufjs/models': 4.1.0 + debug: 4.4.3 + make-fetch-happen: 15.0.4 + transitivePeerDependencies: + - supports-color + tunnel@0.0.6: {} type-check@0.4.0: @@ -27913,6 +32033,12 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.2 + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -27948,6 +32074,17 @@ snapshots: typed-assert@1.0.9: {} + typescript-eslint@8.57.0(eslint@8.57.1)(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.57.0(@typescript-eslint/parser@8.57.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.0(eslint@8.57.1)(typescript@5.9.3) + eslint: 8.57.1 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + typescript@4.6.4: {} typescript@5.9.3: {} @@ -27988,6 +32125,8 @@ snapshots: undici@6.23.0: {} + undici@7.22.0: {} + unenv@2.0.0-rc.24: dependencies: pathe: 2.0.3 @@ -28062,6 +32201,10 @@ snapshots: dependencies: unique-slug: 4.0.0 + unique-filename@5.0.0: + dependencies: + unique-slug: 6.0.0 + unique-slug@2.0.2: dependencies: imurmurhash: 0.1.4 @@ -28074,6 +32217,10 @@ snapshots: dependencies: imurmurhash: 0.1.4 + unique-slug@6.0.0: + dependencies: + imurmurhash: 0.1.4 + unist-util-find-after@5.0.0: dependencies: '@types/unist': 3.0.3 @@ -28228,12 +32375,6 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - update-browserslist-db@1.1.1(browserslist@4.24.2): - dependencies: - browserslist: 4.24.2 - escalade: 3.2.0 - picocolors: 1.1.1 - update-browserslist-db@1.1.3(browserslist@4.24.5): dependencies: browserslist: 4.24.5 @@ -28246,6 +32387,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.2.3(browserslist@4.28.1): + dependencies: + browserslist: 4.28.1 + escalade: 3.2.0 + picocolors: 1.1.1 + uqr@0.1.2: {} uri-js@4.4.1: @@ -28275,6 +32422,8 @@ snapshots: dependencies: builtins: 1.0.3 + validate-npm-package-name@7.0.2: {} + validator@13.11.0: {} vary@1.1.2: {} @@ -28294,7 +32443,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.10)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)): + vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.10)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)): dependencies: '@babel/core': 7.28.5 '@types/babel__core': 7.20.5 @@ -28302,14 +32451,14 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.10 solid-refresh: 0.6.3(solid-js@1.9.10) - vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vitefu: 1.0.5(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vitefu: 1.0.5(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) optionalDependencies: '@testing-library/jest-dom': 6.9.1 transitivePeerDependencies: - supports-color - vite-prerender-plugin@0.5.12(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)): + vite-prerender-plugin@0.5.12(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)): dependencies: kolorist: 1.8.0 magic-string: 0.30.21 @@ -28317,9 +32466,9 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vite@5.4.21(@types/node@24.10.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1): + vite@5.4.21(@types/node@24.10.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1): dependencies: esbuild: 0.21.5 postcss: 8.5.6 @@ -28328,29 +32477,11 @@ snapshots: '@types/node': 24.10.1 fsevents: 2.3.3 less: 4.2.0 - sass: 1.77.8 + sass: 1.98.0 stylus: 0.56.0 terser: 5.44.1 - vite@6.3.6(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0): - dependencies: - esbuild: 0.25.12 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.59.0 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 24.10.1 - fsevents: 2.3.3 - jiti: 2.6.1 - less: 4.2.0 - sass: 1.77.8 - stylus: 0.56.0 - terser: 5.44.1 - yaml: 2.8.0 - - vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0): + vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0): dependencies: esbuild: 0.25.10 fdir: 6.4.6(picomatch@4.0.3) @@ -28363,12 +32494,12 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 less: 4.2.0 - sass: 1.77.8 + sass: 1.98.0 stylus: 0.56.0 terser: 5.44.1 yaml: 2.8.0 - vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0): + vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0): dependencies: esbuild: 0.25.10 fdir: 6.5.0(picomatch@4.0.3) @@ -28381,33 +32512,69 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 less: 4.2.0 - sass: 1.77.8 + sass: 1.97.3 stylus: 0.56.0 terser: 5.44.1 yaml: 2.8.0 - vitefu@0.2.5(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0)): + vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0): + dependencies: + esbuild: 0.25.10 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.59.0 + tinyglobby: 0.2.15 optionalDependencies: - vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + '@types/node': 24.10.1 + fsevents: 2.3.3 + jiti: 2.6.1 + less: 4.2.0 + sass: 1.98.0 + stylus: 0.56.0 + terser: 5.44.1 + yaml: 2.8.0 - vitefu@1.0.5(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)): + vite@7.3.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0): + dependencies: + esbuild: 0.27.3 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.59.0 + tinyglobby: 0.2.15 optionalDependencies: - vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + '@types/node': 24.10.1 + fsevents: 2.3.3 + jiti: 2.6.1 + less: 4.2.0 + sass: 1.97.3 + stylus: 0.56.0 + terser: 5.44.1 + yaml: 2.8.0 - vitefu@1.1.1(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)): + vitefu@0.2.5(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)): optionalDependencies: - vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) - vitepress@1.6.4(@algolia/client-search@5.44.0)(@types/node@24.10.1)(@types/react@18.3.27)(axios@1.13.2)(fuse.js@7.1.0)(less@4.2.0)(postcss@8.5.6)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8)(search-insights@2.8.2)(stylus@0.56.0)(terser@5.44.1)(typescript@5.9.3): + vitefu@1.0.5(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)): + optionalDependencies: + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + + vitefu@1.1.1(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)): + optionalDependencies: + vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + + vitepress@1.6.4(@algolia/client-search@5.48.1)(@types/node@24.10.1)(@types/react@18.3.27)(axios@1.13.2)(fuse.js@7.1.0)(less@4.2.0)(postcss@8.5.6)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.98.0)(search-insights@2.8.2)(stylus@0.56.0)(terser@5.44.1)(typescript@5.9.3): dependencies: '@docsearch/css': 3.8.2 - '@docsearch/js': 3.8.2(@algolia/client-search@5.44.0)(@types/react@18.3.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.8.2) + '@docsearch/js': 3.8.2(@algolia/client-search@5.48.1)(@types/react@18.3.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.8.2) '@iconify-json/simple-icons': 1.2.59 '@shikijs/core': 2.5.0 '@shikijs/transformers': 2.5.0 '@shikijs/types': 2.5.0 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@24.10.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1))(vue@3.5.24(typescript@5.9.3)) + '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@24.10.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1))(vue@3.5.24(typescript@5.9.3)) '@vue/devtools-api': 7.7.9 '@vue/shared': 3.5.24 '@vueuse/core': 12.8.2(typescript@5.9.3) @@ -28416,7 +32583,7 @@ snapshots: mark.js: 8.11.1 minisearch: 7.2.0 shiki: 2.5.0 - vite: 5.4.21(@types/node@24.10.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1) + vite: 5.4.21(@types/node@24.10.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1) vue: 3.5.24(typescript@5.9.3) optionalDependencies: postcss: 8.5.6 @@ -28447,10 +32614,10 @@ snapshots: - typescript - universal-cookie - vitest@4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0): + vitest@4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/browser-playwright@4.1.0)(@vitest/ui@4.0.12)(jiti@2.6.1)(jsdom@27.4.0)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0): dependencies: '@vitest/expect': 4.0.12 - '@vitest/mocker': 4.0.12(vite@6.3.6(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0)) + '@vitest/mocker': 4.0.12(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) '@vitest/pretty-format': 4.0.12 '@vitest/runner': 4.0.12 '@vitest/snapshot': 4.0.12 @@ -28467,11 +32634,54 @@ snapshots: tinyexec: 0.3.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 6.3.6(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 '@types/node': 24.10.1 + '@vitest/browser-playwright': 4.1.0(playwright@1.58.2)(vite@7.3.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.97.3)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vitest@4.0.12) + '@vitest/ui': 4.0.12(vitest@4.0.12) + jsdom: 27.4.0 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vitest@4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/ui@4.0.12)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0): + dependencies: + '@vitest/expect': 4.0.12 + '@vitest/mocker': 4.0.12(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + '@vitest/pretty-format': 4.0.12 + '@vitest/runner': 4.0.12 + '@vitest/snapshot': 4.0.12 + '@vitest/spy': 4.0.12 + '@vitest/utils': 4.0.12 + debug: 4.4.3 + es-module-lexer: 1.7.0 + expect-type: 1.2.2 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 24.10.1 + '@vitest/ui': 4.0.12(vitest@4.0.12) jsdom: 20.0.3 transitivePeerDependencies: - jiti @@ -28486,6 +32696,48 @@ snapshots: - terser - tsx - yaml + optional: true + + vitest@4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(@vitest/ui@4.0.12)(jiti@2.6.1)(jsdom@27.4.0)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0): + dependencies: + '@vitest/expect': 4.0.12 + '@vitest/mocker': 4.0.12(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)) + '@vitest/pretty-format': 4.0.12 + '@vitest/runner': 4.0.12 + '@vitest/snapshot': 4.0.12 + '@vitest/spy': 4.0.12 + '@vitest/utils': 4.0.12 + debug: 4.4.3 + es-module-lexer: 1.7.0 + expect-type: 1.2.2 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.98.0)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 24.10.1 + '@vitest/ui': 4.0.12(vitest@4.0.12) + jsdom: 27.4.0 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml vlq@1.0.1: {} @@ -28517,6 +32769,10 @@ snapshots: dependencies: xml-name-validator: 4.0.0 + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + walker@1.0.8: dependencies: makeerror: 1.0.12 @@ -28528,6 +32784,11 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 + watchpack@2.5.1: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + wbuf@1.7.3: dependencies: minimalistic-assert: 1.0.1 @@ -28536,6 +32797,9 @@ snapshots: dependencies: defaults: 1.0.4 + weak-lru-cache@1.2.2: + optional: true + web-namespaces@2.0.1: {} web-streams-polyfill@3.2.1: {} @@ -28544,6 +32808,8 @@ snapshots: webidl-conversions@7.0.0: {} + webidl-conversions@8.0.1: {} + webpack-dev-middleware@5.3.4(webpack@5.76.1(@swc/core@1.7.23(@swc/helpers@0.5.17))(esbuild@0.14.22)): dependencies: colorette: 2.0.20 @@ -28615,7 +32881,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.11.1 acorn: 8.16.0 acorn-import-assertions: 1.9.0(acorn@8.16.0) - browserslist: 4.24.2 + browserslist: 4.25.1 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.1 es-module-lexer: 0.9.3 @@ -28659,11 +32925,18 @@ snapshots: whatwg-mimetype@4.0.0: {} + whatwg-mimetype@5.0.0: {} + whatwg-url@11.0.0: dependencies: tr46: 3.0.0 webidl-conversions: 7.0.0 + whatwg-url@15.1.0: + dependencies: + tr46: 6.0.0 + webidl-conversions: 8.0.1 + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -28724,6 +32997,10 @@ snapshots: dependencies: isexe: 3.1.1 + which@6.0.1: + dependencies: + isexe: 4.0.0 + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 @@ -28741,6 +33018,12 @@ snapshots: word-wrap@1.2.5: {} + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -28782,6 +33065,8 @@ snapshots: ws@8.18.0: {} + ws@8.19.0: {} + xhr@2.6.0: dependencies: global: 4.4.0 @@ -28795,6 +33080,8 @@ snapshots: xml-name-validator@4.0.0: {} + xml-name-validator@5.0.0: {} + xml-parse-from-string@1.0.1: {} xml-reader@2.4.3: @@ -28852,6 +33139,8 @@ snapshots: yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} + yargs@16.2.0: dependencies: cliui: 7.0.4 @@ -28872,6 +33161,15 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yargs@18.0.0: + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 7.2.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 + yerror@8.0.0: {} yn@3.1.1: {} @@ -28884,6 +33182,8 @@ snapshots: dependencies: yoctocolors: 2.1.1 + yoctocolors-cjs@2.1.3: {} + yoctocolors@2.1.1: {} youch-core@0.3.3: @@ -28911,6 +33211,10 @@ snapshots: dependencies: zod: 3.25.76 + zod-to-json-schema@3.25.1(zod@4.3.6): + dependencies: + zod: 4.3.6 + zod-to-ts@1.2.0(typescript@5.9.3)(zod@3.25.76): dependencies: typescript: 5.9.3 @@ -28918,6 +33222,8 @@ snapshots: zod@3.25.76: {} + zod@4.3.6: {} + zone.js@0.11.8: dependencies: tslib: 2.8.1 diff --git a/tools/build-icons/building/generateExportsFile.ts b/tools/build-icons/building/generateExportsFile.ts index 08dc1739d..76cdfc3c9 100644 --- a/tools/build-icons/building/generateExportsFile.ts +++ b/tools/build-icons/building/generateExportsFile.ts @@ -8,6 +8,7 @@ export default async function generateExportFile( iconNodes: Record, exportModuleNameCasing: 'camel' | 'pascal', iconFileExtension = '', + useDefaultExports = true, ) { const fileName = path.basename(inputEntry); @@ -25,7 +26,9 @@ export default async function generateExportFile( } else if (exportModuleNameCasing === 'pascal') { componentName = toPascalCase(iconName); } - const importString = `export { default as ${componentName} } from './${iconName}${iconFileExtension}';\n`; + const importString = `export ${ + useDefaultExports ? `{ default as ${componentName} }` : `*` + } from './${iconName}${iconFileExtension}';\n`; return appendFile(importString, fileName, outputDirectory); }); diff --git a/tools/build-icons/building/generateIconFiles.ts b/tools/build-icons/building/generateIconFiles.ts index b401fa2bd..f020f4ef3 100644 --- a/tools/build-icons/building/generateIconFiles.ts +++ b/tools/build-icons/building/generateIconFiles.ts @@ -84,7 +84,7 @@ function generateIconFiles({ singleQuote: true, trailingComma: 'all', printWidth: 100, - parser: 'babel', + parser: iconFileExtension.endsWith('.ts') ? 'babel-ts' : 'babel', }) : elementTemplate; diff --git a/tools/build-icons/cli.ts b/tools/build-icons/cli.ts index 973703e7b..b2b4c6e9d 100755 --- a/tools/build-icons/cli.ts +++ b/tools/build-icons/cli.ts @@ -31,6 +31,7 @@ interface CliArguments { separateIconFileExportExtension?: string; aliasesFileExtension?: string; aliasImportFileExtension?: string; + useDefaultExports?: boolean; pretty?: boolean; output: string | undefined; } @@ -62,6 +63,7 @@ const { separateIconFileExportExtension = undefined, aliasesFileExtension = '.js', aliasImportFileExtension = '', + useDefaultExports = true, pretty = true, } = cliArguments; @@ -125,6 +127,7 @@ async function buildIcons() { icons, exportModuleNameCasing, importImportFileExtension, + useDefaultExports, ); } diff --git a/tools/build-icons/types.ts b/tools/build-icons/types.ts index a12b3ca75..c4a548cb1 100644 --- a/tools/build-icons/types.ts +++ b/tools/build-icons/types.ts @@ -19,7 +19,6 @@ export interface ExportTemplate { getSvg: () => Promise; deprecated: boolean; deprecationReason: string; - aliases?: (string | AliasDeprecation)[]; iconData: IconData; } From 16fe7708e278481ee2fc2e18292c80173d695f23 Mon Sep 17 00:00:00 2001 From: Eric Fennis Date: Fri, 20 Mar 2026 15:36:15 +0100 Subject: [PATCH 023/234] Update lockfile --- pnpm-lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d00c42650..d829b8ae0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20164,7 +20164,7 @@ snapshots: '@napi-rs/wasm-runtime@1.1.1': dependencies: - '@emnapi/core': 1.8.1 + '@emnapi/core': 1.9.0 '@emnapi/runtime': 1.8.1 '@tybys/wasm-util': 0.10.1 optional: true From 56258a9281f9213232db3c1e65eba88cc80dba59 Mon Sep 17 00:00:00 2001 From: Eric Fennis Date: Fri, 20 Mar 2026 15:36:33 +0100 Subject: [PATCH 024/234] Update release yml file --- .github/workflows/release.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0f1590d01..8c177666f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,15 +54,15 @@ jobs: 'lucide-react', 'lucide-react-native', # 'lucide-vue-next', - 'lucide-angular', + # 'lucide-angular', 'lucide-preact', 'lucide-solid', 'lucide-svelte', - '@lucide/angular', + # '@lucide/angular', // <- Need to be release with custom tag '@lucide/astro', '@lucide/svelte', '@lucide/icons', - '@lucide/vue', + # '@lucide/vue', // <- Need to be release with custom tag ] steps: - uses: actions/checkout@v6 From d51c26ea9aea73e0de51e94943b1f23d2a223005 Mon Sep 17 00:00:00 2001 From: Bu Yuan <541908090@qq.com> Date: Fri, 20 Mar 2026 22:43:27 +0800 Subject: [PATCH 025/234] fix(lucide-fonts): correct icon mappings in index.html and unicode.html (#4160) Fixes lucide-icons/lucide#4154 The font mapping files were incorrectly mapping icon names to unicode values. For example, message-circle-check was incorrectly pointing to database-search. This was introduced in version 0.576 by commit efa1f252 which moved the endCodePoint calculation inside the Promise.all callback, causing race conditions where multiple icons could receive the same codepoint. The fix moves endCodePoint calculation outside the Promise.all block so it's calculated once before processing all icons, ensuring each icon gets a unique codepoint. Co-authored-by: Clawdbot Co-authored-by: Eric Fennis --- tools/build-font/src/allocateCodepoints.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/build-font/src/allocateCodepoints.ts b/tools/build-font/src/allocateCodepoints.ts index 3f2480a51..1eb9a75e7 100644 --- a/tools/build-font/src/allocateCodepoints.ts +++ b/tools/build-font/src/allocateCodepoints.ts @@ -26,10 +26,10 @@ export async function allocateCodePoints({ }: AllocateCodePointsOptions): Promise { const baseCodePoints = await getLatestCodePoints(); + const endCodePoint = Math.max(...Object.values(baseCodePoints)); + await Promise.all( iconsWithAliases.map(async ([iconName, aliases]) => { - const endCodePoint = Math.max(...Object.values(baseCodePoints)); - if (!baseCodePoints[iconName]) { console.log('Code point not found creating new one for', iconName); baseCodePoints[iconName] = endCodePoint + 1; From f9406068fb99993a4951a3f840c5e27e7c862129 Mon Sep 17 00:00:00 2001 From: Lukas Kalbertodt Date: Fri, 20 Mar 2026 16:28:00 +0100 Subject: [PATCH 026/234] Fix formatting of `` element in two icons that were inconsistent (#4166) These two icons were the only ones that didn't start with exactly So I brought them in line. --- icons/circle-pile.svg | 15 ++++++++++++--- icons/gamepad-directional.svg | 15 ++++++++++++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/icons/circle-pile.svg b/icons/circle-pile.svg index a9e3ddf88..f070df442 100644 --- a/icons/circle-pile.svg +++ b/icons/circle-pile.svg @@ -1,9 +1,18 @@ - + - \ No newline at end of file + diff --git a/icons/gamepad-directional.svg b/icons/gamepad-directional.svg index f5ca8f013..f7626066b 100644 --- a/icons/gamepad-directional.svg +++ b/icons/gamepad-directional.svg @@ -1,5 +1,14 @@ - + - \ No newline at end of file + From e715245d62667c800e7f54c94b1b023692e900a3 Mon Sep 17 00:00:00 2001 From: Eric Fennis Date: Fri, 20 Mar 2026 16:30:53 +0100 Subject: [PATCH 027/234] Update license --- LICENSE | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/LICENSE b/LICENSE index 322e0d86e..718bb3f0e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ ISC License -Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2026 as part of Feather (MIT). All other copyright (c) for Lucide are held by Lucide Contributors 2026. +Copyright (c) 2026 Lucide Icons and Contributors Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above @@ -16,9 +16,13 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --- -The MIT License (MIT) (for portions derived from Feather) +The following Lucide icons are derived from the Feather project: -Copyright (c) 2013-2026 Cole Bemis +airplay, alert-circle, alert-octagon, alert-triangle, aperture, arrow-down-circle, arrow-down-left, arrow-down-right, arrow-down, arrow-left-circle, arrow-left, arrow-right-circle, arrow-right, arrow-up-circle, arrow-up-left, arrow-up-right, arrow-up, at-sign, calendar, cast, check, chevron-down, chevron-left, chevron-right, chevron-up, chevrons-down, chevrons-left, chevrons-right, chevrons-up, circle, clipboard, clock, code, columns, command, compass, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, crosshair, database, divide-circle, divide-square, dollar-sign, download, external-link, feather, frown, hash, headphones, help-circle, info, italic, key, layout, life-buoy, link-2, link, loader, lock, log-in, log-out, maximize, meh, minimize, minimize-2, minus-circle, minus-square, minus, monitor, moon, more-horizontal, more-vertical, move, music, navigation-2, navigation, octagon, pause-circle, percent, plus-circle, plus-square, plus, power, radio, rss, search, server, share, shopping-bag, sidebar, smartphone, smile, square, table-2, tablet, target, terminal, trash-2, trash, triangle, tv, type, upload, x-circle, x-octagon, x-square, x, zoom-in, zoom-out + +The MIT License (MIT) (for the icons listed above) + +Copyright (c) 2013-present Cole Bemis Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 484f2c9cd377dbeb536f63d4b183ecfd26947014 Mon Sep 17 00:00:00 2001 From: Eric Fennis Date: Fri, 20 Mar 2026 17:04:28 +0100 Subject: [PATCH 028/234] docs(version-1): Version 1 website (#4142) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update images * Adjust color * update accessebility * Add matrix hero * Add typescript documentation * Add basics section to vue pages * Add svelte docs * Fix dynamic sidebar * Add animation? * Some adjustments * Adjust animation * Updates docs * Add scaledown animation * Add docs for vue types * Fix layout accessibility page * fix framework select * adjust easing home animation * Write docs for Vue * Adjust animation home * Adjust home hero animation * Finish svelte docs * Add solid pages * remove spiral animation component * Add group icons * Added solid docs * update preact docs * Adjust examples preact docs * Add snackplayer * Get new editor * Save this * Add examples * Adjust styling * setup custom sandpack * Add script * Format files * Make sandpack plugin work * migrate react docs * Fix svelte and solid examples * Migrate to solid packages * Add darkmode package logos * Fix bug in selector * migrate vue examples * migrate advanced vue items * migrate preact and svelte examples * Add astro docs * adding more docs on guide for lucide library * Fix home animation * Cleanup * Added resources page, with more details and content * Add hero badge for Version 1 * Fix vercel json * Update missing paths * Fix build? * Replace lucide-vue-next * Fix build * Add some docs * update markdown * Setup angular docs * Add basic angular docs * Adjust code examples * Update title and descriptions * Update accessibility link * Update title and description * Add og image * Fix alignment * Add migration guides * Adjust version 1 markdown file * Add migration guide to the main list * Minor fixes * Update docs * Apply feedback * Select icons * Add pointer events none * Fix package links homepage * Format code * Fix types * Fix focus * Fix build * Fix focus * Apply feedback * Adjust imports * Adjust imports * Fix search * Apply feedback * Fix import in font docs * Small fixes * docs(guide): added easter egg icon. stay tuned, guys ๐Ÿ˜‰ * Add llm txt plugin * Adjust logo top * docs(version-1): upgraded @lucide/angular guide for v1 website (#4144) * docs(guide/angular): rewrite some angular documentation * docs(guide/angular): extens angular guide with combining icons & icon provider guides * docs(guide/angular): fix angular sandbox, still needs @lucide/angular release tho * docs(guide/angular): rework the getting started page a bit more, refactor some more prop=>input occurences * docs(guide/angular): context provider => provideLucideConfig * Update docs/guide/angular/migration.md Co-authored-by: Eric Fennis * Update docs/guide/angular/advanced/combining-icons.md Co-authored-by: Eric Fennis * Apply suggestions from code review Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * docs(guide/angular): rework a11y for better flow & pacing * docs(guide/angular): salvage original phrase, it has better flow * docs(guide/angular): some more a11y nitpicking * docs(guide/angular): reduce llm fatigue * docs(guides/angular): fix app component selector * docs(guides/angular): fix angular sandpacks * Add sandpack angular to improve tree-shakable stack * Update docs/guide/angular/getting-started.md * docs(guides/angular): fix user import in combinding icons guide * docs(guides/angular): fix nested SVG phrasing * Update docs/guide/angular/advanced/with-lucide-lab.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update docs/guide/angular/advanced/filled-icons.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * docs(guides/angular): fix createLucideIcon guide * docs(guides/angular): upgrade all relevant angular sandpack demos --------- Co-authored-by: Eric Fennis Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * fix(docs): add autogenerated OG images to gitignore * fix(docs): unify the case of "Lucide" & "Lucide Lab" over all docs and readmes * Fix build * Add next tag to all installation guides * Add top bar notification * Minor fixes * Update text * Add todos * Update og image * Adjust install command * Color top bar * fix(docs): ignore all OG images, expect general.png * fix(docs): fix the package list, hide @lucide/icons, downgrade angular logo, link to v0 guide, fix package title alignment * Update docs/.vitepress/theme/components/base/LayoutTop.vue Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update docs/guide/react/advanced/dynamic-icon-component.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update CONTRIBUTING.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update docs/.vitepress/sidebar/resources.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix code example * fix(docs): version 1 => Version 1 * feat(docs): add angular to new features in v1 * Fix next line issue * feat(docs): fix typo (code example_s_) * Fix deadlink * feat(docs): fix some more typos and irky grammar * feat(docs): fix lowercase lucide in sidebar ๐Ÿ˜… * Update docs/guide/version-1.md Co-authored-by: Karsa --------- Co-authored-by: Karsa Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .github/labeler.yml | 20 +- .gitignore | 2 + .vscode/settings.json | 2 +- BRAND_LOGOS_STATEMENT.md | 4 +- CODE_OF_CONDUCT.md | 124 ++-- CONTRIBUTING.md | 21 +- README.md | 2 +- docs/.vitepress/config.ts | 95 ++- docs/.vitepress/createOGImage.ts | 79 ++ docs/.vitepress/data/packageData.json | 26 +- .../data/packageData.thirdParty.json | 2 +- docs/.vitepress/lib/SvgPreview/index.tsx | 15 +- docs/.vitepress/lib/guideOGTemplate.svg | 35 + docs/.vitepress/lib/iconOGTemplate.svg | 47 ++ docs/.vitepress/markdown/sandpack.ts | 138 ++++ docs/.vitepress/markdown/snackPlayer.ts | 99 +++ docs/.vitepress/sidebar.ts | 143 ---- docs/.vitepress/sidebar/angular.ts | 107 +++ docs/.vitepress/sidebar/astro.ts | 82 +++ docs/.vitepress/sidebar/index.ts | 49 ++ docs/.vitepress/sidebar/lucide.ts | 87 +++ docs/.vitepress/sidebar/preact.ts | 102 +++ docs/.vitepress/sidebar/react-native.ts | 87 +++ docs/.vitepress/sidebar/react.ts | 113 +++ docs/.vitepress/sidebar/resources.ts | 52 ++ docs/.vitepress/sidebar/solid.ts | 103 +++ docs/.vitepress/sidebar/static.ts | 88 +++ docs/.vitepress/sidebar/svelte.ts | 92 +++ docs/.vitepress/sidebar/vue.ts | 98 +++ .../theme/components/base/ButtonMenu.vue | 71 +- .../theme/components/base/FakeInput.vue | 2 +- .../theme/components/base/Input.vue | 4 +- .../theme/components/base/InputSearch.vue | 2 +- .../theme/components/base/LayoutTop.vue | 67 ++ .../theme/components/base/LucideIcon.vue | 12 +- .../theme/components/base/OverviewLink.vue | 61 ++ .../components/base/OverviewLinkGrid.vue | 31 + .../theme/components/base/ResetButton.vue | 2 +- .../theme/components/base/Select.vue | 239 ++++++ .../theme/components/editors/Sandpack.vue | 70 ++ .../components/editors/SandpackAngular.vue | 92 +++ .../components/editors/SandpackAstro.vue | 22 + .../components/editors/SandpackPreact.vue | 19 + .../components/editors/SandpackSolid.vue | 43 ++ .../components/editors/SandpackSvelte.vue | 59 ++ .../theme/components/editors/SandpackVue.vue | 23 + .../theme/components/editors/SnackPlayer.vue | 53 ++ .../theme/components/editors/preact/files.ts | 23 + .../components/editors/preact/index.html | 13 + .../theme/components/editors/preact/index.js | 7 + .../components/editors/preact/package.json | 17 + .../components/editors/preact}/styles.css | 2 +- .../components/guide/FrameworkSelect.vue | 119 +++ .../theme/components/home/HomeHeroAfter.vue | 51 ++ .../theme/components/home/HomeHeroBefore.vue | 42 -- .../home/HomeHeroIconsAnimation.vue | 678 ++++++++++++++++++ .../components/home/HomeHeroIconsCard.data.ts | 89 ++- .../components/home/HomeHeroIconsCard.vue | 163 +---- ...ore.data.ts => HomeHeroInfoBefore.data.ts} | 0 .../components/home/HomeHeroInfoBefore.vue | 85 +++ .../home/HomePackagesSection.data.ts | 9 + .../components/icons/CarbonAdOverlay.vue | 2 +- .../theme/components/icons/IconDetailName.vue | 2 +- .../components/icons/IconDetailOverlay.vue | 87 ++- .../theme/components/icons/IconInfo.vue | 85 ++- .../theme/components/icons/IconItem.vue | 94 ++- .../theme/components/icons/IconPreview.vue | 57 +- .../components/icons/IconPreviewSmall.vue | 32 +- .../theme/components/icons/IconShowcase.vue | 7 +- .../theme/components/icons/IconsOverview.vue | 1 + .../theme/components/icons/NoResults.vue | 2 +- .../theme/components/overrides/Hero.vue | 379 ++++++++++ .../theme/components/overrides/HeroMatrix.vue | 248 +++++++ .../theme/components/overrides/VPFooter.vue | 90 ++- .../components/overrides/VPIconAlignLeft.vue | 6 +- .../components/packages/PackageList.data.ts | 4 +- docs/.vitepress/theme/index.ts | 13 +- docs/.vitepress/theme/sandpack-default.css | 55 ++ docs/.vitepress/theme/style.css | 89 +-- docs/.vitepress/types.d.ts | 27 +- docs/brand-logo-statement.md | 7 + docs/code-of-conduct.md | 4 +- docs/community.md | 49 ++ .../affinity-designer-guide.md | 4 +- .../design => contribute}/figma-guide.md | 2 +- .../icon-design-guide.md | 49 +- .../illustrator-guide.md | 2 +- docs/{contributing.md => contribute/index.md} | 5 +- .../design => contribute}/inkscape-guide.md | 16 +- docs/guide/{advanced => }/accessibility.md | 37 +- docs/guide/advanced/aliased-names.md | 103 --- .../examples/filled-icon-example/App.js | 23 - .../examples/filled-icon-example/files.ts | 20 - .../examples/filled-icon-example/icon.css | 14 - .../App.js | 30 - .../files.ts | 20 - .../icon.css | 16 - .../global-styling-css-example/App.js | 30 - .../global-styling-css-example/files.ts | 20 - .../global-styling-css-example/icon.css | 14 - docs/guide/advanced/filled-icons.md | 31 - docs/guide/advanced/global-styling.md | 55 -- docs/guide/angular/advanced/accessibility.md | 46 ++ .../guide/angular/advanced/combining-icons.md | 119 +++ docs/guide/angular/advanced/filled-icons.md | 65 ++ docs/guide/angular/advanced/global-styling.md | 184 +++++ docs/guide/angular/advanced/icon-provider.md | 139 ++++ docs/guide/angular/advanced/typescript.md | 51 ++ .../guide/angular/advanced/with-lucide-lab.md | 122 ++++ docs/guide/angular/basics/color.md | 64 ++ docs/guide/angular/basics/sizing.md | 116 +++ docs/guide/angular/basics/stroke-width.md | 72 ++ docs/guide/angular/getting-started.md | 103 +++ docs/guide/angular/index.md | 45 ++ docs/guide/angular/migration.md | 214 ++++++ docs/guide/astro/advanced/accessibility.md | 52 ++ docs/guide/astro/advanced/global-styling.md | 44 ++ docs/guide/astro/advanced/typescript.md | 126 ++++ docs/guide/astro/advanced/with-lucide-lab.md | 25 + docs/guide/astro/basics/color.md | 39 + docs/guide/astro/basics/sizing.md | 89 +++ docs/guide/{ => astro}/basics/stroke-width.md | 54 +- docs/guide/astro/getting-started.md | 81 +++ docs/guide/astro/index.md | 45 ++ docs/guide/astro/migration.md | 20 + .../absolute-stroke-width-icon/App.js | 14 - .../absolute-stroke-width-icon/files.ts | 15 - .../basics/examples/button-example/App.js | 5 - .../basics/examples/button-example/Button.jsx | 12 - .../basics/examples/button-example/files.ts | 21 - docs/guide/basics/examples/color-icon/App.js | 11 - .../guide/basics/examples/color-icon/files.ts | 15 - .../examples/size-icon-css-example/App.js | 12 - .../examples/size-icon-css-example/files.ts | 21 - .../examples/size-icon-css-example/icon.css | 5 - .../basics/examples/size-icon-example/App.js | 11 - .../examples/size-icon-example/files.ts | 15 - .../examples/size-icon-font-example/App.js | 13 - .../examples/size-icon-font-example/files.ts | 21 - .../examples/size-icon-font-example/icon.css | 15 - .../size-icon-tailwind-example/App.js | 11 - .../size-icon-tailwind-example/files.ts | 15 - .../basics/examples/stroke-width-icon/App.js | 11 - .../examples/stroke-width-icon/files.ts | 15 - docs/guide/basics/sizing.md | 87 --- docs/guide/comparison.md | 1 + docs/guide/how-to-use-icons.md | 1 - docs/guide/images/vscode-hover.png | Bin 0 -> 35383 bytes docs/guide/index.md | 5 +- docs/guide/installation.md | 113 ++- docs/guide/lucide/advanced/accessibility.md | 45 ++ .../advanced/content-template-element.md | 57 ++ docs/guide/lucide/advanced/filled-icons.md | 76 ++ docs/guide/lucide/advanced/global-styling.md | 139 ++++ docs/guide/lucide/advanced/shadow-dom.md | 87 +++ docs/guide/lucide/advanced/with-lucide-lab.md | 47 ++ docs/guide/lucide/basics/color.md | 81 +++ docs/guide/lucide/basics/sizing.md | 164 +++++ docs/guide/lucide/basics/stroke-width.md | 87 +++ docs/guide/lucide/getting-started.md | 128 ++++ docs/guide/lucide/index.md | 55 ++ docs/guide/lucide/migration.md | 20 + docs/guide/packages/icons.md | 2 +- docs/guide/packages/lucide-angular.md | 6 +- docs/guide/packages/lucide-astro.md | 6 +- docs/guide/packages/lucide-preact.md | 8 +- docs/guide/packages/lucide-react-native.md | 6 +- docs/guide/packages/lucide-react.md | 127 ---- docs/guide/packages/lucide-solid.md | 6 +- docs/guide/packages/lucide-static.md | 2 +- docs/guide/packages/lucide-svelte.md | 6 +- docs/guide/packages/lucide-vue.md | 8 +- docs/guide/packages/lucide.md | 226 ------ docs/guide/preact/advanced/accessibility.md | 52 ++ docs/guide/preact/advanced/aliased-names.md | 59 ++ docs/guide/preact/advanced/combining-icons.md | 117 +++ docs/guide/preact/advanced/filled-icons.md | 63 ++ docs/guide/preact/advanced/global-styling.md | 162 +++++ docs/guide/preact/advanced/typescript.md | 97 +++ docs/guide/preact/advanced/with-lucide-lab.md | 23 + docs/guide/preact/basics/color.md | 72 ++ docs/guide/preact/basics/sizing.md | 130 ++++ docs/guide/preact/basics/stroke-width.md | 69 ++ docs/guide/preact/getting-started.md | 81 +++ docs/guide/preact/index.md | 53 ++ docs/guide/preact/migration.md | 20 + .../react-native/advanced/aliased-names.md | 59 ++ .../react-native/advanced/combining-icons.md | 136 ++++ .../react-native/advanced/filled-icons.md | 60 ++ .../react-native/advanced/global-styling.md | 28 + .../guide/react-native/advanced/typescript.md | 96 +++ .../react-native/advanced/with-lucide-lab.md | 23 + docs/guide/react-native/basics/color.md | 31 + docs/guide/react-native/basics/sizing.md | 60 ++ .../guide/react-native/basics/stroke-width.md | 80 +++ docs/guide/react-native/getting-started.md | 83 +++ docs/guide/react-native/index.md | 71 ++ docs/guide/react-native/migration.md | 20 + docs/guide/react/advanced/accessibility.md | 51 ++ docs/guide/react/advanced/aliased-names.md | 59 ++ docs/guide/react/advanced/combining-icons.md | 112 +++ .../react/advanced/dynamic-icon-component.md | 31 + docs/guide/react/advanced/filled-icons.md | 62 ++ docs/guide/react/advanced/global-styling.md | 161 +++++ docs/guide/react/advanced/typescript.md | 97 +++ docs/guide/react/advanced/with-lucide-lab.md | 23 + docs/guide/react/basics/color.md | 69 ++ docs/guide/react/basics/sizing.md | 124 ++++ docs/guide/react/basics/stroke-width.md | 68 ++ docs/guide/react/getting-started.md | 79 ++ docs/guide/react/index.md | 52 ++ docs/guide/react/migration-from-feather.md | 58 ++ docs/guide/react/migration.md | 20 + docs/guide/solid/advanced/accessibility.md | 51 ++ docs/guide/solid/advanced/aliased-names.md | 29 + docs/guide/solid/advanced/combining-icons.md | 116 +++ docs/guide/solid/advanced/filled-icons.md | 64 ++ docs/guide/solid/advanced/global-styling.md | 157 ++++ docs/guide/solid/advanced/typescript.md | 97 +++ docs/guide/solid/advanced/with-lucide-lab.md | 23 + docs/guide/solid/basics/color.md | 66 ++ docs/guide/solid/basics/sizing.md | 125 ++++ docs/guide/solid/basics/stroke-width.md | 67 ++ docs/guide/solid/getting-started.md | 82 +++ docs/guide/solid/index.md | 53 ++ docs/guide/solid/migration.md | 20 + docs/guide/static/font/color.md | 23 + docs/guide/static/font/index.md | 70 ++ docs/guide/static/font/sizing.md | 19 + docs/guide/static/getting-started.md | 50 ++ docs/guide/static/index.md | 66 ++ docs/guide/static/js-modules/node.md | 57 ++ docs/guide/static/js-modules/web.md | 34 + docs/guide/static/link-as-image.md | 89 +++ docs/guide/static/migration.md | 20 + docs/guide/static/svg-sprite.md | 108 +++ docs/guide/svelte/advanced/accessibility.md | 52 ++ docs/guide/svelte/advanced/combining-icons.md | 103 +++ docs/guide/svelte/advanced/filled-icons.md | 63 ++ docs/guide/svelte/advanced/global-styling.md | 146 ++++ docs/guide/svelte/advanced/typescript.md | 169 +++++ docs/guide/svelte/advanced/with-lucide-lab.md | 24 + docs/guide/{ => svelte}/basics/color.md | 61 +- docs/guide/svelte/basics/sizing.md | 118 +++ docs/guide/svelte/basics/stroke-width.md | 56 ++ docs/guide/svelte/getting-started.md | 80 +++ docs/guide/svelte/index.md | 45 ++ docs/guide/svelte/migration.md | 20 + docs/guide/version-1.md | 188 +++++ docs/guide/vscode.md | 36 + docs/guide/vue/advanced/accessibility.md | 53 ++ docs/guide/vue/advanced/aliased-names.md | 59 ++ docs/guide/vue/advanced/combining-icons.md | 110 +++ docs/guide/vue/advanced/filled-icons.md | 61 ++ docs/guide/vue/advanced/global-styling.md | 155 ++++ docs/guide/vue/advanced/typescript.md | 104 +++ docs/guide/vue/advanced/with-lucide-lab.md | 25 + docs/guide/vue/basics/color.md | 54 ++ docs/guide/vue/basics/sizing.md | 113 +++ docs/guide/vue/basics/stroke-width.md | 60 ++ docs/guide/vue/getting-started.md | 82 +++ docs/guide/vue/index.md | 45 ++ docs/guide/vue/migration.md | 30 + docs/icons/[name].md | 22 +- docs/images/a11y/alttext-buttons.svg | 40 +- docs/images/a11y/alttext-iconbuttons.svg | 31 +- docs/images/a11y/alttext-standalone.svg | 57 +- docs/images/a11y/consistency.svg | 31 +- docs/images/a11y/contrast.svg | 21 +- docs/images/a11y/interactivity.svg | 32 +- docs/images/a11y/meaningfulness.svg | 135 ++-- docs/images/a11y/target-size.svg | 35 +- docs/images/a11y/use-of-color.svg | 249 +++++-- docs/images/a11y/visible-labels.svg | 38 +- docs/images/package-logos/lucide-angular.svg | 36 + docs/images/package-logos/lucide-astro.svg | 47 ++ docs/images/package-logos/lucide-preact.svg | 24 + .../package-logos/lucide-react-native.svg | 38 + docs/images/package-logos/lucide-react.svg | 25 + docs/images/package-logos/lucide-solid.svg | 54 ++ docs/images/package-logos/lucide-static.svg | 27 + docs/images/package-logos/lucide-svelte.svg | 22 + docs/images/package-logos/lucide-vue.svg | 20 + docs/images/package-logos/lucide.svg | 21 + docs/images/version-1-docs-improvements.png | Bin 0 -> 348160 bytes docs/images/version-1.svg | 48 ++ docs/nitro.config.ts | 1 + docs/package.json | 14 +- docs/public/framework-logos/angular-old.svg | 5 + docs/public/og.png | Bin 160927 -> 189727 bytes docs/public/og/general.png | Bin 0 -> 189701 bytes docs/vercel.json | 69 +- packages/astro/README.md | 4 +- packages/lucide-angular/README.md | 4 +- packages/lucide-preact/README.md | 4 +- packages/lucide-react-native/README.md | 4 +- packages/lucide-react/README.md | 4 +- packages/lucide-solid/README.md | 4 +- packages/lucide-solid/src/types.ts | 6 +- packages/lucide-static/README.md | 4 +- packages/lucide-svelte/README.md | 4 +- packages/lucide-vue-next/README.md | 4 +- packages/lucide-vue-next/src/Icon.ts | 4 +- packages/lucide/README.md | 4 +- packages/svelte/README.md | 4 +- packages/svelte/src/Icon.svelte | 2 +- packages/svelte/src/types.ts | 21 +- packages/vue/README.md | 2 +- packages/vue/src/types.ts | 2 +- pnpm-lock.yaml | 445 +++++++++++- tools/build-icons/README.md | 2 +- tools/build-icons/package.json | 2 +- tools/rollup-plugins/README.md | 2 +- tools/rollup-plugins/package.json | 2 +- 314 files changed, 15456 insertions(+), 2313 deletions(-) create mode 100644 docs/.vitepress/createOGImage.ts create mode 100644 docs/.vitepress/lib/guideOGTemplate.svg create mode 100644 docs/.vitepress/lib/iconOGTemplate.svg create mode 100644 docs/.vitepress/markdown/sandpack.ts create mode 100644 docs/.vitepress/markdown/snackPlayer.ts delete mode 100644 docs/.vitepress/sidebar.ts create mode 100644 docs/.vitepress/sidebar/angular.ts create mode 100644 docs/.vitepress/sidebar/astro.ts create mode 100644 docs/.vitepress/sidebar/index.ts create mode 100644 docs/.vitepress/sidebar/lucide.ts create mode 100644 docs/.vitepress/sidebar/preact.ts create mode 100644 docs/.vitepress/sidebar/react-native.ts create mode 100644 docs/.vitepress/sidebar/react.ts create mode 100644 docs/.vitepress/sidebar/resources.ts create mode 100644 docs/.vitepress/sidebar/solid.ts create mode 100644 docs/.vitepress/sidebar/static.ts create mode 100644 docs/.vitepress/sidebar/svelte.ts create mode 100644 docs/.vitepress/sidebar/vue.ts create mode 100644 docs/.vitepress/theme/components/base/LayoutTop.vue create mode 100644 docs/.vitepress/theme/components/base/OverviewLink.vue create mode 100644 docs/.vitepress/theme/components/base/OverviewLinkGrid.vue create mode 100644 docs/.vitepress/theme/components/base/Select.vue create mode 100644 docs/.vitepress/theme/components/editors/Sandpack.vue create mode 100644 docs/.vitepress/theme/components/editors/SandpackAngular.vue create mode 100644 docs/.vitepress/theme/components/editors/SandpackAstro.vue create mode 100644 docs/.vitepress/theme/components/editors/SandpackPreact.vue create mode 100644 docs/.vitepress/theme/components/editors/SandpackSolid.vue create mode 100644 docs/.vitepress/theme/components/editors/SandpackSvelte.vue create mode 100644 docs/.vitepress/theme/components/editors/SandpackVue.vue create mode 100644 docs/.vitepress/theme/components/editors/SnackPlayer.vue create mode 100644 docs/.vitepress/theme/components/editors/preact/files.ts create mode 100644 docs/.vitepress/theme/components/editors/preact/index.html create mode 100644 docs/.vitepress/theme/components/editors/preact/index.js create mode 100644 docs/.vitepress/theme/components/editors/preact/package.json rename docs/{guide/basics/examples => .vitepress/theme/components/editors/preact}/styles.css (97%) create mode 100644 docs/.vitepress/theme/components/guide/FrameworkSelect.vue create mode 100644 docs/.vitepress/theme/components/home/HomeHeroAfter.vue delete mode 100644 docs/.vitepress/theme/components/home/HomeHeroBefore.vue create mode 100644 docs/.vitepress/theme/components/home/HomeHeroIconsAnimation.vue rename docs/.vitepress/theme/components/home/{HomeHeroBefore.data.ts => HomeHeroInfoBefore.data.ts} (100%) create mode 100644 docs/.vitepress/theme/components/home/HomeHeroInfoBefore.vue create mode 100644 docs/.vitepress/theme/components/overrides/Hero.vue create mode 100644 docs/.vitepress/theme/components/overrides/HeroMatrix.vue create mode 100644 docs/.vitepress/theme/sandpack-default.css create mode 100644 docs/brand-logo-statement.md create mode 100644 docs/community.md rename docs/{guide/design => contribute}/affinity-designer-guide.md (91%) rename docs/{guide/design => contribute}/figma-guide.md (96%) rename docs/{guide/design => contribute}/icon-design-guide.md (74%) rename docs/{guide/design => contribute}/illustrator-guide.md (92%) rename docs/{contributing.md => contribute/index.md} (52%) rename docs/{guide/design => contribute}/inkscape-guide.md (69%) rename docs/guide/{advanced => }/accessibility.md (83%) delete mode 100644 docs/guide/advanced/aliased-names.md delete mode 100644 docs/guide/advanced/examples/filled-icon-example/App.js delete mode 100644 docs/guide/advanced/examples/filled-icon-example/files.ts delete mode 100644 docs/guide/advanced/examples/filled-icon-example/icon.css delete mode 100644 docs/guide/advanced/examples/global-styling-absolute-strokewidth-example/App.js delete mode 100644 docs/guide/advanced/examples/global-styling-absolute-strokewidth-example/files.ts delete mode 100644 docs/guide/advanced/examples/global-styling-absolute-strokewidth-example/icon.css delete mode 100644 docs/guide/advanced/examples/global-styling-css-example/App.js delete mode 100644 docs/guide/advanced/examples/global-styling-css-example/files.ts delete mode 100644 docs/guide/advanced/examples/global-styling-css-example/icon.css delete mode 100644 docs/guide/advanced/filled-icons.md delete mode 100644 docs/guide/advanced/global-styling.md create mode 100644 docs/guide/angular/advanced/accessibility.md create mode 100644 docs/guide/angular/advanced/combining-icons.md create mode 100644 docs/guide/angular/advanced/filled-icons.md create mode 100644 docs/guide/angular/advanced/global-styling.md create mode 100644 docs/guide/angular/advanced/icon-provider.md create mode 100644 docs/guide/angular/advanced/typescript.md create mode 100644 docs/guide/angular/advanced/with-lucide-lab.md create mode 100644 docs/guide/angular/basics/color.md create mode 100644 docs/guide/angular/basics/sizing.md create mode 100644 docs/guide/angular/basics/stroke-width.md create mode 100644 docs/guide/angular/getting-started.md create mode 100644 docs/guide/angular/index.md create mode 100644 docs/guide/angular/migration.md create mode 100644 docs/guide/astro/advanced/accessibility.md create mode 100644 docs/guide/astro/advanced/global-styling.md create mode 100644 docs/guide/astro/advanced/typescript.md create mode 100644 docs/guide/astro/advanced/with-lucide-lab.md create mode 100644 docs/guide/astro/basics/color.md create mode 100644 docs/guide/astro/basics/sizing.md rename docs/guide/{ => astro}/basics/stroke-width.md (51%) create mode 100644 docs/guide/astro/getting-started.md create mode 100644 docs/guide/astro/index.md create mode 100644 docs/guide/astro/migration.md delete mode 100644 docs/guide/basics/examples/absolute-stroke-width-icon/App.js delete mode 100644 docs/guide/basics/examples/absolute-stroke-width-icon/files.ts delete mode 100644 docs/guide/basics/examples/button-example/App.js delete mode 100644 docs/guide/basics/examples/button-example/Button.jsx delete mode 100644 docs/guide/basics/examples/button-example/files.ts delete mode 100644 docs/guide/basics/examples/color-icon/App.js delete mode 100644 docs/guide/basics/examples/color-icon/files.ts delete mode 100644 docs/guide/basics/examples/size-icon-css-example/App.js delete mode 100644 docs/guide/basics/examples/size-icon-css-example/files.ts delete mode 100644 docs/guide/basics/examples/size-icon-css-example/icon.css delete mode 100644 docs/guide/basics/examples/size-icon-example/App.js delete mode 100644 docs/guide/basics/examples/size-icon-example/files.ts delete mode 100644 docs/guide/basics/examples/size-icon-font-example/App.js delete mode 100644 docs/guide/basics/examples/size-icon-font-example/files.ts delete mode 100644 docs/guide/basics/examples/size-icon-font-example/icon.css delete mode 100644 docs/guide/basics/examples/size-icon-tailwind-example/App.js delete mode 100644 docs/guide/basics/examples/size-icon-tailwind-example/files.ts delete mode 100644 docs/guide/basics/examples/stroke-width-icon/App.js delete mode 100644 docs/guide/basics/examples/stroke-width-icon/files.ts delete mode 100644 docs/guide/basics/sizing.md delete mode 100644 docs/guide/how-to-use-icons.md create mode 100644 docs/guide/images/vscode-hover.png create mode 100644 docs/guide/lucide/advanced/accessibility.md create mode 100644 docs/guide/lucide/advanced/content-template-element.md create mode 100644 docs/guide/lucide/advanced/filled-icons.md create mode 100644 docs/guide/lucide/advanced/global-styling.md create mode 100644 docs/guide/lucide/advanced/shadow-dom.md create mode 100644 docs/guide/lucide/advanced/with-lucide-lab.md create mode 100644 docs/guide/lucide/basics/color.md create mode 100644 docs/guide/lucide/basics/sizing.md create mode 100644 docs/guide/lucide/basics/stroke-width.md create mode 100644 docs/guide/lucide/getting-started.md create mode 100644 docs/guide/lucide/index.md create mode 100644 docs/guide/lucide/migration.md delete mode 100644 docs/guide/packages/lucide-react.md delete mode 100644 docs/guide/packages/lucide.md create mode 100644 docs/guide/preact/advanced/accessibility.md create mode 100644 docs/guide/preact/advanced/aliased-names.md create mode 100644 docs/guide/preact/advanced/combining-icons.md create mode 100644 docs/guide/preact/advanced/filled-icons.md create mode 100644 docs/guide/preact/advanced/global-styling.md create mode 100644 docs/guide/preact/advanced/typescript.md create mode 100644 docs/guide/preact/advanced/with-lucide-lab.md create mode 100644 docs/guide/preact/basics/color.md create mode 100644 docs/guide/preact/basics/sizing.md create mode 100644 docs/guide/preact/basics/stroke-width.md create mode 100644 docs/guide/preact/getting-started.md create mode 100644 docs/guide/preact/index.md create mode 100644 docs/guide/preact/migration.md create mode 100644 docs/guide/react-native/advanced/aliased-names.md create mode 100644 docs/guide/react-native/advanced/combining-icons.md create mode 100644 docs/guide/react-native/advanced/filled-icons.md create mode 100644 docs/guide/react-native/advanced/global-styling.md create mode 100644 docs/guide/react-native/advanced/typescript.md create mode 100644 docs/guide/react-native/advanced/with-lucide-lab.md create mode 100644 docs/guide/react-native/basics/color.md create mode 100644 docs/guide/react-native/basics/sizing.md create mode 100644 docs/guide/react-native/basics/stroke-width.md create mode 100644 docs/guide/react-native/getting-started.md create mode 100644 docs/guide/react-native/index.md create mode 100644 docs/guide/react-native/migration.md create mode 100644 docs/guide/react/advanced/accessibility.md create mode 100644 docs/guide/react/advanced/aliased-names.md create mode 100644 docs/guide/react/advanced/combining-icons.md create mode 100644 docs/guide/react/advanced/dynamic-icon-component.md create mode 100644 docs/guide/react/advanced/filled-icons.md create mode 100644 docs/guide/react/advanced/global-styling.md create mode 100644 docs/guide/react/advanced/typescript.md create mode 100644 docs/guide/react/advanced/with-lucide-lab.md create mode 100644 docs/guide/react/basics/color.md create mode 100644 docs/guide/react/basics/sizing.md create mode 100644 docs/guide/react/basics/stroke-width.md create mode 100644 docs/guide/react/getting-started.md create mode 100644 docs/guide/react/index.md create mode 100644 docs/guide/react/migration-from-feather.md create mode 100644 docs/guide/react/migration.md create mode 100644 docs/guide/solid/advanced/accessibility.md create mode 100644 docs/guide/solid/advanced/aliased-names.md create mode 100644 docs/guide/solid/advanced/combining-icons.md create mode 100644 docs/guide/solid/advanced/filled-icons.md create mode 100644 docs/guide/solid/advanced/global-styling.md create mode 100644 docs/guide/solid/advanced/typescript.md create mode 100644 docs/guide/solid/advanced/with-lucide-lab.md create mode 100644 docs/guide/solid/basics/color.md create mode 100644 docs/guide/solid/basics/sizing.md create mode 100644 docs/guide/solid/basics/stroke-width.md create mode 100644 docs/guide/solid/getting-started.md create mode 100644 docs/guide/solid/index.md create mode 100644 docs/guide/solid/migration.md create mode 100644 docs/guide/static/font/color.md create mode 100644 docs/guide/static/font/index.md create mode 100644 docs/guide/static/font/sizing.md create mode 100644 docs/guide/static/getting-started.md create mode 100644 docs/guide/static/index.md create mode 100644 docs/guide/static/js-modules/node.md create mode 100644 docs/guide/static/js-modules/web.md create mode 100644 docs/guide/static/link-as-image.md create mode 100644 docs/guide/static/migration.md create mode 100644 docs/guide/static/svg-sprite.md create mode 100644 docs/guide/svelte/advanced/accessibility.md create mode 100644 docs/guide/svelte/advanced/combining-icons.md create mode 100644 docs/guide/svelte/advanced/filled-icons.md create mode 100644 docs/guide/svelte/advanced/global-styling.md create mode 100644 docs/guide/svelte/advanced/typescript.md create mode 100644 docs/guide/svelte/advanced/with-lucide-lab.md rename docs/guide/{ => svelte}/basics/color.md (51%) create mode 100644 docs/guide/svelte/basics/sizing.md create mode 100644 docs/guide/svelte/basics/stroke-width.md create mode 100644 docs/guide/svelte/getting-started.md create mode 100644 docs/guide/svelte/index.md create mode 100644 docs/guide/svelte/migration.md create mode 100644 docs/guide/version-1.md create mode 100644 docs/guide/vscode.md create mode 100644 docs/guide/vue/advanced/accessibility.md create mode 100644 docs/guide/vue/advanced/aliased-names.md create mode 100644 docs/guide/vue/advanced/combining-icons.md create mode 100644 docs/guide/vue/advanced/filled-icons.md create mode 100644 docs/guide/vue/advanced/global-styling.md create mode 100644 docs/guide/vue/advanced/typescript.md create mode 100644 docs/guide/vue/advanced/with-lucide-lab.md create mode 100644 docs/guide/vue/basics/color.md create mode 100644 docs/guide/vue/basics/sizing.md create mode 100644 docs/guide/vue/basics/stroke-width.md create mode 100644 docs/guide/vue/getting-started.md create mode 100644 docs/guide/vue/index.md create mode 100644 docs/guide/vue/migration.md create mode 100644 docs/images/package-logos/lucide-angular.svg create mode 100644 docs/images/package-logos/lucide-astro.svg create mode 100644 docs/images/package-logos/lucide-preact.svg create mode 100644 docs/images/package-logos/lucide-react-native.svg create mode 100644 docs/images/package-logos/lucide-react.svg create mode 100644 docs/images/package-logos/lucide-solid.svg create mode 100644 docs/images/package-logos/lucide-static.svg create mode 100644 docs/images/package-logos/lucide-svelte.svg create mode 100644 docs/images/package-logos/lucide-vue.svg create mode 100644 docs/images/package-logos/lucide.svg create mode 100644 docs/images/version-1-docs-improvements.png create mode 100644 docs/images/version-1.svg create mode 100644 docs/public/framework-logos/angular-old.svg create mode 100644 docs/public/og/general.png diff --git a/.github/labeler.yml b/.github/labeler.yml index 109b18937..57607e502 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -36,51 +36,51 @@ - any-glob-to-any-file: - 'packages/lucide/*' -# For changes in the lucide React package +# For changes in the Lucide React package โš›๏ธ react package: - changed-files: - any-glob-to-any-file: - 'packages/lucide-react/*' -# For changes in the lucide React Native package +# For changes in the Lucide React Native package โš›๏ธ react native package: - changed-files: - any-glob-to-any-file: - 'packages/lucide-react-native/*' -# For changes in the lucide vue packages +# For changes in the Lucide vue packages ๐Ÿ’Ž vue package: - changed-files: - any-glob-to-any-file: - 'packages/lucide-vue/*' - 'packages/lucide-vue-next/*' -# For changes in the lucide angular package +# For changes in the Lucide angular package ๐Ÿ…ฐ๏ธ angular package: - changed-files: - any-glob-to-any-file: - 'packages/angular/*' - 'packages/lucide-angular/*' -# For changes in the lucide preact package +# For changes in the Lucide preact package โš›๏ธ preact package: - changed-files: - any-glob-to-any-file: - 'packages/lucide-preact/*' -# For changes in the lucide svelte package +# For changes in the Lucide svelte package ๐Ÿงฃ svelte package: - changed-files: - any-glob-to-any-file: - 'packages/lucide-svelte/*' -# For changes in the lucide solid package +# For changes in the Lucide solid package ๐Ÿช solid package: - changed-files: - any-glob-to-any-file: - 'packages/lucide-solid/*' -# For changes in the lucide astro package +# For changes in the Lucide astro package ๐Ÿš€ astro package: - changed-files: - any-glob-to-any-file: @@ -92,13 +92,13 @@ - any-glob-to-any-file: - 'packages/lucide-icons/*' -# For changes in the lucide static package +# For changes in the Lucide static package ๐Ÿชจ static package: - changed-files: - any-glob-to-any-file: - 'packages/lucide-static/*' -# For changes in the lucide flutter package +# For changes in the Lucide flutter package ๐Ÿน flutter package: - changed-files: - any-glob-to-any-file: diff --git a/.gitignore b/.gitignore index 2112bf699..a00849849 100644 --- a/.gitignore +++ b/.gitignore @@ -50,4 +50,6 @@ docs/.vitepress/data/relatedIcons.json docs/.vitepress/data/brandStopwords.json docs/.vercel docs/.nitro +docs/public/og/** +!docs/public/og/general.png .gitignore diff --git a/.vscode/settings.json b/.vscode/settings.json index f179cbc07..47728fdf7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,5 @@ "cSpell.words": ["devs", "preact", "Preact"], "eslint.enable": true, "eslint.validate": ["javascript", "svg"], - "svg.preview.background": "transparent" + "svg.preview.background": "editor" } diff --git a/BRAND_LOGOS_STATEMENT.md b/BRAND_LOGOS_STATEMENT.md index 9ca7c149b..de17c9722 100644 --- a/BRAND_LOGOS_STATEMENT.md +++ b/BRAND_LOGOS_STATEMENT.md @@ -1,4 +1,6 @@ -# Our Official Stance on Including Brand Logos in Lucide +# Brand Logos Statement + +Our official stance on including brand logos in Lucide ## TL;DR diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index bd8e14ad0..da613c8d4 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,74 +1,90 @@ # Contributor Covenant Code of Conduct +This Code of Conduct outlines our expectations for participant behavior as well as the consequences for unacceptable behavior within our community. We are committed to providing a welcoming, safe, and inclusive environment for all members of our community. + ## Our Pledge -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, gender identity and expression, level of experience, -nationality, personal appearance, race, religion, or sexual identity and -orientation. +We pledge to make our community welcoming, safe, and equitable for all. -## Our Standards +We are committed to fostering an environment that respects and promotes the dignity, rights, and contributions of all individuals, regardless of characteristics including race, ethnicity, caste, color, age, physical characteristics, neurodiversity, disability, sex or gender, gender identity or expression, sexual orientation, language, philosophy or religion, national or social origin, socio-economic position, level of education, or other status. The same privileges of participation are extended to everyone who participates in good faith and in accordance with this Covenant. -Examples of behavior that contributes to creating a positive environment -include: +## Encouraged Behaviors -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +While acknowledging differences in social norms, we all strive to meet our community's expectations for positive behavior. We also understand that our words and actions may be interpreted differently than we intend based on culture, background, or native language. -Examples of unacceptable behavior by participants include: +With these considerations in mind, we agree to behave mindfully toward each other and act in ways that center our shared values, including: -* The use of sexualized language or imagery and unwelcome sexual attention or -advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting +1. Respecting the **purpose of our community**, our activities, and our ways of gathering. +2. Engaging **kindly and honestly** with others. +3. Respecting **different viewpoints** and experiences. +4. **Taking responsibility** for our actions and contributions. +5. Gracefully giving and accepting **constructive feedback**. +6. Committing to **repairing harm** when it occurs. +7. Behaving in other ways that promote and sustain the **well-being of our community**. -## Our Responsibilities -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. +## Restricted Behaviors + +We agree to restrict the following behaviors in our community. Instances, threats, and promotion of these behaviors are violations of this Code of Conduct. + +1. **Harassment.** Violating explicitly expressed boundaries or engaging in unnecessary personal attention after any clear request to stop. +2. **Character attacks.** Making insulting, demeaning, or pejorative comments directed at a community member or group of people. +3. **Stereotyping or discrimination.** Characterizing anyoneโ€™s personality or behavior on the basis of immutable identities or traits. +4. **Sexualization.** Behaving in a way that would generally be considered inappropriately intimate in the context or purpose of the community. +5. **Violating confidentiality**. Sharing or acting on someone's personal or private information without their permission. +6. **Endangerment.** Causing, encouraging, or threatening violence or other harm toward any person or group. +7. Behaving in other ways that **threaten the well-being** of our community. + +### Other Restrictions + +1. **Misleading identity.** Impersonating someone else for any reason, or pretending to be someone else to evade enforcement actions. +2. **Failing to credit sources.** Not properly crediting the sources of content you contribute. +3. **Promotional materials**. Sharing marketing or other commercial content in a way that is outside the norms of the community. +4. **Irresponsible communication.** Failing to responsibly present content which includes, links or describes any other restricted behaviors. + + +## Reporting an Issue + +Tensions can occur between community members even when they are trying their best to collaborate. Not every conflict represents a code of conduct violation, and this Code of Conduct reinforces encouraged behaviors and norms that can help avoid conflicts and minimize harm. + +When an incident does occur, it is important to report it promptly. To report a possible violation, email: [info@lucide.dev](mailto:info@lucide.dev) + +Community Moderators take reports of violations seriously and will make every effort to respond in a timely manner. They will investigate all reports of code of conduct violations, reviewing messages, logs, and recordings, or interviewing witnesses and other participants. Community Moderators will keep investigation and enforcement actions as transparent as possible while prioritizing safety and confidentiality. In order to honor these values, enforcement actions are carried out in private with the involved parties, but communicating to the whole community may be part of a mutually agreed upon resolution. + + +## Addressing and Repairing Harm + +If an investigation by the Community Moderators finds that this Code of Conduct has been violated, the following enforcement ladder may be used to determine how best to repair harm, based on the incident's impact on the individuals involved and the community as a whole. Depending on the severity of a violation, lower rungs on the ladder may be skipped. + +1) Warning + 1) Event: A violation involving a single incident or series of incidents. + 2) Consequence: A private, written warning from the Community Moderators. + 3) Repair: Examples of repair include a private written apology, acknowledgement of responsibility, and seeking clarification on expectations. +2) Temporarily Limited Activities + 1) Event: A repeated incidence of a violation that previously resulted in a warning, or the first incidence of a more serious violation. + 2) Consequence: A private, written warning with a time-limited cooldown period designed to underscore the seriousness of the situation and give the community members involved time to process the incident. The cooldown period may be limited to particular communication channels or interactions with particular community members. + 3) Repair: Examples of repair may include making an apology, using the cooldown period to reflect on actions and impact, and being thoughtful about re-entering community spaces after the period is over. +3) Temporary Suspension + 1) Event: A pattern of repeated violation which the Community Moderators have tried to address with warnings, or a single serious violation. + 2) Consequence: A private written warning with conditions for return from suspension. In general, temporary suspensions give the person being suspended time to reflect upon their behavior and possible corrective actions. + 3) Repair: Examples of repair include respecting the spirit of the suspension, meeting the specified conditions for return, and being thoughtful about how to reintegrate with the community when the suspension is lifted. +4) Permanent Ban + 1) Event: A pattern of repeated code of conduct violations that other steps on the ladder have failed to resolve, or a violation so serious that the Community Moderators determine there is no way to keep the community safe with this person as a member. + 2) Consequence: Access to all community spaces, tools, and communication channels is removed. In general, permanent bans should be rarely used, should have strong reasoning behind them, and should only be resorted to if working through other remedies has failed to change the behavior. + 3) Repair: There is no possible repair in cases of this severity. + +This enforcement ladder is intended as a guideline. It does not limit the ability of Community Managers to use their discretion and judgment, in keeping with the best interests of our community. -Project 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, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. ## Scope -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. +This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public or other spaces. Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event. -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at johnletey@gmail.com. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at [http://contributor-covenant.org/version/1/4][version] +This Code of Conduct is adapted from the Contributor Covenant, version 3.0, permanently available at [https://www.contributor-covenant.org/version/3/0/](https://www.contributor-covenant.org/version/3/0/). -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ +Contributor Covenant is stewarded by the Organization for Ethical Source and licensed under CC BY-SA 4.0. To view a copy of this license, visit [https://creativecommons.org/licenses/by-sa/4.0/](https://creativecommons.org/licenses/by-sa/4.0/) + +For answers to common questions about Contributor Covenant, see the FAQ at [https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq). Translations are provided at [https://www.contributor-covenant.org/translations](https://www.contributor-covenant.org/translations). Additional enforcement and community guideline resources can be found at [https://www.contributor-covenant.org/resources](https://www.contributor-covenant.org/resources). The enforcement ladder was inspired by the work of [Mozillaโ€™s code of conduct team](https://github.com/mozilla/inclusion). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 898485681..2bd46a67d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,5 +1,4 @@ - -# Contribution Guidelines +# Contribution Guide :+1::tada: First off, thanks for taking the time to contribute! :tada::+1: @@ -19,13 +18,15 @@ Guidelines for pull requests: - __Make sure the target of your pull request is the relevant branch__. Most of bug fixes or new feature should go to the `main` branch. - __Include only related work__. If your pull request has unrelated commits, it won't be accepted. -### Icon Pull Requests +### Contributing Icons + +We love contributions of new icons from the community! If you want to contribute new icons, please follow the guidelines below. #### Guidelines Please make sure you follow the icon guidelines, that should be followed to keep quality and consistency when making icons for Lucide. -Read it here: [ICON_GUIDELINES](https://lucide.dev/docs/icon-design-guide). +Read it here: [ICON_GUIDELINES](https://lucide.dev/contribute/icon-design-guide). #### Lucide Studio @@ -35,15 +36,15 @@ For formatting and adjusting SVG icons, [@jguddas](https://github.com/jguddas) m Here you can find instructions on how to implement the guidelines with different vector graphics editors: -##### [Adobe Illustrator Guide](https://lucide.dev/docs/illustrator-guide) +##### [Adobe Illustrator Guide](https://lucide.dev/contribute/illustrator-guide) -You can also [download an Adobe Illustrator template](https://github.com/lucide-icons/lucide/blob/main/docs/public/templates/illustrator_template.ai). +You can also [download an Adobe Illustrator template](https://lucide.dev/templates/illustrator_template.ai). -##### [Inkscape Guide](https://lucide.dev/docs/inkscape-guide) +##### [Inkscape Guide](https://lucide.dev/contribute/inkscape-guide) -##### [Figma Guide](https://lucide.dev/docs/figma-guide) +##### [Figma Guide](https://lucide.dev/contribute/figma-guide) -##### [Affinity Designer Guide](https://lucide.dev/guide/design/affinity-designer-guide) +##### [Affinity Designer Guide](https://lucide.dev/contribute/affinity-designer-guide) #### Submitting Multiple Icons @@ -191,7 +192,7 @@ Detailed documentation about: installation, guides, packages, design guides etc. ### Icons -All the icons of lucide in SVG format. These will be used as source for all the packages and other distributions for the lucide icons. +All the icons of Lucide in SVG format. These will be used as source for all the packages and other distributions for the Lucide icons. ### Packages diff --git a/README.md b/README.md index ab0c51018..f627d65e1 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ Lucide is an open-source icon library that provides 1000+ vector (svg) files for ### Figma -The lucide figma plugin. +The Lucide Figma plugin. Visit [Figma community page](https://www.figma.com/community/plugin/939567362549682242/Lucide-Icons) to install the plugin. diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index c0e788f0e..78f48ba66 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -1,7 +1,19 @@ import { fileURLToPath, URL } from 'node:url'; import { defineConfig } from 'vitepress'; +import { groupIconMdPlugin, groupIconVitePlugin } from 'vitepress-plugin-group-icons'; import sidebar from './sidebar'; +import snackPlayer from './markdown/snackPlayer'; +import sandpackPlugin from './markdown/sandpack'; +import { readFile } from 'node:fs/promises'; +import { resourcesSidebar } from './sidebar/resources'; import getStructuredData from './getStructuredData'; +import { createGeneralOGImage, createIconOGImage } from './createOGImage'; +import llmstxt from 'vitepress-plugin-llms'; + +const defaultSandpackCSS = await readFile( + fileURLToPath(new URL('./theme/sandpack-default.css', import.meta.url)), + 'utf-8', +); const title = 'Lucide'; const socialTitle = 'Lucide Icons'; @@ -15,6 +27,20 @@ export default defineConfig({ cleanUrls: true, outDir: '.vercel/output/static', srcExclude: ['**/README.md'], + markdown: { + config(md) { + md.use(groupIconMdPlugin); + md.use(snackPlayer); + md.use(sandpackPlugin, { + defaultFiles: { + '/styles.css': { + code: defaultSandpackCSS, + hidden: true, + }, + }, + }); + }, + }, vite: { resolve: { alias: [ @@ -36,6 +62,19 @@ export default defineConfig({ }, ], }, + plugins: [ + groupIconVitePlugin(), + llmstxt({ + ignoreFiles: [ + 'code-of-conduct.md', + 'index.md', + 'packages.md', + 'showcase.md', + 'brand-logo-statement.md', + 'icons/**', // Not working, need investigation + ], + }), + ], }, head: [ [ @@ -153,6 +192,7 @@ export default defineConfig({ ], ], async transformPageData(pageData) { + pageData.frontmatter.head ??= []; if ( pageData.relativePath.startsWith('icons/') && !pageData.relativePath.startsWith('icons/lab/') && @@ -173,13 +213,58 @@ export default defineConfig({ const structuredData = await getStructuredData(iconName, pageData); - pageData.frontmatter.head ??= []; + const ogPath = await createIconOGImage(iconName, pageData.params?.tags || []); + + if (ogPath) { + const content = `https://lucide.dev${ogPath}`; + pageData.frontmatter.head.push( + [ + 'meta', + { + property: 'og:image', + content, + }, + ], + [ + 'meta', + { + property: 'twitter:image', + content, + }, + ], + ); + } + pageData.frontmatter.head.push([ 'script', { type: 'application/ld+json' }, JSON.stringify(structuredData), ]); } + + if (pageData.relativePath.startsWith('guide/')) { + const ogPath = await createGeneralOGImage(pageData); + + if (ogPath) { + const content = `https://lucide.dev${ogPath}`; + pageData.frontmatter.head.push( + [ + 'meta', + { + property: 'og:image', + content, + }, + ], + [ + 'meta', + { + property: 'twitter:image', + content, + }, + ], + ); + } + } }, themeConfig: { logo: { @@ -189,9 +274,15 @@ export default defineConfig({ nav: [ { text: 'Icons', link: '/icons/' }, { text: 'Guide', link: '/guide/' }, + { + text: 'Resources', + items: [ + ...resourcesSidebar[0].items, + { text: 'Design icons', link: '/contribute/icon-design-guide' }, + ], + }, { text: 'Packages', link: '/packages' }, { text: 'Showcase', link: '/showcase' }, - { text: 'License', link: '/license' }, ], sidebar, socialLinks: [ diff --git a/docs/.vitepress/createOGImage.ts b/docs/.vitepress/createOGImage.ts new file mode 100644 index 000000000..84098314c --- /dev/null +++ b/docs/.vitepress/createOGImage.ts @@ -0,0 +1,79 @@ +import { PageData } from 'vitepress'; +import fs from 'node:fs/promises'; +import { cwd } from 'node:process'; +import { join } from 'node:path'; +import sharp from 'sharp'; + +const generalSVGTemplate = fs.readFile(join(cwd(), '.vitepress/lib/guideOGTemplate.svg'), 'utf-8'); + +export async function createGeneralOGImage({ title, description, relativePath }: PageData) { + const fileName = relativePath.replace(/\.md$/, '.png').replace(/\//g, '-'); + + const path = join(cwd(), 'public/og', fileName); + + let desc = description.replace(/&/g, '&').replace(//g, '>'); + if (!desc) { + desc = ''; + } + const lines = desc.replace(/(?![^\n]{1,64}$)([^\n]{1,64})\s/g, '$1\n').split('\n'); + const data = { + title: title, + line1: lines[0] || '', + line2: lines[1] || '', + line3: lines[2] || '', + line4: lines[3] || '', + }; + const svgTemplate = await generalSVGTemplate; + const svg = svgTemplate.replace(/\{\{([^}]+)\}\}/g, (_, name: keyof typeof data) => data[name]); + + console.log(`Generating ${fileName}`); + try { + await sharp(Buffer.from(svg)) + .resize(1200 * 1.1, 630 * 1.1) + .png() + .toFile(path); + } catch (e) { + console.error('Error generating', { filename: path, ...data, svg }); + console.error(e); + } + + return `/og/${fileName}`; +} + +const iconSVGTemplate = fs.readFile(join(cwd(), '.vitepress/lib/iconOGTemplate.svg'), 'utf-8'); + +export async function createIconOGImage(iconName: string, tags: string[]) { + const path = join(cwd(), 'public/og', `icon-${iconName}.png`); + + let iconSVG = await fs.readFile(join(cwd(), `../icons/${iconName}.svg`), 'utf-8'); + iconSVG = iconSVG + .replace('width="24"', 'width="320"') + .replace('height="24"', 'height="320"') + .replace('currentColor', '#dfdfd6') + .replace( + 'xmlns="http://www.w3.org/2000/svg"', + 'xmlns="http://www.w3.org/2000/svg" x="62" y="66"', + ); + + const data = { + name: iconName, + tags: tags.join(' โ€ข ').replace(//g, '>').replace(/&/g, '&'), + iconSVG, + }; + + const svgTemplate = await iconSVGTemplate; + const svg = svgTemplate.replace(/\{\{([^}]+)\}\}/g, (_, name: keyof typeof data) => data[name]); + + console.log(`Generating ${path}`); + try { + await sharp(Buffer.from(svg)) + .resize(1200 * 1.1, 630 * 1.1) + .png() + .toFile(path); + } catch (e) { + console.error('Error generating', { filename: path, ...data, svg }); + console.error(e); + } + + return `/og/icon-${iconName}.png`; +} diff --git a/docs/.vitepress/data/packageData.json b/docs/.vitepress/data/packageData.json index edcda5e41..da1c990cd 100644 --- a/docs/.vitepress/data/packageData.json +++ b/docs/.vitepress/data/packageData.json @@ -18,6 +18,7 @@ "lucide-react": { "order": 1, "icon": "react", + "docsAlias": "react", "shields": [ { "alt": "npm", @@ -34,14 +35,25 @@ "@lucide/vue": { "order": 2, "icon": "vue", - "docsAlias": "lucide-vue", + "docsAlias": "vue", "packageDirname": "vue", "shields": [ + { + "alt": "npm", + "src": "https://img.shields.io/npm/v/@lucide/vue", + "href": "https://www.npmjs.com/package/@lucide/vue" + }, + { + "alt": "npm", + "src": "https://img.shields.io/npm/dw/@lucide/vue", + "href": "https://www.npmjs.com/package/@lucide/vue" + } ] }, "lucide-svelte": { "order": 3, "icon": "svelte", + "docsAlias": "svelte", "shields": [ { "alt": "npm", @@ -58,6 +70,7 @@ "lucide-solid": { "order": 4, "icon": "solid", + "docsAlias": "solid", "shields": [ { "alt": "npm", @@ -74,6 +87,7 @@ "lucide-react-native": { "order": 5, "icon": "react-native", + "docsAlias": "react-native", "shields": [ { "alt": "npm", @@ -90,6 +104,7 @@ "@lucide/angular": { "order": 6, "icon": "angular", + "docsAlias": "angular", "shields": [ { "alt": "npm", @@ -105,7 +120,9 @@ }, "lucide-angular": { "order": 7, - "icon": "angular", + "icon": "angular-old", + "description": "Our legacy Angular package with a module based API.", + "documentation": "https://v0.lucide.dev/guide/packages/lucide-angular", "shields": [ { "alt": "npm", @@ -122,6 +139,7 @@ "lucide-preact": { "order": 8, "icon": "preact", + "docsAlias": "preact", "shields": [ { "alt": "npm", @@ -136,7 +154,7 @@ ] }, "@lucide/astro": { - "docsAlias": "lucide-astro", + "docsAlias": "astro", "packageDirname": "astro", "order": 9, "icon": "astro", @@ -157,6 +175,7 @@ "lucide-static": { "order": 10, "icon": "svg", + "docsAlias": "static", "shields": [ { "alt": "npm", @@ -171,6 +190,7 @@ ] }, "@lucide/icons": { + "hide": true, "docsAlias": "icons", "packageDirname": "icons", "order": 10, diff --git a/docs/.vitepress/data/packageData.thirdParty.json b/docs/.vitepress/data/packageData.thirdParty.json index 2e6fa4c53..b430797ab 100644 --- a/docs/.vitepress/data/packageData.thirdParty.json +++ b/docs/.vitepress/data/packageData.thirdParty.json @@ -117,7 +117,7 @@ }, { "name": "lucide-slint", - "description": "Implementation of the lucide icon library for Slint.", + "description": "Implementation of the Lucide icon library for Slint.", "icon": "/framework-logos/slint.svg", "shields": [ { diff --git a/docs/.vitepress/lib/SvgPreview/index.tsx b/docs/.vitepress/lib/SvgPreview/index.tsx index 63abfa878..864cea077 100644 --- a/docs/.vitepress/lib/SvgPreview/index.tsx +++ b/docs/.vitepress/lib/SvgPreview/index.tsx @@ -459,20 +459,7 @@ const SvgPreview = ( /> + + + + {{title}} + + + {{line1}} + {{line2}} + {{line3}} + {{line4}} + + + + + + https://lucide.dev + + + + + + + + + + + + + diff --git a/docs/.vitepress/lib/iconOGTemplate.svg b/docs/.vitepress/lib/iconOGTemplate.svg new file mode 100644 index 000000000..be67ca990 --- /dev/null +++ b/docs/.vitepress/lib/iconOGTemplate.svg @@ -0,0 +1,47 @@ + + + + + + + {{iconSVG}} + + + See the icon preview, code examples, + + release details and other related icons. + + + {{name}} + + + {{tags}} + + + + + + https://lucide.dev + + + + + + + + + + + + + + + + diff --git a/docs/.vitepress/markdown/sandpack.ts b/docs/.vitepress/markdown/sandpack.ts new file mode 100644 index 000000000..d73489e20 --- /dev/null +++ b/docs/.vitepress/markdown/sandpack.ts @@ -0,0 +1,138 @@ +import type MarkdownIt from 'markdown-it'; +import type { RenderRule } from 'markdown-it/lib/renderer.mjs'; +import container from 'markdown-it-container'; +import sandpackTheme from '../theme/sandpackTheme.json'; + +type SnackParams = { + defaultFiles?: Record< + string, + { + code: string; + active?: boolean; + hidden?: boolean; + } + >; +}; + +type ContainerArgs = [typeof container, string, { render: RenderRule }]; + +export default function sandpackPlugin(md: MarkdownIt, pluginOptions: SnackParams = {}) { + if (md == null) { + throw new Error('MarkdownIt instance is required for sandpackPlugin'); + } + const escapeHtml = md?.utils?.escapeHtml; + const defaultFence = + md.renderer.rules.fence || + ((tokens, idx, options, env, self) => self.renderToken(tokens, idx, options)); + + const renderSandbox = (tokenList: any[], index: number) => { + const renderFunc = (tokens: any[], idx: number) => { + if (tokens[idx].nesting === 1) { + const fileAttr: string[] = []; + const attrs = Object.fromEntries(tokens[idx].attrs || []); + + const files: Record< + string, + { + code: string; + active?: boolean; + hidden?: boolean; + } + > = {}; + + for ( + let i = idx + 1; + !(tokens[i].nesting === -1 && tokens[i].type === 'container_sandpack_close'); + ++i + ) { + if (tokens[i].type === 'fence' && tokens[i].tag === 'code') { + const info = tokens[i].info ?? ''; + const [lang, fileName, params = ''] = info.split(' '); + + const active = params.includes('[active]'); + const hidden = params.includes('[hidden]'); + + const code = tokens[i].content; + + if (fileName && code) { + files[fileName] = { + code, + }; + + if (active) { + (files[fileName] as any).active = true; + } + + if (hidden) { + (files[fileName] as any).hidden = true; + } + } + } + } + + const { dependencies, showTabs, externalResources, editorWidthPercentage, ...options } = + attrs; + + const dependencyList = dependencies?.split(',')?.map((dep: string) => dep.trim()) ?? []; + + const dependencyObject = dependencyList.reduce( + (acc: Record, name: string) => { + acc[name] = 'latest'; + return acc; + }, + {}, + ); + + const externalResourcesList = externalResources + ?.split(',') + ?.map((res: string) => res.trim()) + ?.filter((res: string) => res.length > 0); + + const filesWithDefaultStyles = { + ...pluginOptions.defaultFiles, + ...files, + }; + + return `\ + `; + } + return ``; + }; + return renderFunc(tokenList, index); + }; + + function createCodeGroup(md: MarkdownIt): ContainerArgs { + return [ + container, + 'sandpack', + { + render(tokens, idx) { + return renderSandbox(tokens, idx); + }, + }, + ]; + } + + md.use(...createCodeGroup(md)); +} diff --git a/docs/.vitepress/markdown/snackPlayer.ts b/docs/.vitepress/markdown/snackPlayer.ts new file mode 100644 index 000000000..a7d0abaad --- /dev/null +++ b/docs/.vitepress/markdown/snackPlayer.ts @@ -0,0 +1,99 @@ +/** + * SnackPlayer markdown-it plugin + * + * Converts fenced code blocks like: + * + * ```SnackPlayer name=My%20Example&description=Nice%20demo&ext=tsx + * // code here + * ``` + * + * into: + * + *
+ */ + +import type MarkdownIt from 'markdown-it'; + +type SnackParams = Record; + +function parseParams(paramString = ''): SnackParams { + const params = Object.fromEntries(new URLSearchParams(paramString)) as SnackParams; + + if (!params.platform) { + params.platform = 'web'; + } + + return params; +} + +export default function snackPlayerPlugin(md: MarkdownIt) { + const escapeHtml = md.utils.escapeHtml; + const defaultFence = + md.renderer.rules.fence || + ((tokens, idx, options, env, self) => self.renderToken(tokens, idx, options)); + + md.renderer.rules.fence = (tokens, idx, options, env, self) => { + const token = tokens[idx]; + const info = (token.info || '').trim(); + + if (!info) { + return defaultFence(tokens, idx, options, env, self); + } + + const [lang, ...rest] = info.split(/\s+/); + if (lang !== 'SnackPlayer') { + return defaultFence(tokens, idx, options, env, self); + } + + const paramString = rest.join(' '); + const params = parseParams(paramString); + + // Gather necessary params + const name = params.name ? decodeURIComponent(params.name) : 'Example'; + const description = params.description + ? decodeURIComponent(params.description) + : 'Example usage'; + const ext = params.ext ? decodeURIComponent(params.ext) : 'tsx'; + const filename = `App.${ext}`; + + const files = encodeURIComponent( + JSON.stringify({ + [filename]: { + type: 'CODE', + contents: token.content, + }, + }), + ); + + const dependencies = + 'react-native-safe-area-context' + (params.dependencies ? `,${params.dependencies}` : ''); + const platform = params.platform ?? 'web'; + const supportedPlatforms = params.supportedPlatforms ?? 'ios,android,web'; + const theme = params.theme ?? 'light'; + const preview = params.preview ?? 'true'; + const loading = params.loading ?? 'lazy'; + const deviceAppearance = params.deviceAppearance ?? 'dark'; + + // Build the HTML output (escaping where appropriate) + return ( + `` + ); + }; +} diff --git a/docs/.vitepress/sidebar.ts b/docs/.vitepress/sidebar.ts deleted file mode 100644 index 26d8eae88..000000000 --- a/docs/.vitepress/sidebar.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { DefaultTheme, UserConfig } from 'vitepress'; - -const sidebar: UserConfig['themeConfig']['sidebar'] = { - guide: [ - { - text: 'Introduction', - items: [ - { text: 'What is lucide?', link: '/guide/' }, - { text: 'Installation', link: '/guide/installation' }, - { text: 'Comparison', link: '/guide/comparison' }, - ], - }, - { - text: 'Basics', - items: [ - { - text: 'Color', - link: '/guide/basics/color', - }, - { - text: 'Sizing', - link: '/guide/basics/sizing', - }, - { - text: 'Stroke width', - link: '/guide/basics/stroke-width', - }, - ], - }, - // TODO: Add this section - { - text: 'Advanced', - items: [ - { - text: 'Accessibility', - link: '/guide/advanced/accessibility', - }, - { - text: 'Global styling', - link: '/guide/advanced/global-styling', - }, - // { - // text: 'Animations', - // }, - { - text: 'Filled icons', - link: '/guide/advanced/filled-icons', - }, - { - text: 'Aliased Names', - link: '/guide/advanced/aliased-names', - }, - // { - // text: 'Combining icons', - // }, - // { - // text: 'Dynamic imports' - // }, - // { - // text: 'Auto importing' - // }, - ], - }, - { - text: 'Packages', - items: [ - { - text: 'Lucide', - link: '/guide/packages/lucide', - }, - { - text: 'React', - link: '/guide/packages/lucide-react', - }, - { - text: 'Vue', - link: '/guide/packages/lucide-vue', - }, - { - text: 'Svelte', - link: '/guide/packages/lucide-svelte', - }, - { - text: 'Solid', - link: '/guide/packages/lucide-solid', - }, - { - text: 'React Native', - link: '/guide/packages/lucide-react-native', - }, - { - text: 'Angular', - link: '/guide/packages/angular', - }, - { - text: 'Preact', - link: '/guide/packages/lucide-preact', - }, - { - text: 'Astro', - link: '/guide/packages/lucide-astro', - }, - { - text: 'Static', - link: '/guide/packages/lucide-static', - }, - { - text: 'Icon data & helpers', - link: '/guide/packages/icons', - }, - ], - }, - { - text: 'Contributing', - items: [ - { - text: 'Icon Design Principles', - link: '/guide/design/icon-design-guide', - }, - { - text: 'Designing in Illustrator', - link: '/guide/design/illustrator-guide', - }, - { - text: 'Designing in InkScape', - link: '/guide/design/inkscape-guide', - }, - { - text: 'Designing in Figma', - link: '/guide/design/figma-guide', - }, - { - text: 'Designing in Affinity Designer', - link: '/guide/design/affinity-designer-guide', - }, - ], - }, - ], - // This should be here to keep the sidebar shown on the icons page - icons: [{ text: '', link: '/' }], -}; - -export default sidebar; diff --git a/docs/.vitepress/sidebar/angular.ts b/docs/.vitepress/sidebar/angular.ts new file mode 100644 index 000000000..df244e363 --- /dev/null +++ b/docs/.vitepress/sidebar/angular.ts @@ -0,0 +1,107 @@ +import { DefaultTheme } from 'vitepress'; + +export const angularSidebar = [ + { + items: [ + { + text: 'Overview', + link: '/guide/angular/', + }, + { + text: 'Getting started', + link: '/guide/angular/getting-started', + desc: 'Learn how to get started with Lucide for Angular.', + }, + { + text: 'Migration from v0', + link: '/guide/angular/migration', + desc: 'Learn how to migrate from v0 to v1 of Lucide.', + }, + ], + }, + { + text: 'Basics', + items: [ + { + text: 'Color', + desc: 'Adjust the color of your icons', + link: '/guide/angular/basics/color', + }, + { + text: 'Sizing', + desc: 'Adjust the size of your icons', + link: '/guide/angular/basics/sizing', + }, + { + text: 'Stroke width', + desc: 'Adjust the stroke width of your icons', + link: '/guide/angular/basics/stroke-width', + }, + ], + }, + { + text: 'Advanced', + items: [ + { + text: 'Typescript', + link: '/guide/angular/advanced/typescript', + desc: 'All exported types and how to use them', + }, + { + text: 'Accessibility', + link: '/guide/angular/advanced/accessibility', + desc: 'Making your icons accessible', + }, + { + text: 'Global styling', + link: '/guide/angular/advanced/global-styling', + desc: 'Apply global styles to all icons', + }, + { + text: 'With Lucide Lab', + link: '/guide/angular/advanced/with-lucide-lab', + desc: 'Using lucide-lab with @lucide/angular', + }, + // { + // text: 'Animations', + // link: '/guide/angular/advanced/animations', + // desc: 'Add animations to your icons', + // }, + { + text: 'Filled icons', + link: '/guide/angular/advanced/filled-icons', + desc: 'Using filled icons in @lucide/angular', + }, + { + text: 'Combining icons', + link: '/guide/angular/advanced/combining-icons', + desc: 'Combine multiple icons into one', + }, + // { + // text: 'Dynamic icon component', + // link: '/guide/angular/advanced/dynamic-icon-component.md', + // desc: 'Dynamically import icons as needed', + // }, + { + text: 'Icon provider', + link: '/guide/angular/advanced/icon-provider', + desc: 'Provide icons at app level and use them by name', + }, + ], + }, + { + text: 'Resources', + items: [ + { + text: 'Accessibility in depth', + link: '/guide/accessibility', + desc: 'Accessibility best practices', + }, + { + text: 'VSCode', + link: '/guide/vscode', + desc: 'VSCode and Lucide', + }, + ], + }, +] satisfies DefaultTheme.SidebarItem[] & { items: { desc?: string }[] }[]; diff --git a/docs/.vitepress/sidebar/astro.ts b/docs/.vitepress/sidebar/astro.ts new file mode 100644 index 000000000..4aaa77c69 --- /dev/null +++ b/docs/.vitepress/sidebar/astro.ts @@ -0,0 +1,82 @@ +import { DefaultTheme } from 'vitepress'; + +export const astroSidebar = [ + { + items: [ + { + text: 'Overview', + link: '/guide/astro/', + }, + { + text: 'Getting started', + link: '/guide/astro/getting-started', + desc: 'Learn how to get started with Lucide for Astro.', + }, + { + text: 'Migration from v0', + link: '/guide/astro/migration', + desc: 'Learn how to migrate from v0 to v1 of Lucide Astro.', + }, + ], + }, + { + text: 'Basics', + items: [ + { + text: 'Color', + desc: 'Adjust the color of your icons', + link: '/guide/astro/basics/color', + }, + { + text: 'Sizing', + desc: 'Adjust the size of your icons', + link: '/guide/astro/basics/sizing', + }, + { + text: 'Stroke width', + desc: 'Adjust the stroke width of your icons', + link: '/guide/astro/basics/stroke-width', + }, + ], + }, + { + text: 'Advanced', + items: [ + { + text: 'Typescript', + link: '/guide/astro/advanced/typescript', + desc: 'All exported types and how to use them', + }, + { + text: 'Accessibility', + link: '/guide/astro/advanced/accessibility', + desc: 'Making your icons accessible', + }, + { + text: 'Global styling', + link: '/guide/astro/advanced/global-styling', + desc: 'Apply global styles to all icons', + }, + { + text: 'With Lucide Lab', + link: '/guide/astro/advanced/with-lucide-lab', + desc: 'Using lucide-lab with @lucide/astro', + }, + ], + }, + { + text: 'Resources', + items: [ + { + text: 'Accessibility in depth', + link: '/guide/accessibility', + desc: 'Accessibility best practices', + }, + { + text: 'VSCode', + link: '/guide/vscode', + desc: 'VSCode and Lucide', + }, + ], + }, +] satisfies DefaultTheme.SidebarItem[] & { items: { desc?: string }[] }[]; diff --git a/docs/.vitepress/sidebar/index.ts b/docs/.vitepress/sidebar/index.ts new file mode 100644 index 000000000..df0a780d3 --- /dev/null +++ b/docs/.vitepress/sidebar/index.ts @@ -0,0 +1,49 @@ +import { DefaultTheme, UserConfig } from 'vitepress'; +import { reactSidebar } from './react'; +import { vueSidebar } from './vue'; +import { svelteSidebar } from './svelte'; +import { lucideSidebar } from './lucide'; +import { solidSidebar } from './solid'; +import { preactSidebar } from './preact'; +import { reactNativeSidebar } from './react-native'; +import { astroSidebar } from './astro'; +import { resourcesSidebar } from './resources'; +import { angularSidebar } from './angular'; +import { lucideStaticSidebar } from './static'; + +type Sidebar = UserConfig['themeConfig']['sidebar']; + +export const guideSidebarTop: DefaultTheme.SidebarItem[] = [ + { + text: 'Introduction', + items: [ + { text: 'What is Lucide?', link: '/guide/' }, + { text: 'Version 1', link: '/guide/version-1' }, + { text: 'Installation', link: '/guide/installation' }, + { text: 'Comparison', link: '/guide/comparison' }, + ], + }, +]; + +const sidebar: Sidebar = { + '/guide': [{ text: '', link: '/' }], + '/guide/lucide/': lucideSidebar, + '/guide/react/': reactSidebar, + '/guide/vue/': vueSidebar, + '/guide/svelte/': svelteSidebar, + '/guide/solid/': solidSidebar, + '/guide/astro/': astroSidebar, + '/guide/preact/': preactSidebar, + '/guide/react-native/': reactNativeSidebar, + '/guide/angular/': angularSidebar, + '/guide/static/': lucideStaticSidebar, + '/community': resourcesSidebar, + '/contribute': resourcesSidebar, + '/license': resourcesSidebar, + '/code-of-conduct': resourcesSidebar, + '/brand-logo-statement': resourcesSidebar, + // This should be here to keep the sidebar shown on the icons page + icons: [{ text: '', link: '/' }], +}; + +export default sidebar; diff --git a/docs/.vitepress/sidebar/lucide.ts b/docs/.vitepress/sidebar/lucide.ts new file mode 100644 index 000000000..b61c2d6f1 --- /dev/null +++ b/docs/.vitepress/sidebar/lucide.ts @@ -0,0 +1,87 @@ +import { DefaultTheme } from 'vitepress'; + +export const lucideSidebar = [ + { + items: [ + { + text: 'Overview', + link: '/guide/lucide/', + }, + { + text: 'Getting started', + link: '/guide/lucide/getting-started', + desc: 'Learn how to get started with Lucide.', + }, + { + text: 'Migration from v0', + link: '/guide/lucide/migration', + desc: 'Learn how to migrate from v0 to v1 of Lucide.', + }, + ], + }, + { + text: 'Basics', + items: [ + { + text: 'Color', + desc: 'Adjust the color of your icons', + link: '/guide/lucide/basics/color', + }, + { + text: 'Sizing', + desc: 'Adjust the size of your icons', + link: '/guide/lucide/basics/sizing', + }, + { + text: 'Stroke width', + desc: 'Adjust the stroke width of your icons', + link: '/guide/lucide/basics/stroke-width', + }, + ], + }, + { + text: 'Advanced', + items: [ + { + text: 'Global styling', + link: '/guide/lucide/advanced/global-styling', + desc: 'Apply options and styles globally', + }, + { + text: 'Shadow DOM', + link: '/guide/lucide/advanced/shadow-dom', + desc: 'All exported types and how to use them', + }, + { + text: 'Template element', + link: '/guide/lucide/advanced/content-template-element', + desc: 'Using content template element with lucide', + }, + { + text: 'Accessibility', + link: '/guide/lucide/advanced/accessibility', + desc: 'Making your icons accessible', + }, + { + text: 'With Lucide Lab', + link: '/guide/lucide/advanced/with-lucide-lab', + desc: 'Using lucide-lab with lucide', + }, + { + text: 'Filled icons', + link: '/guide/lucide/advanced/filled-icons', + desc: 'Using filled icons in lucide', + }, + ], + }, + { + text: 'Resources', + items: [ + { + text: 'Accessibility in depth', + link: '/guide/accessibility', + desc: 'Accessibility best practices', + }, + ], + }, +] satisfies DefaultTheme.SidebarItem[] & { items: { desc?: string }[] }[]; diff --git a/docs/.vitepress/sidebar/preact.ts b/docs/.vitepress/sidebar/preact.ts new file mode 100644 index 000000000..7ecf24fc6 --- /dev/null +++ b/docs/.vitepress/sidebar/preact.ts @@ -0,0 +1,102 @@ +import { DefaultTheme } from 'vitepress'; + +export const preactSidebar = [ + { + items: [ + { + text: 'Overview', + link: '/guide/preact/', + }, + { + text: 'Getting started', + link: '/guide/preact/getting-started', + desc: 'Learn how to get started with Lucide for PReact.', + }, + { + text: 'Migration from v0', + link: '/guide/preact/migration', + desc: 'Learn how to migrate from v0 to v1 of Lucide.', + }, + ], + }, + { + text: 'Basics', + items: [ + { + text: 'Color', + desc: 'Adjust the color of your icons', + link: '/guide/preact/basics/color', + }, + { + text: 'Sizing', + desc: 'Adjust the size of your icons', + link: '/guide/preact/basics/sizing', + }, + { + text: 'Stroke width', + desc: 'Adjust the stroke width of your icons', + link: '/guide/preact/basics/stroke-width', + }, + ], + }, + { + text: 'Advanced', + items: [ + { + text: 'Typescript', + link: '/guide/preact/advanced/typescript', + desc: 'All exported types and how to use them', + }, + { + text: 'Accessibility', + link: '/guide/preact/advanced/accessibility', + desc: 'Making your icons accessible', + }, + { + text: 'Global styling', + link: '/guide/preact/advanced/global-styling', + desc: 'Apply global styles to all icons', + }, + { + text: 'With Lucide Lab', + link: '/guide/preact/advanced/with-lucide-lab', + desc: 'Using lucide-lab with lucide-preact', + }, + // { + // text: 'Animations', + // link: '/guide/preact/advanced/animations', + // desc: 'Add animations to your icons', + // }, + { + text: 'Filled icons', + link: '/guide/preact/advanced/filled-icons', + desc: 'Using filled icons in lucide-preact', + }, + { + text: 'Aliased Names', + link: '/guide/preact/advanced/aliased-names', + desc: 'Using aliased icon names', + }, + { + text: 'Combining icons', + link: '/guide/preact/advanced/combining-icons', + desc: 'Combine multiple icons into one', + }, + ], + }, + { + text: 'Resources', + items: [ + { + text: 'Accessibility in depth', + link: '/guide/accessibility', + desc: 'Accessibility best practices', + }, + { + text: 'VSCode', + link: '/guide/vscode', + desc: 'VSCode and Lucide', + }, + ], + }, +] satisfies DefaultTheme.SidebarItem[] & { items: { desc?: string }[] }[]; diff --git a/docs/.vitepress/sidebar/react-native.ts b/docs/.vitepress/sidebar/react-native.ts new file mode 100644 index 000000000..152a4adc5 --- /dev/null +++ b/docs/.vitepress/sidebar/react-native.ts @@ -0,0 +1,87 @@ +import { DefaultTheme } from 'vitepress'; + +export const reactNativeSidebar = [ + { + items: [ + { + text: 'Overview', + link: '/guide/react-native/', + }, + { + text: 'Getting started', + link: '/guide/react-native/getting-started', + desc: 'Learn how to get started with Lucide React Native', + }, + { + text: 'Migration from v0', + link: '/guide/react-native/migration', + desc: 'Learn how to migrate from v0 to v1 of Lucide.', + }, + ], + }, + { + text: 'Basics', + items: [ + { + text: 'Color', + desc: 'Adjust the color of your icons', + link: '/guide/react-native/basics/color', + }, + { + text: 'Sizing', + desc: 'Adjust the size of your icons', + link: '/guide/react-native/basics/sizing', + }, + { + text: 'Stroke width', + desc: 'Adjust the stroke width of your icons', + link: '/guide/react-native/basics/stroke-width', + }, + ], + }, + { + text: 'Advanced', + items: [ + { + text: 'Typescript', + link: '/guide/react-native/advanced/typescript', + desc: 'All exported types and how to use them', + }, + { + text: 'Global styling', + link: '/guide/react-native/advanced/global-styling', + desc: 'Apply global styles to all icons', + }, + { + text: 'With Lucide Lab', + link: '/guide/react-native/advanced/with-lucide-lab', + desc: 'Using lucide-lab with lucide-react-native', + }, + { + text: 'Filled icons', + link: '/guide/react-native/advanced/filled-icons', + desc: 'Using filled icons in lucide-react-native', + }, + { + text: 'Aliased Names', + link: '/guide/react-native/advanced/aliased-names', + desc: 'Using aliased icon names', + }, + { + text: 'Combining icons', + link: '/guide/react-native/advanced/combining-icons', + desc: 'Combine multiple icons into one', + }, + ], + }, + { + text: 'Resources', + items: [ + { + text: 'VSCode', + link: '/guide/vscode', + desc: 'VSCode and Lucide', + }, + ], + }, +] satisfies DefaultTheme.SidebarItem[] & { items: { desc?: string }[] }[]; diff --git a/docs/.vitepress/sidebar/react.ts b/docs/.vitepress/sidebar/react.ts new file mode 100644 index 000000000..5d85386ea --- /dev/null +++ b/docs/.vitepress/sidebar/react.ts @@ -0,0 +1,113 @@ +import { DefaultTheme } from 'vitepress'; + +export const reactSidebar = [ + { + items: [ + { + text: 'Overview', + link: '/guide/react/', + }, + { + text: 'Getting started', + link: '/guide/react/getting-started', + desc: 'Learn how to get started with Lucide for React.', + }, + { + text: 'Migration from v0', + link: '/guide/react/migration', + desc: 'Learn how to migrate from v0 to v1 of Lucide.', + }, + { + text: 'Migration from React Feather', + link: '/guide/react/migration-from-feather', + desc: 'Learn how to migrate from `react-feather` to `lucide-react`', + }, + ], + }, + { + text: 'Basics', + items: [ + { + text: 'Color', + desc: 'Adjust the color of your icons', + link: '/guide/react/basics/color', + }, + { + text: 'Sizing', + desc: 'Adjust the size of your icons', + link: '/guide/react/basics/sizing', + }, + { + text: 'Stroke width', + desc: 'Adjust the stroke width of your icons', + link: '/guide/react/basics/stroke-width', + }, + ], + }, + { + text: 'Advanced', + items: [ + { + text: 'Typescript', + link: '/guide/react/advanced/typescript', + desc: 'All exported types and how to use them', + }, + { + text: 'Accessibility', + link: '/guide/react/advanced/accessibility', + desc: 'Making your icons accessible', + }, + { + text: 'Global styling', + link: '/guide/react/advanced/global-styling', + desc: 'Apply global styles to all icons', + }, + { + text: 'With Lucide Lab', + link: '/guide/react/advanced/with-lucide-lab', + desc: 'Using lucide-lab with lucide-react', + }, + // { + // text: 'Animations', + // link: '/guide/react/advanced/animations', + // desc: 'Add animations to your icons', + // }, + { + text: 'Filled icons', + link: '/guide/react/advanced/filled-icons', + desc: 'Using filled icons in lucide-react', + }, + { + text: 'Aliased Names', + link: '/guide/react/advanced/aliased-names', + desc: 'Using aliased icon names', + }, + + { + text: 'Combining icons', + link: '/guide/react/advanced/combining-icons', + desc: 'Combine multiple icons into one', + }, + { + text: 'Dynamic icon component', + link: '/guide/react/advanced/dynamic-icon-component.md', + desc: 'Dynamically import icons as needed', + }, + ], + }, + { + text: 'Resources', + items: [ + { + text: 'Accessibility in depth', + link: '/guide/accessibility', + desc: 'Accessibility best practices', + }, + { + text: 'VSCode', + link: '/guide/vscode', + desc: 'VSCode and Lucide', + }, + ], + }, +] satisfies DefaultTheme.SidebarItem[] & { items: { desc?: string }[] }[]; diff --git a/docs/.vitepress/sidebar/resources.ts b/docs/.vitepress/sidebar/resources.ts new file mode 100644 index 000000000..649815478 --- /dev/null +++ b/docs/.vitepress/sidebar/resources.ts @@ -0,0 +1,52 @@ +export const resourcesSidebar = [ + { + text: 'About', + items: [ + { + text: 'License', + link: '/license', + }, + { + text: 'Community', + link: '/community', + }, + { + text: 'Code of Conduct', + link: '/code-of-conduct', + }, + { + text: 'Brand logo statement', + link: '/brand-logo-statement', + }, + { + text: 'Contributing', + link: '/contribute', + }, + ], + }, + { + text: 'Designing icons', + items: [ + { + text: 'Icon Design Principles', + link: '/contribute/icon-design-guide', + }, + { + text: 'Designing in Illustrator', + link: '/contribute/illustrator-guide', + }, + { + text: 'Designing in Inkscape', + link: '/contribute/inkscape-guide', + }, + { + text: 'Designing in Figma', + link: '/contribute/figma-guide', + }, + { + text: 'Designing in Affinity Designer', + link: '/contribute/affinity-designer-guide', + }, + ], + }, +]; diff --git a/docs/.vitepress/sidebar/solid.ts b/docs/.vitepress/sidebar/solid.ts new file mode 100644 index 000000000..78f1855a2 --- /dev/null +++ b/docs/.vitepress/sidebar/solid.ts @@ -0,0 +1,103 @@ +import { DefaultTheme } from 'vitepress'; + +export const solidSidebar = [ + { + items: [ + { + text: 'Overview', + link: '/guide/solid/', + }, + { + text: 'Getting started', + link: '/guide/solid/getting-started', + desc: 'Learn how to get started with Lucide.', + }, + { + text: 'Migration from v0', + link: '/guide/solid/migration', + desc: 'Learn how to migrate from v0 to v1 of Lucide.', + }, + ], + }, + { + text: 'Basics', + items: [ + { + text: 'Color', + desc: 'Adjust the color of your icons', + link: '/guide/solid/basics/color', + }, + { + text: 'Sizing', + desc: 'Adjust the size of your icons', + link: '/guide/solid/basics/sizing', + }, + { + text: 'Stroke width', + desc: 'Adjust the stroke width of your icons', + link: '/guide/solid/basics/stroke-width', + }, + ], + }, + { + text: 'Advanced', + items: [ + { + text: 'Typescript', + link: '/guide/solid/advanced/typescript', + desc: 'All exported types and how to use them', + }, + { + text: 'Accessibility', + link: '/guide/solid/advanced/accessibility', + desc: 'Making your icons accessible', + }, + { + text: 'Global styling', + link: '/guide/solid/advanced/global-styling', + desc: 'Apply global styles to all icons', + }, + { + text: 'With Lucide Lab', + link: '/guide/solid/advanced/with-lucide-lab', + desc: 'Using lucide-lab with lucide-solid', + }, + // { + // text: 'Animations', + // link: '/guide/solid/advanced/animations', + // desc: 'Add animations to your icons', + // }, + { + text: 'Filled icons', + link: '/guide/solid/advanced/filled-icons', + desc: 'Using filled icons in lucide-solid', + }, + { + text: 'Aliased Names', + link: '/guide/solid/advanced/aliased-names', + desc: 'Using aliased icon names', + }, + // Add support for this later + // { + // text: 'Combining icons', + // link: '/guide/solid/advanced/combining-icons', + // desc: 'Combine multiple icons into one', + // }, + ], + }, + { + text: 'Resources', + items: [ + { + text: 'Accessibility in depth', + link: '/guide/accessibility', + desc: 'Accessibility best practices', + }, + { + text: 'VSCode', + link: '/guide/vscode', + desc: 'VSCode and Lucide', + }, + ], + }, +] satisfies DefaultTheme.SidebarItem[] & { items: { desc?: string }[] }[]; diff --git a/docs/.vitepress/sidebar/static.ts b/docs/.vitepress/sidebar/static.ts new file mode 100644 index 000000000..6628623a6 --- /dev/null +++ b/docs/.vitepress/sidebar/static.ts @@ -0,0 +1,88 @@ +import { DefaultTheme } from 'vitepress'; + +export const lucideStaticSidebar = [ + { + items: [ + { + text: 'Overview', + desc: 'Overview of using Lucide icons as static assets in your projects', + link: '/guide/static/', + }, + { + text: 'Getting started', + link: '/guide/static/getting-started', + desc: 'Learn how to get started with Lucide static.', + }, + { + text: 'Migration from v0', + link: '/guide/static/migration', + desc: 'Learn how to migrate from v0 to v1 of Lucide static.', + }, + ], + }, + { + text: 'SVG Files & Sprite', + items: [ + { + text: 'Import SVG files as images', + desc: 'Use icons as images in your project', + link: '/guide/static/link-as-image', + }, + { + text: 'SVG Sprite', + desc: 'Use SVG sprites in your project', + link: '/guide/static/svg-sprite', + }, + ], + }, + { + text: 'Icon Font', + items: [ + { + text: 'Import as font', + desc: 'Use icons as a web font in your project', + link: '/guide/static/font/', + }, + { + text: 'Color', + desc: 'Adjust the color of your icons', + link: '/guide/static/font/color', + }, + { + text: 'Sizing', + desc: 'Adjust the size of your icons', + link: '/guide/static/font/sizing', + }, + ], + }, + { + text: 'SVG String JS modules', + items: [ + { + text: 'Use in Node.js', + desc: 'Use Lucide in your Node.js projects', + link: '/guide/static/js-modules/node', + }, + { + text: 'Use in JS projects', + desc: 'Use Lucide in your JavaScript projects', + link: '/guide/static/js-modules/web', + }, + ], + }, + { + text: 'Resources', + items: [ + { + text: 'Accessibility in depth', + link: '/guide/accessibility', + desc: 'Accessibility best practices', + }, + { + text: 'VSCode', + link: '/guide/vscode', + desc: 'VSCode and Lucide', + }, + ], + }, +] satisfies DefaultTheme.SidebarItem[] & { items: { desc?: string }[] }[]; diff --git a/docs/.vitepress/sidebar/svelte.ts b/docs/.vitepress/sidebar/svelte.ts new file mode 100644 index 000000000..80dbf365f --- /dev/null +++ b/docs/.vitepress/sidebar/svelte.ts @@ -0,0 +1,92 @@ +import { DefaultTheme } from 'vitepress'; + +export const svelteSidebar = [ + { + items: [ + { + text: 'Overview', + link: '/guide/svelte/', + }, + { + text: 'Getting started', + link: '/guide/svelte/getting-started', + desc: 'Learn how to get started with Lucide for Svelte.', + }, + { + text: 'Migration from v0', + link: '/guide/svelte/migration', + desc: 'Learn how to migrate from v0 to v1 of Lucide.', + }, + ], + }, + { + text: 'Basics', + items: [ + { + text: 'Color', + desc: 'Adjust the color of your icons', + link: '/guide/svelte/basics/color', + }, + { + text: 'Sizing', + desc: 'Adjust the size of your icons', + link: '/guide/svelte/basics/sizing', + }, + { + text: 'Stroke width', + desc: 'Adjust the stroke width of your icons', + link: '/guide/svelte/basics/stroke-width', + }, + ], + }, + { + text: 'Advanced', + items: [ + { + text: 'Typescript', + link: '/guide/svelte/advanced/typescript', + desc: 'All exported types and how to use them', + }, + { + text: 'Accessibility', + link: '/guide/svelte/advanced/accessibility', + desc: 'Making your icons accessible', + }, + { + text: 'Global styling', + link: '/guide/svelte/advanced/global-styling', + desc: 'Apply global styles to all icons', + }, + { + text: 'With Lucide Lab', + link: '/guide/svelte/advanced/with-lucide-lab', + desc: 'Using lucide-lab with @lucide/svelte', + }, + { + text: 'Filled icons', + link: '/guide/svelte/advanced/filled-icons', + desc: 'Using filled icons in @lucide/svelte', + }, + { + text: 'Combining icons', + link: '/guide/svelte/advanced/combining-icons', + desc: 'Combine multiple icons into one', + }, + ], + }, + { + text: 'Resources', + items: [ + { + text: 'Accessibility in depth', + link: '/guide/accessibility', + desc: 'Accessibility best practices', + }, + { + text: 'VSCode', + link: '/guide/vscode', + desc: 'VSCode and Lucide', + }, + ], + }, +] satisfies DefaultTheme.SidebarItem[] & { items: { desc?: string }[] }[]; diff --git a/docs/.vitepress/sidebar/vue.ts b/docs/.vitepress/sidebar/vue.ts new file mode 100644 index 000000000..3840ef7bd --- /dev/null +++ b/docs/.vitepress/sidebar/vue.ts @@ -0,0 +1,98 @@ +import { DefaultTheme } from 'vitepress'; + +export const vueSidebar = [ + { + items: [ + { + text: 'Overview', + link: '/guide/vue/', + }, + { + text: 'Getting started', + link: '/guide/vue/getting-started', + desc: 'Learn how to get started with Lucide for Vue.', + }, + { + text: 'Migration from v0', + link: '/guide/vue/migration', + desc: 'Learn how to migrate from v0 to v1 of Lucide.', + }, + ], + }, + { + text: 'Basics', + items: [ + { + text: 'Color', + desc: 'Adjust the color of your icons', + link: '/guide/vue/basics/color', + }, + { + text: 'Sizing', + desc: 'Adjust the size of your icons', + link: '/guide/vue/basics/sizing', + }, + { + text: 'Stroke width', + desc: 'Adjust the stroke width of your icons', + link: '/guide/vue/basics/stroke-width', + }, + ], + }, + { + text: 'Advanced', + items: [ + { + text: 'Typescript', + link: '/guide/vue/advanced/typescript', + desc: 'All exported types and how to use them', + }, + { + text: 'Accessibility', + link: '/guide/vue/advanced/accessibility', + desc: 'Making your icons accessible', + }, + { + text: 'Global styling', + link: '/guide/vue/advanced/global-styling', + desc: 'Apply global styles to all icons', + }, + { + text: 'With Lucide Lab', + link: '/guide/vue/advanced/with-lucide-lab', + desc: 'Using lucide-lab with @lucide/vue', + }, + { + text: 'Filled icons', + link: '/guide/vue/advanced/filled-icons', + desc: 'Using filled icons in @lucide/vue', + }, + { + text: 'Aliased Names', + link: '/guide/vue/advanced/aliased-names', + desc: 'Using aliased icon names', + }, + + { + text: 'Combining icons', + link: '/guide/vue/advanced/combining-icons', + desc: 'Combine multiple icons into one', + }, + ], + }, + { + text: 'Resources', + items: [ + { + text: 'Accessibility in depth', + link: '/guide/accessibility', + desc: 'Accessibility best practices', + }, + { + text: 'VSCode', + link: '/guide/vscode', + desc: 'VSCode and Lucide', + }, + ], + }, +] satisfies DefaultTheme.SidebarItem[] & { items: { desc?: string }[] }[]; diff --git a/docs/.vitepress/theme/components/base/ButtonMenu.vue b/docs/.vitepress/theme/components/base/ButtonMenu.vue index 6580c8fdb..618642d4a 100644 --- a/docs/.vitepress/theme/components/base/ButtonMenu.vue +++ b/docs/.vitepress/theme/components/base/ButtonMenu.vue @@ -1,62 +1,58 @@