uno.config.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { defineConfig, UserConfig, presetTypography, presetIcons, transformerDirectives } from 'unocss';
  2. import { FileSystemIconLoader } from '@iconify/utils/lib/loader/node-loaders';
  3. import { presetWind3 } from '@unocss/preset-wind3';
  4. export default defineConfig({
  5. inspector: false,
  6. content: {
  7. pipeline: {
  8. include: ['**/*.vue', '**/*.tsx', '**/*.ts', '**/*-lib/**/*.mjs'],
  9. exclude: ['.git', '.idea', '.turbo', 'node_modules', 'public'],
  10. },
  11. },
  12. /**
  13. * 图标白名单。
  14. *
  15. * Icon 组件是在运行时拼出 `i-<collection>:<name>` 类名的,而 UnoCSS 只对
  16. * `content.pipeline.include` 命中的文件做静态扫描 —— `src/core/store/modules/menu.json`
  17. * 不在扫描范围内,因此菜单里配置的图标不会被生成。
  18. * 这里把「菜单配置 + 运行时拼接」两类图标显式列入白名单,保证图标一定渲染。
  19. */
  20. safelist: [
  21. // 菜单图标(写在 menu.json 中,无法被静态扫描到)
  22. 'i-simple-line-icons:bubble',
  23. 'i-mdi:chart-box-outline',
  24. 'i-mdi:brain',
  25. 'i-mdi:history',
  26. // AI 模块组件内通过 Icon 组件动态拼接的图标
  27. 'i-mdi:refresh',
  28. 'i-mdi:plus',
  29. 'i-mdi:send',
  30. 'i-mdi:stop',
  31. 'i-mdi:magnify',
  32. 'i-mdi:pin',
  33. 'i-mdi:pin-outline',
  34. 'i-mdi:pencil-outline',
  35. 'i-mdi:trash-can-outline',
  36. ],
  37. presets: [
  38. presetWind3(),
  39. presetTypography(),
  40. presetIcons({
  41. extraProperties: {
  42. display: 'inline-block',
  43. 'vertical-align': 'middle',
  44. },
  45. collections: {
  46. svg: FileSystemIconLoader(__dirname + '/src/assets/icons'),
  47. },
  48. }),
  49. ],
  50. transformers: [transformerDirectives()],
  51. } as UserConfig);