const colors = require('tailwindcss/colors'); const { fontFamily } = require('tailwindcss/defaultTheme'); const svgToDataUri = require('mini-svg-data-uri'); const { default: flattenColorPalette } = require('tailwindcss/lib/util/flattenColorPalette'); module.exports = { darkMode: 'class', content: ['./index.html', './src/**/*.ts{,x}'], important: true, theme: { container: { center: true, padding: '2rem', screens: { sm: '100%', md: '100%', lg: '100%', xl: '100%', '2xl': '1800px', }, }, fontFamily: { sans: [ 'Inter var,' + fontFamily.sans.join(','), { fontFeatureSettings: 'normal', fontVariationSettings: '"opsz" 32', }, ], mono: fontFamily.mono, }, colors: { transparent: 'transparent', current: 'currentColor', inherit: 'inherit', white: '#fcfcfc', black: '#0b0d11', emerald: colors.emerald, red: { 50: '#fef5f5', 100: '#fdeaeb', 200: '#fbcbce', 300: '#f8abb0', 400: '#f26d74', 500: '#ed2e39', 600: '#d52933', 700: '#b2232b', 800: '#8e1c22', 900: '#74171c', }, yellow: { 50: '#fffcf2', 100: '#fffae6', 200: '#fff2bf', 300: '#ffeb99', 400: '#ffdb4d', 500: '#fc0', 600: '#e6b800', 700: '#bf9900', 800: '#997a00', 900: '#7d6400', }, green: { 50: '#f2fcf9', 100: '#e6f8f3', 200: '#bfeee1', 300: '#99e3cf', 400: '#4dcfac', 500: '#00ba88', 600: '#00a77a', 700: '#008c66', 800: '#007052', 900: '#005b43', }, cyan: '#0acccc', purple: '#5f2eea', blue: colors.sky, gray: colors.stone, magenta: '#f11197', orange: { 50: '#fefbf5', 100: '#fef8ec', 200: '#fcedcf', 300: '#fbe2b3', 400: '#f7cd79', 500: '#f4b740', 600: '#dca53a', 700: '#b78930', 800: '#926e26', 900: '#785a1f', }, }, extend: { colors: { border: 'hsl(var(--border))', input: 'hsl(var(--input))', ring: 'hsl(var(--ring))', background: 'hsl(var(--background))', foreground: 'hsl(var(--foreground))', primary: { DEFAULT: 'hsl(var(--primary))', foreground: 'hsl(var(--primary-foreground))', }, secondary: { DEFAULT: 'hsl(var(--secondary))', foreground: 'hsl(var(--secondary-foreground))', }, destructive: { DEFAULT: 'rgb(var(--destructive))', foreground: 'hsl(var(--destructive-foreground))', }, muted: { DEFAULT: 'hsl(var(--muted))', foreground: 'hsl(var(--muted-foreground))', }, accent: { DEFAULT: 'hsl(var(--accent))', foreground: 'hsl(var(--accent-foreground))', }, popover: { DEFAULT: 'hsl(var(--popover))', foreground: 'hsl(var(--popover-foreground))', }, card: { DEFAULT: 'hsl(var(--card))', foreground: 'hsl(var(--card-foreground))', }, }, borderRadius: { lg: 'var(--radius)', md: 'calc(var(--radius) - 2px)', sm: 'calc(var(--radius) - 4px)', }, ringColor: theme => ({ DEFAULT: theme('colors.orange.500/75'), ...theme('colors'), }), keyframes: { // Dropdown menu 'scale-in': { '0%': { opacity: 0, transform: 'scale(0)' }, '100%': { opacity: 1, transform: 'scale(1)' }, }, 'slide-down': { '0%': { opacity: 0, transform: 'translateY(-10px)' }, '100%': { opacity: 1, transform: 'translateY(0)' }, }, 'slide-up': { '0%': { opacity: 0, transform: 'translateY(10px)' }, '100%': { opacity: 1, transform: 'translateY(0)' }, }, // Tooltip 'slide-up-fade': { '0%': { opacity: 0, transform: 'translateY(2px)' }, '100%': { opacity: 1, transform: 'translateY(0)' }, }, 'slide-right-fade': { '0%': { opacity: 0, transform: 'translateX(-2px)' }, '100%': { opacity: 1, transform: 'translateX(0)' }, }, 'slide-down-fade': { '0%': { opacity: 0, transform: 'translateY(-2px)' }, '100%': { opacity: 1, transform: 'translateY(0)' }, }, 'slide-left-fade': { '0%': { opacity: 0, transform: 'translateX(2px)' }, '100%': { opacity: 1, transform: 'translateX(0)' }, }, // Navigation menu 'enter-from-right': { '0%': { transform: 'translateX(200px)', opacity: 0 }, '100%': { transform: 'translateX(0)', opacity: 1 }, }, 'enter-from-left': { '0%': { transform: 'translateX(-200px)', opacity: 0 }, '100%': { transform: 'translateX(0)', opacity: 1 }, }, 'exit-to-right': { '0%': { transform: 'translateX(0)', opacity: 1 }, '100%': { transform: 'translateX(200px)', opacity: 0 }, }, 'exit-to-left': { '0%': { transform: 'translateX(0)', opacity: 1 }, '100%': { transform: 'translateX(-200px)', opacity: 0 }, }, 'scale-in-content': { '0%': { transform: 'rotateX(-30deg) scale(0.9)', opacity: 0 }, '100%': { transform: 'rotateX(0deg) scale(1)', opacity: 1 }, }, 'scale-out-content': { '0%': { transform: 'rotateX(0deg) scale(1)', opacity: 1 }, '100%': { transform: 'rotateX(-10deg) scale(0.95)', opacity: 0 }, }, 'fade-in': { '0%': { opacity: 0 }, '100%': { opacity: 1 }, }, 'fade-out': { '0%': { opacity: 1 }, '100%': { opacity: 0 }, }, // Toast 'toast-hide': { '0%': { opacity: 1 }, '100%': { opacity: 0 }, }, 'toast-slide-in-right': { '0%': { transform: 'translateX(calc(100% + 1rem))' }, '100%': { transform: 'translateX(0)' }, }, 'toast-slide-in-bottom': { '0%': { transform: 'translateY(calc(100% + 1rem))' }, '100%': { transform: 'translateY(0)' }, }, 'toast-swipe-out-x': { '0%': { transform: 'translateX(var(--radix-toast-swipe-end-x))' }, '100%': { transform: 'translateX(calc(100% + 1rem))' }, }, 'toast-swipe-out-y': { '0%': { transform: 'translateY(var(--radix-toast-swipe-end-y))' }, '100%': { transform: 'translateY(calc(100% + 1rem))' }, }, 'accordion-down': { from: { height: 0 }, to: { height: 'var(--radix-accordion-content-height)' }, }, 'accordion-up': { from: { height: 'var(--radix-accordion-content-height)' }, to: { height: 0 }, }, shimmer: { from: { backgroundPosition: '0 0', }, to: { backgroundPosition: '-200% 0', }, }, }, animation: { // Dropdown menu 'scale-in': 'scale-in 0.2s ease-in-out', 'slide-down': 'slide-down 0.6s cubic-bezier(0.16, 1, 0.3, 1)', 'slide-up': 'slide-up 0.6s cubic-bezier(0.16, 1, 0.3, 1)', // Tooltip 'slide-up-fade': 'slide-up-fade 0.4s cubic-bezier(0.16, 1, 0.3, 1)', 'slide-right-fade': 'slide-right-fade 0.4s cubic-bezier(0.16, 1, 0.3, 1)', 'slide-down-fade': 'slide-down-fade 0.4s cubic-bezier(0.16, 1, 0.3, 1)', 'slide-left-fade': 'slide-left-fade 0.4s cubic-bezier(0.16, 1, 0.3, 1)', // Navigation menu 'enter-from-right': 'enter-from-right 0.25s ease', 'enter-from-left': 'enter-from-left 0.25s ease', 'exit-to-right': 'exit-to-right 0.25s ease', 'exit-to-left': 'exit-to-left 0.25s ease', 'scale-in-content': 'scale-in-content 0.2s ease', 'scale-out-content': 'scale-out-content 0.2s ease', 'fade-in': 'fade-in 0.2s ease', 'fade-out': 'fade-out 0.2s ease', // Toast 'toast-hide': 'toast-hide 100ms ease-in forwards', 'toast-slide-in-right': 'toast-slide-in-right 150ms cubic-bezier(0.16, 1, 0.3, 1)', 'toast-slide-in-bottom': 'toast-slide-in-bottom 150ms cubic-bezier(0.16, 1, 0.3, 1)', 'toast-swipe-out-x': 'toast-swipe-out-x 100ms ease-out forwards', 'toast-swipe-out-y': 'toast-swipe-out-y 100ms ease-out forwards', 'accordion-down': 'accordion-down 0.2s ease-out', 'accordion-up': 'accordion-up 0.2s ease-out', // shimmer: 'shimmer 1.5s linear infinite', }, minHeight: { content: 'var(--content-height)', }, }, }, plugins: [ // Utilities and variants for styling Radix state require('tailwindcss-radix')(), require('tailwindcss-animate'), addVariablesForColors, asd(), ], }; function asd() { return function ({ matchUtilities, theme }) { matchUtilities( { 'bg-grid': value => ({ backgroundImage: `url("${svgToDataUri( ``, )}")`, }), 'bg-grid-small': value => ({ backgroundImage: `url("${svgToDataUri( ``, )}")`, }), 'bg-dot': value => ({ backgroundImage: `url("${svgToDataUri( ``, )}")`, }), }, { values: flattenColorPalette(theme('backgroundColor')), type: 'color' }, ); }; } function addVariablesForColors({ addBase, theme }) { const allColors = flattenColorPalette(theme('colors')); const newVars = Object.fromEntries( Object.entries(allColors).map(([key, val]) => [`--${key}`, val]), ); addBase({ ':root': newVars, }); }