This commit is contained in:
2026-07-15 12:27:46 +03:00
parent ab7042001a
commit 44afec7cdb
35 changed files with 1056 additions and 1224 deletions

View File

@@ -1,6 +1,6 @@
# @gromlab/svg-sprites
[🇬🇧 English](README.md) | 🇷🇺 Русский
[🇬🇧 English](https://github.com/gromlab-ru/svg-sprites/blob/master/README.md) | 🇷🇺 Русский
![npm](https://img.shields.io/npm/v/@gromlab/svg-sprites) ![license](https://img.shields.io/npm/l/@gromlab/svg-sprites)
@@ -24,20 +24,6 @@
В приложении не приходится работать со спрайтом напрямую. Вы используете его так же, как обычную SVG-иконку, но получаете один компонент, автокомплит и TypeScript-проверку всех имён.
В `standalone@vite` и `standalone@webpack` тот же подход доступен без React:
```ts
import { defineAppIconElement } from './app-icons'
defineAppIconElement()
```
```html
<app-icon icon="search" style="font-size: 24px"></app-icon>
```
Bare `standalone` остаётся минимальным и генерирует только SVG asset и JSON manifest без JavaScript runtime.
## AI-friendly из коробки
`@gromlab/svg-sprites` сразу рассчитан на работу с AI-агентами. Подключите готовый skill и поручите агенту настройку, миграцию или диагностику без длинных инструкций и ручного изучения документации.
@@ -46,61 +32,54 @@ Bare `standalone` остаётся минимальным и генерируе
[🇬🇧 Скачать AI skill (на английском)](https://github.com/gromlab-ru/svg-sprites/releases/latest/download/svg-sprites.zip)
## От SVG до компонента за четыре шага
## От SVG до компонента за три шага
Основной пример использует Next.js App Router и Turbopack.
### 1. Генерируйте без установки пакета
### 1. Укажите нужные иконки
```bash
npx --yes --package=@gromlab/svg-sprites@latest svg-sprites --help
```
`npx` временно скачивает CLI, не добавляет `@gromlab/svg-sprites` в
`package.json`, а generated production runtime не импортирует package.
### 2. Укажите нужные иконки
SVG могут оставаться в существующей структуре проекта:
Создайте папки для исходных иконок и спрайта:
```text
src/
├── assets/icons/
── search.svg
└── settings.svg
├── features/profile/
└── user.svg
└── ui/app-icons/
└── svg-sprite.config.ts
assets/
├── app-icons/
── svg-sprite.config.json
└── svg-icons/
├── search.svg
└── settings.svg
```
Создайте конфигурацию спрайта:
```ts
// src/ui/app-icons/svg-sprite.config.ts
export default {
mode: 'next@app/turbopack',
name: 'app',
input: [
'../../assets/icons/search.svg',
'../../assets/icons/settings.svg',
'../../features/profile/user.svg',
],
```json
{
"mode": "next@app/turbopack",
"name": "app",
"input": "../svg-icons/**/*.svg"
}
```
### 3. Добавьте генерацию
`input` поддерживает пути к папкам, отдельным SVG и glob-шаблоны.
### 2. Добавьте генерацию
```json
{
"scripts": {
"sprites": "npx --yes --package=@gromlab/svg-sprites@latest svg-sprites src/ui/app-icons/svg-sprite.config.ts",
"sprites": "npx --yes @gromlab/svg-sprites assets/app-icons/svg-sprite.config.json",
"predev": "npm run sprites",
"prebuild": "npm run sprites"
}
}
```
Создайте точку входа для сгенерированного API:
```ts
// assets/app-icons/index.ts
export * from './.svg-sprite/index.js'
```
Первый запуск:
```bash
@@ -109,10 +88,11 @@ npm run sprites
Пакет создаст `AppIcon`, TypeScript-типы и отдельный SVG-спрайт.
### 4. Используйте как обычную иконку
### 3. Используйте как обычную иконку
```tsx
import { AppIcon } from '@/ui/app-icons'
// app/page.tsx
import { AppIcon } from '../assets/app-icons'
export default function SearchButton() {
return (
@@ -277,6 +257,7 @@ README знакомит с возможностями проекта и пока
### Технические материалы
- [Индекс документации](docs/ru/README.md)
- [Конфигурация](docs/ru/configuration.md)
- [Технический справочник](docs/ru/reference/technical.md)
- [Программный API](docs/ru/reference/programmatic-api.md)