UNPKG

@primer/primitives

Version:

Typography, spacing, and color primitives for Primer design system

74 lines (73 loc) 2.78 kB
import { z } from 'zod'; import { baseToken } from './baseToken.js'; import { referenceValue } from './referenceValue.js'; import { colorHexValue } from './colorHexValue.js'; import { alphaValue } from './alphaValue.js'; import { dimensionValue } from './dimensionValue.js'; import { tokenType } from './tokenType.js'; import { collection, mode } from './collections.js'; export const shadowValue = z .object({ color: z.union([colorHexValue, referenceValue]), alpha: z.union([alphaValue, referenceValue]), offsetX: z.union([dimensionValue, referenceValue]), offsetY: z.union([dimensionValue, referenceValue]), blur: z.union([dimensionValue, referenceValue]), spread: z.union([dimensionValue, referenceValue]), inset: z.boolean().optional(), }) .strict(); const baseShadowToken = baseToken.extend({ $value: z.union([shadowValue, referenceValue, z.array(shadowValue)]), }); const override = z.union([referenceValue, baseShadowToken]).optional(); export const shadowToken = baseToken .extend({ $value: z.union([shadowValue, z.array(shadowValue), referenceValue]), $type: tokenType('shadow'), $extensions: z .object({ 'org.primer.figma': z .object({ collection: collection(['mode']).optional(), modeOverride: mode([ 'light', 'dark', 'dark dimmed', 'light high contrast', 'dark high contrast', 'light protanopia deuteranopia', 'dark protanopia deuteranopia', 'light tritanopia', 'dark tritanopia', ]).optional(), group: z.string().optional(), }) .strict(), 'org.primer.overrides': z .object({ light: override, 'light-tritanopia': override, 'light-protanopia-deuteranopia': override, 'light-high-contrast': override, dark: override, 'dark-tritanopia': override, 'dark-protanopia-deuteranopia': override, 'dark-high-contrast': override, 'dark-dimmed': override, }, { errorMap: e => { if (e.code === 'unrecognized_keys') { return { message: `Unrecognized key: "${e.keys.join(', ')}", must be one of: light, light-tritanopia, light-protanopia-deuteranopia, light-high-contrast, dark, dark-tritanopia, dark-protanopia-deuteranopia, dark-high-contrast, dark-dimmed`, }; } return { message: `Error: ${e.code}` }; }, }) .strict() .optional(), }) .optional(), }) .strict();