From f116f9f6648af81bf22e0c28d01a8da015a53180 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Mon, 14 Feb 2022 13:24:18 -0500 Subject: [PATCH] Remove opacity variables from `:visited` pseudo class (#7458) * Support functions in pseudo variant list * Remove text/border/bg color from :visited * Update changelog --- CHANGELOG.md | 4 +++- src/corePlugins.js | 41 +++++++++++++++++++++++++++++++++++++---- tests/variants.test.js | 29 +++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08386e187eb6..26567a4de8b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -- Nothing yet! +### Fixed + +- Remove opacity variables from `:visited` pseudo class ([#7458](https://github.com/tailwindlabs/tailwindcss/pull/7458)) ## [3.0.22] - 2022-02-11 diff --git a/src/corePlugins.js b/src/corePlugins.js index fdcc673d8a14..1d4c3e25f315 100644 --- a/src/corePlugins.js +++ b/src/corePlugins.js @@ -70,7 +70,28 @@ export let variantPlugins = { 'only-of-type', // State - 'visited', + [ + 'visited', + ({ container }) => { + let toRemove = ['--tw-text-opacity', '--tw-border-opacity', '--tw-bg-opacity'] + + container.walkDecls((decl) => { + if (toRemove.includes(decl.prop)) { + decl.remove() + + return + } + + for (const varName of toRemove) { + if (decl.value.includes(`/ var(${varName})`)) { + decl.value = decl.value.replace(`/ var(${varName})`, '') + } + } + }) + + return ':visited' + }, + ], 'target', ['open', '[open]'], @@ -100,15 +121,27 @@ export let variantPlugins = { ].map((variant) => (Array.isArray(variant) ? variant : [variant, `:${variant}`])) for (let [variantName, state] of pseudoVariants) { - addVariant(variantName, `&${state}`) + addVariant(variantName, (ctx) => { + let result = typeof state === 'function' ? state(ctx) : state + + return `&${result}` + }) } for (let [variantName, state] of pseudoVariants) { - addVariant(`group-${variantName}`, `:merge(.group)${state} &`) + addVariant(`group-${variantName}`, (ctx) => { + let result = typeof state === 'function' ? state(ctx) : state + + return `:merge(.group)${result} &` + }) } for (let [variantName, state] of pseudoVariants) { - addVariant(`peer-${variantName}`, `:merge(.peer)${state} ~ &`) + addVariant(`peer-${variantName}`, (ctx) => { + let result = typeof state === 'function' ? state(ctx) : state + + return `:merge(.peer)${result} ~ &` + }) } }, diff --git a/tests/variants.test.js b/tests/variants.test.js index 72defcfe0dcf..972801e2b700 100644 --- a/tests/variants.test.js +++ b/tests/variants.test.js @@ -539,3 +539,32 @@ it('variants for utilities should not be produced in a file without a utilities `) }) }) + +test('The visited variant removes opacity support', () => { + let config = { + content: [ + { + raw: html` + Look, it's a link! + `, + }, + ], + plugins: [], + } + + return run('@tailwind utilities', config).then((result) => { + return expect(result.css).toMatchFormattedCss(css` + .visited\:border-red-500:visited { + border-color: rgb(239 68 68); + } + .visited\:bg-red-500:visited { + background-color: rgb(239 68 68); + } + .visited\:text-red-500:visited { + color: rgb(239 68 68); + } + `) + }) +})