Adds the full document reader toolbar: recent-viewer avatar stack (views.list, polled every 20s, filtered to entries with a lastViewedAt), Share button (shares.create/info/update), Edit/Done toggle that switches the reader into an editable NativeTextViewWrapper and saves via documents.update (last-write-wins REST editing, per CLAUDE.md's Phase 1 scope - full realtime CRDT collaboration is a separate, much larger effort, see the Collaboration/ skeleton in this branch), New Document button, and an overflow menu with the same action set as the sidebar's document context menu plus this session's additions: Star/Unstar (shared StarStore), Pin/Unpin and Subscribe/Unsubscribe (pins.*/subscriptions.* - not in the vendored OpenAPI spec, reconstructed from Outline's actual API surface and flagged as best-effort in code comments), Enable Viewer Insights, Enable Embeds (speculative field on documents.update), and Full Width (toggles + reads back Document.fullWidth, now added to the model). Also replaces the always-expanded .searchable contextual search field with a plain icon that expands into a field on click. OutlineKit: shares.*, pins.* (best-effort), subscriptions.* (best-effort), views.list, with test coverage for the endpoints that are in the vendored spec.
16 lines
689 B
Swift
16 lines
689 B
Swift
import Foundation
|
|
|
|
/// A notification subscription on a document (or collection), backed by
|
|
/// `subscriptions.*`. Same caveat as `OutlinePin`: not in the vendored
|
|
/// OpenAPI spec — no `Subscriptions` tag exists there — but the endpoint
|
|
/// exists on Outline's actual server (`server/routes/api/subscriptions.ts`
|
|
/// upstream). Shape reconstructed from general knowledge, not verified
|
|
/// against this spec; treat field names as best-effort until confirmed
|
|
/// against a live server.
|
|
public struct OutlineSubscription: Decodable, Identifiable, Sendable {
|
|
public let id: String
|
|
public let documentId: String?
|
|
public let collectionId: String?
|
|
public let event: String
|
|
}
|