diff --git a/packages/client/uno.config.ts b/packages/client/uno.config.ts index f7bc212454..b90783ab4e 100644 --- a/packages/client/uno.config.ts +++ b/packages/client/uno.config.ts @@ -1,9 +1,6 @@ -import { fileURLToPath } from 'node:url' -import { readFileSync } from 'node:fs' import { defineConfig, presetAttributify, - presetIcons, presetTypography, presetUno, transformerDirectives, @@ -41,18 +38,8 @@ export default defineConfig({ presets: [ presetUno(), presetAttributify(), - presetIcons({ - collectionsNodeResolvePath: fileURLToPath(import.meta.url), - collections: { - slidev: { - logo: async () => { - const content = readFileSync(fileURLToPath(new URL('assets/logo.svg', import.meta.url)), 'utf-8') - return content - }, - }, - }, - }), presetTypography(), + /* Preset Icons is added in ../node/setups/unocss.ts */ ], transformers: [ transformerDirectives({ enforce: 'pre' }), diff --git a/packages/slidev/node/options.ts b/packages/slidev/node/options.ts index 861805d646..08a94e480e 100644 --- a/packages/slidev/node/options.ts +++ b/packages/slidev/node/options.ts @@ -80,6 +80,7 @@ export async function createDataUtils(resolved: Omit monacoTypesIgnorePackagesMatches.some(i => i(pkg)), getLayouts: () => { const now = Date.now() diff --git a/packages/slidev/node/setups/unocss.ts b/packages/slidev/node/setups/unocss.ts index b3c9eb9ad9..2a17795f03 100644 --- a/packages/slidev/node/setups/unocss.ts +++ b/packages/slidev/node/setups/unocss.ts @@ -1,14 +1,14 @@ import { resolve } from 'node:path' -import { existsSync } from 'node:fs' +import { existsSync, readFileSync } from 'node:fs' import type { Theme } from '@unocss/preset-uno' import type { UserConfig } from '@unocss/core' -import { mergeConfigs } from 'unocss' +import { mergeConfigs, presetIcons } from 'unocss' import type { ResolvedSlidevOptions, UnoSetup } from '@slidev/types' import { loadSetups } from '../setups/load' import { loadModule } from '../utils' export default async function setupUnocss( - { clientRoot, roots, data }: ResolvedSlidevOptions, + { clientRoot, roots, data, utils }: ResolvedSlidevOptions, ) { function loadFileConfigs(root: string): UserConfig[] { return [ @@ -23,6 +23,18 @@ export default async function setupUnocss( } const configs = [ + { + presets: [ + presetIcons({ + collectionsNodeResolvePath: utils.iconsResolvePath, + collections: { + slidev: { + logo: () => readFileSync(resolve(clientRoot, 'assets/logo.svg'), 'utf-8'), + }, + }, + }), + ], + }, ...loadFileConfigs(clientRoot), ...await loadSetups(roots, 'unocss.ts', [], loadFileConfigs), ].filter(Boolean) as UserConfig[] diff --git a/packages/slidev/node/vite/icons.ts b/packages/slidev/node/vite/icons.ts index 7c8f1b0ecb..4fb67df568 100644 --- a/packages/slidev/node/vite/icons.ts +++ b/packages/slidev/node/vite/icons.ts @@ -1,14 +1,13 @@ -import { fileURLToPath } from 'node:url' import type { ResolvedSlidevOptions, SlidevPluginOptions } from '@slidev/types' import Icons from 'unplugin-icons/vite' export function createIconsPlugin( - _options: ResolvedSlidevOptions, + options: ResolvedSlidevOptions, pluginOptions: SlidevPluginOptions, ) { return Icons({ defaultClass: 'slidev-icon', - collectionsNodeResolvePath: fileURLToPath(import.meta.url), + collectionsNodeResolvePath: options.utils.iconsResolvePath, ...pluginOptions.icons, }) } diff --git a/packages/types/src/options.ts b/packages/types/src/options.ts index ad03f4e131..25a87b92c7 100644 --- a/packages/types/src/options.ts +++ b/packages/types/src/options.ts @@ -49,6 +49,7 @@ export interface ResolvedSlidevUtils { shiki: HighlighterGeneric shikiOptions: MarkdownItShikiOptions indexHtml: string + iconsResolvePath: string[] isMonacoTypesIgnored: (pkg: string) => boolean getLayouts: () => Record }