UNPKG

@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
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 {};