Skip to content

Commit 39d9a02

Browse files
authoredMar 10, 2024··
Remove required pseudo from XCSS prop (#1643)
* chore: remove required pseudos * chore: changeset * chore: fix test
1 parent 4b2e5ee commit 39d9a02

File tree

5 files changed

+14
-54
lines changed

5 files changed

+14
-54
lines changed
 

‎.changeset/orange-coins-whisper.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@compiled/react': minor
3+
---
4+
5+
The `requiredPseudos` type property in XCSS prop has been removed.

‎packages/react/src/create-strict-api/__tests__/index.test.tsx

+4-12
Original file line numberDiff line numberDiff line change
@@ -658,11 +658,7 @@ describe('createStrictAPI()', () => {
658658
}: {
659659
testId: string;
660660
xcss: ReturnType<
661-
typeof XCSSProp<
662-
'background' | 'color',
663-
never,
664-
{ requiredProperties: 'background'; requiredPseudos: never }
665-
>
661+
typeof XCSSProp<'background' | 'color', never, { requiredProperties: 'background' }>
666662
>;
667663
}) {
668664
return <button data-testid={`button-${testId}`} className={xcss} />;
@@ -697,11 +693,7 @@ describe('createStrictAPI()', () => {
697693
}: {
698694
testId: string;
699695
xcss: ReturnType<
700-
typeof XCSSProp<
701-
'color',
702-
'&:hover' | '&:focus',
703-
{ requiredProperties: never; requiredPseudos: '&:hover' }
704-
>
696+
typeof XCSSProp<'color', '&:hover' | '&:focus', { requiredProperties: never }>
705697
>;
706698
}) {
707699
return <button data-testid={`button-${testId}`} className={xcss} />;
@@ -711,7 +703,7 @@ describe('createStrictAPI()', () => {
711703
primary: { '&:hover': { color: 'var(--ds-text-hover)' } },
712704
});
713705
const stylesInvalid = cssMap({
714-
primary: { '&:focus': { color: 'var(--ds-text)' } },
706+
primary: { '&:focus': { background: 'var(--ds-surface)' } },
715707
});
716708

717709
const { getByTestId } = render(
@@ -728,7 +720,7 @@ describe('createStrictAPI()', () => {
728720
expect(getByTestId('button-valid')).toHaveCompiledCss('color', 'var(--ds-text-hover)', {
729721
target: ':hover',
730722
});
731-
expect(getByTestId('button-invalid')).toHaveCompiledCss('color', 'var(--ds-text)', {
723+
expect(getByTestId('button-invalid')).toHaveCompiledCss('background', 'var(--ds-surface)', {
732724
target: ':focus',
733725
});
734726
});

‎packages/react/src/create-strict-api/index.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ export interface CompiledAPI<
114114
* typeof XCSSProp<
115115
* XCSSAllProperties,
116116
* '&:hover',
117-
* { requiredProperties: 'color', requiredPseudos: never }
117+
* { requiredProperties: 'color' }
118118
* >
119119
* >;
120120
* }
@@ -142,7 +142,6 @@ export interface CompiledAPI<
142142
TAllowedPseudos extends CSSPseudos,
143143
TRequiredProperties extends {
144144
requiredProperties: TAllowedProperties;
145-
requiredPseudos: TAllowedPseudos;
146145
} = never
147146
>(): Internal$XCSSProp<
148147
TAllowedProperties,

‎packages/react/src/xcss-prop/__tests__/xcss-prop.test.tsx

+2-33
Original file line numberDiff line numberDiff line change
@@ -228,11 +228,7 @@ describe('xcss prop', () => {
228228
function CSSPropComponent({
229229
xcss,
230230
}: {
231-
xcss: XCSSProp<
232-
'color' | 'backgroundColor',
233-
'&:hover',
234-
{ requiredProperties: 'color'; requiredPseudos: never }
235-
>;
231+
xcss: XCSSProp<'color' | 'backgroundColor', '&:hover', { requiredProperties: 'color' }>;
236232
}) {
237233
return <div className={xcss}>foo</div>;
238234
}
@@ -249,11 +245,7 @@ describe('xcss prop', () => {
249245
function CSSPropComponent({
250246
xcss,
251247
}: {
252-
xcss: XCSSProp<
253-
'color' | 'backgroundColor',
254-
'&:hover',
255-
{ requiredProperties: 'color'; requiredPseudos: never }
256-
>;
248+
xcss: XCSSProp<'color' | 'backgroundColor', '&:hover', { requiredProperties: 'color' }>;
257249
}) {
258250
return <div className={xcss}>foo</div>;
259251
}
@@ -268,27 +260,4 @@ describe('xcss prop', () => {
268260
/>
269261
).toBeObject();
270262
});
271-
272-
it('should mark a xcss prop pseudo as required', () => {
273-
function CSSPropComponent({
274-
xcss,
275-
}: {
276-
xcss: XCSSProp<
277-
'color' | 'backgroundColor',
278-
'&:hover',
279-
{ requiredProperties: never; requiredPseudos: '&:hover' }
280-
>;
281-
}) {
282-
return <div className={xcss}>foo</div>;
283-
}
284-
285-
expectTypeOf(
286-
<CSSPropComponent
287-
// @ts-expect-error — Property '"&:hover"' is missing in type '{ color: string; }' but required in type '{ "&:hover": MarkAsRequired<XCSSItem<"backgroundColor" | "color">, never>; }'.
288-
xcss={{
289-
color: 'red',
290-
}}
291-
/>
292-
).toBeObject();
293-
});
294263
});

‎packages/react/src/xcss-prop/index.ts

+2-7
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ export type XCSSAllPseudos = CSSPseudos;
125125
* xcss?: XCSSProp<XCSSAllProperties, '&:hover'>;
126126
*
127127
* // The xcss prop is required as well as the color property. No pseudos are required.
128-
* xcss: XCSSProp<XCSSAllProperties, '&:hover', { requiredProperties: 'color', requiredPseudos: never }>;
128+
* xcss: XCSSProp<XCSSAllProperties, '&:hover', { requiredProperties: 'color' }>;
129129
* }
130130
*
131131
* function MyComponent({ xcss }: MyComponentProps) {
@@ -152,7 +152,6 @@ export type XCSSProp<
152152
TAllowedPseudos extends CSSPseudos,
153153
TRequiredProperties extends {
154154
requiredProperties: TAllowedProperties;
155-
requiredPseudos: TAllowedPseudos;
156155
} = never
157156
> = Internal$XCSSProp<
158157
TAllowedProperties,
@@ -170,18 +169,14 @@ export type Internal$XCSSProp<
170169
TSchema,
171170
TRequiredProperties extends {
172171
requiredProperties: TAllowedProperties;
173-
requiredPseudos: TAllowedPseudos;
174172
},
175173
TMode extends 'loose' | 'strict'
176174
> =
177175
| (MarkAsRequired<
178176
XCSSValue<TAllowedProperties, TSchema, ''>,
179177
TRequiredProperties['requiredProperties']
180178
> &
181-
MarkAsRequired<
182-
XCSSPseudo<TAllowedProperties, TAllowedPseudos, TRequiredProperties, TSchema>,
183-
TRequiredProperties['requiredPseudos']
184-
> &
179+
XCSSPseudo<TAllowedProperties, TAllowedPseudos, TRequiredProperties, TSchema> &
185180
XCSSMediaQuery<TAllowedProperties, TAllowedPseudos, TAllowedMediaQueries, TSchema> &
186181
BlockedRules<TMode>)
187182
| false

0 commit comments

Comments
 (0)
Please sign in to comment.