@mgoodfellow/park-ui-panda-preset
Version:
Panda CSS Preset for Park UI
60 lines (56 loc) • 1.81 kB
text/typescript
import { type SemanticTokens, definePreset } from '@pandacss/dev'
import red from './colors/red'
import type { PresetOptions } from './options'
import { breakpoints } from './theme/breakpoints'
import { conditions } from './theme/conditions'
import { globalCss } from './theme/global-css'
import { keyframes } from './theme/keyframes'
import { recipes, slotRecipes } from './theme/recipes'
import { semanticTokens } from './theme/semantic-tokens'
import { textStyles } from './theme/text-styles'
import { tokens } from './theme/tokens'
import { createRadii } from './utils/create-radii'
export const createPreset = (options: PresetOptions) => {
const { accentColor, grayColor, radius } = options
const standardizeGrayTokens = (tokens: SemanticTokens['colors']) =>
JSON.parse(JSON.stringify(tokens).replace(new RegExp(grayColor.name, 'g'), 'gray'))
return definePreset({
name: '@park-ui/panda-preset',
presets: ['@pandacss/preset-base'],
conditions,
globalCss: {
...globalCss,
html: {
colorPalette: accentColor.name,
},
},
theme: {
extend: {
breakpoints,
keyframes,
recipes,
slotRecipes,
textStyles,
tokens: {
...tokens,
colors: {
...tokens.colors,
red: red.tokens,
gray: grayColor.tokens ?? {},
[accentColor.name]: accentColor.tokens,
},
},
semanticTokens: {
...semanticTokens,
colors: {
...semanticTokens.colors,
red: red.semanticTokens,
gray: standardizeGrayTokens(grayColor.semanticTokens),
[accentColor.name]: accentColor.semanticTokens,
},
radii: createRadii(radius),
},
},
},
})
}