UNPKG

@tailwindcss/typography

Version:

A Tailwind CSS plugin for automatically styling plain HTML content with beautiful typographic defaults.

62 lines (56 loc) 1.71 kB
const plugin = require('tailwindcss/plugin') const merge = require('lodash/merge') const castArray = require('lodash/castArray') const uniq = require('lodash/uniq') const styles = require('./styles') const { isUsableColor } = require('./utils') const computed = { // Reserved for future "magic properties", for example: // bulletColor: (color) => ({ 'ul > li::before': { backgroundColor: color } }), } function configToCss(config = {}) { return merge( {}, ...Object.keys(config) .filter((key) => computed[key]) .map((key) => computed[key](config[key])), ...castArray(config.css || {}) ) } module.exports = plugin.withOptions( ({ modifiers, className = 'prose' } = {}) => { return function ({ addComponents, theme, variants }) { const DEFAULT_MODIFIERS = [ 'DEFAULT', 'sm', 'lg', 'xl', '2xl', ...Object.entries(theme('colors')) .filter(([color, values]) => { return isUsableColor(color, values) }) .map(([color]) => color), ] modifiers = modifiers === undefined ? DEFAULT_MODIFIERS : modifiers const config = theme('typography') const all = uniq([ 'DEFAULT', ...modifiers, ...Object.keys(config).filter((modifier) => !DEFAULT_MODIFIERS.includes(modifier)), ]) addComponents( all.map((modifier) => ({ [modifier === 'DEFAULT' ? `.${className}` : `.${className}-${modifier}`]: configToCss( config[modifier] ), })), variants('typography') ) } }, () => ({ theme: { typography: styles }, variants: { typography: ['responsive'] }, }) )