import { z } from "zod/mini" // Accepts number directly or string that parses to number (like io-ts NumberFromString) const NumberOrStringToNumber = z.union([ z.number(), z.pipe( z.string(), z.transform((s) => Number(s)), ), ]) const NumberConfigSchema = z.object({ label: z.nullish(z.string()), placeholder: z.optional(z.string()), min: z.optional(NumberOrStringToNumber), max: z.optional(NumberOrStringToNumber), step: z.optional(NumberOrStringToNumber), }) export const NumberModelSchema = z.object({ type: z.literal("Number"), fieldset: z.nullish(z.string()), config: z.optional(NumberConfigSchema), }) export type NumberModel = z.infer