export type Visibility = "hidden" | "visible"; export interface CharacterIdentity { id: string; slug: string; nameTh: string; nameEn: string | null; description: string | null; portraitMediaId: string | null; element: string | null; role: string | null; rarity: number | null; sortOrder: number; visible: boolean; } export interface PageIdentity { id: string; characterId: string; slug: string; title: string; navOrder: number; visible: boolean; publicNote: string | null; version: number; } export interface DataSourceField { key: string; label: string; type: "text" | "number" | "badge" | "media"; formula?: string | null; displayPrecision?: number; } export interface DataSourceRow { id: string; values: Record; hidden?: boolean; } export interface DataSourceSnapshot { id: string; name: string; version: number; fields: DataSourceField[]; rows: DataSourceRow[]; } export interface PageBlockSnapshot { id: string; type: string; schemaVersion: number; config: unknown; responsiveLayout?: unknown; sortOrder: number; } export interface PageSnapshot { character: CharacterIdentity; page: PageIdentity; pages: PageIdentity[]; blocks: PageBlockSnapshot[]; dataSources: Record; versionVector: Record; } export interface PublicCharacterCard { id: string; slug: string; nameTh: string; nameEn: string | null; portraitMediaId: string | null; element: string | null; role: string | null; rarity: number | null; firstPageSlug: string; }