const defaultTheme = require('tailwindcss/defaultTheme'); const resolveConfig = require('tailwindcss/resolveConfig'); const { Theme, ThemeManager } = require('tailwindcss-theming/api'); const themableProperties = [ 'spacing', 'fontFamily', //'fontSize', would require change in tailwindcss-theming 'fontWeight', 'letterSpacing', 'lineHeight', 'borderRadius', 'borderWidth', 'boxShadow' ]; function variablizeTheme(themeConfig, theme) { themableProperties.forEach((prop) => { const propSet = themeConfig[prop]; Object.entries(propSet).forEach(([key, value]) => { theme.setVariable(key, value, prop, prop); }); }); } const config = resolveConfig({ theme: { fontFamily: { sans: [ 'Inter', 'Inter UI', '-apple-system', 'BlinkMacSystemFont', 'San Francisco', 'Helvetica Neue', 'Arial', 'sans-serif' ], mono: ['Source Code Pro', 'Roboto mono', 'Courier New', 'monospace'] }, extend: { lineHeight: { tight: 1.2, snug: 1.33334, relaxed: 1.66667 } } } }); const base = new Theme().addColors({ transparent: 'transparent', white: '#FFFFFF', black: '#000000', gray: { 50: '#F2F2F2', 100: '#E5E5E5', 200: '#CCCCCC', 300: '#B3B3B3', 400: '#999999', 500: '#808080', 600: '#666666', 700: '#4D4D4D', 800: '#333333', 900: '#1A1A1A' }, blue: { 50: '#EFF9FF', 100: '#C8EDFF', 200: '#A0E1FF', 300: '#5FBFFF', 400: '#219DFF', 500: '#0F75D8', 600: '#0252B2', 700: '#00388B', 800: '#002364', 900: '#00133E' }, red: { 50: '#FFF4F2', 100: '#FFDED6', 200: '#FFC8B9', 300: '#FC9B84', 400: '#F57456', 500: '#EE5432', 600: '#D03B22', 700: '#B12918', 800: '#931C13', 900: '#751410' }, orange: { 50: '#FFF4EF', 100: '#FFE2CE', 200: '#FFCEAB', 300: '#FFA56F', 400: '#FF7E36', 500: '#D85E1E', 600: '#B2420C', 700: '#8B2B00', 800: '#641E00', 900: '#3E1100' }, green: { 100: '#E6F5F0', 200: '#B3E2D1', 300: '#009F65' }, yellow: { 100: '#FFF9E6', 200: '#FFEEB3', 300: '#FFDD66', 400: '#FFC700' } }); variablizeTheme(config.theme, base); const dark = new Theme() .setName('dark') .targetable() .addColors({ transparent: 'transparent', white: '#000000', black: '#FFFFFF', gray: { 50: '#1A1A1A', 100: '#333333', 200: '#4D4D4D', 300: '#666666', 400: '#808080', 500: '#999999', 600: '#B3B3B3', 700: '#CCCCCC', 800: '#E5E5E5', 900: '#F2F2F2' }, red: { 50: '#751410', 100: '#931C13', 200: '#B12918', 300: '#D03B22', 400: '#EE5432', 500: '#F57456', 600: '#FC9B84', 700: '#FFC8B9', 800: '#FFDED6', 900: '#FFF4F2' }, blue: { 50: '#00133E', 100: '#002364', 200: '#00388B', 300: '#0252B2', 400: '#0F75D8', 500: '#219DFF', 600: '#5FBFFF', 700: '#A0E1FF', 800: '#C8EDFF', 900: '#EFF9FF' }, orange: { 50: '#3E1100', 100: '#641E00', 200: '#8B2B00', 300: '#B2420C', 400: '#D85E1E', 500: '#FF7E36', 600: '#FFA56F', 700: '#FFCEAB', 800: '#FFE2CE', 900: '#FFF4EF' }, green: { 100: '#182722', 200: '#134231', 300: '#009F65' }, yellow: { 100: '#312B18', 200: '#5F4E13', 300: '#A4820B', 400: '#FFC700' } }); const themes = new ThemeManager().setDefaultTheme(base).addTheme(dark); module.exports = { mode: 'jit', purge: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], darkMode: 'class', // or 'media' or 'class' theme: { extend: { minWidth: (theme) => theme('spacing') } }, screens: { ...defaultTheme.screens, xl: '1440px', '2xl': '2200px' }, variants: { extend: { opacity: ['hover-none'], display: ['group-hover'] } }, plugins: [ require('@tailwindcss/aspect-ratio'), require('tailwindcss-touch')(), require('tailwindcss-theming')({ themes, strategy: 'class' }) ] };