* Enhance sidebar navigation and layout configuration - Added support for configurable sidebar collapsed style - Updated layout components to use new sidebar configuration - Added environment variable for sidebar trigger display - Simplified page header and navigation components - Improved sidebar responsiveness and user experience * Refactor admin account page layout and action buttons - Moved action buttons from sidebar to PageHeader for both personal and team account pages - Updated button variants and styling for better visual hierarchy - Improved spacing and layout of account page components - Added border to PageHeader for better visual separation * Update version updater dialog styling - Replaced `space-x-4` with `gap-x-2` for better spacing - Wrapped translation text in a `span` for improved layout - Maintained consistent icon and text alignment in dialog title * Refactor sidebar state management and configuration - Simplified sidebar context and removed minimized state - Updated layout components to use new sidebar open/closed state - Modified sidebar navigation to handle collapsed state dynamically - Added environment variable for sidebar trigger and collapsed style - Improved sidebar responsiveness and rendering logic * Remove sidebar configuration and environment variables - Simplified sidebar context by removing `minimized` state in components - Updated account selector components to use simplified sidebar state - Removed unused helper functions in sidebar implementation
49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
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<React.ReactNode>().optional(),
|
|
end: RouteMatchingEnd,
|
|
renderAction: z.custom<React.ReactNode>().optional(),
|
|
});
|
|
|
|
const RouteChild = z.object({
|
|
label: z.string(),
|
|
path: z.string(),
|
|
Icon: z.custom<React.ReactNode>().optional(),
|
|
end: RouteMatchingEnd,
|
|
children: z.array(RouteSubChild).default([]).optional(),
|
|
collapsible: z.boolean().default(false).optional(),
|
|
collapsed: z.boolean().default(false).optional(),
|
|
renderAction: z.custom<React.ReactNode>().optional(),
|
|
});
|
|
|
|
const RouteGroup = z.object({
|
|
label: z.string(),
|
|
collapsible: z.boolean().optional(),
|
|
collapsed: z.boolean().optional(),
|
|
children: z.array(RouteChild),
|
|
renderAction: z.custom<React.ReactNode>().optional(),
|
|
});
|
|
|
|
export const NavigationConfigSchema = z.object({
|
|
style: z.enum(['custom', 'sidebar', 'header']).default('sidebar'),
|
|
sidebarCollapsed: z
|
|
.enum(['false', 'true'])
|
|
.default('true')
|
|
.optional()
|
|
.transform((value) => value === `true`),
|
|
sidebarCollapsedStyle: z.enum(['offcanvas', 'icon', 'none']).default('icon'),
|
|
routes: z.array(z.union([RouteGroup, Divider])),
|
|
});
|