Skip to content

Commit e22e960

Browse files
authored
Add expanded boolean attribute to tailwind plugin (#7152)
* Add expanded boolean attribute to tailwind plugin After testing out the new `Disclosure` components, I see that the tailwind plugin does not support styling the `expanded` state, leaving me to style using `data-[expanded]`. This PR adds `expanded` top the list of boolean states. * Update tests * fix tests * fix test * Add selector for native variant * lint fix
1 parent 987f174 commit e22e960

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const attributes = {
1313

1414
// States
1515
'open',
16+
'expanded',
1617
'entering',
1718
'exiting',
1819
'indeterminate',
@@ -67,7 +68,8 @@ const nativeVariantSelectors = new Map([
6768
['hovered', ':hover'],
6869
['focused', ':focus'],
6970
['readonly', ':read-only'],
70-
['open', '[open]']
71+
['open', '[open]'],
72+
['expanded', '[expanded]']
7173
]);
7274

7375
// Variants where both native and RAC attributes should apply. We don't override these.

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

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,17 @@ function run({options, content, future = {}}) {
1414
content: [{raw: content}],
1515
future
1616
};
17-
17+
1818
return postcss(tailwind(config)).process(
19-
['@tailwind base;', '@tailwind components;', '@tailwind utilities'].join('\n'),
19+
['@tailwind base;', '@tailwind components;', '@tailwind utilities'].join('\n'),
2020
{
2121
from: `${path.resolve(__filename)}?test=${currentTestName}`
2222
}
23-
);
23+
);
2424
}
2525

2626
test('variants', async () => {
27-
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 has-submenu: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 group/custom-name group-hover/custom-name:bg-red peer-pressed/custom-name:bg-red"></div>`;
27+
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 has-submenu: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 expanded: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 group/custom-name group-hover/custom-name:bg-red peer-pressed/custom-name:bg-red"></div>`;
2828
return run({content}).then((result) => {
2929
expect(result.css).toContain(css`
3030
.placement-left\:bg-red[data-placement="left"] {
@@ -127,6 +127,14 @@ test('variants', async () => {
127127
--tw-bg-opacity: 1;
128128
background-color: rgb(255 0 0 / var(--tw-bg-opacity))
129129
}
130+
.expanded\:bg-red:where([data-rac])[data-expanded] {
131+
--tw-bg-opacity: 1;
132+
background-color: rgb(255 0 0 / var(--tw-bg-opacity))
133+
}
134+
.expanded\:bg-red:where(:not([data-rac]))[expanded] {
135+
--tw-bg-opacity: 1;
136+
background-color: rgb(255 0 0 / var(--tw-bg-opacity))
137+
}
130138
.entering\:bg-red[data-entering] {
131139
--tw-bg-opacity: 1;
132140
background-color: rgb(255 0 0 / var(--tw-bg-opacity))
@@ -295,12 +303,12 @@ test('variants', async () => {
295303
--tw-bg-opacity: 1;
296304
background-color: rgb(255 0 0 / var(--tw-bg-opacity))
297305
}`
298-
);
306+
);
299307
});
300308
});
301309

302310
test('variants with prefix', async () => {
303-
let content = html`<div data-rac className="rac-hover:bg-red rac-focus:bg-red rac-focus-visible:bg-red rac-focus-within:bg-red rac-pressed:bg-red rac-disabled:bg-red rac-drop-target:bg-red rac-dragging:bg-red rac-empty:bg-red rac-allows-dragging:bg-red rac-allows-removing:bg-red rac-allows-sorting:bg-red rac-has-submenu:bg-red rac-placeholder-shown:bg-red rac-selected:bg-red rac-indeterminate:bg-red rac-read-only:bg-red rac-required:bg-red rac-entering:bg-red rac-exiting:bg-red rac-open:bg-red rac-unavailable:bg-red rac-outside-month:bg-red rac-outside-visible-range:bg-red rac-selection-start:bg-red rac-selection-end:bg-red rac-current:bg-red rac-invalid:bg-red rac-resizing:bg-red rac-placement-left:bg-red rac-placement-right:bg-red rac-placement-top:bg-red rac-placement-bottom:bg-red rac-type-literal:bg-red rac-type-year:bg-red rac-type-month:bg-red rac-type-day:bg-red rac-layout-grid:bg-red rac-layout-stack:bg-red rac-orientation-horizontal:bg-red rac-orientation-vertical:bg-red rac-selection-single:bg-red rac-selection-multiple:bg-red rac-resizable-right:bg-red rac-resizable-left:bg-red rac-resizable-both:bg-red rac-sort-ascending:bg-red rac-sort-descending:bg-red group-rac-pressed:bg-red group/custom-name group-rac-hover/custom-name:bg-red peer-rac-pressed:bg-red peer-rac-pressed/custom-name:bg-red"></div>`;
311+
let content = html`<div data-rac className="rac-hover:bg-red rac-focus:bg-red rac-focus-visible:bg-red rac-focus-within:bg-red rac-pressed:bg-red rac-disabled:bg-red rac-drop-target:bg-red rac-dragging:bg-red rac-empty:bg-red rac-allows-dragging:bg-red rac-allows-removing:bg-red rac-allows-sorting:bg-red rac-has-submenu:bg-red rac-placeholder-shown:bg-red rac-selected:bg-red rac-indeterminate:bg-red rac-read-only:bg-red rac-required:bg-red rac-entering:bg-red rac-exiting:bg-red rac-open:bg-red rac-expanded:bg-red rac-unavailable:bg-red rac-outside-month:bg-red rac-outside-visible-range:bg-red rac-selection-start:bg-red rac-selection-end:bg-red rac-current:bg-red rac-invalid:bg-red rac-resizing:bg-red rac-placement-left:bg-red rac-placement-right:bg-red rac-placement-top:bg-red rac-placement-bottom:bg-red rac-type-literal:bg-red rac-type-year:bg-red rac-type-month:bg-red rac-type-day:bg-red rac-layout-grid:bg-red rac-layout-stack:bg-red rac-orientation-horizontal:bg-red rac-orientation-vertical:bg-red rac-selection-single:bg-red rac-selection-multiple:bg-red rac-resizable-right:bg-red rac-resizable-left:bg-red rac-resizable-both:bg-red rac-sort-ascending:bg-red rac-sort-descending:bg-red group-rac-pressed:bg-red group/custom-name group-rac-hover/custom-name:bg-red peer-rac-pressed:bg-red peer-rac-pressed/custom-name:bg-red"></div>`;
304312
return run({content, options: {prefix: 'rac'}}).then((result) => {
305313
expect(result.css).toContain(css`
306314
.rac-placement-left\:bg-red[data-placement="left"] {
@@ -399,6 +407,10 @@ test('variants with prefix', async () => {
399407
--tw-bg-opacity: 1;
400408
background-color: rgb(255 0 0 / var(--tw-bg-opacity))
401409
}
410+
.rac-expanded\:bg-red[data-expanded] {
411+
--tw-bg-opacity: 1;
412+
background-color: rgb(255 0 0 / var(--tw-bg-opacity))
413+
}
402414
.rac-entering\:bg-red[data-entering] {
403415
--tw-bg-opacity: 1;
404416
background-color: rgb(255 0 0 / var(--tw-bg-opacity))
@@ -511,7 +523,7 @@ test('variants with prefix', async () => {
511523
--tw-bg-opacity: 1;
512524
background-color: rgb(255 0 0 / var(--tw-bg-opacity))
513525
}`
514-
);
526+
);
515527
});
516528
});
517529

@@ -531,3 +543,4 @@ test('hoverOnlyWhenSupported', () => {
531543
}`);
532544
});
533545
});
546+

0 commit comments

Comments
 (0)