20 lines
779 B
TypeScript
20 lines
779 B
TypeScript
import { z } from "zod";
|
|
|
|
import { THEMES } from "@/lib/themes";
|
|
|
|
const NamePartSchema = z.string().trim().max(60, "Must be 60 characters or fewer");
|
|
|
|
export const ProfileNameSchema = z.object({
|
|
firstName: NamePartSchema,
|
|
lastName: NamePartSchema,
|
|
});
|
|
export type ProfileName = z.infer<typeof ProfileNameSchema>;
|
|
|
|
// The global theme preference stored on the profile row (User.theme):
|
|
// one of the real themes, or "system" = follow the OS light/dark setting.
|
|
// Written only by saveUserTheme (lib/actions/profile.ts), read by the
|
|
// root layout (app/layout.tsx) and the theme provider -- the cast in the
|
|
// latter two places is safe because of this schema.
|
|
export const ThemeSchema = z.enum([...THEMES, "system"]);
|
|
export type ThemePreference = z.infer<typeof ThemeSchema>;
|