const path = require('path'); const process = require('process'); const colors = require('tailwindcss/colors'); const defaultTheme = require('tailwindcss/defaultTheme'); const generatePalette = require(path.resolve(__dirname, ('src/@teso/tailwind/utils/generate-palette'))); /** * Custom palettes * * Uses the generatePalette helper method to generate * Tailwind-like color palettes automatically */ const customPalettes = { brand: generatePalette('#2196F3') }; /** * Themes */ const themes = { // Default theme is required for theming system to work correctly 'default': { primary: { ...colors.indigo, DEFAULT: colors.indigo[600] }, accent: { ...colors.blueGray, DEFAULT: colors.blueGray[800] }, warn: { ...colors.red, DEFAULT: colors.red[600] }, 'on-warn': { 500: colors.red['50'] } }, // Rest of the themes will use the 'default' as the base theme // and extend them with their given configuration 'brand': { primary: customPalettes.brand }, 'indigo': { primary: { ...colors.teal, DEFAULT: colors.teal[600] } }, 'rose': { primary: colors.rose }, 'purple': { primary: { ...colors.purple, DEFAULT: colors.purple[600] } }, 'amber': { primary: colors.amber } }; /** * Tailwind configuration */ const config = { experimental: {}, future: {}, darkMode: 'class', important: true, purge: { enabled: process.env.TAILWIND_MODE === 'build', content: ['./src/**/*.{html,scss,ts}'], options: { safelist: { standard: ['dark'], deep: [/^theme/, /^mat/] } } }, theme: { colors: { transparent: 'transparent', current: 'currentColor', black: colors.black, white: colors.white, pink: colors.pink, gray: colors.blueGray, red: colors.red, orange: colors.orange, amber: colors.amber, yellow: colors.yellow, green: colors.green, teal: colors.teal, blue: colors.blue, indigo: colors.indigo, purple: colors.purple }, fontSize: { 'xs': '0.625rem', 'sm': '0.75rem', 'md': '0.8125rem', 'base': '0.875rem', 'lg': '1rem', 'xl': '1.125rem', '2xl': '1.25rem', '3xl': '1.5rem', '4xl': '2rem', '5xl': '2.25rem', '6xl': '2.5rem', '7xl': '3rem', '8xl': '4rem', '9xl': '6rem', '10xl': '8rem' }, screens: { print: { 'raw': 'print' }, sm: '600px', md: '960px', lg: '1280px', xl: '1440px' }, extend: { animation: { 'spin-slow': 'spin 3s linear infinite' }, flex: { '0': '0 0 auto' }, fontFamily: { sans: `"Inter var", ${defaultTheme.fontFamily.sans.join(',')}`, mono: `"IBM Plex Mono", ${defaultTheme.fontFamily.mono.join(',')}` }, opacity: { 12: '0.12', 38: '0.38', 87: '0.87' }, rotate: { '-270': '270deg', '15': '15deg', '30': '30deg', '60': '60deg', '270': '270deg' }, scale: { '-1': '-1' }, zIndex: { '-1': -1, '49': 49, '60': 60, '70': 70, '80': 80, '90': 90, '99': 99, '999': 999, '9999': 9999, '99999': 99999 }, spacing: { '13': '3.25rem', '15': '3.75rem', '18': '4.5rem', '22': '5.5rem', '26': '6.5rem', '30': '7.5rem', '50': '12.5rem', '90': '22.5rem' }, /** * Extended spacing values for width and height utilities. * This way, we won't be adding these to other utilities * that use 'spacing' config to keep the file size * smaller by not generating useless utilities such as * p-1/4 or m-480. */ extendedSpacing: { // Fractional values '1/2': '50%', '1/3': '33.333333%', '2/3': '66.666667%', '1/4': '25%', '2/4': '50%', '3/4': '75%', // Bigger values '100': '25rem', '120': '30rem', '128': '32rem', '140': '35rem', '160': '40rem', '180': '45rem', '192': '48rem', '200': '50rem', '240': '60rem', '256': '64rem', '280': '70rem', '320': '80rem', '360': '90rem', '400': '100rem', '480': '120rem' }, height: theme => ({ ...theme('extendedSpacing') }), minHeight: theme => ({ ...theme('spacing'), ...theme('extendedSpacing') }), maxHeight: theme => ({ ...theme('extendedSpacing'), none: 'none' }), width: theme => ({ ...theme('extendedSpacing') }), minWidth: theme => ({ ...theme('spacing'), ...theme('extendedSpacing'), screen: '100vw' }), maxWidth: theme => ({ ...theme('spacing'), ...theme('extendedSpacing'), screen: '100vw' }), transitionDuration: { '400': '400ms' }, transitionTimingFunction: { 'drawer': 'cubic-bezier(0.25, 0.8, 0.25, 1)' }, // @tailwindcss/typography typography: (theme) => ({ DEFAULT: { css: { color: 'var(--teso-text-default)', '[class~="lead"]': { color: 'var(--teso-text-secondary)' }, a: { color: 'var(--teso-primary-500)' }, strong: { color: 'var(--teso-text-default)' }, 'ol > li::before': { color: 'var(--teso-text-secondary)' }, 'ul > li::before': { backgroundColor: 'var(--teso-text-hint)' }, hr: { borderColor: 'var(--teso-border)' }, blockquote: { color: 'var(--teso-text-default)', borderLeftColor: 'var(--teso-border)' }, h1: { color: 'var(--teso-text-default)' }, h2: { color: 'var(--teso-text-default)' }, h3: { color: 'var(--teso-text-default)' }, h4: { color: 'var(--teso-text-default)' }, 'figure figcaption': { color: 'var(--teso-text-secondary)' }, code: { color: 'var(--teso-text-default)', fontWeight: '500' }, 'a code': { color: 'var(--teso-primary)' }, pre: { color: theme('colors.white'), backgroundColor: theme('colors.gray.800') }, thead: { color: 'var(--teso-text-default)', borderBottomColor: 'var(--teso-border)' }, 'tbody tr': { borderBottomColor: 'var(--teso-border)' }, 'ol[type="A" s]': false, 'ol[type="a" s]': false, 'ol[type="I" s]': false, 'ol[type="i" s]': false } }, sm: { css: { code: { fontSize: '1em' }, pre: { fontSize: '1em' }, table: { fontSize: '1em' } } } }) } }, variants: { accessibility: [], alignContent: ['responsive'], alignItems: ['responsive'], alignSelf: ['responsive'], animation: [], backgroundAttachment: [], backgroundClip: [], backgroundColor: ['dark', 'responsive', 'group-hover', 'hover', 'focus', 'focus-within'], backgroundImage: [], backgroundOpacity: ['dark', 'hover'], backgroundPosition: [], backgroundRepeat: [], backgroundSize: [], borderCollapse: [], borderColor: ['dark', 'group-hover', 'hover', 'focus', 'focus-within'], borderOpacity: ['group-hover', 'hover'], borderRadius: ['responsive'], borderStyle: [], borderWidth: ['dark', 'responsive', 'first', 'last', 'odd', 'even'], boxShadow: ['dark', 'responsive', 'hover', 'focus-within'], boxSizing: [], cursor: [], display: ['dark', 'responsive', 'hover', 'group-hover'], divideColor: ['dark'], divideOpacity: [], divideStyle: [], divideWidth: ['responsive'], fill: [], flex: ['responsive'], flexDirection: ['responsive'], flexGrow: ['responsive'], flexShrink: ['responsive'], flexWrap: ['responsive'], fontFamily: [], fontSize: ['responsive'], fontSmoothing: [], fontStyle: ['responsive'], fontVariantNumeric: [], fontWeight: ['responsive'], gap: ['responsive'], gridAutoColumns: ['responsive'], gridAutoFlow: ['responsive'], gridAutoRows: ['responsive'], gridColumn: ['responsive'], gridColumnEnd: ['responsive'], gridColumnStart: ['responsive'], gridRow: ['responsive'], gridRowEnd: ['responsive'], gridRowStart: ['responsive'], gridTemplateColumns: ['responsive'], gridTemplateRows: ['responsive'], height: ['responsive'], inset: ['responsive'], justifyContent: ['responsive'], justifyItems: ['responsive'], justifySelf: ['responsive'], letterSpacing: ['responsive'], lineHeight: ['responsive'], listStylePosition: [], listStyleType: [], margin: ['responsive'], maxHeight: ['responsive'], maxWidth: ['responsive'], minHeight: ['responsive'], minWidth: ['responsive'], objectFit: ['responsive'], objectPosition: ['responsive'], opacity: ['responsive', 'group-hover', 'hover'], order: ['responsive'], outline: [], overflow: ['responsive'], overscrollBehavior: ['responsive'], padding: ['responsive'], placeContent: ['responsive'], placeItems: ['responsive'], placeSelf: ['responsive'], pointerEvents: ['responsive'], position: ['responsive'], resize: [], ringColor: ['dark', 'group-hover'], ringOffsetColor: ['dark'], ringOffsetWidth: [], ringOpacity: [], ringWidth: [], rotate: [], scale: [], skew: [], space: ['responsive'], stroke: ['responsive'], strokeWidth: ['responsive'], tableLayout: ['responsive'], textAlign: ['responsive'], textColor: ['dark', 'group-hover', 'hover'], textDecoration: ['group-hover', 'hover'], textOpacity: ['group-hover', 'hover'], textOverflow: ['responsive'], textTransform: [], transform: [], transformOrigin: [], transitionDelay: [], transitionDuration: [], transitionProperty: [], transitionTimingFunction: [], translate: ['responsive', 'hover'], userSelect: ['responsive'], visibility: ['responsive'], whitespace: ['responsive'], width: ['responsive'], wordBreak: ['responsive'], zIndex: ['responsive'] }, corePlugins: { appearance: false, gradientColorStops: false, container: false, float: false, clear: false, placeholderColor: false, placeholderOpacity: false, verticalAlign: false }, plugins: [ // teso - Tailwind plugins require(path.resolve(__dirname, ('src/@teso/tailwind/plugins/extract-config'))), require(path.resolve(__dirname, ('src/@teso/tailwind/plugins/utilities'))), require(path.resolve(__dirname, ('src/@teso/tailwind/plugins/icon-size'))), require(path.resolve(__dirname, ('src/@teso/tailwind/plugins/theming')))({ themes }), // Other third party and/or custom plugins require('@tailwindcss/typography')({ modifiers: ['sm', 'lg'] }), require('@tailwindcss/aspect-ratio'), require('@tailwindcss/line-clamp') ] }; module.exports = config;