powerpointproto
slides.waow.tech
slides
1// collection names
2export const DECK = "tech.waow.slides.deck";
3export const SLIDE = "tech.waow.slides.slide";
4
5export type ShapeType = "rectangle" | "ellipse" | "triangle";
6
7export type BlobRef = {
8 $type: "blob";
9 ref: { $link: string };
10 mimeType: string;
11 size: number;
12};
13
14export type StrongRef = {
15 uri: string;
16 cid: string;
17};
18
19export type SlideRef = {
20 subject: StrongRef;
21};
22
23export type Element = {
24 type: "text" | "image" | "shape";
25 x: number;
26 y: number;
27 width: number;
28 height: number;
29 content?: string;
30 blob?: BlobRef;
31 fontSize?: number;
32 fontFamily?: string;
33 color?: string;
34 shapeType?: ShapeType;
35};
36
37// slide record as stored in ATProto
38export type SlideRecord = {
39 elements: Element[];
40 notes?: string;
41 background?: string;
42 createdAt: string;
43};
44
45// slide with resolved metadata for UI
46export type Slide = SlideRecord & {
47 uri?: string;
48 cid?: string;
49 rkey?: string;
50};
51
52// deck record as stored in ATProto (references slides via strongRef)
53export type DeckRecord = {
54 name: string;
55 slides: SlideRef[];
56 createdAt: string;
57 updatedAt?: string;
58 thumbnail?: BlobRef;
59};
60
61// deck with resolved slides for UI
62export type Deck = {
63 uri?: string;
64 repo?: string;
65 rkey?: string;
66 name: string;
67 slides: Slide[];
68 slideCount?: number; // for shallow decks before slides are resolved
69 createdAt: string;
70 updatedAt?: string;
71 thumbnail?: BlobRef;
72 thumbnailUrl?: string; // resolved blob URL for display
73};