import { z } from 'zod'; import { createBuiltInParserDefinition } from '../../internals/createBuiltInParserDefinition.js'; import { applyTo } from '../../shared/definition.js'; import { specifyDimensionUnitValues } from '@specifyapp/specify-design-token-format'; export const convertDimensionParserName = 'convert-dimension'; export const possibleTextStylesKeysSchema = z.array( z.union([ z.literal('fontSize'), z.literal('lineHeight'), z.literal('letterSpacing'), z.literal('paragraphSpacing'), z.literal('textIndent'), ]), ); export type PossibleTextStylesKeysSchemaType = z.infer; 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')]), ); export const keysPerTokenTypeSelectorSchema = z.object({ textStyle: possibleTextStylesKeysSchema.optional(), shadow: possibleShadowKeysSchema.optional(), border: possibleBorderKeysSchema.optional(), }); export type KeysPerToken = z.infer; export const convertDimensionParserOptionsSchema = z .object({ toFormat: z.enum(specifyDimensionUnitValues).nullable(), applyTo, applyToKeys: keysPerTokenTypeSelectorSchema.strict().optional(), baseValue: z .object({ rem: z.number().gte(0).optional(), }) .strict() .optional(), excludeFormats: z.array(z.enum(specifyDimensionUnitValues).nullable()).optional(), includeFormats: z.array(z.enum(specifyDimensionUnitValues).nullable()).optional(), }) .strict(); export const convertDimensionParserDefinition = createBuiltInParserDefinition({ name: convertDimensionParserName, kind: 'utility', hasOptionalOptions: false, optionsSchema: convertDimensionParserOptionsSchema, hasOptionalOutput: true, outputTypes: undefined, inTypes: ['SDTF', 'SDTF Engine'], outType: 'SDTF Engine', }); export type ConvertDimensionParserDefinition = typeof convertDimensionParserDefinition; export type ConvertDimensionParserOptions = z.infer< ConvertDimensionParserDefinition['optionsSchema'] >;