Skip to content

Commit 4122e44

Browse files
committed
Merge branch 'main' of github.com:adobe/react-spectrum
2 parents e7b1c7f + a3ba67a commit 4122e44

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

packages/tailwindcss-react-aria-components/src/index.js

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,26 +70,34 @@ let getSelector = (prefix, attributeName, attributeValue) => {
7070
}
7171
};
7272

73+
let mapSelector = (selector, fn) => {
74+
if (Array.isArray(selector)) {
75+
return selector.map(fn);
76+
} else {
77+
return fn(selector);
78+
}
79+
};
80+
7381
module.exports = plugin.withOptions((options) => (({addVariant}) => {
7482
let prefix = options?.prefix ? `${options.prefix}-` : '';
7583
attributes.boolean.forEach((attribute) => {
7684
let variantName = Array.isArray(attribute) ? attribute[0] : attribute;
7785
variantName = `${prefix}${variantName}`;
7886
let attributeName = Array.isArray(attribute) ? attribute[1] : attribute;
79-
let selector = getSelector(prefix, attributeName);
80-
addVariant(variantName, selector);
81-
addVariant(`group-${variantName}`, `:merge(.group)${selector.slice(1)} &`);
82-
addVariant(`peer-${variantName}`, `:merge(.peer)${selector.slice(1)} ~ &`);
87+
let selectors = getSelector(prefix, attributeName);
88+
addVariant(variantName, selectors);
89+
addVariant(`group-${variantName}`, mapSelector(selectors, selector => `:merge(.group)${selector.slice(1)} &`));
90+
addVariant(`peer-${variantName}`, mapSelector(selectors, selector => `:merge(.peer)${selector.slice(1)} ~ &`));
8391
});
8492
Object.keys(attributes.enum).forEach((attributeName) => {
8593
attributes.enum[attributeName].forEach(
8694
(attributeValue) => {
8795
let name = shortNames[attributeName] || attributeName;
8896
let variantName = `${prefix}${name}-${attributeValue}`;
89-
let selector = getSelector(prefix, attributeName, attributeValue);
90-
addVariant(variantName, selector);
91-
addVariant(`group-${variantName}`, `:merge(.group)${selector.slice(1)} &`);
92-
addVariant(`peer-${variantName}`, `:merge(.peer)${selector.slice(1)} ~ &`);
97+
let selectors = getSelector(prefix, attributeName, attributeValue);
98+
addVariant(variantName, selectors);
99+
addVariant(`group-${variantName}`, mapSelector(selectors, selector => `:merge(.group)${selector.slice(1)} &`));
100+
addVariant(`peer-${variantName}`, mapSelector(selectors, selector => `:merge(.peer)${selector.slice(1)} ~ &`));
93101
}
94102
);
95103
});

packages/tailwindcss-react-aria-components/src/index.test.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ function run({options, content}) {
2323
}
2424

2525
test('variants', async () => {
26-
let content = html`<div data-rac className="hover:bg-red focus:bg-red focus-visible:bg-red focus-within:bg-red pressed:bg-red disabled:bg-red drop-target:bg-red dragging:bg-red empty:bg-red allows-dragging:bg-red allows-removing:bg-red allows-sorting:bg-red placeholder-shown:bg-red selected:bg-red indeterminate:bg-red read-only:bg-red required:bg-red entering:bg-red exiting:bg-red open:bg-red unavailable:bg-red outside-month:bg-red outside-visible-range:bg-red selection-start:bg-red selection-end:bg-red current:bg-red invalid:bg-red resizing:bg-red placement-left:bg-red placement-right:bg-red placement-top:bg-red placement-bottom:bg-red type-literal:bg-red type-year:bg-red type-month:bg-red type-day:bg-red layout-grid:bg-red layout-stack:bg-red orientation-horizontal:bg-red orientation-vertical:bg-red selection-single:bg-red selection-multiple:bg-red resizable-right:bg-red resizable-left:bg-red resizable-both:bg-red sort-ascending:bg-red sort-descending:bg-red group-pressed:bg-red peer-pressed:bg-red"></div>`;
26+
let content = html`<div data-rac className="hover:bg-red focus:bg-red focus-visible:bg-red focus-within:bg-red pressed:bg-red disabled:bg-red drop-target:bg-red dragging:bg-red empty:bg-red allows-dragging:bg-red allows-removing:bg-red allows-sorting:bg-red placeholder-shown:bg-red selected:bg-red indeterminate:bg-red read-only:bg-red required:bg-red entering:bg-red exiting:bg-red open:bg-red unavailable:bg-red outside-month:bg-red outside-visible-range:bg-red selection-start:bg-red selection-end:bg-red current:bg-red invalid:bg-red resizing:bg-red placement-left:bg-red placement-right:bg-red placement-top:bg-red placement-bottom:bg-red type-literal:bg-red type-year:bg-red type-month:bg-red type-day:bg-red layout-grid:bg-red layout-stack:bg-red orientation-horizontal:bg-red orientation-vertical:bg-red selection-single:bg-red selection-multiple:bg-red resizable-right:bg-red resizable-left:bg-red resizable-both:bg-red sort-ascending:bg-red sort-descending:bg-red group-pressed:bg-red peer-pressed:bg-red group-hover:bg-red"></div>`;
2727
return run({content}).then((result) => {
2828
expect(result.css).toContain(css`
2929
.hover\:bg-red:where([data-rac])[data-hovered] {
@@ -34,6 +34,14 @@ test('variants', async () => {
3434
--tw-bg-opacity: 1;
3535
background-color: rgb(255 0 0 / var(--tw-bg-opacity))
3636
}
37+
.group:where([data-rac])[data-hovered] .group-hover\:bg-red {
38+
--tw-bg-opacity: 1;
39+
background-color: rgb(255 0 0 / var(--tw-bg-opacity))
40+
}
41+
.group:where(:not([data-rac])):hover .group-hover\:bg-red {
42+
--tw-bg-opacity: 1;
43+
background-color: rgb(255 0 0 / var(--tw-bg-opacity))
44+
}
3745
.focus\:bg-red:where([data-rac])[data-focused] {
3846
--tw-bg-opacity: 1;
3947
background-color: rgb(255 0 0 / var(--tw-bg-opacity))

0 commit comments

Comments
 (0)