Add custom intervention modals

This commit is contained in:
adilallo
2026-05-01 22:05:05 -06:00
parent 58d0e33500
commit dee2dd800e
67 changed files with 3480 additions and 197 deletions
+75
View File
@@ -0,0 +1,75 @@
import { z } from "zod";
/** Serializable custom field blocks for a user-authored method card (wizard step 3). */
export type CustomMethodCardFieldBlock =
| {
kind: "text";
id: string;
blockTitle: string;
placeholderText: string;
}
| {
kind: "badges";
id: string;
blockTitle: string;
options: string[];
}
| {
kind: "upload";
id: string;
blockTitle: string;
fileName?: string;
}
| {
kind: "proportion";
id: string;
blockTitle: string;
defaultPercent: number;
};
const customMethodTextBlockSchema = z
.object({
kind: z.literal("text"),
id: z.string().max(80),
blockTitle: z.string().max(200),
placeholderText: z.string().max(8000),
})
.strict();
const customMethodBadgesBlockSchema = z
.object({
kind: z.literal("badges"),
id: z.string().max(80),
blockTitle: z.string().max(200),
options: z.array(z.string().max(200)).max(50),
})
.strict();
const customMethodUploadBlockSchema = z
.object({
kind: z.literal("upload"),
id: z.string().max(80),
blockTitle: z.string().max(200),
fileName: z.string().max(500).optional(),
})
.strict();
const customMethodProportionBlockSchema = z
.object({
kind: z.literal("proportion"),
id: z.string().max(80),
blockTitle: z.string().max(200),
defaultPercent: z.number().int().min(1).max(100),
})
.strict();
export const customMethodCardFieldBlockSchema = z.discriminatedUnion("kind", [
customMethodTextBlockSchema,
customMethodBadgesBlockSchema,
customMethodUploadBlockSchema,
customMethodProportionBlockSchema,
]);
export const customMethodCardFieldBlocksByIdSchema = z
.record(z.string().max(80), z.array(customMethodCardFieldBlockSchema).max(30))
.optional();