import type { ReactNode } from "react"; import type { DialogSchema, DialogType } from "./schemas"; export interface DialogRendererEntry { type: T; render: (dialog: Extract) => ReactNode; } export type AnyDialogRendererEntry = { [T in DialogType]: DialogRendererEntry; }[DialogType]; export interface DialogRendererRegistry { domain: string; renderers: readonly AnyDialogRendererEntry[]; } export const defineDialogRenderer = ( type: T, render: (dialog: Extract) => ReactNode, ): DialogRendererEntry => ({ type, render }); export const defineDialogRendererRegistry = ( domain: string, renderers: readonly AnyDialogRendererEntry[], ): DialogRendererRegistry => ({ domain, renderers });