@sheetwrite/coreclass
Ephemeral presence lifecycle; it never calls a document mutation API.
- Package
@sheetwrite/core- Source
packages/core/src/collaboration.ts#L64
Members 6
constructor
constructor(grid: Gridinterface Grid {
readonly store: Store;
readonly actions: GridActions;
setActiveSheet(id: SheetId): void;
scrollToCell(addr: CellAddress): void;
getCellAtPoint(
clientX: number,
clientY: number,
): CellAddress | null;
getActiveSheet(): SheetId;
getCellInput(row: number, col: number): CellInputSnapshot | null;
getSelection(): Selection | null;
setSelection(sel: Selection | null): void;
setTheme(theme: Partial<Theme>): void;
replaceTheme(theme: Partial<Theme> | undefined): void;
// … 106 more lines — see the API reference
}interface Grid {
readonly store: Store;
readonly actions: GridActions;
setActiveSheet(id: SheetId): void;
scrollToCell(addr: CellAddress): void;
getCellAtPoint(
clientX: number,
clientY: number,
): CellAddress | null;
getActiveSheet(): SheetId;
getCellInput(row: number, col: number): CellInputSnapshot | null;
getSelection(): Selection | null;
setSelection(sel: Selection | null): void;
setTheme(theme: Partial<Theme>): void;
replaceTheme(theme: Partial<Theme> | undefined): void;
// … 106 more lines — see the API reference
}interface Grid {
readonly store: Store;
readonly actions: GridActions;
setActiveSheet(
id: SheetId,
): void;
scrollToCell(
addr: CellAddress,
): void;
getCellAtPoint(
clientX: number,
clientY: number,
): CellAddress | null;
getActiveSheet(): SheetId;
getCellInput(
row: number,
col: number,
): CellInputSnapshot | null;
getSelection(): Selection | null;
// … 229 more lines — see the API reference
}Imperative grid handle for document commands, events, rendering, and teardown.API reference →, transport: PresenceTransportinterface PresenceTransport {
publish(
message: PresenceMessage,
signal?: AbortSignal,
): void | Promise<void>;
subscribe(
listener: (message: PresenceMessage) => void,
signal?: AbortSignal,
): undefined | (() => void);
}interface PresenceTransport {
publish(
message: PresenceMessage,
signal?: AbortSignal,
): void | Promise<void>;
subscribe(
listener: (message: PresenceMessage) => void,
signal?: AbortSignal,
): undefined | (() => void);
}interface PresenceTransport {
publish(
message: PresenceMessage,
signal?: AbortSignal,
): void | Promise<void>;
subscribe(
listener: (
message: PresenceMessage,
) => void,
signal?: AbortSignal,
): undefined | (() => void);
}Host transport contract for ephemeral presence messages.API reference →, options: PresenceCoordinatorOptionsinterface PresenceCoordinatorOptions {
actor: PresenceActor;
privacy?: PresencePrivacyOptions;
heartbeatMs?: number;
timeoutMs?: number;
maxActors?: number;
maxRangesPerActor?: number;
now?: () => number;
}interface PresenceCoordinatorOptions {
actor: PresenceActor;
privacy?: PresencePrivacyOptions;
heartbeatMs?: number;
timeoutMs?: number;
maxActors?: number;
maxRangesPerActor?: number;
now?: () => number;
}interface PresenceCoordinatorOptions {
actor: PresenceActor;
privacy?: PresencePrivacyOptions;
heartbeatMs?: number;
timeoutMs?: number;
maxActors?: number;
maxRangesPerActor?: number;
now?: () => number;
}Identity, privacy, and timing options for presence coordination.API reference →);destroy
destroy: () => void;on
on: (listener: PresenceListener) => () => void;pruneStale
pruneStale: () => void;publishNow
publishNow: () => Promise<void>;remotePresence
remotePresence: () => readonly PresenceMessageinterface PresenceMessage {
actor: PresenceActor;
activeSheet: string;
selections: readonly Range[];
sentAt: number;
}interface PresenceMessage {
actor: PresenceActor;
activeSheet: string;
selections: readonly Range[];
sentAt: number;
}interface PresenceMessage {
actor: PresenceActor;
activeSheet: string;
selections: readonly Range[];
sentAt: number;
}Ephemeral collaborator selection and activity update.API reference →[]Declaration
View full TypeScript declaration
class PresenceCoordinator { constructor( grid: Gridinterface Grid {
readonly store: Store;
readonly actions: GridActions;
setActiveSheet(id: SheetId): void;
scrollToCell(addr: CellAddress): void;
getCellAtPoint(
clientX: number,
clientY: number,
): CellAddress | null;
getActiveSheet(): SheetId;
getCellInput(row: number, col: number): CellInputSnapshot | null;
getSelection(): Selection | null;
setSelection(sel: Selection | null): void;
setTheme(theme: Partial<Theme>): void;
replaceTheme(theme: Partial<Theme> | undefined): void;
// … 106 more lines — see the API reference
}interface Grid {
readonly store: Store;
readonly actions: GridActions;
setActiveSheet(id: SheetId): void;
scrollToCell(addr: CellAddress): void;
getCellAtPoint(
clientX: number,
clientY: number,
): CellAddress | null;
getActiveSheet(): SheetId;
getCellInput(row: number, col: number): CellInputSnapshot | null;
getSelection(): Selection | null;
setSelection(sel: Selection | null): void;
setTheme(theme: Partial<Theme>): void;
replaceTheme(theme: Partial<Theme> | undefined): void;
// … 106 more lines — see the API reference
}interface Grid {
readonly store: Store;
readonly actions: GridActions;
setActiveSheet(
id: SheetId,
): void;
scrollToCell(
addr: CellAddress,
): void;
getCellAtPoint(
clientX: number,
clientY: number,
): CellAddress | null;
getActiveSheet(): SheetId;
getCellInput(
row: number,
col: number,
): CellInputSnapshot | null;
getSelection(): Selection | null;
// … 229 more lines — see the API reference
}Imperative grid handle for document commands, events, rendering, and teardown.API reference →, transport: PresenceTransportinterface PresenceTransport {
publish(
message: PresenceMessage,
signal?: AbortSignal,
): void | Promise<void>;
subscribe(
listener: (message: PresenceMessage) => void,
signal?: AbortSignal,
): undefined | (() => void);
}interface PresenceTransport {
publish(
message: PresenceMessage,
signal?: AbortSignal,
): void | Promise<void>;
subscribe(
listener: (message: PresenceMessage) => void,
signal?: AbortSignal,
): undefined | (() => void);
}interface PresenceTransport {
publish(
message: PresenceMessage,
signal?: AbortSignal,
): void | Promise<void>;
subscribe(
listener: (
message: PresenceMessage,
) => void,
signal?: AbortSignal,
): undefined | (() => void);
}Host transport contract for ephemeral presence messages.API reference →, options: PresenceCoordinatorOptionsinterface PresenceCoordinatorOptions {
actor: PresenceActor;
privacy?: PresencePrivacyOptions;
heartbeatMs?: number;
timeoutMs?: number;
maxActors?: number;
maxRangesPerActor?: number;
now?: () => number;
}interface PresenceCoordinatorOptions {
actor: PresenceActor;
privacy?: PresencePrivacyOptions;
heartbeatMs?: number;
timeoutMs?: number;
maxActors?: number;
maxRangesPerActor?: number;
now?: () => number;
}interface PresenceCoordinatorOptions {
actor: PresenceActor;
privacy?: PresencePrivacyOptions;
heartbeatMs?: number;
timeoutMs?: number;
maxActors?: number;
maxRangesPerActor?: number;
now?: () => number;
}Identity, privacy, and timing options for presence coordination.API reference →, ); destroy: () => void; on: (listener: PresenceListener) => () => void; pruneStale: () => void; publishNow: () => Promise<void>; remotePresence: () => readonly PresenceMessageinterface PresenceMessage {
actor: PresenceActor;
activeSheet: string;
selections: readonly Range[];
sentAt: number;
}interface PresenceMessage {
actor: PresenceActor;
activeSheet: string;
selections: readonly Range[];
sentAt: number;
}interface PresenceMessage {
actor: PresenceActor;
activeSheet: string;
selections: readonly Range[];
sentAt: number;
}Ephemeral collaborator selection and activity update.API reference →[];}