index.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import type { Config } from 'tailwindcss';
  2. import path from 'node:path';
  3. import { addDynamicIconSelectors } from '@iconify/tailwind';
  4. import formsPlugin from '@tailwindcss/forms';
  5. import typographyPlugin from '@tailwindcss/typography';
  6. import { fs, getPackagesSync } from '@vben/node-utils';
  7. import animate from 'tailwindcss-animate';
  8. import { enterAnimationPlugin } from './plugins/entry';
  9. // import defaultTheme from 'tailwindcss/defaultTheme';
  10. const { packages } = getPackagesSync();
  11. const tailwindPackages: string[] = [];
  12. packages.forEach((pkg) => {
  13. // apps目录下和 @vben-core/tailwind-ui 包需要使用到 tailwindcss ui
  14. if (fs.existsSync(path.join(pkg.dir, 'tailwind.config.mjs'))) {
  15. tailwindPackages.push(pkg.dir);
  16. }
  17. });
  18. export default {
  19. content: [
  20. './index.html',
  21. ...tailwindPackages.map((item) =>
  22. path.join(item, 'src/**/*.{vue,js,ts,jsx,tsx,svelte,astro,html}'),
  23. ),
  24. ],
  25. darkMode: 'class',
  26. plugins: [
  27. animate,
  28. formsPlugin,
  29. typographyPlugin,
  30. addDynamicIconSelectors(),
  31. enterAnimationPlugin,
  32. ],
  33. prefix: '',
  34. safelist: ['dark'],
  35. theme: {
  36. container: {
  37. center: true,
  38. padding: '2rem',
  39. screens: {
  40. '2xl': '1400px',
  41. },
  42. },
  43. extend: {
  44. animation: {
  45. 'accordion-down': 'accordion-down 0.2s ease-out',
  46. 'accordion-up': 'accordion-up 0.2s ease-out',
  47. 'collapsible-down': 'collapsible-down 0.2s ease-in-out',
  48. 'collapsible-up': 'collapsible-up 0.2s ease-in-out',
  49. float: 'float 5s linear 0ms infinite',
  50. },
  51. borderRadius: {
  52. lg: 'var(--radius-base)',
  53. md: 'calc(var(--radius-base) - 2px)',
  54. sm: 'calc(var(--radius-base) - 4px)',
  55. xl: 'calc(var(--radius-base) + 4px)',
  56. },
  57. colors: {
  58. accent: {
  59. DEFAULT: 'hsl(var(--color-accent))',
  60. foreground: 'hsl(var(--color-accent-foreground))',
  61. hover: 'hsl(var(--color-accent-hover))',
  62. },
  63. background: 'hsl(var(--color-background) / <alpha-value>)',
  64. // body: 'hsl(var(--color-body) / <alpha-value>)',
  65. border: 'hsl(var(--color-border))',
  66. card: {
  67. DEFAULT: 'hsl(var(--color-card))',
  68. foreground: 'hsl(var(--color-card-foreground))',
  69. },
  70. destructive: {
  71. DEFAULT: 'hsl(var(--color-destructive))',
  72. foreground: 'hsl(var(--color-destructive-foreground))',
  73. },
  74. foreground: 'hsl(var(--color-foreground) / <alpha-value>)',
  75. heavy: {
  76. DEFAULT: 'hsl(var(--color-heavy) / <alpha-value>)',
  77. foreground: 'hsl(var(--color-heavy-foreground) / <alpha-value>)',
  78. },
  79. input: {
  80. DEFAULT: 'hsl(var(--color-input))',
  81. background: 'hsl(var(--color-input-background))',
  82. },
  83. muted: {
  84. DEFAULT: 'hsl(var(--color-muted))',
  85. foreground: 'hsl(var(--color-muted-foreground))',
  86. },
  87. overlay: 'hsl(var(--color-overlay))',
  88. popover: {
  89. DEFAULT: 'hsl(var(--color-popover))',
  90. foreground: 'hsl(var(--color-popover-foreground))',
  91. },
  92. primary: {
  93. DEFAULT: 'hsl(var(--color-primary) / <alpha-value>)',
  94. foreground: 'hsl(var(--color-primary-foreground) / <alpha-value>)',
  95. },
  96. ring: 'hsl(var(--color-ring))',
  97. secondary: {
  98. DEFAULT: 'hsl(var(--color-secondary) / <alpha-value>)',
  99. desc: 'hsl(var(--color-secondary-desc) / <alpha-value>)',
  100. foreground: 'hsl(var(--color-secondary-foreground) / <alpha-value>)',
  101. },
  102. },
  103. fontFamily: {
  104. sans: [
  105. 'var(--font-geist-sans)',
  106. // ...defaultTheme.fontFamily.sans
  107. ],
  108. },
  109. keyframes: {
  110. 'accordion-down': {
  111. from: { height: '0' },
  112. to: { height: 'var(--radix-accordion-content-height)' },
  113. },
  114. 'accordion-up': {
  115. from: { height: 'var(--radix-accordion-content-height)' },
  116. to: { height: '0' },
  117. },
  118. 'collapsible-down': {
  119. from: { height: '0' },
  120. to: { height: 'var(--radix-collapsible-content-height)' },
  121. },
  122. 'collapsible-up': {
  123. from: { height: 'var(--radix-collapsible-content-height)' },
  124. to: { height: '0' },
  125. },
  126. float: {
  127. '0%': { transform: 'translateY(0)' },
  128. '50%': { transform: 'translateY(-20px)' },
  129. '100%': { transform: 'translateY(0)' },
  130. },
  131. },
  132. zIndex: {
  133. '100': '100',
  134. '1000': '1000',
  135. },
  136. },
  137. },
  138. } as Config;