mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 09:51:13 -05:00
79 lines
1.8 KiB
TypeScript
79 lines
1.8 KiB
TypeScript
import { z } from 'zod';
|
|
import { personalLocationSchema, preferredPronounsSchema } from '@/lib/validation';
|
|
import type { AccessibilityOptions } from '@/types/location';
|
|
|
|
/**
|
|
* Schema for accessibility options
|
|
*/
|
|
export const accessibilityOptionsSchema = z.object({
|
|
font_size: z.enum(['small', 'medium', 'large'] as const),
|
|
high_contrast: z.boolean(),
|
|
reduced_motion: z.boolean()
|
|
});
|
|
|
|
/**
|
|
* Schema for location form data
|
|
*/
|
|
export const locationFormSchema = z.object({
|
|
personal_location: personalLocationSchema,
|
|
home_park_id: z.string().uuid('Invalid park ID').optional().nullable(),
|
|
timezone: z.string().min(1, 'Timezone is required'),
|
|
preferred_language: z.string().min(2, 'Language code must be at least 2 characters').max(10),
|
|
preferred_pronouns: preferredPronounsSchema
|
|
});
|
|
|
|
/**
|
|
* Default accessibility options for new users
|
|
*/
|
|
export const DEFAULT_ACCESSIBILITY_OPTIONS: AccessibilityOptions = {
|
|
font_size: 'medium',
|
|
high_contrast: false,
|
|
reduced_motion: false
|
|
};
|
|
|
|
/**
|
|
* Common timezones for selection
|
|
*/
|
|
export const COMMON_TIMEZONES = [
|
|
'UTC',
|
|
'America/New_York',
|
|
'America/Chicago',
|
|
'America/Denver',
|
|
'America/Los_Angeles',
|
|
'America/Anchorage',
|
|
'America/Toronto',
|
|
'America/Vancouver',
|
|
'America/Mexico_City',
|
|
'America/Sao_Paulo',
|
|
'Europe/London',
|
|
'Europe/Paris',
|
|
'Europe/Berlin',
|
|
'Europe/Madrid',
|
|
'Europe/Rome',
|
|
'Europe/Stockholm',
|
|
'Europe/Moscow',
|
|
'Asia/Dubai',
|
|
'Asia/Kolkata',
|
|
'Asia/Bangkok',
|
|
'Asia/Singapore',
|
|
'Asia/Shanghai',
|
|
'Asia/Tokyo',
|
|
'Asia/Seoul',
|
|
'Australia/Sydney',
|
|
'Australia/Melbourne',
|
|
'Pacific/Auckland'
|
|
] as const;
|
|
|
|
/**
|
|
* Validate park option data
|
|
*/
|
|
export const parkOptionSchema = z.object({
|
|
id: z.string().uuid(),
|
|
name: z.string(),
|
|
location: z.object({
|
|
city: z.string().optional(),
|
|
state_province: z.string().optional(),
|
|
country: z.string()
|
|
}).optional()
|
|
});
|