Skip to content

Commit 4f92126

Browse files
Add Sprinkles utils and 'addRecipe' function (#132)
1 parent a50de75 commit 4f92126

File tree

27 files changed

+1009
-331
lines changed

27 files changed

+1009
-331
lines changed

.changeset/green-seals-eat.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@vanilla-extract/css': minor
3+
---
4+
5+
Introduce `addRecipe` function, exposed via `@vanilla-extract/css/recipe` entrypoint

.changeset/rare-pigs-tap.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@vanilla-extract/sprinkles': minor
3+
---
4+
5+
Add `createMapValueFn` and `createNormalizeValueFn` utilities and `ConditionalValue` type.

.prettierignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ README.md
88
.yarnrc.yml
99
.github/ISSUE_TEMPLATE
1010
site/docs-manifest.json
11+
.changeset

fixtures/sprinkles/src/index.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
1-
import { atoms } from './styles.css';
1+
import {
2+
atoms,
3+
mapResponsiveValue,
4+
normalizeResponsiveValue,
5+
} from './styles.css';
26
import testNodes from '../test-nodes.json';
37

48
function render() {
59
document.body.innerHTML = `
610
<div id="${testNodes.root}" class="${atoms({
7-
display: 'block',
8-
paddingTop: {
9-
mobile: 'small',
10-
desktop: 'medium',
11-
},
11+
display: normalizeResponsiveValue('block').mobile,
12+
paddingTop: mapResponsiveValue(
13+
{
14+
mobile: 'small',
15+
desktop: 'medium',
16+
} as const,
17+
(x) => x,
18+
),
1219
})}">
1320
Sprinkles
1421
</div>
Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,39 @@
1-
import { createAtomicStyles, createAtomsFn } from '@vanilla-extract/sprinkles';
1+
import {
2+
createAtomicStyles,
3+
createAtomsFn,
4+
createMapValueFn,
5+
createNormalizeValueFn,
6+
} from '@vanilla-extract/sprinkles';
27

3-
export const atoms = createAtomsFn(
4-
createAtomicStyles({
5-
defaultCondition: 'mobile',
6-
conditions: {
7-
mobile: {},
8-
tablet: {
9-
'@media': 'screen and (min-width: 768px)',
10-
},
11-
desktop: {
12-
'@media': 'screen and (min-width: 1024px)',
13-
},
14-
darkDesktop: {
15-
'@supports': 'not (display: grid)',
16-
'@media': 'screen and (min-width: 1024px)',
17-
selector: '[data-dark-mode] &',
18-
},
8+
const responsiveStyles = createAtomicStyles({
9+
defaultCondition: 'mobile',
10+
conditions: {
11+
mobile: {},
12+
tablet: {
13+
'@media': 'screen and (min-width: 768px)',
1914
},
20-
properties: {
21-
display: ['flex', 'none', 'block'],
22-
paddingTop: {
23-
small: '10px',
24-
medium: '20px',
25-
},
15+
desktop: {
16+
'@media': 'screen and (min-width: 1024px)',
2617
},
27-
}),
18+
darkDesktop: {
19+
'@supports': 'not (display: grid)',
20+
'@media': 'screen and (min-width: 1024px)',
21+
selector: '[data-dark-mode] &',
22+
},
23+
},
24+
responsiveArray: ['mobile', 'tablet', 'desktop'],
25+
properties: {
26+
display: ['flex', 'none', 'block'],
27+
paddingTop: {
28+
small: '10px',
29+
medium: '20px',
30+
},
31+
},
32+
});
33+
34+
export const atoms = createAtomsFn(responsiveStyles);
35+
36+
export const mapResponsiveValue = createMapValueFn(responsiveStyles);
37+
export const normalizeResponsiveValue = createNormalizeValueFn(
38+
responsiveStyles,
2839
);

packages/css/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@
1212
"preconstruct": {
1313
"entrypoints": [
1414
"index.ts",
15+
"recipe.ts",
1516
"adapter.ts",
1617
"transformCss.ts",
1718
"fileScope.ts"
1819
]
1920
},
2021
"files": [
2122
"/dist",
23+
"/recipe",
2224
"/adapter",
2325
"/transformCss",
2426
"/fileScope"

packages/css/recipe/package.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"main": "dist/vanilla-extract-css-recipe.cjs.js",
3+
"module": "dist/vanilla-extract-css-recipe.esm.js",
4+
"browser": {
5+
"./dist/vanilla-extract-css-recipe.cjs.js": "./dist/vanilla-extract-css-recipe.browser.cjs.js",
6+
"./dist/vanilla-extract-css-recipe.esm.js": "./dist/vanilla-extract-css-recipe.browser.esm.js"
7+
}
8+
}

packages/css/src/recipe.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
type Primitive = string | number | boolean | null | undefined;
2+
3+
type Serializable =
4+
| {
5+
[Key in string | number]: Primitive | Serializable;
6+
}
7+
| ReadonlyArray<Primitive | Serializable>;
8+
9+
interface Recipe {
10+
importPath: string;
11+
importName: string;
12+
args: ReadonlyArray<Serializable>;
13+
}
14+
15+
export function addRecipe<Target extends object>(
16+
target: Target,
17+
recipe: Recipe,
18+
) {
19+
Object.defineProperty(target, '__recipe__', {
20+
value: recipe,
21+
writable: false,
22+
});
23+
24+
return target;
25+
}

0 commit comments

Comments
 (0)