uno.config.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import type { Preset, SourceCodeTransformer } from 'unocss'
  2. import {
  3. defineConfig,
  4. presetAttributify,
  5. presetIcons,
  6. presetUno,
  7. transformerDirectives,
  8. transformerVariantGroup,
  9. } from 'unocss'
  10. import { isH5, isMp } from '@uni-helper/uni-env'
  11. import { rules } from './rules'
  12. // import { shortcuts } from './shortcuts'
  13. import { theme } from './theme'
  14. import { presetApplet, presetRemRpx, transformerApplet, transformerAttributify } from 'unocss-applet'
  15. import {Theme} from "unocss/preset-mini";
  16. // import {presetFastlane} from '@fastlane-design/uni'
  17. const presets: Preset[] = []
  18. const transformers: SourceCodeTransformer[] = []
  19. const darkMode = isH5 ? 'class' : 'media'
  20. if (isMp) {
  21. // presets.push(presetApplet({ dark: darkMode }))
  22. presets.push(presetApplet())
  23. presets.push(presetRemRpx())
  24. transformers.push(transformerAttributify({ ignoreAttributes: ['block', 'fixed'] }))
  25. transformers.push(transformerApplet())
  26. }
  27. else {
  28. presets.push(presetUno({ dark: darkMode }))
  29. presets.push(presetAttributify())
  30. presets.push(presetRemRpx({ mode: 'rpx2rem' }))
  31. }
  32. const colors = Object.keys(theme.colors!)
  33. export function presetFastlane(): Preset<Theme> {
  34. return {
  35. name: 'fastlane/preset',
  36. theme,
  37. rules,
  38. safelist: [
  39. // common
  40. ...colors.map(c => `f-${c}`),
  41. ...colors.map(c => `!f-${c}`),
  42. // shortcuts
  43. // ...Object.keys(shortcuts),
  44. ]
  45. }
  46. }
  47. export default defineConfig({
  48. // cli: {
  49. // entry: {
  50. // patterns: ['components/**/*.{vue,ts}'],
  51. // outFile: 'dist/styles.css',
  52. // },
  53. // },
  54. presets: [
  55. presetIcons({
  56. scale: 1.2,
  57. warn: true,
  58. extraProperties: {
  59. 'display': 'inline-block',
  60. 'vertical-align': 'middle',
  61. },
  62. }),
  63. ...presets,
  64. presetFastlane(),
  65. ],
  66. transformers: [transformerDirectives(), transformerVariantGroup(), ...transformers],
  67. theme: {
  68. // preflightRoot: isMp ? ['page,::before,::after'] : undefined,
  69. preflightRoot: isMp ? ['page,::before,::after'] : undefined,
  70. },
  71. shortcuts: {
  72. 'f-bg': 'bg-[#f8f8f8]',
  73. 'f-bg-2': 'bg-white',
  74. 'f-border': 'border-[#EBEDF0]',
  75. 'f-active': 'bg-[#F2F3F5]',
  76. 'f-active-h5': 'active:bg-[#F2F3F5]',
  77. 'f-text-primary': 'text-[#F94032]',
  78. 'f-text-color': 'text-[#323233]',
  79. 'f-text-color-2': 'text-[#969799]',
  80. 'f-text-color-3': 'text-[#C8C9CC]',
  81. 'f-text-mini': 'text-xs',
  82. 'f-text-small': 'text-sm',
  83. 'f-text-normal': 'text-base',
  84. 'f-text-large': 'text-lg',
  85. 'f-transition': 'transition-all duration-200',
  86. 'f-solid': 'bg-context text-white',
  87. 'f-outline': 'bg-transparent border border-solid border-context text-context ',
  88. 'f-ghost': 'bg-transparent border border-dashed border-context text-context',
  89. 'f-light': 'bg-context text-context bg-op20',
  90. 'f-text': 'bg-transparent text-context',
  91. 'f-hairline': 'relative after:content-[\'_\'] after:pointer-events-none after:absolute after:box-border after:top--50% after:right--50% after:bottom--50% after:left--50% after:f-border after:border-solid after:border-0 after:scale-50',
  92. 'f-hairline-bottom': 'f-hairline after:border-b-1px'
  93. },
  94. rules: [
  95. [
  96. 'p-safe',
  97. {
  98. padding:
  99. 'env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)',
  100. },
  101. ],
  102. ['pt-safe', { 'padding-top': 'env(safe-area-inset-top)' }],
  103. ['pb-safe', { 'padding-bottom': 'env(safe-area-inset-bottom)' }],
  104. ],
  105. })