uno.config.ts 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // uno.config.ts
  2. import { defineConfig, presetWind4, presetTypography, presetAttributify, presetIcons } from 'unocss'
  3. import type { Rule } from 'unocss'
  4. import { Theme } from 'unocss/preset-wind4'
  5. import transformerDirectives from '@unocss/transformer-directives'
  6. import transformerVariantGroup from '@unocss/transformer-variant-group'
  7. export default defineConfig({
  8. // ...UnoCSS options
  9. content: {
  10. pipeline: {
  11. include: [
  12. // default
  13. /\.(vue|svelte|[jt]sx|vine.ts|mdx?|astro|elm|php|phtml|html)($|\?)/,
  14. // include js/ts files
  15. 'src/**/*.{js,ts}',
  16. ],
  17. },
  18. },
  19. blocklist: [
  20. /^[a-zA-Z]--/, // 正则表达式:以单个字母开头,后跟两个连字符
  21. ],
  22. presets: [
  23. presetWind4({
  24. dark: 'class', // UnoCSS 不支持 Tailwind 的 darkMode: ['selector', ...] 写法,但可用 class 模式模拟
  25. }), // Uno 默认预设
  26. presetAttributify(), // 如果你想使用属性风格的语法
  27. presetIcons({
  28. warn: true,
  29. autoInstall: true,
  30. }), // 纯CSS图标
  31. presetTypography(),
  32. ],
  33. transformers: [
  34. transformerDirectives(), // 支持 @apply 等指令
  35. transformerVariantGroup(), // 支持 hover:(bg-red text-white) 等
  36. ],
  37. theme: {
  38. colors: {},
  39. },
  40. rules: [
  41. // colors rules
  42. // [
  43. // /^text-(.*)$/,
  44. // ([, c], { theme }) => {
  45. // if (theme.colors[c]) return { color: theme.colors[c] }
  46. // },
  47. // ],
  48. ['text-primary', { color: 'var(--primary-color)' }],
  49. // transition增强
  50. [
  51. /^transition-(?:\[([\s\w,-]+)\]|([\w-]+))-(\d+)$/,
  52. ([, bracketedProperties, singleProperty, duration]) => {
  53. let properties
  54. if (bracketedProperties) {
  55. // 处理括号内的所有属性,无论数量多少
  56. properties = bracketedProperties
  57. .split(',')
  58. .map((prop) => prop.trim())
  59. .filter(Boolean) // 移除空值,处理可能的多余逗号
  60. .join(', ')
  61. } else {
  62. // 处理单个属性的情况
  63. properties = singleProperty
  64. }
  65. return {
  66. '--un-transition-duration': `${duration}ms`, // 捕获数值作为毫秒数
  67. 'transition-property': properties,
  68. 'transition-timing-function': 'var(--un-ease, var(--default-transition-timingFunction))',
  69. 'transition-duration': 'var(--un-transition-duration)',
  70. }
  71. },
  72. {
  73. // 可选:指定 autocomplete 提示,方便开发时自动补全
  74. autocomplete: [
  75. 'transition-<property>-<duration>',
  76. 'transition-[<properties>]-<duration>',
  77. 'transition-opacity-300',
  78. 'transition-[opacity]-500',
  79. 'transition-[opacity,transform]-300',
  80. 'transition-[width,height,margin,padding]-400',
  81. 'transition-[color,background-color,border-color,box-shadow]-600',
  82. ],
  83. },
  84. ] as Rule,
  85. ],
  86. })