diff --git a/src/corePlugins.js b/src/corePlugins.js index 504ef5451..0ae64d9b0 100644 --- a/src/corePlugins.js +++ b/src/corePlugins.js @@ -144,27 +144,27 @@ export let variantPlugins = { } let variants = { - group: ({ modifier }) => + group: (_, { modifier }) => modifier ? [`:merge(.group\\/${modifier})`, ' &'] : [`:merge(.group)`, ' &'], - peer: ({ modifier }) => + peer: (_, { modifier }) => modifier ? [`:merge(.peer\\/${modifier})`, ' ~ &'] : [`:merge(.peer)`, ' ~ &'], } for (let [name, fn] of Object.entries(variants)) { matchVariant( name, - (value = '', modifier) => { - if (modifier) { + (value = '', extra) => { + if (extra.modifier) { log.warn(`modifier-${name}-experimental`, [ `The ${name} variant modifier feature in Tailwind CSS is currently in preview.`, 'Preview features are not covered by semver, and may be improved in breaking ways at any time.', ]) } - let result = normalize(typeof value === 'function' ? value(ctx) : value) + let result = normalize(typeof value === 'function' ? value(extra) : value) if (!result.includes('&')) result = '&' + result - let [a, b] = fn({ modifier }) + let [a, b] = fn('', extra) return result.replace(/&(\S+)?/g, (_, pseudo = '') => a + pseudo + b) }, { values: Object.fromEntries(pseudoVariants) } diff --git a/src/lib/setupContextUtils.js b/src/lib/setupContextUtils.js index bfd9483ef..bbc2454c4 100644 --- a/src/lib/setupContextUtils.js +++ b/src/lib/setupContextUtils.js @@ -525,18 +525,24 @@ function buildPluginApi(tailwindConfig, context, { variantList, variantMap, offs for (let [key, value] of Object.entries(options?.values ?? {})) { api.addVariant( isSpecial ? `${variant}${key}` : `${variant}-${key}`, - Object.assign(({ args }) => variantFn(value, args.modifier), { - [MATCH_VARIANT]: true, - }), + Object.assign( + ({ args, container }) => variantFn(value, { modifier: args.modifier, container }), + { + [MATCH_VARIANT]: true, + } + ), { ...options, value, id } ) } api.addVariant( variant, - Object.assign(({ args }) => variantFn(args.value, args.modifier), { - [MATCH_VARIANT]: true, - }), + Object.assign( + ({ args, container }) => variantFn(args.value, { modifier: args.modifier, container }), + { + [MATCH_VARIANT]: true, + } + ), { ...options, id } ) }, diff --git a/types/config.d.ts b/types/config.d.ts index 0d980284e..b08490cd1 100644 --- a/types/config.d.ts +++ b/types/config.d.ts @@ -298,9 +298,9 @@ export interface PluginAPI { addVariant(name: string, definition: string | string[] | (() => string) | (() => string)[]): void matchVariant( name: string, - cb: (value: T | string, modifier: string | null) => string | string[], + cb: (value: T | string, extra: { modifier: string | null }) => string | string[], options?: { - values?: KeyValuePair, + values?: KeyValuePair sort?( a: { value: T | string; modifier: string | null }, b: { value: T | string; modifier: string | null }