From f0d7168a8ff9cb21c39d62b82a1e6837c041fdcd Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Sun, 1 Oct 2023 11:09:56 -0700 Subject: [PATCH 1/2] Fix Tailwind plugin group variant regression --- .../src/index.js | 24 ++++++++++++------- .../src/index.test.js | 10 +++++++- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/packages/tailwindcss-react-aria-components/src/index.js b/packages/tailwindcss-react-aria-components/src/index.js index 464bd9f58b7..d04f76153b8 100644 --- a/packages/tailwindcss-react-aria-components/src/index.js +++ b/packages/tailwindcss-react-aria-components/src/index.js @@ -70,26 +70,34 @@ let getSelector = (prefix, attributeName, attributeValue) => { } }; +let mapSelector = (selector, fn) => { + if (Array.isArray(selector)) { + return selector.map(fn) + } else { + return fn(selector); + } +}; + module.exports = plugin.withOptions((options) => (({addVariant}) => { let prefix = options?.prefix ? `${options.prefix}-` : ''; attributes.boolean.forEach((attribute) => { let variantName = Array.isArray(attribute) ? attribute[0] : attribute; variantName = `${prefix}${variantName}`; let attributeName = Array.isArray(attribute) ? attribute[1] : attribute; - let selector = getSelector(prefix, attributeName); - addVariant(variantName, selector); - addVariant(`group-${variantName}`, `:merge(.group)${selector.slice(1)} &`); - addVariant(`peer-${variantName}`, `:merge(.peer)${selector.slice(1)} ~ &`); + let selectors = getSelector(prefix, attributeName); + addVariant(variantName, selectors); + addVariant(`group-${variantName}`, mapSelector(selectors, selector => `:merge(.group)${selector.slice(1)} &`)); + addVariant(`peer-${variantName}`, mapSelector(selectors, selector => `:merge(.peer)${selector.slice(1)} ~ &`)); }); Object.keys(attributes.enum).forEach((attributeName) => { attributes.enum[attributeName].forEach( (attributeValue) => { let name = shortNames[attributeName] || attributeName; let variantName = `${prefix}${name}-${attributeValue}`; - let selector = getSelector(prefix, attributeName, attributeValue); - addVariant(variantName, selector); - addVariant(`group-${variantName}`, `:merge(.group)${selector.slice(1)} &`); - addVariant(`peer-${variantName}`, `:merge(.peer)${selector.slice(1)} ~ &`); + let selectors = getSelector(prefix, attributeName, attributeValue); + addVariant(variantName, selectors); + addVariant(`group-${variantName}`, mapSelector(selectors, selector => `:merge(.group)${selector.slice(1)} &`)); + addVariant(`peer-${variantName}`, mapSelector(selectors, selector => `:merge(.peer)${selector.slice(1)} ~ &`)); } ); }); diff --git a/packages/tailwindcss-react-aria-components/src/index.test.js b/packages/tailwindcss-react-aria-components/src/index.test.js index c7474c6cc3d..84602f316ee 100644 --- a/packages/tailwindcss-react-aria-components/src/index.test.js +++ b/packages/tailwindcss-react-aria-components/src/index.test.js @@ -23,7 +23,7 @@ function run({options, content}) { } test('variants', async () => { - let content = html`
`; + let content = html`
`; return run({content}).then((result) => { expect(result.css).toContain(css` .hover\:bg-red:where([data-rac])[data-hovered] { @@ -34,6 +34,14 @@ test('variants', async () => { --tw-bg-opacity: 1; background-color: rgb(255 0 0 / var(--tw-bg-opacity)) } +.group:where([data-rac])[data-hovered] .group-hover\:bg-red { + --tw-bg-opacity: 1; + background-color: rgb(255 0 0 / var(--tw-bg-opacity)) +} +.group:where(:not([data-rac])):hover .group-hover\:bg-red { + --tw-bg-opacity: 1; + background-color: rgb(255 0 0 / var(--tw-bg-opacity)) +} .focus\:bg-red:where([data-rac])[data-focused] { --tw-bg-opacity: 1; background-color: rgb(255 0 0 / var(--tw-bg-opacity)) From 72d5c883f99e25ef2dd949f8bb10168770b4dd83 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Sun, 1 Oct 2023 11:54:16 -0700 Subject: [PATCH 2/2] lint --- packages/tailwindcss-react-aria-components/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tailwindcss-react-aria-components/src/index.js b/packages/tailwindcss-react-aria-components/src/index.js index d04f76153b8..742379cc544 100644 --- a/packages/tailwindcss-react-aria-components/src/index.js +++ b/packages/tailwindcss-react-aria-components/src/index.js @@ -72,7 +72,7 @@ let getSelector = (prefix, attributeName, attributeValue) => { let mapSelector = (selector, fn) => { if (Array.isArray(selector)) { - return selector.map(fn) + return selector.map(fn); } else { return fn(selector); }