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.
15 lines
686 B
Swift
15 lines
686 B
Swift
import Foundation
|
|
|
|
/// A document pinned to the top of a collection (or the team home), backed by
|
|
/// `pins.*`. Not in the vendored OpenAPI spec (`docs/reference/outline-openapi`)
|
|
/// — that spec has no `Pins` tag at all — but the endpoint exists on Outline's
|
|
/// actual server (`server/routes/api/pins.ts` upstream). Shape reconstructed
|
|
/// from general knowledge of Outline's API, not verified against this spec;
|
|
/// treat field names as best-effort until confirmed against a live server.
|
|
public struct OutlinePin: Decodable, Identifiable, Sendable {
|
|
public let id: String
|
|
public let documentId: String
|
|
public let collectionId: String?
|
|
public let index: String?
|
|
}
|