feat: добавить поддержку 20 framework exact modes

Добавлены exact modes:
- vue@vite и vue@webpack
- nuxt@vite и nuxt@webpack
- svelte@vite, svelte@webpack и sveltekit@vite
- angular@application и angular@webpack
- astro@vite
- solid@vite, solid@webpack и solid-start@vite
- preact@vite и preact@webpack
- qwik@vite
- lit@vite и lit@webpack
- alpine@vite и alpine@webpack

Для каждого mode реализованы изолированный adapter, нативный
framework-компонент, declarations, manifest, CSS и внешний asset URL.

Добавлены production integration-стенды с генерацией, typecheck,
сборкой и Playwright-проверкой рендера спрайта и Viewer.

Обновлены Viewer, RU/EN-гайды, README, technical reference и AI skills.
Итоговая матрица включает 29 exact modes.

Проверки:
- 48 unit-тестов
- 29 integration E2E-тестов
This commit is contained in:
2026-07-15 16:56:44 +03:00
parent e54ab4991c
commit 8b3365f957
378 changed files with 21188 additions and 650 deletions

View File

@@ -6,7 +6,7 @@
`@gromlab/svg-sprites` — генератор SVG-спрайтов для современных веб-приложений. Он собирает выбранные SVG-иконки в один или несколько внешних кешируемых спрайтов и подготавливает их для использования в интерфейсе.
Для vanilla-приложений с Vite/Webpack пакет создаёт нативный типизированный Web Component, а для React и Next.js — React-компонент. SVG во всех случаях остаётся отдельным кешируемым asset.
Каждый exact mode создаёт нативный типизированный компонент для своего framework и bundler: Web Component, React, Vue, Svelte, Angular, Astro, Solid, Preact, Qwik, Lit или Alpine.js. SVG во всех случаях остаётся отдельным кешируемым asset.
## SVG-спрайт так же прост, как обычная SVG-иконка
@@ -205,26 +205,21 @@ JavaScript отвечает за интерфейс и поведение, а г
## SpriteViewer: все спрайты на одной debug-странице
`SpriteViewer` рендерит все standalone, React и Next.js спрайты проекта в одном месте. Один Web Component отвечает за визуал, а React использует тонкий bridge к нему.
`SpriteViewer` рендерит спрайты всех поддерживаемых exact modes в одном месте. Один Web Component отвечает за визуал, а для React также доступен тонкий bridge к нему.
Для каждой иконки видны созданные CSS-переменные и их fallback-цвета. Значения можно менять прямо в Viewer и сразу наблюдать результат.
Здесь же доступны готовые примеры подключения через:
- React;
- `<svg><use>`;
- `<img>`;
- CSS.
Здесь же доступны готовые примеры для framework из manifest, `<svg><use>`, `<img>` и CSS.
![SpriteViewer](https://raw.githubusercontent.com/gromlab-ru/svg-sprites/master/preview-image.png)
Viewer подключается только к внутренней debug-странице и не становится частью generated-компонентов иконок.
Bare standalone подключает Viewer через browser script и HTML element; bundler modes используют npm entry, а React и Next.js импортируют `SpriteViewer` из `@gromlab/svg-sprites/react`.
Bare standalone подключает Viewer через browser script и HTML element. Bundler и framework modes используют npm entry Web Component; React и Next.js также могут импортировать bridge из `@gromlab/svg-sprites/react`.
## Standalone, React и Next.js
## 29 exact modes
Пакет генерирует низкоуровневые standalone-спрайты для static HTML, Vite и Webpack 5, а также типизированные React-компоненты для React и Next.js.
Пакет предоставляет изолированные контракты для standalone, React, Next.js, Vue, Nuxt, Svelte, SvelteKit, Angular, Astro, Solid, SolidStart, Preact, Qwik, Lit и Alpine.js в поддерживаемых вариантах Vite, Webpack, Turbopack и application builder.
## Чистый Git
@@ -249,6 +244,26 @@ README знакомит с возможностями проекта и пока
- [Standalone + Webpack 5](docs/ru/guides/standalone-webpack.md)
- [React + Vite](docs/ru/guides/react-vite.md)
- [React + Webpack 5](docs/ru/guides/react-webpack.md)
- [Vue + Vite](docs/ru/guides/vue-vite.md)
- [Vue + Webpack](docs/ru/guides/vue-webpack.md)
- [Nuxt + Vite](docs/ru/guides/nuxt-vite.md)
- [Nuxt + Webpack](docs/ru/guides/nuxt-webpack.md)
- [Svelte + Vite](docs/ru/guides/svelte-vite.md)
- [Svelte + Webpack](docs/ru/guides/svelte-webpack.md)
- [SvelteKit + Vite](docs/ru/guides/sveltekit-vite.md)
- [Angular application builder](docs/ru/guides/angular-application.md)
- [Angular + Webpack](docs/ru/guides/angular-webpack.md)
- [Astro + Vite](docs/ru/guides/astro-vite.md)
- [Solid + Vite](docs/ru/guides/solid-vite.md)
- [Solid + Webpack](docs/ru/guides/solid-webpack.md)
- [SolidStart + Vite](docs/ru/guides/solid-start-vite.md)
- [Preact + Vite](docs/ru/guides/preact-vite.md)
- [Preact + Webpack](docs/ru/guides/preact-webpack.md)
- [Qwik + Vite](docs/ru/guides/qwik-vite.md)
- [Lit + Vite](docs/ru/guides/lit-vite.md)
- [Lit + Webpack](docs/ru/guides/lit-webpack.md)
- [Alpine.js + Vite](docs/ru/guides/alpine-vite.md)
- [Alpine.js + Webpack](docs/ru/guides/alpine-webpack.md)
- [Next.js App Router + Turbopack](docs/ru/guides/next-app-turbopack.md)
- [Next.js App Router + Webpack](docs/ru/guides/next-app-webpack.md)
- [Next.js Pages Router + Turbopack](docs/ru/guides/next-pages-turbopack.md)