Files
svg-sprites/docs/ru/guides/sveltekit-vite.md
S.Gromov 8b3365f957 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-тестов
2026-07-15 16:56:44 +03:00

92 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SVG-спрайт для SvelteKit на Vite
Инструкция по быстрому созданию SVG-спрайта в SvelteKit-приложении на Vite.
## Генерация спрайта
Выберите каталог для будущего SVG-спрайта, например `assets/app-icons`, и создайте в нём `svg-sprite.config.json`. В `input` укажите путь к существующим SVG относительно файла конфигурации. Перемещать или копировать иконки не требуется.
Пример конфига:
```json
{
"mode": "sveltekit@vite",
"name": "app",
"input": "../svg-icons/**/*.svg"
}
```
Пакет не нужно добавлять в зависимости проекта: генерация запускается через `npx`.
Добавьте команды генерации в `package.json`. Сгенерированные файлы по умолчанию исключены из Git, поэтому `predev` и `prebuild` пересобирают спрайт перед каждым запуском и сборкой:
```json
{
"scripts": {
"sprites": "npx --yes @gromlab/svg-sprites assets/app-icons/svg-sprite.config.json",
"predev": "npm run sprites",
"dev": "vite dev",
"prebuild": "npm run sprites",
"build": "vite build"
}
}
```
## Использование спрайта
Значение `name: "app"` создаёт SSR-safe Svelte-компонент `AppIcon`.
Создайте `assets/app-icons/index.js`:
```js
export * from './.svg-sprite/index.js'
```
Используйте компонент в `src/routes/+page.svelte`:
```svelte
<script>
import { AppIcon } from '../../assets/app-icons/index.js'
</script>
<AppIcon
icon="icon-name"
width="24"
height="24"
role="img"
aria-label="Готово"
style="color: #334155; --icon-color-2: #f59e0b"
/>
```
Свойство `icon` принимает имена исходных SVG без расширения. В компоненте нет browser-only инициализации, поэтому страница может рендериться на сервере. Vite выпускает `sprite.svg` отдельным production asset.
## Дебаг и превью
Viewer показывает все иконки на одной странице, позволяет проверить их отображение, изменить цвета и посмотреть связанные CSS-переменные. Он нужен только для разработки и устанавливается отдельно:
```bash
npm install --save-dev @gromlab/svg-sprites
```
Создайте отладочный route, например `src/routes/svg-sprite/+page.svelte`. Загружайте custom element из action, чтобы регистрация выполнялась только в браузере:
```svelte
<script>
const sources = [
() => import('../../../assets/app-icons/.svg-sprite/svg-sprite.manifest.js'),
]
function connectViewer(node) {
void import('@gromlab/svg-sprites/viewer/element').then(() => {
node.sources = sources
node.viewerTitle = 'Иконки проекта'
})
}
</script>
<gromlab-sprite-viewer use:connectViewer></gromlab-sprite-viewer>
```
Запустите `npm run dev` и откройте `/svg-sprite`. Action не выполняется во время SSR.