index.ts 4.3 KB

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