mirror of
https://github.com/tailwindlabs/tailwindcss.git
synced 2025-12-08 21:36:08 +00:00
296 lines
9.0 KiB
JavaScript
296 lines
9.0 KiB
JavaScript
const postcss = require('postcss')
|
|
const buildMediaQuery = require('../../lib/util/buildMediaQuery').default
|
|
const prefixSelector = require('../../lib/util/prefixSelector').default
|
|
const {
|
|
updateLastClasses,
|
|
updateAllClasses,
|
|
transformAllSelectors,
|
|
transformAllClasses,
|
|
transformLastClasses,
|
|
} = require('../pluginUtils')
|
|
|
|
module.exports = {
|
|
pseudoClassVariants: function ({ config, addVariant }) {
|
|
let pseudoVariants = [
|
|
['first', 'first-child'],
|
|
['last', 'last-child'],
|
|
['odd', 'nth-child(odd)'],
|
|
['even', 'nth-child(even)'],
|
|
'visited',
|
|
'checked',
|
|
'focus-within',
|
|
'hover',
|
|
'focus',
|
|
'focus-visible',
|
|
'active',
|
|
'disabled',
|
|
]
|
|
|
|
for (let variant of pseudoVariants) {
|
|
let [variantName, state] = Array.isArray(variant) ? variant : [variant, variant]
|
|
|
|
addVariant(
|
|
variantName,
|
|
transformAllClasses((className, { withPseudo }) => {
|
|
return withPseudo(`${variantName}${config('separator')}${className}`, state)
|
|
})
|
|
)
|
|
}
|
|
|
|
for (let variant of pseudoVariants) {
|
|
let [variantName, state] = Array.isArray(variant) ? variant : [variant, variant]
|
|
let groupVariantName = `group-${variantName}`
|
|
|
|
addVariant(
|
|
groupVariantName,
|
|
transformAllSelectors((selector) => {
|
|
let variantSelector = updateAllClasses(selector, (className) => {
|
|
return `${groupVariantName}${config('separator')}${className}`
|
|
})
|
|
|
|
if (variantSelector === selector) {
|
|
return null
|
|
}
|
|
|
|
let groupSelector = prefixSelector(
|
|
config('prefix'),
|
|
`.group${config('separator')}${state}`
|
|
)
|
|
|
|
return `${groupSelector} ${variantSelector}`
|
|
})
|
|
)
|
|
}
|
|
},
|
|
directionVariants: function ({ config, addVariant }) {
|
|
addVariant(
|
|
'ltr',
|
|
transformAllSelectors(
|
|
(selector) =>
|
|
`[dir="ltr"] ${updateAllClasses(
|
|
selector,
|
|
(className) => `ltr${config('separator')}${className}`
|
|
)}`
|
|
)
|
|
)
|
|
|
|
addVariant(
|
|
'rtl',
|
|
transformAllSelectors(
|
|
(selector) =>
|
|
`[dir="rtl"] ${updateAllClasses(
|
|
selector,
|
|
(className) => `rtl${config('separator')}${className}`
|
|
)}`
|
|
)
|
|
)
|
|
},
|
|
reducedMotionVariants: function ({ config, addVariant }) {
|
|
addVariant(
|
|
'motion-safe',
|
|
transformLastClasses(
|
|
(className) => {
|
|
return `motion-safe${config('separator')}${className}`
|
|
},
|
|
() => postcss.atRule({ name: 'media', params: '(prefers-reduced-motion: no-preference)' })
|
|
)
|
|
)
|
|
|
|
addVariant(
|
|
'motion-reduce',
|
|
transformLastClasses(
|
|
(className) => {
|
|
return `motion-reduce${config('separator')}${className}`
|
|
},
|
|
() => postcss.atRule({ name: 'media', params: '(prefers-reduced-motion: reduce)' })
|
|
)
|
|
)
|
|
},
|
|
darkVariants: function ({ config, addVariant }) {
|
|
if (config('darkMode') === 'class') {
|
|
addVariant(
|
|
'dark',
|
|
transformAllSelectors((selector) => {
|
|
let variantSelector = updateLastClasses(selector, (className) => {
|
|
return `dark${config('separator')}${className}`
|
|
})
|
|
|
|
if (variantSelector === selector) {
|
|
return null
|
|
}
|
|
|
|
let darkSelector = prefixSelector(config('prefix'), `.dark`)
|
|
|
|
return `${darkSelector} ${variantSelector}`
|
|
})
|
|
)
|
|
} else if (config('darkMode') === 'media') {
|
|
addVariant(
|
|
'dark',
|
|
transformLastClasses(
|
|
(className) => {
|
|
return `dark${config('separator')}${className}`
|
|
},
|
|
() => postcss.atRule({ name: 'media', params: '(prefers-color-scheme: dark)' })
|
|
)
|
|
)
|
|
}
|
|
},
|
|
screenVariants: function ({ config, theme, addVariant }) {
|
|
for (let screen in theme('screens')) {
|
|
let size = theme('screens')[screen]
|
|
let query = buildMediaQuery(size)
|
|
|
|
addVariant(
|
|
screen,
|
|
transformLastClasses(
|
|
(className) => {
|
|
return `${screen}${config('separator')}${className}`
|
|
},
|
|
() => postcss.atRule({ name: 'media', params: query })
|
|
)
|
|
)
|
|
}
|
|
},
|
|
|
|
// Base
|
|
preflight: require('./preflight'),
|
|
|
|
// Components
|
|
container: require('./container'),
|
|
|
|
// Utilitiles
|
|
accessibility: require('./accessibility'),
|
|
pointerEvents: require('./pointerEvents'),
|
|
visibility: require('./visibility'),
|
|
position: require('./position'),
|
|
inset: require('./inset'),
|
|
zIndex: require('./zIndex'),
|
|
order: require('./order'),
|
|
gridColumn: require('./gridColumn'),
|
|
gridColumnEnd: require('./gridColumnEnd'),
|
|
gridColumnStart: require('./gridColumnStart'),
|
|
gridRow: require('./gridRow'),
|
|
gridRowEnd: require('./gridRowEnd'),
|
|
gridRowStart: require('./gridRowStart'),
|
|
float: require('./float'),
|
|
clear: require('./clear'),
|
|
margin: require('./margin'),
|
|
boxSizing: require('./boxSizing'),
|
|
display: require('./display'),
|
|
height: require('./height'),
|
|
maxHeight: require('./maxHeight'),
|
|
minHeight: require('./minHeight'),
|
|
width: require('./width'),
|
|
minWidth: require('./minWidth'),
|
|
maxWidth: require('./maxWidth'),
|
|
flex: require('./flex'),
|
|
flexShrink: require('./flexShrink'),
|
|
flexGrow: require('./flexGrow'),
|
|
tableLayout: require('./tableLayout'),
|
|
borderCollapse: require('./borderCollapse'),
|
|
|
|
transform: require('./transform'),
|
|
transformOrigin: require('./transformOrigin'),
|
|
translate: require('./translate'),
|
|
rotate: require('./rotate'),
|
|
skew: require('./skew'),
|
|
scale: require('./scale'),
|
|
|
|
animation: require('./animation'),
|
|
|
|
cursor: require('./cursor'),
|
|
userSelect: require('./userSelect'),
|
|
resize: require('./resize'),
|
|
|
|
listStylePosition: require('./listStylePosition'),
|
|
listStyleType: require('./listStyleType'),
|
|
|
|
appearance: require('./appearance'),
|
|
gridAutoColumns: require('./gridAutoColumns'),
|
|
gridAutoFlow: require('./gridAutoFlow'),
|
|
gridAutoRows: require('./gridAutoRows'),
|
|
gridTemplateColumns: require('./gridTemplateColumns'),
|
|
gridTemplateRows: require('./gridTemplateRows'),
|
|
flexDirection: require('./flexDirection'),
|
|
flexWrap: require('./flexWrap'),
|
|
placeContent: require('./placeContent'),
|
|
placeItems: require('./placeItems'),
|
|
alignContent: require('./alignContent'),
|
|
alignItems: require('./alignItems'),
|
|
justifyContent: require('./justifyContent'),
|
|
justifyItems: require('./justifyItems'),
|
|
gap: require('./gap'),
|
|
space: require('./space'),
|
|
divideWidth: require('./divideWidth'),
|
|
divideStyle: require('./divideStyle'),
|
|
divideColor: require('./divideColor'),
|
|
divideOpacity: require('./divideOpacity'),
|
|
|
|
placeSelf: require('./placeSelf'),
|
|
alignSelf: require('./alignSelf'),
|
|
justifySelf: require('./justifySelf'),
|
|
|
|
overflow: require('./overflow'),
|
|
overscrollBehavior: require('./overscrollBehavior'),
|
|
textOverflow: require('./textOverflow'),
|
|
whitespace: require('./whitespace'),
|
|
wordBreak: require('./wordBreak'),
|
|
|
|
borderRadius: require('./borderRadius'),
|
|
borderWidth: require('./borderWidth'),
|
|
borderStyle: require('./borderStyle'),
|
|
borderColor: require('./borderColor'),
|
|
borderOpacity: require('./borderOpacity'),
|
|
|
|
backgroundColor: require('./backgroundColor'),
|
|
backgroundOpacity: require('./backgroundOpacity'),
|
|
backgroundImage: require('./backgroundImage'),
|
|
gradientColorStops: require('./gradientColorStops'),
|
|
backgroundSize: require('./backgroundSize'),
|
|
backgroundAttachment: require('./backgroundAttachment'),
|
|
backgroundClip: require('./backgroundClip'),
|
|
backgroundPosition: require('./backgroundPosition'),
|
|
backgroundRepeat: require('./backgroundRepeat'),
|
|
|
|
fill: require('./fill'),
|
|
stroke: require('./stroke'),
|
|
strokeWidth: require('./strokeWidth'),
|
|
|
|
objectFit: require('./objectFit'),
|
|
objectPosition: require('./objectPosition'),
|
|
|
|
padding: require('./padding'),
|
|
|
|
textAlign: require('./textAlign'),
|
|
verticalAlign: require('./verticalAlign'),
|
|
fontFamily: require('./fontFamily'),
|
|
fontSize: require('./fontSize'),
|
|
fontWeight: require('./fontWeight'),
|
|
textTransform: require('./textTransform'),
|
|
fontStyle: require('./fontStyle'),
|
|
fontVariantNumeric: require('./fontVariantNumeric'),
|
|
lineHeight: require('./lineHeight'),
|
|
letterSpacing: require('./letterSpacing'),
|
|
textColor: require('./textColor'),
|
|
textOpacity: require('./textOpacity'),
|
|
textDecoration: require('./textDecoration'),
|
|
fontSmoothing: require('./fontSmoothing'),
|
|
placeholderColor: require('./placeholderColor'),
|
|
placeholderOpacity: require('./placeholderOpacity'),
|
|
|
|
opacity: require('./opacity'),
|
|
boxShadow: require('./boxShadow'),
|
|
outline: require('./outline'),
|
|
ringWidth: require('./ringWidth'),
|
|
ringColor: require('./ringColor'),
|
|
ringOpacity: require('./ringOpacity'),
|
|
ringOffsetWidth: require('./ringOffsetWidth'),
|
|
ringOffsetColor: require('./ringOffsetColor'),
|
|
|
|
transitionProperty: require('./transitionProperty'),
|
|
transitionDelay: require('./transitionDelay'),
|
|
transitionDuration: require('./transitionDuration'),
|
|
transitionTimingFunction: require('./transitionTimingFunction'),
|
|
}
|