MCPcopy
hub / github.com/tailwindlabs/tailwindcss / matchVariant

Function matchVariant

packages/tailwindcss/src/compat/plugin-api.ts:161–264  ·  packages/tailwindcss/src/compat/plugin-api.ts::matchVariant
(name, fn, options)

Source from the content-addressed store, hash-verified

159 }
160 },
161 matchVariant(name, fn, options) {
162 function resolveVariantValue<T extends Parameters<typeof fn>[0]>(
163 value: T,
164 modifier: CandidateModifier | null,
165 nodes: AstNode[],
166 ): AstNode[] {
167 let resolved = fn(value, { modifier: modifier?.value ?? null })
168 return parseVariantValue(resolved, nodes)
169 }
170
171 try {
172 class="cm">// Sample variant value and ignore variants emitting v3 `:merge` rules. In
173 class="cm">// v4, the `group-*` and `peer-*` variants compound automatically.
174 let sample = fn(class="st">'a', { modifier: null })
175 if (typeof sample === class="st">'string' && sample.includes(class="st">':merge(')) {
176 return
177 } else if (Array.isArray(sample) && sample.some((r) => r.includes(class="st">':merge('))) {
178 return
179 }
180 } catch {}
181
182 let defaultOptionKeys = Object.keys(options?.values ?? {})
183 designSystem.variants.group(
184 () => {
185 designSystem.variants.functional(name, (ruleNodes, variant) => {
186 if (!variant.value) {
187 if (options?.values && class="st">'DEFAULT' in options.values) {
188 ruleNodes.nodes = resolveVariantValue(
189 options.values.DEFAULT,
190 variant.modifier,
191 ruleNodes.nodes,
192 )
193 return
194 }
195 return null
196 }
197
198 if (variant.value.kind === class="st">'arbitrary') {
199 ruleNodes.nodes = resolveVariantValue(
200 variant.value.value,
201 variant.modifier,
202 ruleNodes.nodes,
203 )
204 } else if (variant.value.kind === class="st">'named' && options?.values) {
205 if (!Object.hasOwn(options.values, variant.value.value)) {
206 return null
207 }
208 let defaultValue = options.values[variant.value.value]
209 if (typeof defaultValue !== class="st">'string') {
210 return null
211 }
212
213 ruleNodes.nodes = resolveVariantValue(defaultValue, variant.modifier, ruleNodes.nodes)
214 } else {
215 return null
216 }
217 })
218 },

Callers 3

loadModuleFunction · 0.85
plugin-api.test.tsFile · 0.85

Calls 5

resolveVariantValueFunction · 0.85
groupMethod · 0.80
keysMethod · 0.45
functionalMethod · 0.45
suggestMethod · 0.45

Tested by 1

loadModuleFunction · 0.68