📂 .pptx open + save
Worker-side parser written in TypeScript on top of JSZip
+ fast-xml-parser. Export via PptxGenJS.
Deep OOXML PresentationML coverage — slides, layouts, masters,
themes, theme color resolution, placeholder inheritance, gradients,
text outline + arrowheads + effects, hyperlinks via custom ranges,
tables + charts as IPageElement.
✓ 68 of 87 fidelity probes passing
Tracked in docs/FIDELITY_TRACKER.md as the source of
truth. Snapshot post wave 7o (2026-05-26):
68 ✅, 6 ⚠️. Recent waves added theme color
resolution (J2), placeholder default text style (I4), multi-run
rich text + paragraph alignment (B16 + C2), color modifiers +
rotation + flips (5b), bullets + indent + line spacing (C3/C4/C6-8),
text outline + arrowheads + effects (B15 + D17 + D18 + D19),
tables + charts as IPageElement (Gap 3).
🎨 Office-style ribbon shell
TitleBar, Toolbar with Layout dropdown (6 templates), StatusBar
with slide count + zoom, slide-panel thumbnails, Slide Show mode,
NotesPanel, ThemePicker, BackgroundPicker, RecentFilesDialog,
SlideContextMenu (right-click → duplicate / hide / delete / new),
PropertiesDialog, About. The Fluent-UI-flavoured look is loud
on purpose — readers familiar with Office should land immediately.
🔌 Fork-and-patch on Univer OSS
Univer Slides doesn't ship collab rev tracking on
SlideDataModel or treat element ops as
CommandType.MUTATION — both required for the bridge.
Patches live in patches/ (via pnpm patch)
so production builds get the fix today; same changes land in the
univer-revamp fork and head upstream as PRs to
dream-num/univer. Same fork-management pattern Casual
Sheets uses.
⌥ Collab — naive spike, Yjs is next
v0.0.x collab is a Phase-2 spike: 104-line raw ws
server, command broadcast, single-active-editor sufficient. Yjs
+ Hocuspocus migration is queued as the v0.1.0 blocker — same
shape Casual Sheets uses today.
Until then, this works for one editor at a time per room.
🗂 Layouts · backgrounds · themes
6 layout templates — title slide, title + content, two content,
comparison, blank, section header — each materialised as concrete
IPageElement placeholders (not OOXML inheritance
chains; layout inheritance is import-side only today). Theme
picker swaps the slide-master colour palette. Background picker
paints solid fills + gradient backgrounds.