Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
RobinMalfait committed May 9, 2022
1 parent be51739 commit 205590b
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 3 deletions.
9 changes: 9 additions & 0 deletions src/lib/generateRules.js
Expand Up @@ -127,6 +127,14 @@ function applyVariant(variant, matches, context) {
return matches
}

let args

// Find partial arbitrary variants
if (variant.endsWith(']') && !variant.startsWith('[]')) {
args = variant.slice(variant.lastIndexOf('[') + 1, -1)
variant = variant.slice(0, variant.indexOf(args) - 1 /* - */ - 1 /* [ */)
}

// Register arbitrary variants
if (isArbitraryValue(variant) && !context.variantMap.has(variant)) {
let selector = normalize(variant.slice(1, -1))
Expand Down Expand Up @@ -200,6 +208,7 @@ function applyVariant(variant, matches, context) {
format(selectorFormat) {
collectedFormats.push(selectorFormat)
},
args,
})

if (typeof ruleWithVariant === 'string') {
Expand Down
24 changes: 21 additions & 3 deletions src/lib/setupContextUtils.js
Expand Up @@ -22,6 +22,8 @@ import isValidArbitraryValue from '../util/isValidArbitraryValue'
import { generateRules } from './generateRules'
import { hasContentChanged } from './cacheInvalidation.js'

let MATCH_VARIANT = Symbol()

function prefix(context, selector) {
let prefix = context.tailwindConfig.prefix
return typeof prefix === 'function' ? prefix(selector) : prefix + selector
Expand Down Expand Up @@ -215,13 +217,18 @@ function buildPluginApi(tailwindConfig, context, { variantList, variantMap, offs
return context.tailwindConfig.prefix + identifier
}

return {
let api = {
addVariant(variantName, variantFunctions, options = {}) {
variantFunctions = [].concat(variantFunctions).map((variantFunction) => {
if (typeof variantFunction !== 'string') {
// Safelist public API functions
return ({ modifySelectors, container, separator }) => {
return variantFunction({ modifySelectors, container, separator })
return ({ args, modifySelectors, container, separator }) => {
return variantFunction(
Object.assign(
{ modifySelectors, container, separator },
variantFunction[MATCH_VARIANT] && { args }
)
)
}
}

Expand Down Expand Up @@ -444,7 +451,18 @@ function buildPluginApi(tailwindConfig, context, { variantList, variantMap, offs
context.candidateRuleMap.get(prefixedIdentifier).push(withOffsets)
}
},
matchVariant: function (variants, options) {
for (let variant in variants) {
api.addVariant(
variant,
Object.assign(({ args }) => variants[variant](args), { [MATCH_VARIANT]: true }),
options
)
}
},
}

return api
}

let fileModifiedMapCache = new WeakMap()
Expand Down

0 comments on commit 205590b

Please sign in to comment.