import { z } from 'zod'; const RouteMatchingEnd = z .union([z.boolean(), z.function().args(z.string()).returns(z.boolean())]) .default(false) .optional(); const Divider = z.object({ divider: z.literal(true), }); const RouteSubChild = z.object({ label: z.string(), path: z.string(), Icon: z.custom().optional(), end: RouteMatchingEnd, renderAction: z.custom().optional(), }); const RouteChild = z.object({ label: z.string(), path: z.string(), Icon: z.custom().optional(), end: RouteMatchingEnd, children: z.array(RouteSubChild).default([]).optional(), collapsible: z.boolean().default(false).optional(), collapsed: z.boolean().default(false).optional(), renderAction: z.custom().optional(), }); const RouteGroup = z.object({ label: z.string().optional(), collapsible: z.boolean().optional(), collapsed: z.boolean().optional(), children: z.array(RouteChild), renderAction: z.custom().optional(), }); export const NavigationConfigSchema = z.object({ style: z.enum(['custom', 'sidebar', 'header']).default('custom'), sidebarCollapsed: z.boolean().optional(), sidebarCollapsedStyle: z.enum(['offcanvas', 'icon', 'none']).default('icon'), routes: z.array(z.union([RouteGroup, Divider])), });