loro-codemirror
Version:
A CodeMirror plugin for loro
52 lines (51 loc) • 1.68 kB
TypeScript
import { type EditorView, type PluginValue, type ViewUpdate } from "@codemirror/view";
import { EphemeralStore, LoroDoc, LoroText, type Subscription } from "loro-crdt";
import { type UserState, type CursorState } from "./awareness.ts";
import { StateField, type Extension } from "@codemirror/state";
export declare const ephemeralEffect: import("@codemirror/state").StateEffectType<EphemeralEffect>;
export declare const ephemeralStateField: StateField<{
remoteCursors: Map<string, {
anchor: number;
head?: number;
}>;
remoteUsers: Map<string, UserState | undefined>;
isCheckout: boolean;
}>;
type EphemeralEffect = {
type: "delete";
peer: string;
} | {
type: "cursor";
peer: string;
cursor: {
anchor: number;
head?: number;
};
} | {
type: "user";
peer: string;
user?: UserState;
} | {
type: "checkout";
checkout: boolean;
};
export type EphemeralState = {
[key: `${string}-cm-cursor`]: CursorState;
[key: `${string}-cm-user`]: UserState | undefined;
};
export declare const createCursorLayer: () => Extension;
export declare const createSelectionLayer: () => Extension;
export declare class EphemeralPlugin implements PluginValue {
view: EditorView;
doc: LoroDoc;
user: UserState;
ephemeralStore: EphemeralStore<EphemeralState>;
private getTextFromDoc;
sub: Subscription;
ephemeralSub: Subscription;
initUser: boolean;
constructor(view: EditorView, doc: LoroDoc, user: UserState, ephemeralStore: EphemeralStore<EphemeralState>, getTextFromDoc: (doc: LoroDoc) => LoroText);
update(update: ViewUpdate): void;
destroy(): void;
}
export {};