@textbus/collaborate 2.0.0-beta.1 → 2.0.0-beta.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/{collab/collaborate-cursor.d.ts → collaborate-cursor.d.ts} +10 -5
 - package/bundles/collaborate-cursor.js +260 -0
 - package/bundles/collaborate.d.ts +5 -5
 - package/bundles/collaborate.js +76 -43
 - package/bundles/public-api.d.ts +3 -1
 - package/bundles/public-api.js +15 -2
 - package/bundles/unknown.component.d.ts +1 -0
 - package/bundles/unknown.component.js +22 -0
 - package/package.json +6 -6
 - package/src/{collab/collaborate-cursor.ts → collaborate-cursor.ts} +71 -52
 - package/src/collaborate.ts +80 -52
 - package/src/public-api.ts +17 -1
 - package/src/unknown.component.ts +22 -0
 - package/bundles/collab/_api.d.ts +0 -1
 - package/bundles/collab/_api.js +0 -2
 - package/bundles/collab/collaborate-cursor.js +0 -245
 - package/src/collab/_api.ts +0 -1
 
| 
         @@ -5,29 +5,34 @@ export interface RemoteSelection { 
     | 
|
| 
       5 
5 
     | 
    
         
             
                username: string;
         
     | 
| 
       6 
6 
     | 
    
         
             
                paths: SelectionPaths;
         
     | 
| 
       7 
7 
     | 
    
         
             
            }
         
     | 
| 
       8 
     | 
    
         
            -
            export interface  
     | 
| 
       9 
     | 
    
         
            -
                color: string;
         
     | 
| 
       10 
     | 
    
         
            -
                username: string;
         
     | 
| 
      
 8 
     | 
    
         
            +
            export interface Rect {
         
     | 
| 
       11 
9 
     | 
    
         
             
                x: number;
         
     | 
| 
       12 
10 
     | 
    
         
             
                y: number;
         
     | 
| 
       13 
11 
     | 
    
         
             
                width: number;
         
     | 
| 
       14 
12 
     | 
    
         
             
                height: number;
         
     | 
| 
       15 
13 
     | 
    
         
             
            }
         
     | 
| 
      
 14 
     | 
    
         
            +
            export interface SelectionRect extends Rect {
         
     | 
| 
      
 15 
     | 
    
         
            +
                color: string;
         
     | 
| 
      
 16 
     | 
    
         
            +
                username: string;
         
     | 
| 
      
 17 
     | 
    
         
            +
            }
         
     | 
| 
       16 
18 
     | 
    
         
             
            export interface RemoteSelectionCursor {
         
     | 
| 
       17 
19 
     | 
    
         
             
                cursor: HTMLElement;
         
     | 
| 
       18 
20 
     | 
    
         
             
                anchor: HTMLElement;
         
     | 
| 
       19 
21 
     | 
    
         
             
                userTip: HTMLElement;
         
     | 
| 
       20 
22 
     | 
    
         
             
            }
         
     | 
| 
      
 23 
     | 
    
         
            +
            export declare abstract class CollaborateCursorAwarenessDelegate {
         
     | 
| 
      
 24 
     | 
    
         
            +
                abstract getRects(selection: Selection, nativeRange: Range): false | Rect[];
         
     | 
| 
      
 25 
     | 
    
         
            +
            }
         
     | 
| 
       21 
26 
     | 
    
         
             
            export declare class CollaborateCursor {
         
     | 
| 
       22 
27 
     | 
    
         
             
                private container;
         
     | 
| 
       23 
     | 
    
         
            -
                private  
     | 
| 
      
 28 
     | 
    
         
            +
                private awarenessDelegate;
         
     | 
| 
       24 
29 
     | 
    
         
             
                private nativeSelection;
         
     | 
| 
       25 
30 
     | 
    
         
             
                private selection;
         
     | 
| 
       26 
31 
     | 
    
         
             
                private canvas;
         
     | 
| 
       27 
32 
     | 
    
         
             
                private context;
         
     | 
| 
       28 
33 
     | 
    
         
             
                private tooltips;
         
     | 
| 
       29 
34 
     | 
    
         
             
                private onRectsChange;
         
     | 
| 
       30 
     | 
    
         
            -
                constructor(container: HTMLElement,  
     | 
| 
      
 35 
     | 
    
         
            +
                constructor(container: HTMLElement, awarenessDelegate: CollaborateCursorAwarenessDelegate, nativeSelection: SelectionBridge, selection: Selection);
         
     | 
| 
       31 
36 
     | 
    
         
             
                draw(paths: RemoteSelection[]): void;
         
     | 
| 
       32 
37 
     | 
    
         
             
                private drawUserCursor;
         
     | 
| 
       33 
38 
     | 
    
         
             
                private getUserCursor;
         
     | 
| 
         @@ -0,0 +1,260 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
         
     | 
| 
      
 2 
     | 
    
         
            +
                var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
         
     | 
| 
      
 3 
     | 
    
         
            +
                if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
         
     | 
| 
      
 4 
     | 
    
         
            +
                else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
         
     | 
| 
      
 5 
     | 
    
         
            +
                return c > 3 && r && Object.defineProperty(target, key, r), r;
         
     | 
| 
      
 6 
     | 
    
         
            +
            };
         
     | 
| 
      
 7 
     | 
    
         
            +
            var __metadata = (this && this.__metadata) || function (k, v) {
         
     | 
| 
      
 8 
     | 
    
         
            +
                if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
         
     | 
| 
      
 9 
     | 
    
         
            +
            };
         
     | 
| 
      
 10 
     | 
    
         
            +
            var __param = (this && this.__param) || function (paramIndex, decorator) {
         
     | 
| 
      
 11 
     | 
    
         
            +
                return function (target, key) { decorator(target, key, paramIndex); }
         
     | 
| 
      
 12 
     | 
    
         
            +
            };
         
     | 
| 
      
 13 
     | 
    
         
            +
            import { Inject, Injectable, Optional } from '@tanbo/di';
         
     | 
| 
      
 14 
     | 
    
         
            +
            import { createElement, EDITOR_CONTAINER, getLayoutRectByRange, SelectionBridge } from '@textbus/browser';
         
     | 
| 
      
 15 
     | 
    
         
            +
            import { Selection } from '@textbus/core';
         
     | 
| 
      
 16 
     | 
    
         
            +
            import { Subject } from '@tanbo/stream';
         
     | 
| 
      
 17 
     | 
    
         
            +
            export class CollaborateCursorAwarenessDelegate {
         
     | 
| 
      
 18 
     | 
    
         
            +
            }
         
     | 
| 
      
 19 
     | 
    
         
            +
            let CollaborateCursor = class CollaborateCursor {
         
     | 
| 
      
 20 
     | 
    
         
            +
                constructor(container, awarenessDelegate, nativeSelection, selection) {
         
     | 
| 
      
 21 
     | 
    
         
            +
                    Object.defineProperty(this, "container", {
         
     | 
| 
      
 22 
     | 
    
         
            +
                        enumerable: true,
         
     | 
| 
      
 23 
     | 
    
         
            +
                        configurable: true,
         
     | 
| 
      
 24 
     | 
    
         
            +
                        writable: true,
         
     | 
| 
      
 25 
     | 
    
         
            +
                        value: container
         
     | 
| 
      
 26 
     | 
    
         
            +
                    });
         
     | 
| 
      
 27 
     | 
    
         
            +
                    Object.defineProperty(this, "awarenessDelegate", {
         
     | 
| 
      
 28 
     | 
    
         
            +
                        enumerable: true,
         
     | 
| 
      
 29 
     | 
    
         
            +
                        configurable: true,
         
     | 
| 
      
 30 
     | 
    
         
            +
                        writable: true,
         
     | 
| 
      
 31 
     | 
    
         
            +
                        value: awarenessDelegate
         
     | 
| 
      
 32 
     | 
    
         
            +
                    });
         
     | 
| 
      
 33 
     | 
    
         
            +
                    Object.defineProperty(this, "nativeSelection", {
         
     | 
| 
      
 34 
     | 
    
         
            +
                        enumerable: true,
         
     | 
| 
      
 35 
     | 
    
         
            +
                        configurable: true,
         
     | 
| 
      
 36 
     | 
    
         
            +
                        writable: true,
         
     | 
| 
      
 37 
     | 
    
         
            +
                        value: nativeSelection
         
     | 
| 
      
 38 
     | 
    
         
            +
                    });
         
     | 
| 
      
 39 
     | 
    
         
            +
                    Object.defineProperty(this, "selection", {
         
     | 
| 
      
 40 
     | 
    
         
            +
                        enumerable: true,
         
     | 
| 
      
 41 
     | 
    
         
            +
                        configurable: true,
         
     | 
| 
      
 42 
     | 
    
         
            +
                        writable: true,
         
     | 
| 
      
 43 
     | 
    
         
            +
                        value: selection
         
     | 
| 
      
 44 
     | 
    
         
            +
                    });
         
     | 
| 
      
 45 
     | 
    
         
            +
                    Object.defineProperty(this, "canvas", {
         
     | 
| 
      
 46 
     | 
    
         
            +
                        enumerable: true,
         
     | 
| 
      
 47 
     | 
    
         
            +
                        configurable: true,
         
     | 
| 
      
 48 
     | 
    
         
            +
                        writable: true,
         
     | 
| 
      
 49 
     | 
    
         
            +
                        value: createElement('canvas', {
         
     | 
| 
      
 50 
     | 
    
         
            +
                            styles: {
         
     | 
| 
      
 51 
     | 
    
         
            +
                                position: 'absolute',
         
     | 
| 
      
 52 
     | 
    
         
            +
                                opacity: 0.5,
         
     | 
| 
      
 53 
     | 
    
         
            +
                                left: 0,
         
     | 
| 
      
 54 
     | 
    
         
            +
                                top: 0,
         
     | 
| 
      
 55 
     | 
    
         
            +
                                width: '100%',
         
     | 
| 
      
 56 
     | 
    
         
            +
                                height: '100%',
         
     | 
| 
      
 57 
     | 
    
         
            +
                                pointerEvents: 'none'
         
     | 
| 
      
 58 
     | 
    
         
            +
                            }
         
     | 
| 
      
 59 
     | 
    
         
            +
                        })
         
     | 
| 
      
 60 
     | 
    
         
            +
                    });
         
     | 
| 
      
 61 
     | 
    
         
            +
                    Object.defineProperty(this, "context", {
         
     | 
| 
      
 62 
     | 
    
         
            +
                        enumerable: true,
         
     | 
| 
      
 63 
     | 
    
         
            +
                        configurable: true,
         
     | 
| 
      
 64 
     | 
    
         
            +
                        writable: true,
         
     | 
| 
      
 65 
     | 
    
         
            +
                        value: this.canvas.getContext('2d')
         
     | 
| 
      
 66 
     | 
    
         
            +
                    });
         
     | 
| 
      
 67 
     | 
    
         
            +
                    Object.defineProperty(this, "tooltips", {
         
     | 
| 
      
 68 
     | 
    
         
            +
                        enumerable: true,
         
     | 
| 
      
 69 
     | 
    
         
            +
                        configurable: true,
         
     | 
| 
      
 70 
     | 
    
         
            +
                        writable: true,
         
     | 
| 
      
 71 
     | 
    
         
            +
                        value: createElement('div', {
         
     | 
| 
      
 72 
     | 
    
         
            +
                            styles: {
         
     | 
| 
      
 73 
     | 
    
         
            +
                                position: 'absolute',
         
     | 
| 
      
 74 
     | 
    
         
            +
                                left: 0,
         
     | 
| 
      
 75 
     | 
    
         
            +
                                top: 0,
         
     | 
| 
      
 76 
     | 
    
         
            +
                                width: '100%',
         
     | 
| 
      
 77 
     | 
    
         
            +
                                height: '100%',
         
     | 
| 
      
 78 
     | 
    
         
            +
                                pointerEvents: 'none',
         
     | 
| 
      
 79 
     | 
    
         
            +
                                fontSize: '12px',
         
     | 
| 
      
 80 
     | 
    
         
            +
                                zIndex: 10
         
     | 
| 
      
 81 
     | 
    
         
            +
                            }
         
     | 
| 
      
 82 
     | 
    
         
            +
                        })
         
     | 
| 
      
 83 
     | 
    
         
            +
                    });
         
     | 
| 
      
 84 
     | 
    
         
            +
                    Object.defineProperty(this, "onRectsChange", {
         
     | 
| 
      
 85 
     | 
    
         
            +
                        enumerable: true,
         
     | 
| 
      
 86 
     | 
    
         
            +
                        configurable: true,
         
     | 
| 
      
 87 
     | 
    
         
            +
                        writable: true,
         
     | 
| 
      
 88 
     | 
    
         
            +
                        value: new Subject()
         
     | 
| 
      
 89 
     | 
    
         
            +
                    });
         
     | 
| 
      
 90 
     | 
    
         
            +
                    container.prepend(this.canvas, this.tooltips);
         
     | 
| 
      
 91 
     | 
    
         
            +
                    this.onRectsChange.subscribe(rects => {
         
     | 
| 
      
 92 
     | 
    
         
            +
                        for (const rect of rects) {
         
     | 
| 
      
 93 
     | 
    
         
            +
                            this.context.fillStyle = rect.color;
         
     | 
| 
      
 94 
     | 
    
         
            +
                            this.context.beginPath();
         
     | 
| 
      
 95 
     | 
    
         
            +
                            this.context.rect(rect.x, rect.y, rect.width, rect.height);
         
     | 
| 
      
 96 
     | 
    
         
            +
                            this.context.fill();
         
     | 
| 
      
 97 
     | 
    
         
            +
                            this.context.closePath();
         
     | 
| 
      
 98 
     | 
    
         
            +
                        }
         
     | 
| 
      
 99 
     | 
    
         
            +
                    });
         
     | 
| 
      
 100 
     | 
    
         
            +
                }
         
     | 
| 
      
 101 
     | 
    
         
            +
                draw(paths) {
         
     | 
| 
      
 102 
     | 
    
         
            +
                    const containerRect = this.container.getBoundingClientRect();
         
     | 
| 
      
 103 
     | 
    
         
            +
                    this.canvas.width = containerRect.width;
         
     | 
| 
      
 104 
     | 
    
         
            +
                    this.canvas.height = containerRect.height;
         
     | 
| 
      
 105 
     | 
    
         
            +
                    this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
         
     | 
| 
      
 106 
     | 
    
         
            +
                    const users = [];
         
     | 
| 
      
 107 
     | 
    
         
            +
                    paths.filter(i => {
         
     | 
| 
      
 108 
     | 
    
         
            +
                        return i.paths.anchor.length && i.paths.focus.length;
         
     | 
| 
      
 109 
     | 
    
         
            +
                    }).forEach(item => {
         
     | 
| 
      
 110 
     | 
    
         
            +
                        const anchorOffset = item.paths.anchor.pop();
         
     | 
| 
      
 111 
     | 
    
         
            +
                        const anchorSlot = this.selection.findSlotByPaths(item.paths.anchor);
         
     | 
| 
      
 112 
     | 
    
         
            +
                        const focusOffset = item.paths.focus.pop();
         
     | 
| 
      
 113 
     | 
    
         
            +
                        const focusSlot = this.selection.findSlotByPaths(item.paths.focus);
         
     | 
| 
      
 114 
     | 
    
         
            +
                        if (!anchorSlot || !focusSlot) {
         
     | 
| 
      
 115 
     | 
    
         
            +
                            return;
         
     | 
| 
      
 116 
     | 
    
         
            +
                        }
         
     | 
| 
      
 117 
     | 
    
         
            +
                        const { focus, anchor } = this.nativeSelection.getPositionByRange({
         
     | 
| 
      
 118 
     | 
    
         
            +
                            focusOffset,
         
     | 
| 
      
 119 
     | 
    
         
            +
                            anchorOffset,
         
     | 
| 
      
 120 
     | 
    
         
            +
                            focusSlot,
         
     | 
| 
      
 121 
     | 
    
         
            +
                            anchorSlot
         
     | 
| 
      
 122 
     | 
    
         
            +
                        });
         
     | 
| 
      
 123 
     | 
    
         
            +
                        if (!focus || !anchor) {
         
     | 
| 
      
 124 
     | 
    
         
            +
                            return;
         
     | 
| 
      
 125 
     | 
    
         
            +
                        }
         
     | 
| 
      
 126 
     | 
    
         
            +
                        const nativeRange = document.createRange();
         
     | 
| 
      
 127 
     | 
    
         
            +
                        nativeRange.setStart(anchor.node, anchor.offset);
         
     | 
| 
      
 128 
     | 
    
         
            +
                        nativeRange.setEnd(focus.node, focus.offset);
         
     | 
| 
      
 129 
     | 
    
         
            +
                        if ((anchor.node !== focus.node || anchor.offset !== focus.offset) && nativeRange.collapsed) {
         
     | 
| 
      
 130 
     | 
    
         
            +
                            nativeRange.setStart(focus.node, focus.offset);
         
     | 
| 
      
 131 
     | 
    
         
            +
                            nativeRange.setEnd(anchor.node, anchor.offset);
         
     | 
| 
      
 132 
     | 
    
         
            +
                        }
         
     | 
| 
      
 133 
     | 
    
         
            +
                        let rects = false;
         
     | 
| 
      
 134 
     | 
    
         
            +
                        if (this.awarenessDelegate) {
         
     | 
| 
      
 135 
     | 
    
         
            +
                            rects = this.awarenessDelegate.getRects(this.selection, nativeRange);
         
     | 
| 
      
 136 
     | 
    
         
            +
                        }
         
     | 
| 
      
 137 
     | 
    
         
            +
                        if (!rects) {
         
     | 
| 
      
 138 
     | 
    
         
            +
                            rects = nativeRange.getClientRects();
         
     | 
| 
      
 139 
     | 
    
         
            +
                        }
         
     | 
| 
      
 140 
     | 
    
         
            +
                        const selectionRects = [];
         
     | 
| 
      
 141 
     | 
    
         
            +
                        for (let i = rects.length - 1; i >= 0; i--) {
         
     | 
| 
      
 142 
     | 
    
         
            +
                            const rect = rects[i];
         
     | 
| 
      
 143 
     | 
    
         
            +
                            selectionRects.push({
         
     | 
| 
      
 144 
     | 
    
         
            +
                                color: item.color,
         
     | 
| 
      
 145 
     | 
    
         
            +
                                username: item.username,
         
     | 
| 
      
 146 
     | 
    
         
            +
                                x: rect.x - containerRect.x,
         
     | 
| 
      
 147 
     | 
    
         
            +
                                y: rect.y - containerRect.y,
         
     | 
| 
      
 148 
     | 
    
         
            +
                                width: rect.width,
         
     | 
| 
      
 149 
     | 
    
         
            +
                                height: rect.height,
         
     | 
| 
      
 150 
     | 
    
         
            +
                            });
         
     | 
| 
      
 151 
     | 
    
         
            +
                        }
         
     | 
| 
      
 152 
     | 
    
         
            +
                        this.onRectsChange.next(selectionRects);
         
     | 
| 
      
 153 
     | 
    
         
            +
                        const cursorRange = nativeRange.cloneRange();
         
     | 
| 
      
 154 
     | 
    
         
            +
                        cursorRange.setStart(focus.node, focus.offset);
         
     | 
| 
      
 155 
     | 
    
         
            +
                        cursorRange.collapse(true);
         
     | 
| 
      
 156 
     | 
    
         
            +
                        const cursorRect = getLayoutRectByRange(cursorRange);
         
     | 
| 
      
 157 
     | 
    
         
            +
                        users.push({
         
     | 
| 
      
 158 
     | 
    
         
            +
                            username: item.username,
         
     | 
| 
      
 159 
     | 
    
         
            +
                            color: item.color,
         
     | 
| 
      
 160 
     | 
    
         
            +
                            x: cursorRect.x - containerRect.x,
         
     | 
| 
      
 161 
     | 
    
         
            +
                            y: cursorRect.y - containerRect.y,
         
     | 
| 
      
 162 
     | 
    
         
            +
                            width: 2,
         
     | 
| 
      
 163 
     | 
    
         
            +
                            height: cursorRect.height
         
     | 
| 
      
 164 
     | 
    
         
            +
                        });
         
     | 
| 
      
 165 
     | 
    
         
            +
                    });
         
     | 
| 
      
 166 
     | 
    
         
            +
                    this.drawUserCursor(users);
         
     | 
| 
      
 167 
     | 
    
         
            +
                }
         
     | 
| 
      
 168 
     | 
    
         
            +
                drawUserCursor(rects) {
         
     | 
| 
      
 169 
     | 
    
         
            +
                    for (let i = 0; i < rects.length; i++) {
         
     | 
| 
      
 170 
     | 
    
         
            +
                        const rect = rects[i];
         
     | 
| 
      
 171 
     | 
    
         
            +
                        const { cursor, userTip, anchor } = this.getUserCursor(i);
         
     | 
| 
      
 172 
     | 
    
         
            +
                        Object.assign(cursor.style, {
         
     | 
| 
      
 173 
     | 
    
         
            +
                            left: rect.x + 'px',
         
     | 
| 
      
 174 
     | 
    
         
            +
                            top: rect.y + 'px',
         
     | 
| 
      
 175 
     | 
    
         
            +
                            width: rect.width + 'px',
         
     | 
| 
      
 176 
     | 
    
         
            +
                            height: rect.height + 'px',
         
     | 
| 
      
 177 
     | 
    
         
            +
                            background: rect.color,
         
     | 
| 
      
 178 
     | 
    
         
            +
                            display: 'block'
         
     | 
| 
      
 179 
     | 
    
         
            +
                        });
         
     | 
| 
      
 180 
     | 
    
         
            +
                        anchor.style.background = rect.color;
         
     | 
| 
      
 181 
     | 
    
         
            +
                        userTip.innerText = rect.username;
         
     | 
| 
      
 182 
     | 
    
         
            +
                        userTip.style.background = rect.color;
         
     | 
| 
      
 183 
     | 
    
         
            +
                    }
         
     | 
| 
      
 184 
     | 
    
         
            +
                    for (let i = rects.length; i < this.tooltips.children.length; i++) {
         
     | 
| 
      
 185 
     | 
    
         
            +
                        this.tooltips.removeChild(this.tooltips.children[i]);
         
     | 
| 
      
 186 
     | 
    
         
            +
                    }
         
     | 
| 
      
 187 
     | 
    
         
            +
                }
         
     | 
| 
      
 188 
     | 
    
         
            +
                getUserCursor(index) {
         
     | 
| 
      
 189 
     | 
    
         
            +
                    let child = this.tooltips.children[index];
         
     | 
| 
      
 190 
     | 
    
         
            +
                    if (child) {
         
     | 
| 
      
 191 
     | 
    
         
            +
                        const anchor = child.children[0];
         
     | 
| 
      
 192 
     | 
    
         
            +
                        return {
         
     | 
| 
      
 193 
     | 
    
         
            +
                            cursor: child,
         
     | 
| 
      
 194 
     | 
    
         
            +
                            anchor,
         
     | 
| 
      
 195 
     | 
    
         
            +
                            userTip: anchor.children[0]
         
     | 
| 
      
 196 
     | 
    
         
            +
                        };
         
     | 
| 
      
 197 
     | 
    
         
            +
                    }
         
     | 
| 
      
 198 
     | 
    
         
            +
                    const userTip = createElement('span', {
         
     | 
| 
      
 199 
     | 
    
         
            +
                        styles: {
         
     | 
| 
      
 200 
     | 
    
         
            +
                            position: 'absolute',
         
     | 
| 
      
 201 
     | 
    
         
            +
                            display: 'none',
         
     | 
| 
      
 202 
     | 
    
         
            +
                            left: '50%',
         
     | 
| 
      
 203 
     | 
    
         
            +
                            transform: 'translateX(-50%)',
         
     | 
| 
      
 204 
     | 
    
         
            +
                            marginBottom: '2px',
         
     | 
| 
      
 205 
     | 
    
         
            +
                            bottom: '100%',
         
     | 
| 
      
 206 
     | 
    
         
            +
                            whiteSpace: 'nowrap',
         
     | 
| 
      
 207 
     | 
    
         
            +
                            color: '#fff',
         
     | 
| 
      
 208 
     | 
    
         
            +
                            boxShadow: '0 1px 2px rgba(0,0,0,.1)',
         
     | 
| 
      
 209 
     | 
    
         
            +
                            borderRadius: '3px',
         
     | 
| 
      
 210 
     | 
    
         
            +
                            padding: '3px 5px',
         
     | 
| 
      
 211 
     | 
    
         
            +
                            pointerEvents: 'none',
         
     | 
| 
      
 212 
     | 
    
         
            +
                        }
         
     | 
| 
      
 213 
     | 
    
         
            +
                    });
         
     | 
| 
      
 214 
     | 
    
         
            +
                    const anchor = createElement('span', {
         
     | 
| 
      
 215 
     | 
    
         
            +
                        styles: {
         
     | 
| 
      
 216 
     | 
    
         
            +
                            position: 'absolute',
         
     | 
| 
      
 217 
     | 
    
         
            +
                            top: '-2px',
         
     | 
| 
      
 218 
     | 
    
         
            +
                            left: '-2px',
         
     | 
| 
      
 219 
     | 
    
         
            +
                            width: '6px',
         
     | 
| 
      
 220 
     | 
    
         
            +
                            height: '6px',
         
     | 
| 
      
 221 
     | 
    
         
            +
                            pointerEvents: 'auto',
         
     | 
| 
      
 222 
     | 
    
         
            +
                            pointer: 'cursor',
         
     | 
| 
      
 223 
     | 
    
         
            +
                        },
         
     | 
| 
      
 224 
     | 
    
         
            +
                        children: [userTip],
         
     | 
| 
      
 225 
     | 
    
         
            +
                        on: {
         
     | 
| 
      
 226 
     | 
    
         
            +
                            mouseenter() {
         
     | 
| 
      
 227 
     | 
    
         
            +
                                userTip.style.display = 'block';
         
     | 
| 
      
 228 
     | 
    
         
            +
                            },
         
     | 
| 
      
 229 
     | 
    
         
            +
                            mouseleave() {
         
     | 
| 
      
 230 
     | 
    
         
            +
                                userTip.style.display = 'none';
         
     | 
| 
      
 231 
     | 
    
         
            +
                            }
         
     | 
| 
      
 232 
     | 
    
         
            +
                        }
         
     | 
| 
      
 233 
     | 
    
         
            +
                    });
         
     | 
| 
      
 234 
     | 
    
         
            +
                    child = createElement('span', {
         
     | 
| 
      
 235 
     | 
    
         
            +
                        styles: {
         
     | 
| 
      
 236 
     | 
    
         
            +
                            position: 'absolute',
         
     | 
| 
      
 237 
     | 
    
         
            +
                        },
         
     | 
| 
      
 238 
     | 
    
         
            +
                        children: [
         
     | 
| 
      
 239 
     | 
    
         
            +
                            anchor
         
     | 
| 
      
 240 
     | 
    
         
            +
                        ]
         
     | 
| 
      
 241 
     | 
    
         
            +
                    });
         
     | 
| 
      
 242 
     | 
    
         
            +
                    this.tooltips.append(child);
         
     | 
| 
      
 243 
     | 
    
         
            +
                    return {
         
     | 
| 
      
 244 
     | 
    
         
            +
                        cursor: child,
         
     | 
| 
      
 245 
     | 
    
         
            +
                        anchor,
         
     | 
| 
      
 246 
     | 
    
         
            +
                        userTip
         
     | 
| 
      
 247 
     | 
    
         
            +
                    };
         
     | 
| 
      
 248 
     | 
    
         
            +
                }
         
     | 
| 
      
 249 
     | 
    
         
            +
            };
         
     | 
| 
      
 250 
     | 
    
         
            +
            CollaborateCursor = __decorate([
         
     | 
| 
      
 251 
     | 
    
         
            +
                Injectable(),
         
     | 
| 
      
 252 
     | 
    
         
            +
                __param(0, Inject(EDITOR_CONTAINER)),
         
     | 
| 
      
 253 
     | 
    
         
            +
                __param(1, Optional()),
         
     | 
| 
      
 254 
     | 
    
         
            +
                __metadata("design:paramtypes", [HTMLElement,
         
     | 
| 
      
 255 
     | 
    
         
            +
                    CollaborateCursorAwarenessDelegate,
         
     | 
| 
      
 256 
     | 
    
         
            +
                    SelectionBridge,
         
     | 
| 
      
 257 
     | 
    
         
            +
                    Selection])
         
     | 
| 
      
 258 
     | 
    
         
            +
            ], CollaborateCursor);
         
     | 
| 
      
 259 
     | 
    
         
            +
            export { CollaborateCursor };
         
     | 
| 
      
 260 
     | 
    
         
            +
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFib3JhdGUtY3Vyc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbGxhYm9yYXRlLWN1cnNvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDeEQsT0FBTyxFQUNMLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDaEIsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QixPQUFPLEVBQUUsU0FBUyxFQUFrQixNQUFNLGVBQWUsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBMEJ2QyxNQUFNLE9BQWdCLGtDQUFrQztDQUV2RDtBQUdELElBQWEsaUJBQWlCLEdBQTlCLE1BQWEsaUJBQWlCO0lBNEI1QixZQUE4QyxTQUFzQixFQUNwQyxpQkFBcUQsRUFDakUsZUFBZ0MsRUFDaEMsU0FBb0I7Ozs7O21CQUhNOzs7Ozs7bUJBQ2Q7Ozs7OzttQkFDWjs7Ozs7O21CQUNBOztRQTlCcEI7Ozs7bUJBQWlCLGFBQWEsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3ZDLE1BQU0sRUFBRTtvQkFDTixRQUFRLEVBQUUsVUFBVTtvQkFDcEIsT0FBTyxFQUFFLEdBQUc7b0JBQ1osSUFBSSxFQUFFLENBQUM7b0JBQ1AsR0FBRyxFQUFFLENBQUM7b0JBQ04sS0FBSyxFQUFFLE1BQU07b0JBQ2IsTUFBTSxFQUFFLE1BQU07b0JBQ2QsYUFBYSxFQUFFLE1BQU07aUJBQ3RCO2FBQ0YsQ0FBc0I7V0FBQTtRQUN2Qjs7OzttQkFBa0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFFO1dBQUE7UUFDL0M7Ozs7bUJBQW1CLGFBQWEsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3RDLE1BQU0sRUFBRTtvQkFDTixRQUFRLEVBQUUsVUFBVTtvQkFDcEIsSUFBSSxF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QyxDQUFBO1FBQ0YsS0FBSyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDNUIsTUFBTSxFQUFFO2dCQUNOLFFBQVEsRUFBRSxVQUFVO2FBQ3JCO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLE1BQU07YUFDUDtTQUNGLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzNCLE9BQU87WUFDTCxNQUFNLEVBQUUsS0FBSztZQUNiLE1BQU07WUFDTixPQUFPO1NBQ1IsQ0FBQTtJQUNILENBQUM7Q0FDRixDQUFBO0FBNU1ZLGlCQUFpQjtJQUQ3QixVQUFVLEVBQUU7SUE2QkUsV0FBQSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUN4QixXQUFBLFFBQVEsRUFBRSxDQUFBO3FDQURrQyxXQUFXO1FBQ2pCLGtDQUFrQztRQUNoRCxlQUFlO1FBQ3JCLFNBQVM7R0EvQjdCLGlCQUFpQixDQTRNN0I7U0E1TVksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0B0YW5iby9kaSdcbmltcG9ydCB7XG4gIGNyZWF0ZUVsZW1lbnQsXG4gIEVESVRPUl9DT05UQUlORVIsXG4gIGdldExheW91dFJlY3RCeVJhbmdlLFxuICBTZWxlY3Rpb25CcmlkZ2Vcbn0gZnJvbSAnQHRleHRidXMvYnJvd3NlcidcbmltcG9ydCB7IFNlbGVjdGlvbiwgU2VsZWN0aW9uUGF0aHMgfSBmcm9tICdAdGV4dGJ1cy9jb3JlJ1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ0B0YW5iby9zdHJlYW0nXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3RlU2VsZWN0aW9uIHtcbiAgY29sb3I6IHN0cmluZ1xuICB1c2VybmFtZTogc3RyaW5nXG4gIHBhdGhzOiBTZWxlY3Rpb25QYXRoc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY3Qge1xuICB4OiBudW1iZXJcbiAgeTogbnVtYmVyXG4gIHdpZHRoOiBudW1iZXJcbiAgaGVpZ2h0OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25SZWN0IGV4dGVuZHMgUmVjdCB7XG4gIGNvbG9yOiBzdHJpbmdcbiAgdXNlcm5hbWU6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbW90ZVNlbGVjdGlvbkN1cnNvciB7XG4gIGN1cnNvcjogSFRNTEVsZW1lbnRcbiAgYW5jaG9yOiBIVE1MRWxlbWVudFxuICB1c2VyVGlwOiBIVE1MRWxlbWVudFxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29sbGFib3JhdGVDdXJzb3JBd2FyZW5lc3NEZWxlZ2F0ZSB7XG4gIGFic3RyYWN0IGdldFJlY3RzKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBuYXRpdmVSYW5nZTogUmFuZ2UpOiBmYWxzZSB8IFJlY3RbXVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29sbGFib3JhdGVDdXJzb3Ige1xuICBwcml2YXRlIGNhbnZhcyA9IGNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycsIHtcbiAgICBzdHlsZXM6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgb3BhY2l0eTogMC41LFxuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMCxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJ1xuICAgIH1cbiAgfSkgYXMgSFRNTENhbnZhc0VsZW1lbnRcbiAgcHJpdmF0ZSBjb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKSFcbiAgcHJpdmF0ZSB0b29sdGlwcyA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIHtcbiAgICBzdHlsZXM6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMCxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgICB6SW5kZXg6IDEwXG4gICAgfVxuICB9KVxuXG4gIHByaXZhdGUgb25SZWN0c0NoYW5nZSA9IG5ldyBTdWJqZWN0PFNlbGVjdGlvblJlY3RbXT4oKVxuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoRURJVE9SX0NPTlRBSU5FUikgcHJpdmF0ZSBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGF3YXJlbmVzc0RlbGVnYXRlOiBDb2xsYWJvcmF0ZUN1cnNvckF3YXJlbmVzc0RlbGVnYXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIG5hdGl2ZVNlbGVjdGlvbjogU2VsZWN0aW9uQnJpZGdlLFxuICAgICAgICAgICAgICBwcml2YXRlIHNlbGVjdGlvbjogU2VsZWN0aW9uKSB7XG4gICAgY29udGFpbmVyLnByZXBlbmQodGhpcy5jYW52YXMsIHRoaXMudG9vbHRpcHMpXG4gICAgdGhpcy5vblJlY3RzQ2hhbmdlLnN1YnNjcmliZShyZWN0cyA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IHJlY3QuY29sb3JcbiAgICAgICAgdGhpcy5jb250ZXh0LmJlZ2luUGF0aCgpXG4gICAgICAgIHRoaXMuY29udGV4dC5yZWN0KHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdodClcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpbGwoKVxuICAgICAgICB0aGlzLmNvbnRleHQuY2xvc2VQYXRoKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZHJhdyhwYXRoczogUmVtb3RlU2VsZWN0aW9uW10pIHtcbiAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IGNvbnRhaW5lclJlY3Qud2lkdGhcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBjb250YWluZXJSZWN0LmhlaWdodFxuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodClcblxuICAgIGNvbnN0IHVzZXJzOiBTZWxlY3Rpb25SZWN0W10gPSBbXVxuXG5cbiAgICBwYXRocy5maWx0ZXIoaSA9PiB7XG4gICAgICByZXR1cm4gaS5wYXRocy5hbmNob3IubGVuZ3RoICYmIGkucGF0aHMuZm9jdXMubGVuZ3RoXG4gICAgfSkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IGFuY2hvck9mZnNldCA9IGl0ZW0ucGF0aHMuYW5jaG9yLnBvcCgpIVxuICAgICAgY29uc3QgYW5jaG9yU2xvdCA9IHRoaXMuc2VsZWN0aW9uLmZpbmRTbG90QnlQYXRocyhpdGVtLnBhdGhzLmFuY2hvcilcbiAgICAgIGNvbnN0IGZvY3VzT2Zmc2V0ID0gaXRlbS5wYXRocy5mb2N1cy5wb3AoKSFcbiAgICAgIGNvbnN0IGZvY3VzU2xvdCA9IHRoaXMuc2VsZWN0aW9uLmZpbmRTbG90QnlQYXRocyhpdGVtLnBhdGhzLmZvY3VzKVxuICAgICAgaWYgKCFhbmNob3JTbG90IHx8ICFmb2N1c1Nsb3QpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtmb2N1cywgYW5jaG9yfSA9IHRoaXMubmF0aXZlU2VsZWN0aW9uLmdldFBvc2l0aW9uQnlSYW5nZSh7XG4gICAgICAgIGZvY3VzT2Zmc2V0LFxuICAgICAgICBhbmNob3JPZmZzZXQsXG4gICAgICAgIGZvY3VzU2xvdCxcbiAgICAgICAgYW5jaG9yU2xvdFxuICAgICAgfSlcbiAgICAgIGlmICghZm9jdXMgfHwgIWFuY2hvcikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IG5hdGl2ZVJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgbmF0aXZlUmFuZ2Uuc2V0U3RhcnQoYW5jaG9yLm5vZGUsIGFuY2hvci5vZmZzZXQpXG4gICAgICBuYXRpdmVSYW5nZS5zZXRFbmQoZm9jdXMubm9kZSwgZm9jdXMub2Zmc2V0KVxuICAgICAgaWYgKChhbmNob3Iubm9kZSAhPT0gZm9jdXMubm9kZSB8fCBhbmNob3Iub2Zmc2V0ICE9PSBmb2N1cy5vZmZzZXQpICYmIG5hdGl2ZVJhbmdlLmNvbGxhcHNlZCkge1xuICAgICAgICBuYXRpdmVSYW5nZS5zZXRTdGFydChmb2N1cy5ub2RlLCBmb2N1cy5vZmZzZXQpXG4gICAgICAgIG5hdGl2ZVJhbmdlLnNldEVuZChhbmNob3Iubm9kZSwgYW5jaG9yLm9mZnNldClcbiAgICAgIH1cblxuICAgICAgbGV0IHJlY3RzOiBSZWN0W10gfCBET01SZWN0TGlzdCB8IGZhbHNlID0gZmFsc2VcbiAgICAgIGlmICh0aGlzLmF3YXJlbmVzc0RlbGVnYXRlKSB7XG4gICAgICAgIHJlY3RzID0gdGhpcy5hd2FyZW5lc3NEZWxlZ2F0ZS5nZXRSZWN0cyh0aGlzLnNlbGVjdGlvbiwgbmF0aXZlUmFuZ2UpXG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzKSB7XG4gICAgICAgIHJlY3RzID0gbmF0aXZlUmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKVxuICAgICAgfVxuICAgICAgY29uc3Qgc2VsZWN0aW9uUmVjdHM6IFNlbGVjdGlvblJlY3RbXSA9IFtdXG4gICAgICBmb3IgKGxldCBpID0gcmVjdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IHJlY3RzW2ldXG4gICAgICAgIHNlbGVjdGlvblJlY3RzLnB1c2goe1xuICAgICAgICAgIGNvbG9yOiBpdGVtLmNvbG9yLFxuICAgICAgICAgIHVzZXJuYW1lOiBpdGVtLnVzZXJuYW1lLFxuICAgICAgICAgIHg6IHJlY3QueCAtIGNvbnRhaW5lclJlY3QueCxcbiAgICAgICAgICB5OiByZWN0LnkgLSBjb250YWluZXJSZWN0LnksXG4gICAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMub25SZWN0c0NoYW5nZS5uZXh0KHNlbGVjdGlvblJlY3RzKVxuXG4gICAgICBjb25zdCBjdXJzb3JSYW5nZSA9IG5hdGl2ZVJhbmdlLmNsb25lUmFuZ2UoKVxuICAgICAgY3Vyc29yUmFuZ2Uuc2V0U3RhcnQoZm9jdXMubm9kZSwgZm9jdXMub2Zmc2V0KVxuICAgICAgY3Vyc29yUmFuZ2UuY29sbGFwc2UodHJ1ZSlcblxuICAgICAgY29uc3QgY3Vyc29yUmVjdCA9IGdldExheW91dFJlY3RCeVJhbmdlKGN1cnNvclJhbmdlKVxuXG4gICAgICB1c2Vycy5wdXNoKHtcbiAgICAgICAgdXNlcm5hbWU6IGl0ZW0udXNlcm5hbWUsXG4gICAgICAgIGNvbG9yOiBpdGVtLmNvbG9yLFxuICAgICAgICB4OiBjdXJzb3JSZWN0LnggLSBjb250YWluZXJSZWN0LngsXG4gICAgICAgIHk6IGN1cnNvclJlY3QueSAtIGNvbnRhaW5lclJlY3QueSxcbiAgICAgICAgd2lkdGg6IDIsXG4gICAgICAgIGhlaWdodDogY3Vyc29yUmVjdC5oZWlnaHRcbiAgICAgIH0pXG4gICAgfSlcbiAgICB0aGlzLmRyYXdVc2VyQ3Vyc29yKHVzZXJzKVxuICB9XG5cbiAgcHJpdmF0ZSBkcmF3VXNlckN1cnNvcihyZWN0czogU2VsZWN0aW9uUmVjdFtdKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVjdCA9IHJlY3RzW2ldXG4gICAgICBjb25zdCB7Y3Vyc29yLCB1c2VyVGlwLCBhbmNob3J9ID0gdGhpcy5nZXRVc2VyQ3Vyc29yKGkpXG4gICAgICBPYmplY3QuYXNzaWduKGN1cnNvci5zdHlsZSwge1xuICAgICAgICBsZWZ0OiByZWN0LnggKyAncHgnLFxuICAgICAgICB0b3A6IHJlY3QueSArICdweCcsXG4gICAgICAgIHdpZHRoOiByZWN0LndpZHRoICsgJ3B4JyxcbiAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodCArICdweCcsXG4gICAgICAgIGJhY2tncm91bmQ6IHJlY3QuY29sb3IsXG4gICAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICAgIH0pXG4gICAgICBhbmNob3Iuc3R5bGUuYmFja2dyb3VuZCA9IHJlY3QuY29sb3JcbiAgICAgIHVzZXJUaXAuaW5uZXJUZXh0ID0gcmVjdC51c2VybmFtZVxuICAgICAgdXNlclRpcC5zdHlsZS5iYWNrZ3JvdW5kID0gcmVjdC5jb2xvclxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSByZWN0cy5sZW5ndGg7IGkgPCB0aGlzLnRvb2x0aXBzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnRvb2x0aXBzLnJlbW92ZUNoaWxkKHRoaXMudG9vbHRpcHMuY2hpbGRyZW5baV0pXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRVc2VyQ3Vyc29yKGluZGV4OiBudW1iZXIpOiBSZW1vdGVTZWxlY3Rpb25DdXJzb3Ige1xuICAgIGxldCBjaGlsZDogSFRNTEVsZW1lbnQgPSB0aGlzLnRvb2x0aXBzLmNoaWxkcmVuW2luZGV4XSBhcyBIVE1MRWxlbWVudFxuICAgIGlmIChjaGlsZCkge1xuICAgICAgY29uc3QgYW5jaG9yID0gY2hpbGQuY2hpbGRyZW5bMF0gYXMgSFRNTEVsZW1lbnRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnNvcjogY2hpbGQsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgdXNlclRpcDogYW5jaG9yLmNoaWxkcmVuWzBdIGFzIEhUTUxFbGVtZW50XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHVzZXJUaXAgPSBjcmVhdGVFbGVtZW50KCdzcGFuJywge1xuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICBkaXNwbGF5OiAnbm9uZScsXG4gICAgICAgIGxlZnQ6ICc1MCUnLFxuICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKC01MCUpJyxcbiAgICAgICAgbWFyZ2luQm90dG9tOiAnMnB4JyxcbiAgICAgICAgYm90dG9tOiAnMTAwJScsXG4gICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICBib3hTaGFkb3c6ICcwIDFweCAycHggcmdiYSgwLDAsMCwuMSknLFxuICAgICAgICBib3JkZXJSYWRpdXM6ICczcHgnLFxuICAgICAgICBwYWRkaW5nOiAnM3B4IDVweCcsXG4gICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY29uc3QgYW5jaG9yID0gY3JlYXRlRWxlbWVudCgnc3BhbicsIHtcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgdG9wOiAnLTJweCcsXG4gICAgICAgIGxlZnQ6ICctMnB4JyxcbiAgICAgICAgd2lkdGg6ICc2cHgnLFxuICAgICAgICBoZWlnaHQ6ICc2cHgnLFxuICAgICAgICBwb2ludGVyRXZlbnRzOiAnYXV0bycsXG4gICAgICAgIHBvaW50ZXI6ICdjdXJzb3InLFxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbdXNlclRpcF0sXG4gICAgICBvbjoge1xuICAgICAgICBtb3VzZWVudGVyKCkge1xuICAgICAgICAgIHVzZXJUaXAuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgICAgICAgfSxcbiAgICAgICAgbW91c2VsZWF2ZSgpIHtcbiAgICAgICAgICB1c2VyVGlwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgY2hpbGQgPSBjcmVhdGVFbGVtZW50KCdzcGFuJywge1xuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIGFuY2hvclxuICAgICAgXVxuICAgIH0pXG4gICAgdGhpcy50b29sdGlwcy5hcHBlbmQoY2hpbGQpXG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnNvcjogY2hpbGQsXG4gICAgICBhbmNob3IsXG4gICAgICB1c2VyVGlwXG4gICAgfVxuICB9XG59XG4iXX0=
         
     | 
    
        package/bundles/collaborate.d.ts
    CHANGED
    
    | 
         @@ -1,12 +1,12 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            import { Observable } from '@tanbo/stream';
         
     | 
| 
       2 
     | 
    
         
            -
            import {  
     | 
| 
      
 2 
     | 
    
         
            +
            import { History, Registry, RootComponentRef, Scheduler, Selection, SelectionPaths, Starter, Translator } from '@textbus/core';
         
     | 
| 
       3 
3 
     | 
    
         
             
            import { Doc as YDoc } from 'yjs';
         
     | 
| 
       4 
     | 
    
         
            -
            import { CollaborateCursor, RemoteSelection } from './ 
     | 
| 
      
 4 
     | 
    
         
            +
            import { CollaborateCursor, RemoteSelection } from './collaborate-cursor';
         
     | 
| 
       5 
5 
     | 
    
         
             
            export declare class Collaborate implements History {
         
     | 
| 
       6 
6 
     | 
    
         
             
                private rootComponentRef;
         
     | 
| 
       7 
7 
     | 
    
         
             
                private collaborateCursor;
         
     | 
| 
      
 8 
     | 
    
         
            +
                private scheduler;
         
     | 
| 
       8 
9 
     | 
    
         
             
                private translator;
         
     | 
| 
       9 
     | 
    
         
            -
                private renderer;
         
     | 
| 
       10 
10 
     | 
    
         
             
                private registry;
         
     | 
| 
       11 
11 
     | 
    
         
             
                private selection;
         
     | 
| 
       12 
12 
     | 
    
         
             
                private starter;
         
     | 
| 
         @@ -31,14 +31,14 @@ export declare class Collaborate implements History { 
     | 
|
| 
       31 
31 
     | 
    
         
             
                private componentStateSyncCaches;
         
     | 
| 
       32 
32 
     | 
    
         
             
                private selectionChangeEvent;
         
     | 
| 
       33 
33 
     | 
    
         
             
                private updateRemoteActions;
         
     | 
| 
       34 
     | 
    
         
            -
                constructor(rootComponentRef: RootComponentRef, collaborateCursor: CollaborateCursor,  
     | 
| 
      
 34 
     | 
    
         
            +
                constructor(rootComponentRef: RootComponentRef, collaborateCursor: CollaborateCursor, scheduler: Scheduler, translator: Translator, registry: Registry, selection: Selection, starter: Starter);
         
     | 
| 
       35 
35 
     | 
    
         
             
                setup(): void;
         
     | 
| 
       36 
36 
     | 
    
         
             
                updateRemoteSelection(paths: RemoteSelection[]): void;
         
     | 
| 
       37 
37 
     | 
    
         
             
                listen(): void;
         
     | 
| 
       38 
38 
     | 
    
         
             
                back(): void;
         
     | 
| 
       39 
39 
     | 
    
         
             
                forward(): void;
         
     | 
| 
       40 
40 
     | 
    
         
             
                destroy(): void;
         
     | 
| 
       41 
     | 
    
         
            -
                private  
     | 
| 
      
 41 
     | 
    
         
            +
                private syncRootComponent;
         
     | 
| 
       42 
42 
     | 
    
         
             
                private syncContent;
         
     | 
| 
       43 
43 
     | 
    
         
             
                private syncSlot;
         
     | 
| 
       44 
44 
     | 
    
         
             
                private syncSlots;
         
     |