import * as z from "zod/mini"; import { createGeneration, type Generation, generationSchema, } from "./v3-generation.js"; const canonicalIdStringSchema = z.string().check(z.trim(), z.minLength(1)); const colorSchemeValueSchema = z.enum(["light", "dark", "system"]); const viewColorSchemeSchema = z.enum(["light", "dark", "system"]); const colorSchemeMessageEnvelopeSchema = z.object({ t: z.string().check(z.startsWith("getuserfeedback:")), gen: generationSchema, viewId: z.optional(canonicalIdStringSchema), }); export const eventHostColorSchemeSchema = z.extend( colorSchemeMessageEnvelopeSchema, { t: z.literal("getuserfeedback:event:hostColorScheme"), instanceId: canonicalIdStringSchema, hostColorScheme: z.union([colorSchemeValueSchema, z.null()]), }, ); export type EventHostColorScheme = z.output; export const eventColorSchemeUpdateSchema = z.extend( colorSchemeMessageEnvelopeSchema, { t: z.literal("getuserfeedback:event:colorSchemeUpdate"), viewId: canonicalIdStringSchema, colorScheme: viewColorSchemeSchema, }, ); export type EventColorSchemeUpdate = z.output< typeof eventColorSchemeUpdateSchema >; export function buildEventHostColorScheme(params: { gen: number | Generation; instanceId: string; hostColorScheme: "light" | "dark" | "system" | null; }): EventHostColorScheme { return { t: "getuserfeedback:event:hostColorScheme", gen: createGeneration(params.gen), instanceId: params.instanceId, hostColorScheme: params.hostColorScheme, }; } export function buildEventColorSchemeUpdate(params: { gen: number | Generation; viewId: string; colorScheme: "light" | "dark" | "system"; }): EventColorSchemeUpdate { return { t: "getuserfeedback:event:colorSchemeUpdate", gen: createGeneration(params.gen), viewId: params.viewId, colorScheme: params.colorScheme, }; } export function isEventHostColorScheme( msg: unknown, ): msg is EventHostColorScheme { return eventHostColorSchemeSchema.safeParse(msg).success; } export function isEventColorSchemeUpdate( msg: unknown, ): msg is EventColorSchemeUpdate { return eventColorSchemeUpdateSchema.safeParse(msg).success; }