# @gromlab/svg-sprites
 
Генерация SVG-спрайтов из папок с иконками. TypeScript-типизация, SVG-трансформации, React-компонент и HTML-превью из коробки.

**Чем отличается от аналогов:**
- Генерирует готовый типизированный React-компонент — не нужно писать обёртку
- Автоматически заменяет цвета на CSS-переменные — для тем и hover-состояний
- Выдаёт HTML-превью всех иконок — удобно пересылать дизайнеру
## Требования
- Node.js 18+
- React 18+ (опционально, только если нужен генерируемый компонент)
## Установка
```bash
npm install @gromlab/svg-sprites
```
## Быстрый старт
Создайте файл `svg-sprites.config.ts` в корне проекта:
```ts
import { defineConfig } from '@gromlab/svg-sprites'
export default defineConfig({
// Папка для сгенерированных SVG-спрайтов
output: 'public/sprites',
// URL-путь к спрайтам (для href в React-компоненте)
publicPath: '/sprites',
// Папка для React-компонента и типов
react: 'src/shared/ui/svg-sprite',
sprites: [
{ name: 'icons', input: 'src/assets/icons' },
{ name: 'logos', input: 'src/assets/logos' },
],
})
```
Запустите генерацию:
```bash
# или добавьте "sprite": "svg-sprites" в scripts вашего package.json
npx svg-sprites
```
В результате будут сгенерированы SVG-спрайты, типизированный React-компонент и HTML-превью.
Цвета иконок автоматически заменяются на CSS-переменные — см. раздел [Управление цветом](#управление-цветом).
## Использование компонента
```tsx
import { SvgSprite } from './shared/ui/svg-sprite'
// Иконка из первого спрайта (по умолчанию)
// Иконка из другого спрайта
// Обёртка в (удобно для inline-элементов)
```
Компонент полностью типизирован — автодополнение работает для имён иконок и спрайтов. Типы экспортируются из того же модуля:
```ts
import type {
IconsIconName, // 'check' | 'arrow-left' | ...
LogosIconName, // 'github' | 'twitter' | ...
SpriteName, // 'icons' | 'logos'
SpriteMap, // { icons: IconsIconName, logos: LogosIconName }
} from './shared/ui/svg-sprite'
```
## Управление цветом
При сборке цвета иконок заменяются на CSS-переменные. Это ключевая фича — иконки адаптируются к теме без дублирования SVG.
**Моно-иконка** (один цвет) — наследует `color` текста:
```css
.button { color: red; }
```
Или точечно через CSS-переменную:
```css
.button { --icon-color-1: #ff0000; }
```
**Мульти-иконка** (несколько цветов) — каждый цвет задаётся отдельной переменной:
```css
.card {
--icon-color-1: #ff0000;
--icon-color-2: #00ff00;
}
```
## Способы рендера
| Способ | Управление цветом | Пример |
|--------|-------------------|--------|
| React / SVG `