import { z } from 'zod'; import { createBuiltInParserDefinition } from '../../internals/createBuiltInParserDefinition.js'; import { applyTo } from '../../shared/definition.js'; const possibleTextStylesKeysSchema = z.array( z.union([ z.literal('fontSize'), z.literal('lineHeight'), z.literal('letterSpacing'), z.literal('paragraphSpacing'), z.literal('textIndent'), ]), ); const possibleShadowKeysSchema = z.array( z.union([ z.literal('offsetX'), z.literal('offsetY'), z.literal('blurRadius'), z.literal('spreadRadius'), ]), ); const possibleBorderKeysSchema = z.array( z.union([z.literal('width'), z.literal('rectangleCornerRadii')]), ); const possibleTransitionKeysSchema = z.array( z.union([z.literal('duration'), z.literal('delay'), z.literal('timingFunction')]), ); export const keysPerTokenTypeSelectorSchema = z.object({ textStyle: possibleTextStylesKeysSchema.optional(), shadow: possibleShadowKeysSchema.optional(), border: possibleBorderKeysSchema.optional(), transition: possibleTransitionKeysSchema.optional(), }); export type KeysPerTokenTypeSelector = z.infer; export const roundNumberParserName = 'round-number'; export const roundNumberParserOptionsSchema = z .object({ applyTo, applyToKeys: keysPerTokenTypeSelectorSchema.strict().optional(), precision: z.number().optional(), mode: z.enum(['down', 'up', 'auto']).optional(), }) .strict(); export const roundNumberParserDefinition = createBuiltInParserDefinition({ name: roundNumberParserName, kind: 'utility', hasOptionalOptions: false, optionsSchema: roundNumberParserOptionsSchema, hasOptionalOutput: true, outputTypes: undefined, inTypes: ['SDTF', 'SDTF Engine'], outType: 'SDTF Engine', }); export type RoundNumberParserDefinition = typeof roundNumberParserDefinition; export type RoundNumberParserOptions = z.infer;