vite-svg-sprite-generator-plugin 1.1.7 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,55 +1,34 @@
1
- # 🎨 Vite SVG Sprite Generator
1
+ # 🎨 Vite SVG Sprite Generator Plugin
2
2
 
3
- > Production-ready Vite plugin for automatic SVG sprite generation with HMR support and SVGO optimization
3
+ > Production-ready Vite plugin for automatic SVG sprite generation with HMR, tree-shaking, and SVGO optimization
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/vite-svg-sprite-generator-plugin.svg)](https://www.npmjs.com/package/vite-svg-sprite-generator-plugin)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+ [![Vite](https://img.shields.io/badge/Vite-4%20%7C%205%20%7C%206%20%7C%207-646CFF?logo=vite)](https://vitejs.dev/)
7
8
 
8
- ## Features
9
+ ## Features
9
10
 
10
- - 🚀 **SVGO Optimization** - Automatic SVG optimization in production builds (40-60% size reduction)
11
- - **Hot Module Replacement** - Instant updates without page reload during development
12
- - 🔒 **Security First** - Built-in XSS protection and path traversal prevention
13
- - 💾 **Smart Caching** - Efficient caching with mtime-based validation
14
- - 🎯 **Auto-Injection** - Sprite is automatically injected into HTML as inline SVG (no separate file)
15
- - 📄 **Inline SVG** - Sprite is inserted directly into the page DOM, no external requests
16
- - 🔧 **Fully Configurable** - Extensive customization options
17
- - 📦 **Zero Config** - Works out of the box with sensible defaults
18
- - 🌳 **Tree-Shakeable** - ES modules with proper exports
19
- - 🎨 **Vite Standard Compliance** - Fully complies with Vite plugin API and ecosystem standards
20
- - 🔄 **Uses Vite Utilities** - Leverages `vite.normalizePath` for consistent cross-platform path handling
11
+ - **2-3x faster builds** - Parallel SVG processing (v1.3.0+)
12
+ - **Tree-shaking** - Remove unused icons (up to 84% reduction)
13
+ - **HMR** - Instant icon updates without page reload
14
+ - **SVGO optimization** - 40-60% smaller sprites
15
+ - **Security** - XSS & path traversal protection
16
+ - **Zero config** - Works out of the box
17
+ - **Framework agnostic** - React, Vue, Svelte, any Vite project
18
+ - **Multi-page support** - Works with [vite-multi-page-html-generator-plugin](https://www.npmjs.com/package/vite-multi-page-html-generator-plugin)
21
19
 
22
- ## 📦 Installation
23
-
24
- ### Basic (without SVGO optimization)
20
+ ## Installation
25
21
 
26
22
  ```bash
27
23
  npm install -D vite-svg-sprite-generator-plugin
28
- ```
29
-
30
- ### Recommended (with SVGO optimization)
31
-
32
- ```bash
33
- npm install -D vite-svg-sprite-generator-plugin svgo
34
- ```
35
-
36
- **Note:** SVGO is optional! The plugin works without it, but you'll get 40-60% smaller sprites with SVGO installed.
37
-
38
- <details>
39
- <summary>Other package managers</summary>
40
24
 
41
- ```bash
42
- # Yarn
43
- yarn add -D vite-svg-sprite-generator-plugin svgo
44
-
45
- # PNPM
46
- pnpm add -D vite-svg-sprite-generator-plugin svgo
25
+ # Optional: SVGO for optimization (recommended)
26
+ npm install -D svgo
47
27
  ```
48
- </details>
49
28
 
50
- ## 🚀 Quick Start
29
+ ## Quick Start
51
30
 
52
- ### 1. Add to Vite Config
31
+ ### 1. Configure Vite
53
32
 
54
33
  ```javascript
55
34
  // vite.config.js
@@ -57,11 +36,7 @@ import { defineConfig } from 'vite';
57
36
  import svgSpritePlugin from 'vite-svg-sprite-generator-plugin';
58
37
 
59
38
  export default defineConfig({
60
- plugins: [
61
- svgSpritePlugin({
62
- iconsFolder: 'src/icons'
63
- })
64
- ]
39
+ plugins: [svgSpritePlugin()]
65
40
  });
66
41
  ```
67
42
 
@@ -72,19 +47,17 @@ src/
72
47
  icons/
73
48
  home.svg
74
49
  user.svg
75
- settings.svg
50
+ search.svg
76
51
  ```
77
52
 
78
- ### 3. Use in HTML
53
+ ### 3. Use Icons
79
54
 
80
55
  ```html
81
56
  <svg class="icon">
82
- <use href="#home"></use>
57
+ <use href="#home" />
83
58
  </svg>
84
59
  ```
85
60
 
86
- ### 4. Use in CSS
87
-
88
61
  ```css
89
62
  .icon {
90
63
  width: 24px;
@@ -93,378 +66,247 @@ src/
93
66
  }
94
67
  ```
95
68
 
96
- That's it! 🎉
97
-
98
- ## 🎨 How It Works
99
-
100
- The plugin automatically **injects the sprite directly into your HTML** as an inline SVG element.
101
-
102
- ✅ **No separate file generated** - Sprite is embedded in the page DOM
103
- ✅ **No external requests** - Everything works in a single HTTP request
104
- ✅ **Automatic injection** - Sprite appears in HTML automatically
105
- ✅ **Fast rendering** - Icons display immediately, no loading delay
106
-
107
- ### Where is the sprite?
108
-
109
- Look for this in your HTML:
110
-
111
- ```html
112
- <svg id="icon-sprite" class="svg-sprite" style="display: none;">
113
- <symbol id="home" viewBox="0 0 24 24">...</symbol>
114
- <symbol id="user" viewBox="0 0 24 24">...</symbol>
115
- </svg>
116
- ```
117
-
118
- The sprite is **injected at the start of your HTML** (just after `<body>` tag).
119
-
120
- ## 🎨 Vite Compliance
121
-
122
- This plugin is built with maximum compliance to Vite standards and best practices:
123
-
124
- - ✅ **Official Vite Plugin API** - Implements all required hooks (`buildStart`, `buildEnd`, `configureServer`, `handleHotUpdate`)
125
- - ✅ **Uses Vite Internal Utilities** - Leverages `vite.normalizePath` for cross-platform path normalization
126
- - ✅ **Vite HMR Integration** - Properly integrates with Vite's HMR system for instant updates
127
- - ✅ **Vite Config Integration** - Respects all Vite configuration options (mode, command, etc.)
128
- - ✅ **Async/Await Standards** - Uses modern async patterns following Vite conventions
129
- - ✅ **TypeScript Support** - Full TypeScript definitions for better DX
130
- - ✅ **No Breaking Changes** - Follows semantic versioning and Vite ecosystem standards
131
- - ✅ **Zero Vite Configuration Override** - Doesn't interfere with other Vite plugins or features
132
-
133
- The plugin seamlessly integrates into your Vite workflow without any conflicts.
134
-
135
- ## 📖 Documentation
136
-
137
- ### Options
69
+ ## Configuration
138
70
 
139
71
  ```typescript
140
72
  interface SvgSpriteOptions {
141
- /** Path to icons folder (default: 'src/icons') */
142
- iconsFolder?: string;
143
-
144
- /** Sprite DOM ID (default: 'icon-sprite') */
145
- spriteId?: string;
146
-
147
- /** Sprite CSS class (default: 'svg-sprite') */
148
- spriteClass?: string;
149
-
150
- /** Symbol ID prefix (default: '' - uses only filename) */
151
- idPrefix?: string;
152
-
153
- /** Enable optimization (default: true) */
154
- optimize?: boolean;
155
-
156
- /** Watch for changes in dev mode (default: true) */
157
- watch?: boolean;
158
-
159
- /** Debounce delay for HMR (default: 100ms) */
160
- debounceDelay?: number;
161
-
162
- /** Verbose logging (default: true in dev, false in prod) */
163
- verbose?: boolean;
164
-
165
- /** Enable SVGO optimization (default: true in production) */
166
- svgoOptimize?: boolean;
167
-
168
- /** Custom SVGO configuration */
169
- svgoConfig?: Config;
73
+ iconsFolder?: string; // Default: 'src/icons'
74
+ spriteId?: string; // Default: 'sprite-id'
75
+ spriteClass?: string; // Default: 'sprite-class'
76
+ idPrefix?: string; // Default: ''
77
+ watch?: boolean; // Default: true (dev)
78
+ debounceDelay?: number; // Default: 100ms
79
+ verbose?: boolean; // Default: true (dev)
80
+ svgoOptimize?: boolean; // Default: true (production)
81
+ svgoConfig?: object; // Custom SVGO config
82
+ currentColor?: boolean; // Default: true
83
+ treeShaking?: boolean; // Default: false
84
+ scanExtensions?: string[]; // Default: ['.html', '.js', '.ts', '.jsx', '.tsx', '.vue', '.svelte']
170
85
  }
171
86
  ```
172
87
 
173
- ### Configuration Examples
174
-
175
- #### Basic Usage
88
+ ### Basic Example
176
89
 
177
90
  ```javascript
178
91
  svgSpritePlugin({
179
92
  iconsFolder: 'src/icons',
93
+ treeShaking: true,
180
94
  verbose: true
181
95
  })
182
96
  ```
183
97
 
184
- #### Custom Configuration
185
-
186
- ```javascript
187
- svgSpritePlugin({
188
- iconsFolder: 'assets/svg',
189
- spriteId: 'my-sprite',
190
- idPrefix: 'icon', // Add prefix: generates 'icon-home', 'icon-user'
191
- debounceDelay: 200,
192
- verbose: true
193
- })
194
- ```
195
-
196
- #### SVGO Optimization
98
+ ### Production Optimized
197
99
 
198
100
  ```javascript
199
101
  svgSpritePlugin({
200
102
  iconsFolder: 'src/icons',
201
- svgoOptimize: true,
202
- svgoConfig: {
203
- multipass: true,
204
- plugins: [
205
- 'preset-default',
206
- {
207
- name: 'removeViewBox',
208
- active: false // Keep viewBox for sprites
209
- },
210
- {
211
- name: 'cleanupNumericValues',
212
- params: {
213
- floatPrecision: 2
214
- }
215
- }
216
- ]
217
- }
103
+ treeShaking: true, // Remove unused icons
104
+ svgoOptimize: true, // Optimize SVG
105
+ currentColor: true // CSS color control
218
106
  })
219
107
  ```
220
108
 
221
- #### Aggressive Optimization
222
-
223
- ```javascript
224
- svgSpritePlugin({
225
- iconsFolder: 'src/icons',
226
- svgoOptimize: true,
227
- svgoConfig: {
228
- multipass: true,
229
- plugins: [
230
- 'preset-default',
231
- { name: 'removeViewBox', active: false },
232
- { name: 'cleanupNumericValues', params: { floatPrecision: 1 } },
233
- { name: 'removeAttrs', params: { attrs: '(fill|stroke)' } }
234
- ]
235
- }
236
- })
237
- ```
109
+ ## Framework Support
238
110
 
239
- **Result:** Up to 60% size reduction! 🚀
111
+ | Framework | Status | Notes |
112
+ |-----------|--------|-------|
113
+ | **Vite + React** | ✅ Full | [Examples](./VUE_REACT_SVELTE_GUIDE.md#react) |
114
+ | **Vite + Vue 3** | ✅ Full | [Examples](./VUE_REACT_SVELTE_GUIDE.md#vue-3) |
115
+ | **Vite + Svelte** | ✅ Full | [Examples](./VUE_REACT_SVELTE_GUIDE.md#svelte) |
116
+ | **Nuxt 3 (SPA)** | ✅ Full | Set `ssr: false` |
117
+ | **Nuxt 3 (SSR)** | ⚠️ Partial | [SSR Guide](./FRAMEWORK_COMPATIBILITY.md#nuxt-3-ssr) |
118
+ | **SvelteKit** | ⚠️ Partial | SSR limitations |
119
+ | **Next.js** | ❌ No | Uses Webpack, not Vite |
120
+ | **Create React App** | ❌ No | Uses Webpack, not Vite |
240
121
 
241
- ## 🔒 Security Features (v1.1.0)
122
+ > **Rule of thumb:** Works with Vite ✅ | Doesn't work with Webpack ❌
242
123
 
243
- ### Path Traversal Protection
124
+ ### React Example
244
125
 
245
- The plugin now includes built-in protection against path traversal attacks:
246
-
247
- ```javascript
248
- // SAFE - Paths inside project root
249
- svgSpritePlugin({ iconsFolder: 'src/icons' })
250
- svgSpritePlugin({ iconsFolder: 'assets/svg' })
251
- svgSpritePlugin({ iconsFolder: './public/icons' })
252
-
253
- // ❌ BLOCKED - Paths outside project root
254
- svgSpritePlugin({ iconsFolder: '../../../etc' }) // Error!
255
- svgSpritePlugin({ iconsFolder: '../../other-project' }) // Error!
256
- svgSpritePlugin({ iconsFolder: '/absolute/path' }) // Error!
257
- ```
258
-
259
- **Error message example:**
126
+ ```jsx
127
+ export function Icon({ name, size = 24 }) {
128
+ return (
129
+ <svg width={size} height={size}>
130
+ <use href={`#${name}`} />
131
+ </svg>
132
+ );
133
+ }
260
134
 
135
+ // Usage
136
+ <Icon name="home" />
261
137
  ```
262
- ❌ Security Error: Invalid iconsFolder path
263
138
 
264
- Provided path: "../../../etc"
265
- Resolved to: "/etc"
266
- Project root: "/home/user/project"
139
+ See [complete framework examples](./VUE_REACT_SVELTE_GUIDE.md).
267
140
 
268
- ⚠️ The path points outside the project root directory.
269
- This is not allowed for security reasons (path traversal prevention).
141
+ ## Key Features
270
142
 
271
- Valid path examples:
272
- - 'src/icons' → relative to project root
273
- - 'assets/svg' → relative to project root
274
- - './public/icons' → explicit relative path
143
+ ### Tree-Shaking
275
144
 
276
- Invalid path examples:
277
- - '../other-project' → outside project (path traversal)
278
- - '../../etc' → system directory access attempt
279
- - '/absolute/path' → absolute paths not allowed
145
+ Remove unused icons from production builds:
280
146
 
281
- 💡 Tip: All paths must be inside your project directory.
147
+ ```javascript
148
+ svgSpritePlugin({
149
+ treeShaking: true // Enable tree-shaking
150
+ })
282
151
  ```
283
152
 
284
- ### XSS Protection
153
+ **How it works:**
154
+ 1. Scans codebase for `<use href="#iconId">`
155
+ 2. Finds used icons in HTML/JS/TS/JSX/TSX/Vue/Svelte
156
+ 3. Removes unused icons from production
157
+ 4. Keeps all icons in dev for better DX
285
158
 
286
- Advanced SVG sanitization with precompiled RegExp patterns:
159
+ **Results:**
160
+ ```
161
+ 50 total icons → 8 used (42 removed, 84% reduction)
162
+ Bundle: 45.2 KB → 7.8 KB
163
+ ```
287
164
 
288
- - Removes `<script>` tags
289
- - Removes event handlers (`onclick`, `onload`, etc.)
290
- - Removes `javascript:` URLs in `href` and `xlink:href`
291
- - Removes `<foreignObject>` elements
165
+ **Per-page optimization:** In multi-page apps, each HTML page gets only its icons.
292
166
 
293
- **Performance:** ~20% faster sanitization compared to v1.0.0
167
+ ### Hot Module Replacement
294
168
 
295
- ---
169
+ Changes to SVG files trigger instant updates without page reload:
296
170
 
297
- ## 🎯 Usage Examples
171
+ ```
172
+ 🔄 SVG files changed, regenerating sprite...
173
+ ✅ HMR: Sprite updated with 10 icons
174
+ ```
298
175
 
299
- ### HTML
176
+ ### Security
300
177
 
301
- ```html
302
- <!-- Basic usage -->
303
- <svg class="icon">
304
- <use href="#home"></use>
305
- </svg>
178
+ Automatic protection against:
179
+ - **XSS attacks** - Removes `<script>`, event handlers, `javascript:` URLs
180
+ - **Path traversal** - Validates icon folder paths
181
+ - **Malicious content** - Sanitizes all SVG before injection
306
182
 
307
- <!-- With custom size -->
308
- <svg class="icon" width="32" height="32">
309
- <use href="#user"></use>
310
- </svg>
183
+ ### Multi-Page Projects
311
184
 
312
- <!-- With aria labels -->
313
- <svg class="icon" role="img" aria-label="Settings">
314
- <use href="#settings"></use>
315
- </svg>
185
+ Works seamlessly with [vite-multi-page-html-generator-plugin](https://www.npmjs.com/package/vite-multi-page-html-generator-plugin):
316
186
 
317
- <!-- With custom prefix (if you set idPrefix: 'icon') -->
318
- <svg class="icon">
319
- <use href="#icon-home"></use>
320
- </svg>
187
+ ```javascript
188
+ export default defineConfig({
189
+ plugins: [
190
+ multiPagePlugin({
191
+ pagesDir: 'src/pages'
192
+ }),
193
+ svgSpritePlugin({
194
+ treeShaking: true // Each page gets only its icons
195
+ })
196
+ ]
197
+ });
321
198
  ```
322
199
 
323
- ### React/Vue/Svelte
200
+ ## Performance
324
201
 
325
- ```jsx
326
- // React
327
- function Icon({ name, className = "icon" }) {
328
- return (
329
- <svg className={className}>
330
- <use href={`#${name}`} />
331
- </svg>
332
- );
333
- }
334
-
335
- // Usage
336
- <Icon name="home" />
202
+ ### Build Time (v1.3.0)
337
203
 
338
- // Or with custom prefix
339
- function Icon({ name, prefix = "", className = "icon" }) {
340
- const id = prefix ? `${prefix}-${name}` : name;
341
- return (
342
- <svg className={className}>
343
- <use href={`#${id}`} />
344
- </svg>
345
- );
346
- }
347
- ```
204
+ | Icons | v1.2.1 | v1.3.0 | Speedup |
205
+ |-------|--------|--------|---------|
206
+ | 50 | 850ms | 420ms | 2.0x |
207
+ | 100 | 1.7s | 810ms | 2.1x ⚡ |
208
+ | 200 | 3.4s | 1.5s | 2.3x ⚡ |
348
209
 
349
- ```vue
350
- <!-- Vue -->
351
- <template>
352
- <svg class="icon">
353
- <use :href="`#${name}`" />
354
- </svg>
355
- </template>
210
+ ### Bundle Size (with tree-shaking)
356
211
 
357
- <script setup>
358
- defineProps(['name']);
359
- </script>
360
212
  ```
213
+ Project: 50 icons total, 8 used
361
214
 
362
- ```svelte
363
- <!-- Svelte -->
364
- <script>
365
- export let name;
366
- </script>
367
-
368
- <svg class="icon">
369
- <use href="#{name}" />
370
- </svg>
215
+ Before: 45.2 KB (all icons)
216
+ After: 7.8 KB (used only)
217
+ Saving: 37.4 KB (83% reduction)
371
218
  ```
372
219
 
373
- ---
374
-
375
- ## 📊 Performance
376
-
377
- ### Optimization Results
378
-
379
- | Metric | Before | After | Improvement |
380
- |--------|--------|-------|-------------|
381
- | Sprite Size | 87 KB | 42 KB | **-52%** |
382
- | Gzip | 24 KB | 14 KB | **-42%** |
383
- | Load Time (3G) | 320 ms | 187 ms | **-42%** |
384
-
385
220
  ### SVGO Optimization
386
221
 
387
222
  ```
388
- clock.svg : 317 → 228 bytes (-28.1%)
389
- layers.svg : 330 → 156 bytes (-52.7%)
390
- sun.svg : 305287 bytes (-5.9%)
223
+ Average reduction: 40-60%
224
+ Example:
225
+ clock.svg: 317228 bytes (-28%)
226
+ layers.svg: 330 → 156 bytes (-53%)
391
227
  ```
392
228
 
393
- **Average reduction: 40-50%** 🎉
394
-
395
- ## 📝 Changelog
396
-
397
- ### v1.1.7 (2025-01-28)
229
+ ## How It Works
398
230
 
399
- - 📦 **Version Bump** - Updated for npm publication
400
- - ✅ **No Code Changes** - Identical to v1.1.6
401
- - 🚀 **Ready to Publish** - All versions synchronized
231
+ The plugin automatically injects the sprite into your HTML:
402
232
 
403
- ### v1.1.6 (2025-01-28)
233
+ ```html
234
+ <body>
235
+ <!-- Injected automatically -->
236
+ <svg id="sprite-id" style="display: none;">
237
+ <symbol id="home" viewBox="0 0 24 24">...</symbol>
238
+ <symbol id="user" viewBox="0 0 24 24">...</symbol>
239
+ </svg>
240
+
241
+ <!-- Your app -->
242
+ <div id="app"></div>
243
+ </body>
244
+ ```
404
245
 
405
- - 🐛 **Fixed Preview Detection** - Preview mode now correctly detected
406
- - 🔍 **Smart Detection** - Detects `serve + production + !SSR = preview`
407
- - **Confirmed Working** - Preview skips validation (0ms)
408
- - 🎯 **Debug Logging** - Shows `command`, `isPreview`, `mode` when verbose
246
+ **Benefits:**
247
+ - No separate file requests
248
+ - Instant rendering
249
+ - Single HTTP request
250
+ - Works with SSR/SSG
409
251
 
410
- ### v1.1.4 (2025-01-21)
252
+ ## Advanced
411
253
 
412
- - **Smart Launch Mode** - Intelligent mode detection for preview command
413
- - 🚀 **Preview Optimization** - Preview runs instantly (0ms vs 583ms)
414
- - 🎯 **Auto-Detection** - Automatic command detection (serve/build/preview)
415
- - ✅ **No Breaking Changes** - Fully backward compatible
254
+ ### Vite Integration
416
255
 
417
- ### v1.1.1 (2025-10-26)
256
+ Uses official Vite APIs:
257
+ - `enforce: 'pre'` - Run before core plugins
258
+ - `apply()` - Conditional execution
259
+ - `createFilter()` - Standard file filtering
260
+ - HMR API - Hot module replacement
418
261
 
419
- - 🔧 **Using `vite.normalizePath`** - Better cross-platform compatibility
420
- - ⚡ Improved Windows/Unix path handling
421
- - 🐛 Better edge case support (network paths, etc.)
422
- - ✅ **No Breaking Changes** - Fully backward compatible
262
+ ### Plugin Hooks
423
263
 
424
- ### v1.1.0 (2025-10-25)
264
+ ```javascript
265
+ {
266
+ configResolved() { // Validate paths
267
+ buildStart() { // Generate sprite
268
+ transformIndexHtml() { // Inject into HTML
269
+ configureServer() { // Setup HMR
270
+ buildEnd() { // Cleanup
271
+ }
272
+ ```
425
273
 
426
- - 🔒 **Path Traversal Protection** - Secure path validation
427
- - ⚡ **100% Async FS** - No event loop blocking
428
- - 🚀 **20% Faster** - Precompiled RegExp patterns
429
- - 📝 **Better Errors** - Detailed messages with examples
430
- - ✅ **No Breaking Changes** - Fully backward compatible
274
+ ### Optimizations
431
275
 
432
- ### v1.0.1 (2025-10-24)
276
+ - Parallel SVG processing
277
+ - mtime-based caching
278
+ - Debounced HMR
279
+ - Tree-shaking
280
+ - SVGO compression
433
281
 
434
- - 📚 **Documentation Updates** - Clarified inline SVG behavior
435
- - 📄 Added "How It Works" section
436
- - 💡 Added "Why Inline SVG?" section explaining benefits
282
+ ## Compatibility
437
283
 
438
- ### v1.0.0 (2025-10-23)
284
+ - **Vite:** 4.x, 5.x, 6.x, 7.x
285
+ - **Node.js:** 14.18.0+
286
+ - **TypeScript:** Full support
287
+ - **OS:** Windows, macOS, Linux
439
288
 
440
- - 🎉 **Initial Release** - Production-ready Vite plugin
441
- - 🚀 SVGO Optimization - 40-60% size reduction
442
- - ⚡ Hot Module Replacement - Instant updates
443
- - 🔒 Security First - XSS protection and path traversal prevention
444
- - 💾 Smart Caching - LRU-like cache with mtime validation
445
- - 🎯 Auto-Injection - Automatic sprite injection into HTML
446
- - 📦 Zero Config - Works out of the box
447
- - 🌳 Tree-Shakeable - ES modules with proper exports
289
+ ## Links
448
290
 
449
- For the complete changelog, see [CHANGELOG.md](CHANGELOG.md)
291
+ - [npm Package](https://www.npmjs.com/package/vite-svg-sprite-generator-plugin)
292
+ - [GitHub Repository](https://github.com/gkarev/vite-svg-sprite-generator-plugin)
293
+ - [Issues](https://github.com/gkarev/vite-svg-sprite-generator-plugin/issues)
294
+ - [Changelog](./CHANGELOG.md)
450
295
 
451
- ## 📄 License
296
+ ## Documentation
452
297
 
453
- MIT © Karev G.S.
298
+ - [Framework Examples (React/Vue/Svelte)](./VUE_REACT_SVELTE_GUIDE.md)
299
+ - [Framework Compatibility (Next.js/Nuxt/etc)](./FRAMEWORK_COMPATIBILITY.md)
300
+ - [Tree-Shaking Guide](./TREE_SHAKING_GUIDE.md)
454
301
 
455
- ## 🙏 Acknowledgments
302
+ ## Related Plugins
456
303
 
457
- - [SVGO](https://github.com/svg/svgo) - SVG optimization
458
- - [Vite](https://vitejs.dev/) - Build tool
304
+ - [vite-multi-page-html-generator-plugin](https://www.npmjs.com/package/vite-multi-page-html-generator-plugin) - Multi-page static site generator
459
305
 
460
- ## 📧 Support
306
+ ## License
461
307
 
462
- - 🐛 [Issues](https://github.com/gkarev/vite-svg-sprite-generator-plugin/issues)
463
- - 💬 [Discussions](https://github.com/gkarev/vite-svg-sprite-generator-plugin/discussions)
308
+ MIT © [Karev G.S.](https://github.com/gkarev)
464
309
 
465
310
  ---
466
311
 
467
- Made with ❤️ by Karev G.S.
468
-
469
- If this plugin helped you, please ⭐ star the repo!
470
-
312
+ **Made with ❤️ for the Vite ecosystem**