To set up Sprinkles, create a sprinkles.css.ts file where you define your design tokens, properties, shorthands, and conditions. You then use createSprinkles to compose these definitions into a single sprinkles function.
Key configuration concepts:
properties: Maps CSS properties to sets of allowed values (tokens).shorthands: Allows creating composite properties (e.g., mapping paddingX to paddingLeft and paddingRight).conditions: Defines media queries or state-based variations (e.g., mobile, darkMode).defaultCondition: Specifies which condition to use when none is provided.
Example configuration:
import {
defineProperties,
createSprinkles
} from '@vanilla-extract/sprinkles';
const space = {
none: 0,
small: '4px',
medium: '8px',
large: '16px'
};
const responsiveProperties = defineProperties({
conditions: {
mobile: {},
tablet: { '@media': 'screen and (min-width: 768px)' },
desktop: { '@media': 'screen and (min-width: 1024px)' }
},
defaultCondition: 'mobile',
properties: {
display: ['none', 'flex', 'block', 'inline'],
flexDirection: ['row', 'column'],
justifyContent: ['stretch', 'flex-start', 'center', 'flex-end', 'space-around', 'space-between'],
alignItems: ['stretch', 'flex-start', 'center', 'flex-end'],
paddingTop: space,
paddingBottom: space,
paddingLeft: space,
paddingRight: space
},
shorthands: {
padding: ['paddingTop', 'paddingBottom', 'paddingLeft', 'paddingRight'],
paddingX: ['paddingLeft', 'paddingRight'],
paddingY: ['paddingTop', 'paddingBottom'],
placeItems: ['justifyContent', 'alignItems']
}
});
const colors = {
'blue-50': '#eff6ff',
'blue-100': '#dbeafe',
'blue-200': '#bfdbfe',
'gray-700': '#374151',
'gray-800': '#1f2937',
'gray-900': '#111827'
};
const colorProperties = defineProperties({
conditions: {
lightMode: {},
darkMode: { '@media': '(prefers-color-scheme: dark)' }
},
defaultCondition: 'lightMode',
properties: {
color: colors,
background: colors
}
});
export const sprinkles = createSprinkles(
responsiveProperties,
colorProperties
);
// Export the Sprinkles type for better DX
export type Sprinkles = Parameters<typeof sprinkles>[0];