// collection names export const DECK = "tech.waow.slides.deck"; export const SLIDE = "tech.waow.slides.slide"; export type ShapeType = "rectangle" | "ellipse" | "triangle"; export type BlobRef = { $type: "blob"; ref: { $link: string }; mimeType: string; size: number; }; export type StrongRef = { uri: string; cid: string; }; export type SlideRef = { subject: StrongRef; }; export type Element = { type: "text" | "image" | "shape"; x: number; y: number; width: number; height: number; content?: string; blob?: BlobRef; fontSize?: number; fontFamily?: string; color?: string; shapeType?: ShapeType; }; // slide record as stored in ATProto export type SlideRecord = { elements: Element[]; notes?: string; background?: string; createdAt: string; }; // slide with resolved metadata for UI export type Slide = SlideRecord & { uri?: string; cid?: string; rkey?: string; }; // deck record as stored in ATProto (references slides via strongRef) export type DeckRecord = { name: string; slides: SlideRef[]; createdAt: string; updatedAt?: string; thumbnail?: BlobRef; }; // deck with resolved slides for UI export type Deck = { uri?: string; repo?: string; rkey?: string; name: string; slides: Slide[]; slideCount?: number; // for shallow decks before slides are resolved createdAt: string; updatedAt?: string; thumbnail?: BlobRef; thumbnailUrl?: string; // resolved blob URL for display };