const plugin = require('tailwindcss/plugin') const addHeaders = require('./tailwind/headers') // get formatted color, by color and opacity function c(color, opacityValue) { return opacityValue === undefined ? `rgb(var(${color}))` : `rgba(var(${color}), ${opacityValue})` } // get color-maker method receiving an opacity as the input, by color function co(color) { return ({ opacityValue }) => c(color, opacityValue) } // Read more about tailwindcss configuration: https://tailwindcss.com/docs/configuration module.exports = { mode: 'jit', prefix: 'tw-', safelist: [ 'light-mode', 'dark-mode', ], theme: { // structure container: { center: true, padding: { DEFAULT: '1.5rem', md: '2rem', lg: '2.5rem', }, }, fontFamily: { main: [ '-apple-system', '"Segoe UI"', 'Helvetica', 'Arial', 'sans-serif', '"Apple Color Emoji"', '"Segoe UI Emoji"', '"Segoe UI Symbol"', ], mono: ['monospace'], }, lineHeight: { none: 1, xs: 1.1, sm: 1.15, }, // colors colors: { black: co('--c-black'), white: co('--c-white'), divider: co('--c-divider'), muted: co('--c-divider-muted'), accent: { primary: co('--c-accent-primary'), secondary: co('--c-accent-secondary'), }, state: { error: co('--c-state-error'), success: co('--c-state-success'), }, }, textColor: theme => ({ ...theme('colors'), 'custom': co('--text-color'), 'base': co('--c-text-base'), 'dim-1': co('--c-text-dim-1'), 'dim-2': co('--c-text-dim-2'), 'dim-3': co('--c-text-dim-3'), 'bg': co('--c-bg-base'), }), backgroundColor: theme => ({ ...theme('colors'), 'custom': co('--bg-color'), 'base': co('--c-bg-base'), 'dim-1': co('--c-bg-dim-1'), 'placeholder': co('--c-bg-placeholder'), }), borderColor: theme => ({ ...theme('colors'), base: co('--c-text-base'), transparent: 'transparent', custom: co('--border-color'), }), fill: theme => ({ ...theme('backgroundColor'), }), stroke: theme => ({ ...theme('borderColor'), }), // opacity opacity: { 0: '0', muted: '0.5', soft: '0.8', full: '1', outline: 'var(--o-outline)', }, textOpacity: theme => ({ ...theme('opacity'), custom: 'var(--text-opacity)', }), backgroundOpacity: theme => ({ ...theme('opacity'), custom: 'var(--bg-opacity)', }), borderOpacity: theme => ({ ...theme('opacity'), custom: 'var(--border-opacity)', }), transitionDuration: { fast: '250ms', normal: '500ms', slow: '750ms', }, zIndex: { muted: '-1', 1: '1', }, borderRadius: { 0: '0', sm: '0.75rem', DEFAULT: '1rem', lg: '1.5rem', full: '9999px', }, scale: { 0: '0', click: '0.975', normal: '1', }, extend: { blur: { px: '1px', xs: '2px', }, fontSize: { '1/2': '0.5em', '5/8': '0.625em', '3/4': '0.75em', '7/8': '0.875em', '9/8': '1.125em', '5/4': '1.25em', '3/2': '1.5em', }, boxShadow: { // shadows for dialogs, popups etc card: '0 0 2rem -1.75rem rgb(var(--c-accent-secondary))', }, }, }, plugins: [ plugin(addHeaders), ({ addUtilities, matchUtilities, theme }) => { const size = value => ({ height: value, minHeight: value, width: value, minWidth: value, }) matchUtilities( { size, circle: value => ({ ...size(value), borderRadius: theme('borderRadius.full'), }), }, { values: theme('height') }, ) addUtilities({ '.duration-onhover-fast': { 'transitionDuration': theme('transitionDuration.normal'), '&:hover': { transitionDuration: theme('transitionDuration.fast'), }, }, }) }, ], }