import { z } from "zod" const hexColorRegex = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/ export const linkSchema = z.object({ id: z.string().min(1, "Link id is required"), name: z.string().min(1, "Link name is required"), description: z.string().optional(), url: z.string().url("Invalid URL").min(1, "URL is required"), icon: z.string().min(1, "Icon name is required"), iconUrl: z.string().url("Invalid icon URL").optional(), color: z.string().regex(hexColorRegex, "Invalid hex color").optional(), openInNewTab: z.boolean().optional().default(true), }) export const sectionSchema = z.object({ id: z.string().min(1, "Section id is required"), title: z.string().min(1, "Section title is required"), description: z.string().optional(), cardLayout: z.enum(["horizontal", "vertical"]).optional().default("horizontal"), links: z.array(linkSchema).default([]), }) export const themeSchema = z.object({ mode: z.enum(["dark", "light"]).default("dark"), accent: z .string() .regex(hexColorRegex, "Invalid accent color") .default("#8b5cf6"), background: z.enum(["gradient", "solid"]).default("gradient"), }) export const siteSchema = z.object({ name: z.string().min(1, "Site name is required"), title: z.string().min(1, "Site title is required"), description: z.string().optional(), favicon: z.string().optional(), logoUrl: z.string().url("Invalid logo URL").optional(), showFooter: z.boolean().optional().default(true), }) export const dashboardConfigSchema = z.object({ site: siteSchema, theme: themeSchema.optional().default({ mode: "dark", accent: "#8b5cf6", background: "gradient", }), sections: z.array(sectionSchema).default([]), })