# @gromlab/svg-sprites [πŸ‡¬πŸ‡§ English](README.md) | πŸ‡·πŸ‡Ί Русский ![npm](https://img.shields.io/npm/v/@gromlab/svg-sprites) ![license](https://img.shields.io/npm/l/@gromlab/svg-sprites) `@gromlab/svg-sprites` β€” Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ SVG-спрайтов для соврСмСнных Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Он собираСт Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ SVG-ΠΈΠΊΠΎΠ½ΠΊΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… спрайтов ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ ΠΈΡ… для использования Π² интСрфСйсС. Для React ΠΈ Next.js ΠΏΠ°ΠΊΠ΅Ρ‚ создаёт Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ внСшниС SVG assets, поддСрТивая Vite, Webpack 5 ΠΈ Turbopack. ## SVG-спрайт Ρ‚Π°ΠΊ ΠΆΠ΅ прост, ΠΊΠ°ΠΊ обычная SVG-ΠΈΠΊΠΎΠ½ΠΊΠ° Для всСго спрайта гСнСрируСтся ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠΊΠΎΠ½ΠΊΡƒ Ρ‡Π΅Ρ€Π΅Π· `icon`, Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π°Π²Ρ‚ΠΎΠΊΠΎΠΌΠΏΠ»ΠΈΡ‚ всСх доступных ΠΈΠΌΡ‘Π½. ```tsx ``` ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Π΅ SVG-Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹: Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, `color`, `className`, `style`, `aria-*` ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий. Если Π½ΡƒΠΆΠ΅Π½ внСшний ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ `wrapped`. ```tsx ``` Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ приходится Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со спрайтом Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Π’Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΅Π³ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ SVG-ΠΈΠΊΠΎΠ½ΠΊΡƒ, Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Π°Π²Ρ‚ΠΎΠΊΠΎΠΌΠΏΠ»ΠΈΡ‚ ΠΈ TypeScript-ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ всСх ΠΈΠΌΡ‘Π½. ## AI-friendly ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ `@gromlab/svg-sprites` сразу рассчитан Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с AI-Π°Π³Π΅Π½Ρ‚Π°ΠΌΠΈ. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ skill ΠΈ ΠΏΠΎΡ€ΡƒΡ‡ΠΈΡ‚Π΅ Π°Π³Π΅Π½Ρ‚Ρƒ настройку, ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ диагностику Π±Π΅Π· Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… инструкций ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ изучСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. [πŸ‡·πŸ‡Ί Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ AI skill (Π½Π° русском)](https://github.com/gromlab-ru/svg-sprites/releases/latest/download/svg-sprites-ru.zip) [πŸ‡¬πŸ‡§ Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ AI skill (Π½Π° английском)](https://github.com/gromlab-ru/svg-sprites/releases/latest/download/svg-sprites.zip) ## ΠžΡ‚ SVG Π΄ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π·Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ шага Основной ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Next.js App Router ΠΈ Turbopack. ### 1. УстановитС ΠΏΠ°ΠΊΠ΅Ρ‚ ```bash npm install --save-dev @gromlab/svg-sprites ``` ### 2. Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΈΠΊΠΎΠ½ΠΊΠΈ SVG ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ структурС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: ```text src/ β”œβ”€β”€ assets/icons/ β”‚ β”œβ”€β”€ search.svg β”‚ └── settings.svg β”œβ”€β”€ features/profile/ β”‚ └── user.svg └── ui/app-icons/ └── svg-sprite.config.ts ``` Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ спрайта: ```ts // src/ui/app-icons/svg-sprite.config.ts import { defineSpriteConfig } from '@gromlab/svg-sprites' export default defineSpriteConfig({ mode: 'next@app/turbopack', name: 'app', inputFiles: [ '../../assets/icons/search.svg', '../../assets/icons/settings.svg', '../../features/profile/user.svg', ], }) ``` ### 3. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ```json { "scripts": { "sprites": "svg-sprites src/ui/app-icons/svg-sprite.config.ts", "predev": "npm run sprites", "prebuild": "npm run sprites" } } ``` ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ запуск: ```bash npm run sprites ``` ΠŸΠ°ΠΊΠ΅Ρ‚ создаст `AppIcon`, TypeScript-Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ SVG-спрайт. ### 4. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ ΠΈΠΊΠΎΠ½ΠΊΡƒ ```tsx import { AppIcon } from '@/ui/app-icons' export default function SearchButton() { return ( ) } ``` Π­Ρ‚ΠΎ Server Component. Для ΠΈΠΊΠΎΠ½ΠΊΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ provider, `'use client'` ΠΈΠ»ΠΈ ручная сборка URL. ## Π’ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ с Π°Π²Ρ‚ΠΎΠΊΠΎΠΌΠΏΠ»ΠΈΡ‚ΠΎΠΌ ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ спрайт ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ собствСнный Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Бвойство `icon` формируСтся ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΡ‘Π½ SVG, поэтому Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ список доступных ΠΈΠΊΠΎΠ½ΠΎΠΊ, Π° TypeScript сразу ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ. ```tsx // доступная ΠΈΠΊΠΎΠ½ΠΊΠ° // ошибка TypeScript ``` ПослС добавлСния Π½ΠΎΠ²ΠΎΠΉ SVG-ΠΈΠΊΠΎΠ½ΠΊΠΈ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΅Ρ‘ имя автоматичСски появляСтся Π² Ρ‚ΠΈΠΏΠ°Ρ… ΠΈ Π°Π²Ρ‚ΠΎΠΊΠΎΠΌΠΏΠ»ΠΈΡ‚Π΅. НС Π½ΡƒΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, union-Ρ‚ΠΈΠΏΡ‹ ΠΈΠ»ΠΈ рССстр ΠΈΠΌΡ‘Π½. ## Next.js App Router ΠΈ SSR ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ Generated-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Server Components, SSR ΠΈ SSG Π±Π΅Π· `'use client'`. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠΊΠΎΠ½ΠΊΠΈ Π½Π΅ пСрСносит страницу Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ provider ΠΈ Π½Π΅ создаёт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Π³ΠΈΠ΄Ρ€Π°Ρ‚Π°Ρ†ΠΈΠΈ. Один ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² `page.tsx`, `layout.tsx`, сСрвСрных ΠΈ клиСнтских ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…. ## ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ спрайты вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ глобального ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ ΠΎΠ΄Π½ΠΈΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΈΠΊΠΎΠ½ΠΎΠΊ. Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ нСзависимыС спрайты для ΠΎΠ±Ρ‰ΠΈΡ… элСмСнтов, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… страниц ΠΈ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… UI-ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. ```tsx ``` ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ собствСнный Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈ SVG asset, поэтому Ρ€Π°Π·Π΄Π΅Π»Ρ‹ прилоТСния Π½Π΅ нСсут ΠΈΠΊΠΎΠ½ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. ## КаТдая ΠΈΠΊΠΎΠ½ΠΊΠ° хранится Π² ΠΎΠ΄Π½ΠΎΠΌ экзСмплярС Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ исходников каТдая SVG-ΠΈΠΊΠΎΠ½ΠΊΠ° хранится Π² ΠΎΠ΄Π½ΠΎΠΌ экзСмплярС ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² любоС количСство спрайтов. ΠžΠ±Ρ‰ΠΈΠ΅ ΠΈΠΊΠΎΠ½ΠΊΠΈ Π½Π΅ приходится ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ страницами ΠΈ модулями: ΠΎΠ½ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ для всСх Π½Π°Π±ΠΎΡ€ΠΎΠ² ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ мСста. ```text search.svg ─┬─→ AppIcon β”œβ”€β†’ AnalyticsIcon └─→ EditorIcon ``` Π‘ΠΏΡ€Π°ΠΉΡ‚Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π΄ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° исходных ΠΈΠΊΠΎΠ½ΠΎΠΊ остаётся Π΅Π΄ΠΈΠ½ΠΎΠΉ. ## Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΠ΅ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠŸΡ€ΠΈ стандартной ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Vite, Webpack ΠΈΠ»ΠΈ Next.js ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ спрайт выпускаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ вСрсионированным SVG-Ρ„Π°ΠΉΠ»ΠΎΠΌ. Пока Π½Π°Π±ΠΎΡ€ ΠΈΠΊΠΎΠ½ΠΎΠΊ Π½Π΅ мСняСтся, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½Ρ‘Π½Π½ΡƒΡŽ копию нСзависимо ΠΎΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ JavaScript прилоТСния. ИзмСнСниС React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΡŽ всСх ΠΈΠΊΠΎΠ½ΠΎΠΊ. ## JavaScript Π±Π΅Π· SVG-балласта ΠšΠΎΠ½Ρ‚ΡƒΡ€Ρ‹ ΠΈΠΊΠΎΠ½ΠΎΠΊ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π²ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ… SVG assets ΠΈ Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ chunks прилоТСния. ```text React-ΠΊΠΎΠ΄ β†’ JavaScript chunks SVG-ΠΈΠΊΠΎΠ½ΠΊΠΈ β†’ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ SVG assets ``` JavaScript ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° интСрфСйс ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ° загруТаСтся ΠΈ ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. ## Врансформации SVG ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ Π’ΠΎ врСмя Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ автоматичСски ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ исходныС SVG для интСрфСйса: - удаляСт фиксированныС `width` ΠΈ `height`; - сохраняСт ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ `viewBox`; - ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ `fill` ΠΈ `stroke` Π² CSS-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅; - добавляСт ΠΏΠ»Π°Π²Π½Ρ‹Π΅ transitions нСпосрСдствСнно Π² Ρ†Π²Π΅Ρ‚Π½Ρ‹Π΅ элСмСнты ΠΈΠΊΠΎΠ½ΠΊΠΈ. ΠšΠ°ΠΆΠ΄ΡƒΡŽ Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ нСзависимо. ## ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ CSS ΠŸΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†Π²Π΅Ρ‚Π° `fill` ΠΈ `stroke` автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² CSS-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ `--icon-color-N`. ΠœΠΎΠ½ΠΎΡ…Ρ€ΠΎΠΌΠ½Π°Ρ ΠΈΠΊΠΎΠ½ΠΊΠ° наслСдуСт `currentColor`: ```tsx ``` Π’ ΠΌΠ½ΠΎΠ³ΠΎΡ†Π²Π΅Ρ‚Π½ΠΎΠΉ ΠΈΠΊΠΎΠ½ΠΊΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ: ```tsx ``` Π’Π΅ΠΌΡ‹, состояния ΠΈ hover-эффСкты ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π±Π΅Π· рСдактирования SVG ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΏΠΈΠΉ ΠΈΠΊΠΎΠ½ΠΊΠΈ. ## SpriteViewer: всС спрайты Π½Π° ΠΎΠ΄Π½ΠΎΠΉ debug-страницС `SpriteViewer` Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ всС спрайты ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΊΠΎΠ½ΠΊΠΈ вошли Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ выглядят. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠΊΠΎΠ½ΠΊΠΈ Π²ΠΈΠ΄Π½Ρ‹ созданныС CSS-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΈΡ… fallback-Ρ†Π²Π΅Ρ‚Π°. ЗначСния ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ прямо Π² Viewer ΠΈ сразу Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ доступны Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‡Π΅Ρ€Π΅Π·: - React; - ``; - ``; - CSS. ![SpriteViewer](https://raw.githubusercontent.com/gromlab-ru/svg-sprites/master/preview-image.png) Viewer ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ debug-страницС ΠΈ Π½Π΅ становится Ρ‡Π°ΡΡ‚ΡŒΡŽ generated-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈΠΊΠΎΠ½ΠΎΠΊ. ## Standalone, React ΠΈ Next.js ΠŸΠ°ΠΊΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ standalone-спрайты для static HTML, Vite ΠΈ Webpack 5, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ для React ΠΈ Next.js. ## Чистый Git Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ создаёт Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ `.gitignore`, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ generated-Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Π½Π΅ позволяСт ΠΈΠΌ Π·Π°ΡΠΎΡ€ΡΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, pull requests ΠΈ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ исходныС SVG, конфигурация ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ `.gitignore`, Π° локально ΠΈ Π² CI спрайты, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ Ρ‚ΠΈΠΏΡ‹ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· `prebuild`. ## Π’ production Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΊΠΎΠ½ΠΊΠΈ `@gromlab/svg-sprites` выполняСт ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° этапС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ остаётся Π² `devDependencies`. Production-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ generated-ΠΊΠΎΠ΄, стили ΠΈ внСшний SVG-Ρ„Π°ΠΉΠ». Compiler ΠΈ CLI Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° `SpriteViewer` ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π½ΡƒΠΆΠ½Π° debug-страница. ## ДокумСнтация README Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ с возмоТностями ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ основной сцСнарий использования. Для настройки Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ руководство ΠΏΠΎΠ΄ свой стСк. ### Быстрый старт - [Next.js App Router](docs/ru/next-app.md) - [Next.js Pages Router](docs/ru/next-pages.md) - [React + Vite](docs/ru/react-vite.md) - [React + Webpack 5](docs/ru/react-webpack.md) ### ВСхничСскиС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ - [ВСхничСский справочник](docs/ru/reference.md) - [ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ API](docs/ru/programmatic-api.md) ## ЛицСнзия MIT