From 98dbb99aa8a558307e89e89b0ad3e197ba071eab Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Mon, 25 Aug 2025 23:28:22 -0400 Subject: [PATCH 1/2] Show suggestions for all `matchVariant` values --- packages/tailwindcss/src/compat/plugin-api.ts | 4 ++ packages/tailwindcss/src/intellisense.test.ts | 37 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/packages/tailwindcss/src/compat/plugin-api.ts b/packages/tailwindcss/src/compat/plugin-api.ts index 950302807db0..ce2e9ba3f61f 100644 --- a/packages/tailwindcss/src/compat/plugin-api.ts +++ b/packages/tailwindcss/src/compat/plugin-api.ts @@ -245,6 +245,10 @@ export function buildPluginApi({ return aValue < zValue ? -1 : 1 }, ) + + designSystem.variants.suggest(name, () => + Object.keys(options?.values ?? {}).filter((v) => v !== 'DEFAULT'), + ) }, addUtilities(utilities) { diff --git a/packages/tailwindcss/src/intellisense.test.ts b/packages/tailwindcss/src/intellisense.test.ts index f5902a2613df..f9aca65ce0c0 100644 --- a/packages/tailwindcss/src/intellisense.test.ts +++ b/packages/tailwindcss/src/intellisense.test.ts @@ -675,3 +675,40 @@ test('Custom @utility and existing utility with names matching theme keys dont g expect(matches).toHaveLength(1) expect(classMap.get('text-header')?.modifiers).toEqual(['sm']) }) + +test('matchVariant', async () => { + let input = css` + @import 'tailwindcss/utilities'; + @plugin "./plugin.js"; + ` + + let design = await __unstable__loadDesignSystem(input, { + loadStylesheet: async (_, base) => ({ + path: '', + base, + content: '@tailwind utilities;', + }), + loadModule: async () => ({ + path: '', + base: '', + module: plugin(({ matchVariant }) => { + matchVariant('foo', (val) => `&:is(${val})`, { + values: { + DEFAULT: '1', + a: 'a', + b: 'b', + }, + }) + }), + }), + }) + + let variants = design.getVariants() + let v1 = variants.find((v) => v.name === 'foo')! + expect(v1).not.toBeUndefined() + + expect(v1.hasDash).toEqual(true) + expect(v1.isArbitrary).toEqual(true) + expect(v1.name).toEqual('foo') + expect(v1.values).toEqual(['a', 'b']) +}) From 8ba6b6ef78baff0ae1cd01c17ab33085a672a3e8 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Tue, 26 Aug 2025 09:47:42 -0400 Subject: [PATCH 2/2] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d198fcc130c8..78bfc522159a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Don't transition `visibility` when using `transition` ([#18795](https://github.com/tailwindlabs/tailwindcss/pull/18795)) +- Show suggestions for known `matchVariant` values ([#18798](https://github.com/tailwindlabs/tailwindcss/pull/18798)) ## [4.1.12] - 2025-08-13