diff --git a/src/module.ts b/src/module.ts index f3b1eac7..6412099c 100644 --- a/src/module.ts +++ b/src/module.ts @@ -22,6 +22,9 @@ export interface ModuleOptions { output: string iconsPath: string defaultSprite: string + elementClass: string + spriteClassPrefix: string + componentName: string optimizeOptions: SVGOConfig } @@ -38,6 +41,9 @@ export default defineNuxtModule({ output: '~/assets/sprite/gen', defaultSprite: 'icons', iconsPath: '/_icons', + elementClass: 'icon', + componentName: 'SvgIcon', + spriteClassPrefix: 'sprite-', optimizeOptions: { plugins: [ { @@ -75,7 +81,12 @@ export default defineNuxtModule({ const logger = useLogger('svg-sprite') - await addComponent({ name: 'SvgIcon', filePath: resolve('./runtime/components/svg-icon.vue'), global: true }) + await addComponent({ + name: `${options.componentName}`, + filePath: resolve('./runtime/components/svg-icon.vue'), + global: true + }) + if (nuxt.options.dev) { nuxt.options.runtimeConfig.svgSprite = { inputDir, defaultSprite: options.defaultSprite } addServerHandler({ route: '/api/svg-sprite/generate', handler: resolve('./runtime/server/generate') }) @@ -88,6 +99,20 @@ export default defineNuxtModule({ nuxt.options.alias['#svg-sprite'] = addTemplate({ ...spritesTemplate, write: true, + options: { + sprites, + outDir, + defaultSprite: options.defaultSprite, + elementClass: options.elementClass, + spriteClassPrefix: options.spriteClassPrefix + } + }).dst + + // Add template + // Fix: we need this alias in the svg-icon component independently on the iconsPath setting + nuxt.options.alias['#svg-sprite-icons'] = addTemplate({ + ...iconsTemplate, + write: true, options: { sprites, outDir, @@ -103,17 +128,6 @@ export default defineNuxtModule({ src: resolve('./runtime/components/layout.vue') }) - // Add template - nuxt.options.alias['#svg-sprite-icons'] = addTemplate({ - ...iconsTemplate, - write: true, - options: { - sprites, - outDir, - defaultSprite: options.defaultSprite - } - }).dst - // Register route nuxt.hook('pages:extend', (routes) => { routes.unshift({ @@ -128,8 +142,9 @@ export default defineNuxtModule({ } nuxt.hook('nitro:init', async (nitro) => { - const input = options.input.replace(/~|\.\//, 'root').replace(/\//g, ':') - const output = options.output.replace(/~\/|\.\//, '') + // Support (fix) for default and custom nuxt aliases + const input = inputDir.replace(nitro.options.rootDir, '~').replace(/~|\.\//, 'root').replace(/\//g, ':'); + const output = outDir.replace(nitro.options.rootDir, '').replace(/~\/|\.\//, ''); // Make sure output directory exists and contains .gitignore to ignore sprite files if (!await nitro.storage.hasItem(`${output}:.gitignore`)) { diff --git a/src/template.ts b/src/template.ts index b299a8a2..8b94bc9d 100644 --- a/src/template.ts +++ b/src/template.ts @@ -8,8 +8,8 @@ export const spritesTemplate = { 'export const sprites = {', imports, '}', - 'export const spriteClass = "";\n', - 'export const spriteClassPrefix = "";\n', + `export const spriteClass = "${options.elementClass}";\n`, + `export const spriteClassPrefix = "${options.spriteClassPrefix}";\n`, `export const defaultSprite = "${options.defaultSprite}";\n` ].join('\n') }