From cebe8b67e7cad2c564887703737616cb176cb095 Mon Sep 17 00:00:00 2001 From: Liam Potter Date: Wed, 22 Apr 2026 00:47:21 +0100 Subject: [PATCH] add embedded sprite option for animations and font-face support Introduces an `embedded` plugin option that inlines named sprite sheets directly into the HTML document via Vite's `transformIndexHtml` hook, rather than loading them as external files. When a sprite is loaded as an external SVG document and referenced via ``, browsers prevent CSS animations (@keyframes), SMIL animations (, ), and @font-face rules defined inside elements from affecting the referencing document. Inlining the sprite into the HTML bypasses this restriction entirely. - Add `embedded: boolean | string[]` option to SvgJarOptions - Embedded sprites are still emitted as asset files and additionally injected into every HTML entry point via transformIndexHtml - Symbols in embedded sprites use local fragment hrefs (#symbolId) rather than external file references - Add 5 animated SVG fixtures to the vanilla test project covering CSS animations, SMIL , and SMIL - Add animations.html manual test page to the vanilla test project - Add external asset reference fixtures (absolute image URL, @font-face with external font URL) and verify they pass through unchanged - Fix bug: absolute URLs in and were being incorrectly resolved against the local filesystem in both the load and generateBundle hooks - Add E2E tests for embedded sprite injection and animation preservation - Update README with embedded option documentation and explanation --- plugin/README.md | 65 ++++++++++++ plugin/src/codegen/index.ts | 5 +- plugin/src/codegen/prod.ts | 10 +- plugin/src/codegen/types.ts | 6 ++ plugin/src/core/options.ts | 25 +++++ plugin/src/core/sprite-registry.ts | 18 +++- plugin/src/hooks/generate-bundle.ts | 5 + plugin/src/hooks/load.ts | 14 ++- plugin/src/hooks/transform-html.ts | 44 ++++++++ plugin/src/hooks/transform.ts | 9 ++ plugin/src/index.ts | 2 + plugin/test/_fixtures/entry-external-refs.js | 4 + plugin/test/_fixtures/with-external-image.svg | 1 + plugin/test/_fixtures/with-font-ref.svg | 11 ++ plugin/test/e2e/helpers.ts | 10 +- plugin/test/e2e/vanilla.spec.ts | 95 ++++++++++++++++++ .../all-svgs-vanilla-darwin.png | Bin 130067 -> 166697 bytes plugin/test/integration/rollup.test.ts | 31 ++++++ test-projects/vite/vanilla/animations.html | 19 ++++ test-projects/vite/vanilla/src/animations.ts | 40 ++++++++ .../src/icons/animated/color-shift.svg | 8 ++ .../vite/vanilla/src/icons/animated/dash.svg | 14 +++ .../vite/vanilla/src/icons/animated/orbit.svg | 16 +++ .../vite/vanilla/src/icons/animated/pulse.svg | 10 ++ .../vanilla/src/icons/animated/spinner.svg | 9 ++ .../vanilla/src/icons/with-external-image.svg | 1 + .../vite/vanilla/src/icons/with-font-ref.svg | 11 ++ test-projects/vite/vanilla/src/main.ts | 10 +- test-projects/vite/vanilla/tsconfig.json | 2 +- test-projects/vite/vanilla/vite.config.ts | 10 +- 30 files changed, 489 insertions(+), 16 deletions(-) create mode 100644 plugin/src/hooks/transform-html.ts create mode 100644 plugin/test/_fixtures/entry-external-refs.js create mode 100644 plugin/test/_fixtures/with-external-image.svg create mode 100644 plugin/test/_fixtures/with-font-ref.svg create mode 100644 test-projects/vite/vanilla/animations.html create mode 100644 test-projects/vite/vanilla/src/animations.ts create mode 100644 test-projects/vite/vanilla/src/icons/animated/color-shift.svg create mode 100644 test-projects/vite/vanilla/src/icons/animated/dash.svg create mode 100644 test-projects/vite/vanilla/src/icons/animated/orbit.svg create mode 100644 test-projects/vite/vanilla/src/icons/animated/pulse.svg create mode 100644 test-projects/vite/vanilla/src/icons/animated/spinner.svg create mode 100644 test-projects/vite/vanilla/src/icons/with-external-image.svg create mode 100644 test-projects/vite/vanilla/src/icons/with-font-ref.svg diff --git a/plugin/README.md b/plugin/README.md index ff8151f..132758e 100644 --- a/plugin/README.md +++ b/plugin/README.md @@ -107,6 +107,11 @@ svgJar({ // Replace non-none fill/stroke with currentColor globally. // Default: false currentColor: false, + + // Sprite sheets to inline into the HTML document rather than emit as + // external files. See "Embedded sprites" below. + // true: embed all sprites | string[]: embed named sprites | false (default): external files + embedded: false, }); ``` @@ -341,6 +346,66 @@ SVGs containing `` or `` have thei In dev mode, `` SVG references are embedded as local `` entries for cross-browser compatibility. +## Embedded sprites + +By default, sprite sheets are emitted as separate asset files (e.g. `sprite-abc123.svg`) and referenced via ``. This is the most efficient delivery for static icons — the sprite is cached independently and shared across pages. + +However, when the sprite file is loaded as an external document, browsers impose a hard restriction: **CSS and SMIL animations defined inside `` elements do not run**. Specifically: + +- `@keyframes` rules in ` + + Hello + diff --git a/plugin/test/e2e/helpers.ts b/plugin/test/e2e/helpers.ts index 7483080..101b17f 100644 --- a/plugin/test/e2e/helpers.ts +++ b/plugin/test/e2e/helpers.ts @@ -27,7 +27,7 @@ export function assetsDir(projectName: string): string { // -- Page rendering assertions -- export async function expectSvgsVisible(page: Page): Promise { - const svgs = page.locator('svg'); + const svgs = page.locator('svg:visible'); await expect(svgs.first()).toBeVisible(); } @@ -83,13 +83,17 @@ export function expectNamedSpriteContainsCircle(assets: string): void { } export function expectChunkContainsSpriteRefs(assets: string): void { - const code = readAsset(assets, findFile(assets, (f) => f.endsWith('.js'))!); + // Concatenate all JS chunks — sprite refs may be split across entry and shared chunks + const files = fs.readdirSync(assets).filter((f) => f.endsWith('.js')); + const code = files.map((f) => readAsset(assets, f)).join('\n'); expect(code).toMatch(/sprite-[a-f0-9]+\.svg/); expect(code).toMatch(/shapes-[a-f0-9]+\.svg/); } export function expectChunkContainsInlineMarkup(assets: string): void { - const code = readAsset(assets, findFile(assets, (f) => f.endsWith('.js'))!); + // Concatenate all JS chunks — inline markup may live in a shared chunk + const files = fs.readdirSync(assets).filter((f) => f.endsWith('.js')); + const code = files.map((f) => readAsset(assets, f)).join('\n'); expect(code).toContain('M4 4H20V20H4z'); } diff --git a/plugin/test/e2e/vanilla.spec.ts b/plugin/test/e2e/vanilla.spec.ts index 5689c5f..7540686 100644 --- a/plugin/test/e2e/vanilla.spec.ts +++ b/plugin/test/e2e/vanilla.spec.ts @@ -1,3 +1,5 @@ +import fs from 'node:fs'; +import path from 'node:path'; import { test, expect } from '@playwright/test'; import { assetsDir, @@ -15,6 +17,21 @@ import { expectChunkContainsInlineMarkup, } from './helpers.ts'; +function readDistFile(projectName: string, fileName: string): string { + const filePath = path.resolve( + import.meta.dirname, + '..', + '..', + '..', + 'test-projects', + 'vite', + projectName, + 'dist', + fileName, + ); + return fs.readFileSync(filePath, 'utf-8'); +} + const ASSETS = assetsDir('vanilla'); test.describe('Vanilla DOM', () => { @@ -116,4 +133,82 @@ test.describe('Vanilla DOM', () => { const sprite = readAsset(ASSETS, findFile(ASSETS, (f) => f.startsWith('sprite-') && f.endsWith('.svg'))!); expect(sprite).toMatch(/href="\/assets\/placeholder-[^"]+\.png"/); }); + + test('absolute image URL passes through unchanged', () => { + const sprite = readAsset(ASSETS, findFile(ASSETS, (f) => f.startsWith('sprite-') && f.endsWith('.svg'))!); + expect(sprite).toContain('href="https://placehold.co/600x400/png"'); + }); + + test('absolute font URL in @font-face passes through unchanged', () => { + // font-ref.svg is imported into the 'fonts' named sprite + const sprite = readAsset(ASSETS, findFile(ASSETS, (f) => f.startsWith('fonts-') && f.endsWith('.svg'))!); + expect(sprite).toContain('https://fonts.gstatic.com'); + expect(sprite).toContain('@font-face'); + }); +}); + +test.describe('Vanilla DOM — embedded sprite (animations page)', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/animations.html'); + }); + + // -- Build output -- + + test('animated sprite is emitted as a file', () => { + expect(findFile(ASSETS, (f) => f.startsWith('animated-') && f.endsWith('.svg'))).toBeDefined(); + }); + + test('animated sprite contains all 5 animation symbols', () => { + const sprite = readAsset(ASSETS, findFile(ASSETS, (f) => f.startsWith('animated-') && f.endsWith('.svg'))!); + const symbolCount = (sprite.match(/ { + const sprite = readAsset(ASSETS, findFile(ASSETS, (f) => f.startsWith('animated-') && f.endsWith('.svg'))!); + expect(sprite).toContain('@keyframes'); + }); + + test('animated sprite preserves SMIL animate elements', () => { + const sprite = readAsset(ASSETS, findFile(ASSETS, (f) => f.startsWith('animated-') && f.endsWith('.svg'))!); + expect(sprite).toContain(' { + const sprite = readAsset(ASSETS, findFile(ASSETS, (f) => f.startsWith('animated-') && f.endsWith('.svg'))!); + expect(sprite).toContain(' { + const html = readDistFile('vanilla', 'animations.html'); + expect(html).toContain(' { + const html = readDistFile('vanilla', 'animations.html'); + const symbolCount = (html.match(/ { + const html = readDistFile('vanilla', 'animations.html'); + // The elements reference local fragment IDs, not external files + expect(html).not.toMatch(/href="\/assets\/animated-[^"]+\.svg#/); + }); + + // -- Page rendering -- + + test('animations page loads', async ({ page }) => { + await expect(page).toHaveTitle(/Animated/); + }); + + test('renders 5 SVG elements on the animations page', async ({ page }) => { + const svgs = page.locator('#app svg'); + await expect(svgs).toHaveCount(5); + }); }); diff --git a/plugin/test/e2e/vanilla.spec.ts-snapshots/all-svgs-vanilla-darwin.png b/plugin/test/e2e/vanilla.spec.ts-snapshots/all-svgs-vanilla-darwin.png index ee8803725d4f15c6a9a309021cf376b98a135ecd..c7ebe13c95b149891e416567692b3dffade3aa46 100644 GIT binary patch delta 60614 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

VJ5h-0=y> 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 { }); }); + describe('external asset references', () => { + it('leaves absolute URL in unchanged', async () => { + const entry = path.join(FIXTURES_DIR, 'entry-external-refs.js'); + const result = await build({ target: 'dom' }, entry); + const sprite = result.output.find( + (o) => o.type === 'asset' && o.fileName.startsWith('assets/sprite-') && o.fileName.endsWith('.svg'), + ); + expect(sprite).toBeDefined(); + if (sprite?.type === 'asset' && typeof sprite.source === 'string') { + expect(sprite.source).toContain('href="https://example.com/photo.jpg"'); + // Must not be rewritten to a local asset path + expect(sprite.source).not.toMatch(/href="\/assets\//); + } + }); + + it('leaves @font-face URL in + + +

Animated SVG manual test

+

All five animations should be playing. Each is imported in sprite mode and rendered via <use href> from a shared sprite sheet.

+
+ + + diff --git a/test-projects/vite/vanilla/src/animations.ts b/test-projects/vite/vanilla/src/animations.ts new file mode 100644 index 0000000..b2329d5 --- /dev/null +++ b/test-projects/vite/vanilla/src/animations.ts @@ -0,0 +1,40 @@ +// CSS animation - pulsing circle +import Pulse from './icons/animated/pulse.svg?sprite=animated'; + +// CSS animation - spinning arc (spinner) +import Spinner from './icons/animated/spinner.svg?sprite=animated'; + +// SMIL - cycling fill color + size +import ColorShift from './icons/animated/color-shift.svg?sprite=animated'; + +// SMIL - orbiting dot +import Orbit from './icons/animated/orbit.svg?sprite=animated'; + +// CSS animation - stroke-dashoffset draw-on effect +import Dash from './icons/animated/dash.svg?sprite=animated'; + +const app = document.getElementById('app')!; + +const animations = [ + { label: 'CSS pulse', icon: Pulse }, + { label: 'CSS spinner', icon: Spinner }, + { label: 'SMIL color shift', icon: ColorShift }, + { label: 'SMIL orbit', icon: Orbit }, + { label: 'CSS dash draw', icon: Dash }, +]; + +for (const { label, icon } of animations) { + const wrapper = document.createElement('div'); + wrapper.style.cssText = 'display:inline-flex;flex-direction:column;align-items:center;gap:8px;margin:24px;'; + + const svg = icon(); + svg.style.cssText = 'width:100px;height:100px;'; + wrapper.appendChild(svg); + + const caption = document.createElement('span'); + caption.textContent = label; + caption.style.cssText = 'font:14px/1 sans-serif;color:#555;'; + wrapper.appendChild(caption); + + app.appendChild(wrapper); +} diff --git a/test-projects/vite/vanilla/src/icons/animated/color-shift.svg b/test-projects/vite/vanilla/src/icons/animated/color-shift.svg new file mode 100644 index 0000000..a64d5a6 --- /dev/null +++ b/test-projects/vite/vanilla/src/icons/animated/color-shift.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test-projects/vite/vanilla/src/icons/animated/dash.svg b/test-projects/vite/vanilla/src/icons/animated/dash.svg new file mode 100644 index 0000000..be0547b --- /dev/null +++ b/test-projects/vite/vanilla/src/icons/animated/dash.svg @@ -0,0 +1,14 @@ + + + + + diff --git a/test-projects/vite/vanilla/src/icons/animated/orbit.svg b/test-projects/vite/vanilla/src/icons/animated/orbit.svg new file mode 100644 index 0000000..1d853f2 --- /dev/null +++ b/test-projects/vite/vanilla/src/icons/animated/orbit.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/test-projects/vite/vanilla/src/icons/animated/pulse.svg b/test-projects/vite/vanilla/src/icons/animated/pulse.svg new file mode 100644 index 0000000..643518f --- /dev/null +++ b/test-projects/vite/vanilla/src/icons/animated/pulse.svg @@ -0,0 +1,10 @@ + + + + diff --git a/test-projects/vite/vanilla/src/icons/animated/spinner.svg b/test-projects/vite/vanilla/src/icons/animated/spinner.svg new file mode 100644 index 0000000..5c9353e --- /dev/null +++ b/test-projects/vite/vanilla/src/icons/animated/spinner.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/test-projects/vite/vanilla/src/icons/with-external-image.svg b/test-projects/vite/vanilla/src/icons/with-external-image.svg new file mode 100644 index 0000000..ed6f32c --- /dev/null +++ b/test-projects/vite/vanilla/src/icons/with-external-image.svg @@ -0,0 +1 @@ + diff --git a/test-projects/vite/vanilla/src/icons/with-font-ref.svg b/test-projects/vite/vanilla/src/icons/with-font-ref.svg new file mode 100644 index 0000000..0144963 --- /dev/null +++ b/test-projects/vite/vanilla/src/icons/with-font-ref.svg @@ -0,0 +1,11 @@ + + + + Hello + diff --git a/test-projects/vite/vanilla/src/main.ts b/test-projects/vite/vanilla/src/main.ts index 5024cfe..2bf90bf 100644 --- a/test-projects/vite/vanilla/src/main.ts +++ b/test-projects/vite/vanilla/src/main.ts @@ -16,6 +16,10 @@ import UseRef from './icons/with-use-ref.svg'; // Embedded refs - SVG with referencing a PNG import ImageRef from './icons/with-image-ref.svg'; +// External asset refs - absolute URLs that must pass through unchanged +import ExternalImage from './icons/with-external-image.svg'; +import FontRef from './icons/with-font-ref.svg?sprite=fonts'; + // Source order - complex SVG with layered shapes, gradients, clip-paths, text import SourceOrder from './icons/source-order.svg'; @@ -49,10 +53,14 @@ img.src = starUrl; img.alt = 'Star'; app.appendChild(img); -// Embedded refs +// Embedded refs (local) app.appendChild(UseRef()); app.appendChild(ImageRef()); +// External asset refs (absolute URLs - should remain unchanged in output) +app.appendChild(ExternalImage()); +app.appendChild(FontRef()); + // Source order - render at larger size to see detail const sourceOrderEl = SourceOrder(); sourceOrderEl.style.width = '100px'; diff --git a/test-projects/vite/vanilla/tsconfig.json b/test-projects/vite/vanilla/tsconfig.json index 462b0a9..378ca1c 100644 --- a/test-projects/vite/vanilla/tsconfig.json +++ b/test-projects/vite/vanilla/tsconfig.json @@ -5,7 +5,7 @@ "moduleResolution": "bundler", "strict": true, "noEmit": true, - "types": ["@svg-jar/plugin/client", "node"] + "types": ["@svg-jar/plugin/client/dom", "node"] }, "include": ["src", "test"] } diff --git a/test-projects/vite/vanilla/vite.config.ts b/test-projects/vite/vanilla/vite.config.ts index edf1e60..9cc9edd 100644 --- a/test-projects/vite/vanilla/vite.config.ts +++ b/test-projects/vite/vanilla/vite.config.ts @@ -2,5 +2,13 @@ import { defineConfig } from 'vite'; import svgJar from '@svg-jar/plugin/vite'; export default defineConfig({ - plugins: [svgJar({ target: 'dom' })], + plugins: [svgJar({ target: 'dom', embedded: ['animated', 'fonts'] })], + build: { + rollupOptions: { + input: { + main: 'index.html', + animations: 'animations.html', + }, + }, + }, });