import { z } from 'zod'; export const reminderPreferencesSchema = z.object({ delivery: z.enum(['immediate', 'daily', 'weekly', 'off']).default('immediate'), digestTime: z .string() .regex(/^([01]\d|2[0-3]):[0-5]\d$/, 'Must be HH:MM') .optional(), digestDayOfWeek: z.number().int().min(0).max(6).optional(), timezone: z.string().min(1).max(64).optional(), }); export const updateUserPreferencesSchema = z.object({ locale: z.string().optional(), timezone: z.string().optional(), reminders: reminderPreferencesSchema.optional(), /** * Widget id → visible flag. Persists which dashboard cards the user * wants to see; missing ids fall back to registry defaults. Kept loose * (record-of-bool) so adding a new widget doesn't require a validator * update. */ dashboardWidgets: z.record(z.string(), z.boolean()).optional(), /** * Rep-chosen dashboard widget order for the **desktop / xl layout** * (>= 1280px). Missing ids fall through to registry order so newly- * added widgets always surface. */ dashboardWidgetOrder: z.array(z.string()).optional(), /** * Rep-chosen dashboard widget order for the **stacked layout** * (< 1280px - single column on tablet/mobile). When unset, the * dashboard falls back to `dashboardWidgetOrder` (then registry * order). */ dashboardWidgetOrderMobile: z.array(z.string()).optional(), }); export type UpdateUserPreferencesInput = z.infer; export type ReminderPreferences = z.infer;