@textbus/collaborate
Version:
Textbus is a rich text editor and framework that is highly customizable and extensible to achieve rich wysiwyg effects.
85 lines (84 loc) • 2.83 kB
TypeScript
import { Observable } from '@tanbo/stream';
import { Component, Registry, Scheduler, Selection, Slot, AbstractSelection } from '@textbus/core';
import { AbstractType, Doc as YDoc, Map as YMap, RelativePosition, Text as YText } from 'yjs';
import { SubModelLoader } from './sub-model-loader';
export interface RelativePositionRecord {
doc: YDoc;
position: RelativePosition;
}
export interface CursorPosition {
anchor: RelativePositionRecord;
focus: RelativePositionRecord;
}
export interface CollaborateHistorySelectionPosition {
before: CursorPosition | null;
after: CursorPosition | null;
}
declare class SlotMap {
private slotAndYTextMap;
private yTextAndSlotMap;
set(key: Slot, value: YText): void;
set(key: YText, value: Slot): void;
get(key: Slot): YText | null;
get(key: YText): Slot | null;
delete(key: Slot | YText): void;
}
export interface SubModelLoaded {
yType: AbstractType<any>;
yDoc: YDoc;
}
export declare class Collaborate {
private scheduler;
private registry;
private selection;
private subModelLoader;
yDoc: YDoc;
slotMap: SlotMap;
onAddSubModel: Observable<SubModelLoaded>;
private subscriptions;
private updateFromRemote;
private addSubModelEvent;
private updateRemoteActions;
private noRecord;
constructor(scheduler: Scheduler, registry: Registry, selection: Selection, subModelLoader: SubModelLoader);
syncRootComponent(yDoc: YDoc, sharedComponent: YMap<any>, localComponent: Component<any>): void;
syncRootSlot(yDoc: YDoc, sharedSlot: YText, localSlot: Slot): void;
getAbstractSelection(position: CursorPosition): AbstractSelection | null;
getRelativeCursorLocation(): CursorPosition | null;
restoreCursorPosition(position: CursorPosition | null): void;
private initSyncEvent;
private syncComponent;
private syncSlot;
destroy(): void;
private syncSharedMapToLocalMap;
private createLocalMapBySharedMap;
private createLocalArrayBySharedArray;
private syncLocalMapToSharedMap;
private createSharedMapByLocalMap;
private createSharedArrayByLocalArray;
private createSharedSlotByLocalSlot;
private initSharedSlotByLocalSlot;
private createLocalSlotBySharedSlot;
private initLocalSlotBySharedSlot;
private createSharedModelByLocalModel;
private createLocalModelBySharedByModel;
private createSharedComponentByLocalComponent;
private createLocalComponentBySharedComponent;
/**
* 双向同步数组
* @param sharedArray
* @param localArray
* @private
*/
private syncArray;
/**
* 双向同步对象
* @param sharedObject
* @param localObject
* @private
*/
private syncObject;
private runLocalUpdate;
private runRemoteUpdate;
}
export {};