{"version":3,"file":"schema.mjs","names":[],"sources":["../../../../../../src/libs/collection/custom-fields/fields/range/schema.ts"],"sourcesContent":["import type z from \"zod\";\n\ninterface RangeSchemaConfig {\n\ttype: string;\n\tmin?: number;\n\tmax?: number;\n\tstep?: number;\n\tthumbs?: 1 | 2;\n\tdefault?: unknown;\n}\n\n/** Applies range-only invariants after the shared custom-field shape is parsed. */\nexport const validateRangeConfig = (\n\tfield: RangeSchemaConfig,\n\tcontext: z.RefinementCtx,\n) => {\n\tif (field.type !== \"range\") return;\n\n\tif (field.min === undefined) {\n\t\tcontext.addIssue({\n\t\t\tcode: \"custom\",\n\t\t\tpath: [\"min\"],\n\t\t\tmessage: \"Range min is required\",\n\t\t});\n\t}\n\tif (field.max === undefined) {\n\t\tcontext.addIssue({\n\t\t\tcode: \"custom\",\n\t\t\tpath: [\"max\"],\n\t\t\tmessage: \"Range max is required\",\n\t\t});\n\t}\n\tif (field.step === undefined) {\n\t\tcontext.addIssue({\n\t\t\tcode: \"custom\",\n\t\t\tpath: [\"step\"],\n\t\t\tmessage: \"Range step is required\",\n\t\t});\n\t}\n\tif (\n\t\tfield.min === undefined ||\n\t\tfield.max === undefined ||\n\t\tfield.step === undefined\n\t) {\n\t\treturn;\n\t}\n\tif (field.max <= field.min) {\n\t\tcontext.addIssue({\n\t\t\tcode: \"custom\",\n\t\t\tpath: [\"max\"],\n\t\t\tmessage: \"Range max must be greater than min\",\n\t\t});\n\t}\n\n\tconst expectedLength = field.thumbs === 2 ? 2 : 1;\n\tif (\n\t\t!Array.isArray(field.default) ||\n\t\tfield.default.length !== expectedLength\n\t) {\n\t\tcontext.addIssue({\n\t\t\tcode: \"custom\",\n\t\t\tpath: [\"default\"],\n\t\t\tmessage: `Range default must contain ${expectedLength} value${expectedLength === 1 ? \"\" : \"s\"}`,\n\t\t});\n\t\treturn;\n\t}\n\n\tfor (const [index, value] of field.default.entries()) {\n\t\tif (\n\t\t\ttypeof value !== \"number\" ||\n\t\t\t!Number.isFinite(value) ||\n\t\t\tvalue < field.min ||\n\t\t\tvalue > field.max\n\t\t) {\n\t\t\tcontext.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tpath: [\"default\", index],\n\t\t\t\tmessage: \"Range default values must be within min and max\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst steps = (value - field.min) / field.step;\n\t\tif (Math.abs(steps - Math.round(steps)) >= 1e-9) {\n\t\t\tcontext.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tpath: [\"default\", index],\n\t\t\t\tmessage: \"Range default values must align to step\",\n\t\t\t});\n\t\t}\n\t}\n};\n"],"mappings":"AAYA,MAAa,GACZ,EACA,IACI,CAwBJ,GAvBI,EAAM,OAAS,UAEf,EAAM,MAAQ,IAAA,IACjB,EAAQ,SAAS,CAChB,KAAM,SACN,KAAM,CAAC,KAAK,EACZ,QAAS,uBACV,CAAC,EAEE,EAAM,MAAQ,IAAA,IACjB,EAAQ,SAAS,CAChB,KAAM,SACN,KAAM,CAAC,KAAK,EACZ,QAAS,uBACV,CAAC,EAEE,EAAM,OAAS,IAAA,IAClB,EAAQ,SAAS,CAChB,KAAM,SACN,KAAM,CAAC,MAAM,EACb,QAAS,wBACV,CAAC,EAGD,EAAM,MAAQ,IAAA,IACd,EAAM,MAAQ,IAAA,IACd,EAAM,OAAS,IAAA,IAEf,OAEG,EAAM,KAAO,EAAM,KACtB,EAAQ,SAAS,CAChB,KAAM,SACN,KAAM,CAAC,KAAK,EACZ,QAAS,oCACV,CAAC,EAGF,IAAM,EAAiB,EAAM,SAAW,EAAI,EAAI,EAChD,GACC,CAAC,MAAM,QAAQ,EAAM,OAAO,GAC5B,EAAM,QAAQ,SAAW,EACxB,CACD,EAAQ,SAAS,CAChB,KAAM,SACN,KAAM,CAAC,SAAS,EAChB,QAAS,8BAA8B,EAAe,QAAQ,IAAmB,EAAI,GAAK,KAC3F,CAAC,EACD,MACD,CAEA,IAAK,GAAM,CAAC,EAAO,KAAU,EAAM,QAAQ,QAAQ,EAAG,CACrD,GACC,OAAO,GAAU,UACjB,CAAC,OAAO,SAAS,CAAK,GACtB,EAAQ,EAAM,KACd,EAAQ,EAAM,IACb,CACD,EAAQ,SAAS,CAChB,KAAM,SACN,KAAM,CAAC,UAAW,CAAK,EACvB,QAAS,iDACV,CAAC,EACD,QACD,CAEA,IAAM,GAAS,EAAQ,EAAM,KAAO,EAAM,KACtC,KAAK,IAAI,EAAQ,KAAK,MAAM,CAAK,CAAC,GAAK,MAC1C,EAAQ,SAAS,CAChB,KAAM,SACN,KAAM,CAAC,UAAW,CAAK,EACvB,QAAS,yCACV,CAAC,CAEH,CACD"}