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 RangeConfigSchema = 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 RangeModelSchema = z.object({ type: z.literal("Range"), fieldset: z.nullish(z.string()), config: z.optional(RangeConfigSchema), }) export type RangeModel = z.infer