UNPKG

loro-codemirror

Version:
96 lines (95 loc) 3.24 kB
import { EditorView, type PluginValue, ViewUpdate, type LayerMarker } from "@codemirror/view"; import { Awareness, type AwarenessListener, LoroDoc, LoroText, type Subscription } from "loro-crdt"; import { type Extension, SelectionRange, StateField } from "@codemirror/state"; export declare const loroCursorTheme: Extension; export type CursorState = { anchor: Uint8Array; head?: Uint8Array; }; export type AwarenessState = { type: "update"; uid: string; cursor: CursorState; user?: UserState; } | { type: "delete"; uid: string; }; export type UserState = { name: string; colorClassName: string; }; export type CursorEffect = { type: "update"; peer: string; cursor: { anchor: number; head?: number; }; user?: UserState; } | { type: "delete"; peer: string; } | { type: "checkout"; checkout: boolean; }; export declare const remoteAwarenessAnnotation: import("@codemirror/state").AnnotationType<undefined>; export declare const remoteAwarenessEffect: import("@codemirror/state").StateEffectType<CursorEffect>; export declare const remoteAwarenessStateField: StateField<{ remoteCursors: Map<string, CursorPosition>; isCheckout: boolean; }>; export declare const createCursorLayer: () => Extension; export declare const createSelectionLayer: () => Extension; /** * Renders a blinking cursor to indicate the cursor of another user. */ export declare class RemoteCursorMarker implements LayerMarker { private left; private top; private height; private name; private colorClassName; constructor(left: number, top: number, height: number, name: string, colorClassName: string); draw(): HTMLElement; update(elt: HTMLElement): boolean; adjust(element: HTMLElement): void; eq(other: RemoteCursorMarker): boolean; static createCursor(view: EditorView, position: SelectionRange, displayName: string, colorClassName: string): RemoteCursorMarker[]; private static calculateAbsoluteCursorPosition; } export interface CursorPosition { cursor: { anchor: number; head?: number; }; user?: UserState; } /** * @deprecated Use EphemeralPlugin instead */ export declare class AwarenessPlugin implements PluginValue { view: EditorView; doc: LoroDoc; user: UserState; awareness: Awareness<AwarenessState>; private getUserId; private getTextFromDoc; sub: Subscription; constructor(view: EditorView, doc: LoroDoc, user: UserState, awareness: Awareness<AwarenessState>, getUserId: (() => string) | undefined, getTextFromDoc: (doc: LoroDoc) => LoroText); update(update: ViewUpdate): void; destroy(): void; } export declare class RemoteAwarenessPlugin implements PluginValue { view: EditorView; doc: LoroDoc; awareness: Awareness<AwarenessState>; _awarenessListener?: AwarenessListener; constructor(view: EditorView, doc: LoroDoc, awareness: Awareness<AwarenessState>); destroy(): void; } export declare const getCursorState: (doc: LoroDoc, anchor: number, head: number | undefined, getTextFromDoc: (doc: LoroDoc) => LoroText) => { anchor: Uint8Array<ArrayBufferLike>; head: Uint8Array<ArrayBufferLike> | undefined; };