# @gromlab/svg-sprites [πŸ‡¬πŸ‡§ 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) `@gromlab/svg-sprites` β€” CLI-инструмСнт для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ SVG-спрайтов Π² соврСмСнных Π²Π΅Π±-прилоТСниях. Он собираСт Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ SVG-ΠΈΠΊΠΎΠ½ΠΊΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… спрайтов ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ ΠΈΡ… для использования Π² интСрфСйсС. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ exact mode создаёт Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для своСго framework ΠΈ bundler: Web Component, React, Vue, Svelte, Angular, Astro, Solid, Preact, Qwik, Lit ΠΈΠ»ΠΈ Alpine.js. SVG Π²ΠΎ всСх случаях остаётся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ asset. ## 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. Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΈΠΊΠΎΠ½ΠΊΠΈ Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°ΠΏΠΊΠΈ для исходных ΠΈΠΊΠΎΠ½ΠΎΠΊ ΠΈ спрайта: ```text assets/ β”œβ”€β”€ app-icons/ β”‚ └── svg-sprite.config.json └── svg-icons/ β”œβ”€β”€ search.svg └── settings.svg ``` Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ спрайта: ```json { "mode": "next@app/turbopack", "name": "app", "input": "../svg-icons/**/*.svg" } ``` `input` ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡƒΡ‚ΠΈ ΠΊ ΠΏΠ°ΠΏΠΊΠ°ΠΌ, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ SVG ΠΈ glob-ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹. ### 2. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ```json { "scripts": { "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 npm run sprites ``` ΠŸΠ°ΠΊΠ΅Ρ‚ создаст `AppIcon`, TypeScript-Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ SVG-спрайт. ### 3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ ΠΈΠΊΠΎΠ½ΠΊΡƒ ```tsx // app/page.tsx import { AppIcon } from '../assets/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` Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ спрайты всСх ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… exact modes Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС. Один Web Component ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π²ΠΈΠ·ΡƒΠ°Π», Π° для React Ρ‚Π°ΠΊΠΆΠ΅ доступСн Ρ‚ΠΎΠ½ΠΊΠΈΠΉ bridge ΠΊ Π½Π΅ΠΌΡƒ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠΊΠΎΠ½ΠΊΠΈ Π²ΠΈΠ΄Π½Ρ‹ созданныС CSS-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΈΡ… fallback-Ρ†Π²Π΅Ρ‚Π°. ЗначСния ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ прямо Π² Viewer ΠΈ сразу Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ доступны Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ для framework ΠΈΠ· manifest, ``, `` ΠΈ 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 ΠΈ framework modes ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ npm entry Web Component; React ΠΈ Next.js Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ bridge ΠΈΠ· `@gromlab/svg-sprites/react`. ## 30 exact modes ΠŸΠ°ΠΊΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ 30 ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… exact modes: `standalone@server` для сСрвСрной Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ SVG-спрайта ΠΈ 29 consumer modes для соврСмСнных frameworks ΠΈ bundlers. `standalone@server` позволяСт Π·Π°Ρ€Π°Π½Π΅Π΅ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ SVG-спрайт Π½Π° сСрвСрС ΠΈΠ»ΠΈ Π² CI/CD ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для совмСстного использования. Π’Π°ΠΊΠΎΠΉ спрайт Π½Π΅ привязан ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ framework ΠΈΠ»ΠΈ bundler ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ всСм consumer modes. 29 consumer modes ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ standalone, React, Next.js, Vue, Nuxt, Svelte, SvelteKit, Angular, Astro, Solid, SolidStart, Preact, Qwik, Lit ΠΈ Alpine.js Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… Vite, Webpack, Turbopack ΠΈ application builder. ВсС 29 consumer modes ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ со спрайтами, сгСнСрированными локально Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Ρ‚Π°ΠΊ ΠΈ с ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ спрайтами, Π·Π°Ρ€Π°Π½Π΅Π΅ сгСнСрированными Π½Π° сСрвСрС Ρ‡Π΅Ρ€Π΅Π· `standalone@server`. API ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ способ использования ΠΈΠΊΠΎΠ½ΠΎΠΊ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π² ΠΎΠ±ΠΎΠΈΡ… сцСнариях ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС 30 exact modes. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ producer-стСнд провСряСт ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ спрайта, Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· 29 consumer-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ Π΄Π²Π° нСзависимых спрайта: Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ. ВсС consumer-прилоТСния проходят production build ΠΈ Playwright-тСсты, Π° Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ modes Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΌ toolchain Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ E2E-тСст ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ спрайты Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ ΠΈ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ, Π° Ρ‚Π°ΠΊΠΆΠ΅ провСряСт отсутствиС browser errors ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Π΅ΠΈΡ… Π³Ρ€ΡƒΠΏΠΏ Π² SpriteViewer. ## Чистый Git Bundler ΠΈ framework modes ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ `.gitignore`, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ generated-Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Π½Π΅ позволяСт ΠΈΠΌ Π·Π°ΡΠΎΡ€ΡΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, pull requests ΠΈ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Bare `standalone` оставляСт ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ рСпозитория ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ. Π’ bundler ΠΈ framework modes Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ исходныС SVG, конфигурация ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ `.gitignore`, Π° локально ΠΈ Π² CI спрайты, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ Ρ‚ΠΈΠΏΡ‹ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· `prebuild`. ## Π’ production Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΊΠΎΠ½ΠΊΠΈ ГСнСрация ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· `npx`, Π±Π΅Π· добавлСния package Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. УстанавливайтС Π΅Π³ΠΎ ΠΊΠ°ΠΊ development dependency, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π½ΡƒΠΆΠ½Ρ‹ Viewer, Ρ‚ΠΈΠΏΡ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ API. Production-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ generated-ΠΊΠΎΠ΄, стили ΠΈ внСшний SVG-Ρ„Π°ΠΉΠ». Compiler ΠΈ CLI Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° `SpriteViewer` ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π½ΡƒΠΆΠ½Π° debug-страница. ## ДокумСнтация README Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ с возмоТностями ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ основной сцСнарий использования. Для настройки Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ руководство ΠΏΠΎΠ΄ свой стСк. ### БСрвСрная гСнСрация - [Standalone + Server](docs/ru/guides/standalone-server.md) ### Быстрый старт для consumer modes - [Bare standalone](docs/ru/guides/standalone.md) - [Standalone + Vite](docs/ru/guides/standalone-vite.md) - [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) - [Next.js Pages Router + Webpack](docs/ru/guides/next-pages-webpack.md) ### ВСхничСскиС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ - [ИндСкс Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ](docs/ru/README.md) - [ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ](docs/ru/configuration.md) - [ВСхничСский справочник](docs/ru/reference/technical.md) - [ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ API](docs/ru/reference/programmatic-api.md) ## ЛицСнзия MIT