index.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import type { Config } from 'tailwindcss';
  2. import path from 'node:path';
  3. import { fs, getPackagesSync } from '@vben/node-utils';
  4. import { addDynamicIconSelectors } from '@iconify/tailwind';
  5. import formsPlugin from '@tailwindcss/forms';
  6. import typographyPlugin from '@tailwindcss/typography';
  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. animationDuration: {
  52. '2000': '2000ms',
  53. '3000': '3000ms',
  54. },
  55. borderRadius: {
  56. lg: 'var(--radius)',
  57. md: 'calc(var(--radius) - 2px)',
  58. sm: 'calc(var(--radius) - 4px)',
  59. xl: 'calc(var(--radius) + 4px)',
  60. },
  61. colors: {
  62. accent: {
  63. DEFAULT: 'hsl(var(--accent))',
  64. foreground: 'hsl(var(--accent-foreground))',
  65. hover: 'hsl(var(--accent-hover))',
  66. },
  67. background: 'hsl(var(--background))',
  68. border: 'hsl(var(--border))',
  69. card: {
  70. DEFAULT: 'hsl(var(--card))',
  71. foreground: 'hsl(var(--card-foreground))',
  72. },
  73. destructive: {
  74. DEFAULT: 'hsl(var(--destructive))',
  75. foreground: 'hsl(var(--destructive-foreground))',
  76. },
  77. foreground: 'hsl(var(--foreground) / <alpha-value>)',
  78. heavy: {
  79. DEFAULT: 'hsl(var(--heavy))',
  80. foreground: 'hsl(var(--heavy-foreground))',
  81. },
  82. input: {
  83. DEFAULT: 'hsl(var(--input))',
  84. background: 'hsl(var(--input-background))',
  85. },
  86. muted: {
  87. DEFAULT: 'hsl(var(--muted))',
  88. foreground: 'hsl(var(--muted-foreground))',
  89. },
  90. overlay: 'hsl(var(--overlay))',
  91. popover: {
  92. DEFAULT: 'hsl(var(--popover))',
  93. foreground: 'hsl(var(--popover-foreground))',
  94. },
  95. primary: {
  96. DEFAULT: 'hsl(var(--primary) / <alpha-value>)',
  97. foreground: 'hsl(var(--primary-foreground) / <alpha-value>)',
  98. },
  99. ring: 'hsl(var(--ring))',
  100. secondary: {
  101. DEFAULT: 'hsl(var(--secondary) / <alpha-value>)',
  102. desc: 'hsl(var(--secondary-desc) / <alpha-value>)',
  103. foreground: 'hsl(var(--secondary-foreground) / <alpha-value>)',
  104. },
  105. success: {
  106. DEFAULT: 'hsl(var(--success))',
  107. foreground: 'hsl(var(--success-foreground))',
  108. },
  109. warning: {
  110. DEFAULT: 'hsl(var(--warning))',
  111. foreground: 'hsl(var(--warning-foreground))',
  112. },
  113. },
  114. fontFamily: {
  115. sans: [
  116. 'var(--font-geist-sans)',
  117. // ...defaultTheme.fontFamily.sans
  118. ],
  119. },
  120. keyframes: {
  121. 'accordion-down': {
  122. from: { height: '0' },
  123. to: { height: 'var(--radix-accordion-content-height)' },
  124. },
  125. 'accordion-up': {
  126. from: { height: 'var(--radix-accordion-content-height)' },
  127. to: { height: '0' },
  128. },
  129. 'collapsible-down': {
  130. from: { height: '0' },
  131. to: { height: 'var(--radix-collapsible-content-height)' },
  132. },
  133. 'collapsible-up': {
  134. from: { height: 'var(--radix-collapsible-content-height)' },
  135. to: { height: '0' },
  136. },
  137. float: {
  138. '0%': { transform: 'translateY(0)' },
  139. '50%': { transform: 'translateY(-20px)' },
  140. '100%': { transform: 'translateY(0)' },
  141. },
  142. },
  143. zIndex: {
  144. '100': '100',
  145. '1000': '1000',
  146. },
  147. },
  148. },
  149. } as Config;