Skip to content

Commit 2cecc8a

Browse files
fnkymattcompiles
andauthored
Sprinkles: Allow theme vars in atomic properties (#63)
* Sprinkles: Allow theme vars in atomic properties * Add changeset * Use CSSProperties type from css package * Rollback snapshots Co-authored-by: Matt Jones <[email protected]>
1 parent f2ab7e9 commit 2cecc8a

File tree

8 files changed

+44
-25
lines changed

8 files changed

+44
-25
lines changed

.changeset/calm-lamps-do.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@vanilla-extract/sprinkles': patch
3+
---
4+
5+
Allow theme vars to be passed to atomic properties

.changeset/silent-pugs-sell.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@vanilla-extract/css': patch
3+
---
4+
5+
Export CSSProperties type

packages/css/src/index.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import './runtimeAdapter';
22

3-
export type { StyleRule, GlobalStyleRule, Adapter, FileScope } from './types';
3+
export type {
4+
StyleRule,
5+
GlobalStyleRule,
6+
Adapter,
7+
FileScope,
8+
CSSProperties,
9+
} from './types';
410
export * from './identifier';
511
export * from './theme';
612
export * from './style';

packages/css/src/transformCss.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import type {
55
CSS,
66
CSSStyleBlock,
77
CSSKeyframesBlock,
8-
CSSProperties,
8+
CSSPropertiesWithVars,
99
FeatureQueries,
1010
MediaQueries,
1111
StyleRule,
@@ -173,7 +173,7 @@ const specialKeys = [...simplePseudos, '@media', '@supports', 'selectors'];
173173
interface CSSRule {
174174
conditions?: Array<string>;
175175
selector: string;
176-
rule: CSSProperties;
176+
rule: CSSPropertiesWithVars;
177177
}
178178

179179
class Stylesheet {
@@ -238,12 +238,12 @@ class Stylesheet {
238238
}
239239
}
240240

241-
pixelifyProperties(cssRule: CSSProperties) {
241+
pixelifyProperties(cssRule: CSSPropertiesWithVars) {
242242
forEach(cssRule, (value, key) => {
243243
if (
244244
typeof value === 'number' &&
245245
value !== 0 &&
246-
!UNITLESS[key as keyof CSSProperties]
246+
!UNITLESS[key as keyof CSSPropertiesWithVars]
247247
) {
248248
// @ts-expect-error Any ideas?
249249
cssRule[key] = `${value}px`;
@@ -253,7 +253,7 @@ class Stylesheet {
253253
return cssRule;
254254
}
255255

256-
transformVars({ vars, ...rest }: CSSProperties) {
256+
transformVars({ vars, ...rest }: CSSPropertiesWithVars) {
257257
if (!vars) {
258258
return rest;
259259
}
@@ -384,7 +384,7 @@ class Stylesheet {
384384
this.addRule({
385385
conditions,
386386
selector: `${root.selector}${key}`,
387-
rule: rule[key as keyof typeof rule] as CSSProperties,
387+
rule: rule[key as keyof typeof rule] as CSSPropertiesWithVars,
388388
});
389389
}
390390
}

packages/css/src/types.ts

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,37 @@ export type CSSVarFunction =
77
| `var(--${string})`
88
| `var(--${string}, ${string | number})`;
99

10-
type CSSTypeProperties = PropertiesFallback<string | number>;
10+
type CSSTypeProperties = PropertiesFallback<number | (string & {})>;
1111

12-
type BasicCSSProperties = {
12+
export type CSSProperties = {
1313
[Property in keyof CSSTypeProperties]:
1414
| CSSTypeProperties[Property]
1515
| CSSVarFunction
1616
| Array<CSSVarFunction | Properties[Property]>;
1717
};
1818

1919
export interface CSSKeyframes {
20-
[time: string]: BasicCSSProperties;
20+
[time: string]: CSSProperties;
2121
}
2222

23-
export type CSSProperties = BasicCSSProperties & {
23+
export type CSSPropertiesWithVars = CSSProperties & {
2424
vars?: {
2525
[key: string]: string;
2626
};
2727
};
2828

29-
type PseudoProperties = { [key in SimplePseudos[number]]?: CSSProperties };
29+
type PseudoProperties = {
30+
[key in SimplePseudos[number]]?: CSSPropertiesWithVars;
31+
};
3032

31-
type CSSPropertiesAndPseudos = CSSProperties & PseudoProperties;
33+
type CSSPropertiesAndPseudos = CSSPropertiesWithVars & PseudoProperties;
3234

3335
interface SelectorMap {
34-
[selector: string]: CSSProperties &
35-
MediaQueries<CSSProperties & FeatureQueries<CSSProperties>> &
36-
FeatureQueries<CSSProperties & MediaQueries<CSSProperties>>;
36+
[selector: string]: CSSPropertiesWithVars &
37+
MediaQueries<
38+
CSSPropertiesWithVars & FeatureQueries<CSSPropertiesWithVars>
39+
> &
40+
FeatureQueries<CSSPropertiesWithVars & MediaQueries<CSSPropertiesWithVars>>;
3741
}
3842

3943
export interface MediaQueries<StyleType> {
@@ -56,9 +60,9 @@ export type StyleRule = StyleWithSelectors &
5660
MediaQueries<StyleWithSelectors & FeatureQueries<StyleWithSelectors>> &
5761
FeatureQueries<StyleWithSelectors & MediaQueries<StyleWithSelectors>>;
5862

59-
export type GlobalStyleRule = CSSProperties &
60-
MediaQueries<CSSProperties & FeatureQueries<CSSProperties>> &
61-
FeatureQueries<CSSProperties & MediaQueries<CSSProperties>>;
63+
export type GlobalStyleRule = CSSPropertiesWithVars &
64+
MediaQueries<CSSPropertiesWithVars & FeatureQueries<CSSPropertiesWithVars>> &
65+
FeatureQueries<CSSPropertiesWithVars & MediaQueries<CSSPropertiesWithVars>>;
6266

6367
export type GlobalFontFaceRule = Omit<AtRule.FontFaceFallback, 'src'> &
6468
Required<Pick<AtRule.FontFaceFallback, 'src'>>;

packages/sprinkles/src/index.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { style } from '@vanilla-extract/css';
2-
import type * as CSS from 'csstype';
1+
import { style, CSSProperties } from '@vanilla-extract/css';
32

43
import {
54
AtomicStyles,
@@ -16,8 +15,6 @@ interface Condition {
1615

1716
type BaseConditions = { [conditionName: string]: Condition };
1817

19-
type CSSProperties = CSS.Properties<(string & {}) | number>;
20-
2118
type AtomicProperties = {
2219
[Property in keyof CSSProperties]?:
2320
| Record<string, CSSProperties[Property]>

tests/sprinkles/index.css.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { createVar } from '@vanilla-extract/css';
12
import { createAtomicStyles } from '@vanilla-extract/sprinkles';
23

34
const spacing = {
@@ -93,6 +94,7 @@ export const atomicWithPaddingShorthandStyles = createAtomicStyles({
9394
paddingRight: spacing,
9495
paddingTop: spacing,
9596
paddingBottom: spacing,
97+
fontWeight: [createVar()],
9698
},
9799
shorthands: {
98100
padding: ['paddingTop', 'paddingBottom', 'paddingLeft', 'paddingRight'],

tests/sprinkles/sprinkles.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ describe('sprinkles', () => {
223223
padding: 'large',
224224
}),
225225
).toMatchInlineSnapshot(
226-
`"sprinkles_paddingTop_small__1kw4bre1w sprinkles_paddingBottom_medium__1kw4bre20 sprinkles_paddingLeft_small__1kw4bre1q sprinkles_paddingRight_small__1kw4bre1t"`,
226+
`"sprinkles_paddingTop_small__1kw4bre1x sprinkles_paddingBottom_medium__1kw4bre21 sprinkles_paddingLeft_small__1kw4bre1r sprinkles_paddingRight_small__1kw4bre1u"`,
227227
);
228228
});
229229

@@ -236,7 +236,7 @@ describe('sprinkles', () => {
236236
padding: 'large',
237237
}),
238238
).toMatchInlineSnapshot(
239-
`"sprinkles_paddingTop_large__1kw4bre1y sprinkles_paddingBottom_large__1kw4bre21 sprinkles_paddingLeft_small__1kw4bre1q sprinkles_paddingRight_small__1kw4bre1t"`,
239+
`"sprinkles_paddingTop_large__1kw4bre1z sprinkles_paddingBottom_large__1kw4bre22 sprinkles_paddingLeft_small__1kw4bre1r sprinkles_paddingRight_small__1kw4bre1u"`,
240240
);
241241
});
242242
});

0 commit comments

Comments
 (0)