@plait/core 0.0.25 → 0.0.28
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/board/board.component.d.ts +4 -3
- package/esm2020/board/board.component.mjs +15 -9
- package/esm2020/utils/history.mjs +2 -2
- package/fesm2015/plait-core.mjs +178 -172
- package/fesm2015/plait-core.mjs.map +1 -1
- package/fesm2020/plait-core.mjs +197 -191
- package/fesm2020/plait-core.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, OnInit, Renderer2 } from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import { PlaitElement } from '../interfaces/element';
|
|
2
|
+
import { RoughSVG } from 'roughjs/bin/svg';
|
|
4
3
|
import { Subject } from 'rxjs';
|
|
4
|
+
import { PlaitBoard, PlaitBoardChangeEvent } from '../interfaces/board';
|
|
5
|
+
import { PlaitElement } from '../interfaces/element';
|
|
5
6
|
import { PlaitPlugin } from '../interfaces/plugin';
|
|
6
|
-
import { RoughSVG } from 'roughjs/bin/svg';
|
|
7
7
|
import { Viewport } from '../interfaces/viewport';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
export declare class PlaitBoardComponent implements OnInit, AfterViewInit, OnDestroy {
|
|
@@ -24,6 +24,7 @@ export declare class PlaitBoardComponent implements OnInit, AfterViewInit, OnDes
|
|
|
24
24
|
plaitAllowClearBoard: boolean;
|
|
25
25
|
plaitChange: EventEmitter<PlaitBoardChangeEvent>;
|
|
26
26
|
plaitBoardInitialized: EventEmitter<PlaitBoard>;
|
|
27
|
+
get focused(): import("@plait/core").Selection | null;
|
|
27
28
|
constructor(cdr: ChangeDetectorRef, renderer2: Renderer2);
|
|
28
29
|
ngOnInit(): void;
|
|
29
30
|
ngAfterViewInit(): void;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import
|
|
3
|
-
import { createBoard } from '../plugins/create-board';
|
|
4
|
-
import { withBoard } from '../plugins/with-board';
|
|
2
|
+
import rough from 'roughjs/bin/rough';
|
|
5
3
|
import { fromEvent, Subject } from 'rxjs';
|
|
6
4
|
import { filter, takeUntil } from 'rxjs/operators';
|
|
7
|
-
import rough from 'roughjs/bin/rough';
|
|
8
|
-
import { Transforms } from '../transfroms';
|
|
9
|
-
import { withSelection } from '../plugins/with-selection';
|
|
10
5
|
import { PlaitOperation } from '../interfaces/operation';
|
|
11
|
-
import {
|
|
6
|
+
import { createBoard } from '../plugins/create-board';
|
|
7
|
+
import { withBoard } from '../plugins/with-board';
|
|
12
8
|
import { withHistroy } from '../plugins/with-history';
|
|
9
|
+
import { withSelection } from '../plugins/with-selection';
|
|
10
|
+
import { Transforms } from '../transfroms';
|
|
11
|
+
import { getViewBox } from '../utils/board';
|
|
12
|
+
import { BOARD_TO_ON_CHANGE, HOST_TO_ROUGH_SVG, IS_TEXT_EDITABLE } from '../utils/weak-maps';
|
|
13
13
|
import * as i0 from "@angular/core";
|
|
14
14
|
import * as i1 from "../core/element/element.component";
|
|
15
15
|
import * as i2 from "@angular/common";
|
|
@@ -36,6 +36,9 @@ export class PlaitBoardComponent {
|
|
|
36
36
|
get isFocused() {
|
|
37
37
|
return this.board?.selection;
|
|
38
38
|
}
|
|
39
|
+
get focused() {
|
|
40
|
+
return this.isFocused;
|
|
41
|
+
}
|
|
39
42
|
ngOnInit() {
|
|
40
43
|
const roughSVG = rough.svg(this.host, { options: { roughness: 0, strokeWidth: 1 } });
|
|
41
44
|
HOST_TO_ROUGH_SVG.set(this.host, roughSVG);
|
|
@@ -187,7 +190,7 @@ export class PlaitBoardComponent {
|
|
|
187
190
|
}
|
|
188
191
|
}
|
|
189
192
|
PlaitBoardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PlaitBoardComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
190
|
-
PlaitBoardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: PlaitBoardComponent, selector: "plait-board", inputs: { plaitValue: "plaitValue", plaitViewport: "plaitViewport", plaitPlugins: "plaitPlugins", plaitReadonly: "plaitReadonly", plaitAllowClearBoard: "plaitAllowClearBoard" }, outputs: { plaitChange: "plaitChange", plaitBoardInitialized: "plaitBoardInitialized" }, host: { properties: { "class": "this.hostClass" } }, viewQueries: [{ propertyName: "svg", first: true, predicate: ["svg"], descendants: true, static: true }], ngImport: i0, template: `
|
|
193
|
+
PlaitBoardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: PlaitBoardComponent, selector: "plait-board", inputs: { plaitValue: "plaitValue", plaitViewport: "plaitViewport", plaitPlugins: "plaitPlugins", plaitReadonly: "plaitReadonly", plaitAllowClearBoard: "plaitAllowClearBoard" }, outputs: { plaitChange: "plaitChange", plaitBoardInitialized: "plaitBoardInitialized" }, host: { properties: { "class": "this.hostClass", "class.focused": "this.focused" } }, viewQueries: [{ propertyName: "svg", first: true, predicate: ["svg"], descendants: true, static: true }], ngImport: i0, template: `
|
|
191
194
|
<svg #svg width="100%" height="100%" style="position: relative"></svg>
|
|
192
195
|
<div *ngIf="isFocused" class="plait-toolbar island zoom-toolbar plait-board-attached">
|
|
193
196
|
<button class="item" (mousedown)="zoomOut($event)">-</button>
|
|
@@ -249,5 +252,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
249
252
|
type: Output
|
|
250
253
|
}], plaitBoardInitialized: [{
|
|
251
254
|
type: Output
|
|
255
|
+
}], focused: [{
|
|
256
|
+
type: HostBinding,
|
|
257
|
+
args: ['class.focused']
|
|
252
258
|
}] } });
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhaXQvc3JjL2JvYXJkL2JvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUduRCxPQUFPLEtBQUssTUFBTSxtQkFBbUIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7QUF3QnRELE1BQU0sT0FBTyxtQkFBbUI7SUFvQzVCLFlBQW9CLEdBQXNCLEVBQVUsU0FBb0I7UUFBcEQsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBbkN4RSxTQUFJLEdBQUcsR0FBRyxDQUFDO1FBRVcsY0FBUyxHQUFHLHVCQUF1QixDQUFDO1FBTTFELGFBQVEsR0FBaUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQWE5QixlQUFVLEdBQW1CLEVBQUUsQ0FBQztRQUloQyxpQkFBWSxHQUFrQixFQUFFLENBQUM7UUFFakMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFdEIseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBRTVCLGdCQUFXLEdBQXdDLElBQUksWUFBWSxFQUFFLENBQUM7UUFFdEUsMEJBQXFCLEdBQTZCLElBQUksWUFBWSxFQUFFLENBQUM7UUEwTC9FLFlBQU8sR0FBRyxDQUFDLEtBQWEsRUFBRSxPQUFxQixFQUFFLEVBQUU7WUFDL0MsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDO0lBMUx5RSxDQUFDO0lBdEI1RSxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDO0lBQ2pDLENBQUM7SUFrQkQsUUFBUTtRQUNKLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQXFCLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sV0FBVyxHQUEwQjtnQkFDdkMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtnQkFDN0IsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTtnQkFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtnQkFDN0IsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUzthQUNsQyxDQUFDO1lBQ0YsaUJBQWlCO1lBQ2pCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQzdFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN6QjtZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsTUFBTSxPQUFPLEdBQXNCLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2hILElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDL0IsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtRQUNaLFNBQVMsQ0FBYSxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQzthQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsQ0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFUCxTQUFTLENBQWEsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUM7YUFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsS0FBaUIsRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBRVAsU0FBUyxDQUFhLFFBQVEsRUFBRSxTQUFTLENBQUM7YUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsS0FBaUIsRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRVAsU0FBUyxDQUFhLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDO2FBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVQLFNBQVMsQ0FBYSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQzthQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsQ0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDN0IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNoQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO2dCQUNyQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQy9CLEdBQUcsUUFBUTtvQkFDWCxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTTtvQkFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU07aUJBQzVDLENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFUCxTQUFTLENBQWdCLFFBQVEsRUFBRSxTQUFTLENBQUM7YUFDeEMsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFUCxTQUFTLENBQWdCLFFBQVEsRUFBRSxPQUFPLENBQUM7YUFDdEMsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFUCxTQUFTLENBQWlCLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDdEMsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFxQixFQUFFLEVBQUU7WUFDakMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVQLFNBQVMsQ0FBaUIsUUFBUSxFQUFFLE9BQU8sQ0FBQzthQUN2QyxJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDeEIsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNSLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FDTDthQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQXFCLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFFUCxTQUFTLENBQWlCLFFBQVEsRUFBRSxLQUFLLENBQUM7YUFDckMsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFxQixFQUFFLEVBQUU7WUFDakMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFFUCxNQUFNLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELGVBQWU7UUFDWCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQWEsQ0FBQztRQUNoRixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FDdkIsSUFBSSxDQUFDLElBQUksRUFDVCxTQUFTLEVBQ1QsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLFlBQVksQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUMxRyxDQUFDO0lBQ04sQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMvSCxDQUFDO0lBRUQsS0FBSztJQUNMLE1BQU0sQ0FBQyxLQUFpQjtRQUNwQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQW9CLENBQUM7UUFDbEQsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQy9CLEdBQUcsUUFBUTtZQUNYLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUc7U0FDNUIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUs7SUFDTCxPQUFPLENBQUMsS0FBaUI7UUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFvQixDQUFDO1FBQ2xELFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUMvQixHQUFHLFFBQVE7WUFDWCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHO1NBQzVCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBaUI7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFvQixDQUFDO1FBQ2xELFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUMvQixHQUFHLFFBQVE7WUFDWCxJQUFJLEVBQUUsQ0FBQztTQUNWLENBQUMsQ0FBQztJQUNQLENBQUM7SUFNRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7aUhBcE9RLG1CQUFtQjtxR0FBbkIsbUJBQW1CLDZkQXBCbEI7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBaUJUOzRGQUdRLG1CQUFtQjtrQkF0Qi9CLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FpQlQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEO2dJQUl5QixTQUFTO3NCQUE5QixXQUFXO3VCQUFDLE9BQU87Z0JBU3BCLEdBQUc7c0JBREYsU0FBUzt1QkFBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVd6QixVQUFVO3NCQUFsQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLHFCQUFxQjtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJPQVJEX1RPX09OX0NIQU5HRSwgSE9TVF9UT19ST1VHSF9TVkcsIElTX1RFWFRfRURJVEFCTEUgfSBmcm9tICcuLi91dGlscy93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZENoYW5nZUV2ZW50LCBQbGFpdEJvYXJkLCBQbGFpdEJvYXJkT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvYm9hcmQnO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IGNyZWF0ZUJvYXJkIH0gZnJvbSAnLi4vcGx1Z2lucy9jcmVhdGUtYm9hcmQnO1xuaW1wb3J0IHsgd2l0aEJvYXJkIH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLWJvYXJkJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQbGFpdFBsdWdpbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGx1Z2luJztcbmltcG9ydCB7IFJvdWdoU1ZHIH0gZnJvbSAncm91Z2hqcy9iaW4vc3ZnJztcbmltcG9ydCByb3VnaCBmcm9tICdyb3VnaGpzL2Jpbi9yb3VnaCc7XG5pbXBvcnQgeyBUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmcm9tcyc7XG5pbXBvcnQgeyB3aXRoU2VsZWN0aW9uIH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLXNlbGVjdGlvbic7XG5pbXBvcnQgeyBQbGFpdE9wZXJhdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvb3BlcmF0aW9uJztcbmltcG9ydCB7IGdldFZpZXdCb3gsIGlzTm9TZWxlY3Rpb25FbGVtZW50IH0gZnJvbSAnLi4vdXRpbHMvYm9hcmQnO1xuaW1wb3J0IHsgVmlld3BvcnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZpZXdwb3J0JztcbmltcG9ydCB7IHdpdGhIaXN0cm95IH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLWhpc3RvcnknO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BsYWl0LWJvYXJkJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8c3ZnICNzdmcgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+PC9zdmc+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZvY3VzZWRcIiBjbGFzcz1cInBsYWl0LXRvb2xiYXIgaXNsYW5kIHpvb20tdG9vbGJhciBwbGFpdC1ib2FyZC1hdHRhY2hlZFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIml0ZW1cIiAobW91c2Vkb3duKT1cInpvb21PdXQoJGV2ZW50KVwiPi08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpdGVtIHpvb20tdmFsdWVcIiAobW91c2Vkb3duKT1cInJlc2V0Wm9vbSgkZXZlbnQpXCI+e3sgem9vbSB9fSU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpdGVtXCIgKG1vdXNlZG93bik9XCJ6b29tSW4oJGV2ZW50KVwiPis8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwbGFpdC1lbGVtZW50XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBib2FyZC5jaGlsZHJlbjsgbGV0IGluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlcIlxuICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgIFtlbGVtZW50XT1cIml0ZW1cIlxuICAgICAgICAgICAgW2JvYXJkXT1cImJvYXJkXCJcbiAgICAgICAgICAgIFt2aWV3cG9ydF09XCJib2FyZC52aWV3cG9ydFwiXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cImJvYXJkLnNlbGVjdGlvblwiXG4gICAgICAgICAgICBbaG9zdF09XCJob3N0XCJcbiAgICAgICAgPjwvcGxhaXQtZWxlbWVudD5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUGxhaXRCb2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICB6b29tID0gMTAwO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGhvc3RDbGFzcyA9IGBwbGFpdC1ib2FyZC1jb250YWluZXJgO1xuXG4gICAgYm9hcmQhOiBQbGFpdEJvYXJkO1xuXG4gICAgcm91Z2hTVkchOiBSb3VnaFNWRztcblxuICAgIGRlc3Ryb3kkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgQFZpZXdDaGlsZCgnc3ZnJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBzdmchOiBFbGVtZW50UmVmO1xuXG4gICAgZ2V0IGhvc3QoKTogU1ZHRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnN2Zy5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIGdldCBpc0ZvY3VzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvYXJkPy5zZWxlY3Rpb247XG4gICAgfVxuXG4gICAgQElucHV0KCkgcGxhaXRWYWx1ZTogUGxhaXRFbGVtZW50W10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHBsYWl0Vmlld3BvcnQhOiBWaWV3cG9ydDtcblxuICAgIEBJbnB1dCgpIHBsYWl0UGx1Z2luczogUGxhaXRQbHVnaW5bXSA9IFtdO1xuXG4gICAgQElucHV0KCkgcGxhaXRSZWFkb25seSA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgcGxhaXRBbGxvd0NsZWFyQm9hcmQgPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBwbGFpdENoYW5nZTogRXZlbnRFbWl0dGVyPFBsYWl0Qm9hcmRDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgcGxhaXRCb2FyZEluaXRpYWxpemVkOiBFdmVudEVtaXR0ZXI8UGxhaXRCb2FyZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgcmVuZGVyZXIyOiBSZW5kZXJlcjIpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm91Z2hTVkcgPSByb3VnaC5zdmcodGhpcy5ob3N0IGFzIFNWR1NWR0VsZW1lbnQsIHsgb3B0aW9uczogeyByb3VnaG5lc3M6IDAsIHN0cm9rZVdpZHRoOiAxIH0gfSk7XG4gICAgICAgIEhPU1RfVE9fUk9VR0hfU1ZHLnNldCh0aGlzLmhvc3QsIHJvdWdoU1ZHKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUGx1Z2lucygpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVFdmVudHMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydCgpO1xuICAgICAgICBCT0FSRF9UT19PTl9DSEFOR0Uuc2V0KHRoaXMuYm9hcmQsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZUV2ZW50OiBQbGFpdEJvYXJkQ2hhbmdlRXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuYm9hcmQuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uczogdGhpcy5ib2FyZC5vcGVyYXRpb25zLFxuICAgICAgICAgICAgICAgIHZpZXdwb3J0OiB0aGlzLmJvYXJkLnZpZXdwb3J0LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5ib2FyZC5zZWxlY3Rpb25cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyB1cGRhdGUgdmlld0JveFxuICAgICAgICAgICAgaWYgKHRoaXMuYm9hcmQub3BlcmF0aW9ucy5zb21lKG9wID0+IFBsYWl0T3BlcmF0aW9uLmlzU2V0Vmlld3BvcnRPcGVyYXRpb24ob3ApKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGxhaXRDaGFuZ2UuZW1pdChjaGFuZ2VFdmVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wbGFpdEJvYXJkSW5pdGlhbGl6ZWQuZW1pdCh0aGlzLmJvYXJkKTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplUGx1Z2lucygpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uczogUGxhaXRCb2FyZE9wdGlvbnMgPSB7IHJlYWRvbmx5OiB0aGlzLnBsYWl0UmVhZG9ubHksIGFsbG93Q2xlYXJCb2FyZDogdGhpcy5wbGFpdEFsbG93Q2xlYXJCb2FyZCB9O1xuICAgICAgICBsZXQgYm9hcmQgPSB3aXRoSGlzdHJveSh3aXRoU2VsZWN0aW9uKHdpdGhCb2FyZChjcmVhdGVCb2FyZCh0aGlzLmhvc3QsIHRoaXMucGxhaXRWYWx1ZSwgb3B0aW9ucykpKSk7XG4gICAgICAgIHRoaXMucGxhaXRQbHVnaW5zLmZvckVhY2gocGx1Z2luID0+IHtcbiAgICAgICAgICAgIGJvYXJkID0gcGx1Z2luKGJvYXJkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYm9hcmQgPSBib2FyZDtcbiAgICAgICAgaWYgKHRoaXMucGxhaXRWaWV3cG9ydCkge1xuICAgICAgICAgICAgdGhpcy5ib2FyZC52aWV3cG9ydCA9IHRoaXMucGxhaXRWaWV3cG9ydDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRpYWxpemVFdmVudHMoKSB7XG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdtb3VzZWRvd24nKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLm1vdXNlZG93bihldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnbW91c2Vtb3ZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5tb3VzZW1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2V1cCcpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuZ2xvYmFsTW91c2V1cChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnZGJsY2xpY2snKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmRibGNsaWNrKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxXaGVlbEV2ZW50Pih0aGlzLmhvc3QsICd3aGVlbCcpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogV2hlZWxFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuYm9hcmQudmlld3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Vmlld3BvcnQodGhpcy5ib2FyZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udmlld3BvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRYOiB2aWV3cG9ydD8ub2Zmc2V0WCAtIGV2ZW50LmRlbHRhWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IHZpZXdwb3J0Py5vZmZzZXRZIC0gZXZlbnQuZGVsdGFZXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfVEVYVF9FRElUQUJMRS5nZXQodGhpcy5ib2FyZCkgJiYgISF0aGlzLmJvYXJkLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5rZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleXVwJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIUlTX1RFWFRfRURJVEFCTEUuZ2V0KHRoaXMuYm9hcmQpICYmICEhdGhpcy5ib2FyZC5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8ua2V5dXAoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2NvcHknKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfVEVYVF9FRElUQUJMRS5nZXQodGhpcy5ib2FyZCkgJiYgISF0aGlzLmJvYXJkLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5zZXRGcmFnbWVudChldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4oZG9jdW1lbnQsICdwYXN0ZScpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFJU19URVhUX0VESVRBQkxFLmdldCh0aGlzLmJvYXJkKSAmJiAhIXRoaXMuYm9hcmQuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5pbnNlcnRGcmFnbWVudChldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4oZG9jdW1lbnQsICdjdXQnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfVEVYVF9FRElUQUJMRS5nZXQodGhpcy5ib2FyZCkgJiYgISF0aGlzLmJvYXJkLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5zZXRGcmFnbWVudChldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5kZWxldGVGcmFnbWVudChldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHdpbmRvdy5vbnJlc2l6ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXdwb3J0KCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmVmcmVzaFZpZXdwb3J0KCkge1xuICAgICAgICBjb25zdCB2aWV3Qm94TW9kZWwgPSBnZXRWaWV3Qm94KHRoaXMuYm9hcmQpO1xuICAgICAgICBjb25zdCB2aWV3Qm94VmFsdWVzID0gdGhpcy5ob3N0LmdldEF0dHJpYnV0ZSgndmlld0JveCcpPy5zcGxpdCgnLCcpIGFzIHN0cmluZ1tdO1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICB0aGlzLmhvc3QsXG4gICAgICAgICAgICAndmlld0JveCcsXG4gICAgICAgICAgICBgJHt2aWV3Qm94VmFsdWVzWzBdLnRyaW0oKX0sICR7dmlld0JveFZhbHVlc1sxXS50cmltKCl9LCAke3ZpZXdCb3hNb2RlbC53aWR0aH0sICR7dmlld0JveE1vZGVsLmhlaWdodH1gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXBkYXRlVmlld3BvcnQoKSB7XG4gICAgICAgIHRoaXMuem9vbSA9IE1hdGguZmxvb3IodGhpcy5ib2FyZC52aWV3cG9ydC56b29tICogMTAwKTtcbiAgICAgICAgY29uc3Qgdmlld0JveCA9IGdldFZpZXdCb3godGhpcy5ib2FyZCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldEF0dHJpYnV0ZSh0aGlzLmhvc3QsICd2aWV3Qm94JywgYCR7dmlld0JveC5taW5YfSwgJHt2aWV3Qm94Lm1pbll9LCAke3ZpZXdCb3gud2lkdGh9LCAke3ZpZXdCb3guaGVpZ2h0fWApO1xuICAgIH1cblxuICAgIC8vIOaUvuWkp1xuICAgIHpvb21JbihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuYm9hcmQ/LnZpZXdwb3J0IGFzIFZpZXdwb3J0O1xuICAgICAgICBUcmFuc2Zvcm1zLnNldFZpZXdwb3J0KHRoaXMuYm9hcmQsIHtcbiAgICAgICAgICAgIC4uLnZpZXdwb3J0LFxuICAgICAgICAgICAgem9vbTogdmlld3BvcnQuem9vbSArIDAuMVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyDnvKnlsI9cbiAgICB6b29tT3V0KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5ib2FyZD8udmlld3BvcnQgYXMgVmlld3BvcnQ7XG4gICAgICAgIFRyYW5zZm9ybXMuc2V0Vmlld3BvcnQodGhpcy5ib2FyZCwge1xuICAgICAgICAgICAgLi4udmlld3BvcnQsXG4gICAgICAgICAgICB6b29tOiB2aWV3cG9ydC56b29tIC0gMC4xXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc2V0Wm9vbShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuYm9hcmQ/LnZpZXdwb3J0IGFzIFZpZXdwb3J0O1xuICAgICAgICBUcmFuc2Zvcm1zLnNldFZpZXdwb3J0KHRoaXMuYm9hcmQsIHtcbiAgICAgICAgICAgIC4uLnZpZXdwb3J0LFxuICAgICAgICAgICAgem9vbTogMVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0cmFja0J5ID0gKGluZGV4OiBudW1iZXIsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfTtcblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICBIT1NUX1RPX1JPVUdIX1NWRy5kZWxldGUodGhpcy5ob3N0KTtcbiAgICB9XG59XG4iXX0=
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhaXQvc3JjL2JvYXJkL2JvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxNQUFNLG1CQUFtQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQXdCN0YsTUFBTSxPQUFPLG1CQUFtQjtJQXlDNUIsWUFBb0IsR0FBc0IsRUFBVSxTQUFvQjtRQUFwRCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQVc7UUF4Q3hFLFNBQUksR0FBRyxHQUFHLENBQUM7UUFFVyxj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O0lBRUQsU0FBUyxDQUFDLEtBQWlCO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBb0IsQ0FBQztRQUNsRCxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDL0IsR0FBRyxRQUFRO1lBQ1gsSUFBSSxFQUFFLENBQUM7U0FDVixDQUFDLENBQUM7SUFDUCxDQUFDO0lBTUQsV0FBVztRQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7O2lIQXpPUSxtQkFBbUI7cUdBQW5CLG1CQUFtQiw4ZkFwQmxCOzs7Ozs7Ozs7Ozs7Ozs7OztLQWlCVDs0RkFHUSxtQkFBbUI7a0JBdEIvQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxhQUFhO29CQUN2QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBaUJUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRDtnSUFJeUIsU0FBUztzQkFBOUIsV0FBVzt1QkFBQyxPQUFPO2dCQVNwQixHQUFHO3NCQURGLFNBQVM7dUJBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFXekIsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBR0gsT0FBTztzQkFEVixXQUFXO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgcm91Z2ggZnJvbSAncm91Z2hqcy9iaW4vcm91Z2gnO1xuaW1wb3J0IHsgUm91Z2hTVkcgfSBmcm9tICdyb3VnaGpzL2Jpbi9zdmcnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0Qm9hcmRDaGFuZ2VFdmVudCwgUGxhaXRCb2FyZE9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdE9wZXJhdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvb3BlcmF0aW9uJztcbmltcG9ydCB7IFBsYWl0UGx1Z2luIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wbHVnaW4nO1xuaW1wb3J0IHsgVmlld3BvcnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZpZXdwb3J0JztcbmltcG9ydCB7IGNyZWF0ZUJvYXJkIH0gZnJvbSAnLi4vcGx1Z2lucy9jcmVhdGUtYm9hcmQnO1xuaW1wb3J0IHsgd2l0aEJvYXJkIH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLWJvYXJkJztcbmltcG9ydCB7IHdpdGhIaXN0cm95IH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLWhpc3RvcnknO1xuaW1wb3J0IHsgd2l0aFNlbGVjdGlvbiB9IGZyb20gJy4uL3BsdWdpbnMvd2l0aC1zZWxlY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZnJvbXMnO1xuaW1wb3J0IHsgZ2V0Vmlld0JveCB9IGZyb20gJy4uL3V0aWxzL2JvYXJkJztcbmltcG9ydCB7IEJPQVJEX1RPX09OX0NIQU5HRSwgSE9TVF9UT19ST1VHSF9TVkcsIElTX1RFWFRfRURJVEFCTEUgfSBmcm9tICcuLi91dGlscy93ZWFrLW1hcHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BsYWl0LWJvYXJkJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8c3ZnICNzdmcgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+PC9zdmc+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZvY3VzZWRcIiBjbGFzcz1cInBsYWl0LXRvb2xiYXIgaXNsYW5kIHpvb20tdG9vbGJhciBwbGFpdC1ib2FyZC1hdHRhY2hlZFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIml0ZW1cIiAobW91c2Vkb3duKT1cInpvb21PdXQoJGV2ZW50KVwiPi08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpdGVtIHpvb20tdmFsdWVcIiAobW91c2Vkb3duKT1cInJlc2V0Wm9vbSgkZXZlbnQpXCI+e3sgem9vbSB9fSU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpdGVtXCIgKG1vdXNlZG93bik9XCJ6b29tSW4oJGV2ZW50KVwiPis8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwbGFpdC1lbGVtZW50XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBib2FyZC5jaGlsZHJlbjsgbGV0IGluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlcIlxuICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgIFtlbGVtZW50XT1cIml0ZW1cIlxuICAgICAgICAgICAgW2JvYXJkXT1cImJvYXJkXCJcbiAgICAgICAgICAgIFt2aWV3cG9ydF09XCJib2FyZC52aWV3cG9ydFwiXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cImJvYXJkLnNlbGVjdGlvblwiXG4gICAgICAgICAgICBbaG9zdF09XCJob3N0XCJcbiAgICAgICAgPjwvcGxhaXQtZWxlbWVudD5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUGxhaXRCb2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICB6b29tID0gMTAwO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGhvc3RDbGFzcyA9IGBwbGFpdC1ib2FyZC1jb250YWluZXJgO1xuXG4gICAgYm9hcmQhOiBQbGFpdEJvYXJkO1xuXG4gICAgcm91Z2hTVkchOiBSb3VnaFNWRztcblxuICAgIGRlc3Ryb3kkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgQFZpZXdDaGlsZCgnc3ZnJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBzdmchOiBFbGVtZW50UmVmO1xuXG4gICAgZ2V0IGhvc3QoKTogU1ZHRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnN2Zy5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIGdldCBpc0ZvY3VzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvYXJkPy5zZWxlY3Rpb247XG4gICAgfVxuXG4gICAgQElucHV0KCkgcGxhaXRWYWx1ZTogUGxhaXRFbGVtZW50W10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHBsYWl0Vmlld3BvcnQhOiBWaWV3cG9ydDtcblxuICAgIEBJbnB1dCgpIHBsYWl0UGx1Z2luczogUGxhaXRQbHVnaW5bXSA9IFtdO1xuXG4gICAgQElucHV0KCkgcGxhaXRSZWFkb25seSA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgcGxhaXRBbGxvd0NsZWFyQm9hcmQgPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBwbGFpdENoYW5nZTogRXZlbnRFbWl0dGVyPFBsYWl0Qm9hcmRDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgcGxhaXRCb2FyZEluaXRpYWxpemVkOiBFdmVudEVtaXR0ZXI8UGxhaXRCb2FyZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZvY3VzZWQnKVxuICAgIGdldCBmb2N1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0ZvY3VzZWQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdWdoU1ZHID0gcm91Z2guc3ZnKHRoaXMuaG9zdCBhcyBTVkdTVkdFbGVtZW50LCB7IG9wdGlvbnM6IHsgcm91Z2huZXNzOiAwLCBzdHJva2VXaWR0aDogMSB9IH0pO1xuICAgICAgICBIT1NUX1RPX1JPVUdIX1NWRy5zZXQodGhpcy5ob3N0LCByb3VnaFNWRyk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVBsdWdpbnMoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRXZlbnRzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQoKTtcbiAgICAgICAgQk9BUkRfVE9fT05fQ0hBTkdFLnNldCh0aGlzLmJvYXJkLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VFdmVudDogUGxhaXRCb2FyZENoYW5nZUV2ZW50ID0ge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmJvYXJkLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbnM6IHRoaXMuYm9hcmQub3BlcmF0aW9ucyxcbiAgICAgICAgICAgICAgICB2aWV3cG9ydDogdGhpcy5ib2FyZC52aWV3cG9ydCxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuYm9hcmQuc2VsZWN0aW9uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gdXBkYXRlIHZpZXdCb3hcbiAgICAgICAgICAgIGlmICh0aGlzLmJvYXJkLm9wZXJhdGlvbnMuc29tZShvcCA9PiBQbGFpdE9wZXJhdGlvbi5pc1NldFZpZXdwb3J0T3BlcmF0aW9uKG9wKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBsYWl0Q2hhbmdlLmVtaXQoY2hhbmdlRXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGxhaXRCb2FyZEluaXRpYWxpemVkLmVtaXQodGhpcy5ib2FyZCk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZVBsdWdpbnMoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnM6IFBsYWl0Qm9hcmRPcHRpb25zID0geyByZWFkb25seTogdGhpcy5wbGFpdFJlYWRvbmx5LCBhbGxvd0NsZWFyQm9hcmQ6IHRoaXMucGxhaXRBbGxvd0NsZWFyQm9hcmQgfTtcbiAgICAgICAgbGV0IGJvYXJkID0gd2l0aEhpc3Ryb3kod2l0aFNlbGVjdGlvbih3aXRoQm9hcmQoY3JlYXRlQm9hcmQodGhpcy5ob3N0LCB0aGlzLnBsYWl0VmFsdWUsIG9wdGlvbnMpKSkpO1xuICAgICAgICB0aGlzLnBsYWl0UGx1Z2lucy5mb3JFYWNoKHBsdWdpbiA9PiB7XG4gICAgICAgICAgICBib2FyZCA9IHBsdWdpbihib2FyZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJvYXJkID0gYm9hcmQ7XG4gICAgICAgIGlmICh0aGlzLnBsYWl0Vmlld3BvcnQpIHtcbiAgICAgICAgICAgIHRoaXMuYm9hcmQudmlld3BvcnQgPSB0aGlzLnBsYWl0Vmlld3BvcnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0aWFsaXplRXZlbnRzKCkge1xuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnbW91c2Vkb3duJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5tb3VzZWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuaG9zdCwgJ21vdXNlbW92ZScpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQubW91c2Vtb3ZlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNldXAnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmdsb2JhbE1vdXNldXAoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuaG9zdCwgJ2RibGNsaWNrJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5kYmxjbGljayhldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8V2hlZWxFdmVudD4odGhpcy5ob3N0LCAnd2hlZWwnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFdoZWVsRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLmJvYXJkLnZpZXdwb3J0O1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldFZpZXdwb3J0KHRoaXMuYm9hcmQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnZpZXdwb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WDogdmlld3BvcnQ/Lm9mZnNldFggLSBldmVudC5kZWx0YVgsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRZOiB2aWV3cG9ydD8ub2Zmc2V0WSAtIGV2ZW50LmRlbHRhWVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIUlTX1RFWFRfRURJVEFCTEUuZ2V0KHRoaXMuYm9hcmQpICYmICEhdGhpcy5ib2FyZC5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8ua2V5ZG93bihldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXl1cCcpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFJU19URVhUX0VESVRBQkxFLmdldCh0aGlzLmJvYXJkKSAmJiAhIXRoaXMuYm9hcmQuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQ/LmtleXVwKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4oZG9jdW1lbnQsICdjb3B5JylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIUlTX1RFWFRfRURJVEFCTEUuZ2V0KHRoaXMuYm9hcmQpICYmICEhdGhpcy5ib2FyZC5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8uc2V0RnJhZ21lbnQoZXZlbnQuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KGRvY3VtZW50LCAncGFzdGUnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfVEVYVF9FRElUQUJMRS5nZXQodGhpcy5ib2FyZCkgJiYgISF0aGlzLmJvYXJkLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8uaW5zZXJ0RnJhZ21lbnQoZXZlbnQuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KGRvY3VtZW50LCAnY3V0JylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIUlTX1RFWFRfRURJVEFCTEUuZ2V0KHRoaXMuYm9hcmQpICYmICEhdGhpcy5ib2FyZC5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8uc2V0RnJhZ21lbnQoZXZlbnQuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8uZGVsZXRlRnJhZ21lbnQoZXZlbnQuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB3aW5kb3cub25yZXNpemUgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3cG9ydCgpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJlZnJlc2hWaWV3cG9ydCgpIHtcbiAgICAgICAgY29uc3Qgdmlld0JveE1vZGVsID0gZ2V0Vmlld0JveCh0aGlzLmJvYXJkKTtcbiAgICAgICAgY29uc3Qgdmlld0JveFZhbHVlcyA9IHRoaXMuaG9zdC5nZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnKT8uc3BsaXQoJywnKSBhcyBzdHJpbmdbXTtcbiAgICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgdGhpcy5ob3N0LFxuICAgICAgICAgICAgJ3ZpZXdCb3gnLFxuICAgICAgICAgICAgYCR7dmlld0JveFZhbHVlc1swXS50cmltKCl9LCAke3ZpZXdCb3hWYWx1ZXNbMV0udHJpbSgpfSwgJHt2aWV3Qm94TW9kZWwud2lkdGh9LCAke3ZpZXdCb3hNb2RlbC5oZWlnaHR9YFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHVwZGF0ZVZpZXdwb3J0KCkge1xuICAgICAgICB0aGlzLnpvb20gPSBNYXRoLmZsb29yKHRoaXMuYm9hcmQudmlld3BvcnQuem9vbSAqIDEwMCk7XG4gICAgICAgIGNvbnN0IHZpZXdCb3ggPSBnZXRWaWV3Qm94KHRoaXMuYm9hcmQpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRBdHRyaWJ1dGUodGhpcy5ob3N0LCAndmlld0JveCcsIGAke3ZpZXdCb3gubWluWH0sICR7dmlld0JveC5taW5ZfSwgJHt2aWV3Qm94LndpZHRofSwgJHt2aWV3Qm94LmhlaWdodH1gKTtcbiAgICB9XG5cbiAgICAvLyDmlL7lpKdcbiAgICB6b29tSW4oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLmJvYXJkPy52aWV3cG9ydCBhcyBWaWV3cG9ydDtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZXRWaWV3cG9ydCh0aGlzLmJvYXJkLCB7XG4gICAgICAgICAgICAuLi52aWV3cG9ydCxcbiAgICAgICAgICAgIHpvb206IHZpZXdwb3J0Lnpvb20gKyAwLjFcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8g57yp5bCPXG4gICAgem9vbU91dChldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuYm9hcmQ/LnZpZXdwb3J0IGFzIFZpZXdwb3J0O1xuICAgICAgICBUcmFuc2Zvcm1zLnNldFZpZXdwb3J0KHRoaXMuYm9hcmQsIHtcbiAgICAgICAgICAgIC4uLnZpZXdwb3J0LFxuICAgICAgICAgICAgem9vbTogdmlld3BvcnQuem9vbSAtIDAuMVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXNldFpvb20oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLmJvYXJkPy52aWV3cG9ydCBhcyBWaWV3cG9ydDtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZXRWaWV3cG9ydCh0aGlzLmJvYXJkLCB7XG4gICAgICAgICAgICAuLi52aWV3cG9ydCxcbiAgICAgICAgICAgIHpvb206IDFcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdHJhY2tCeSA9IChpbmRleDogbnVtYmVyLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH07XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgSE9TVF9UT19ST1VHSF9TVkcuZGVsZXRlKHRoaXMuaG9zdCk7XG4gICAgfVxufVxuIl19
|
|
@@ -12,7 +12,7 @@ export const shouldMerge = (op, prev) => {
|
|
|
12
12
|
* Check whether an operation needs to be saved to the history.
|
|
13
13
|
*/
|
|
14
14
|
export const shouldSave = (op, prev) => {
|
|
15
|
-
if (op.type === 'set_selection') {
|
|
15
|
+
if (op.type === 'set_selection' || op.type === 'set_viewport') {
|
|
16
16
|
return false;
|
|
17
17
|
}
|
|
18
18
|
return true;
|
|
@@ -60,4 +60,4 @@ export const PlaitHistoryBoard = {
|
|
|
60
60
|
SAVING.set(board, prev);
|
|
61
61
|
}
|
|
62
62
|
};
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYWl0L3NyYy91dGlscy9oaXN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQThCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1RTs7R0FFRztBQUVILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQWtCLEVBQUUsSUFBZ0MsRUFBVyxFQUFFO0lBQ3pGLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxjQUFjLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsSUFBSSxFQUFFO1FBQ3RELE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUVILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEVBQWtCLEVBQUUsSUFBZ0MsRUFBVyxFQUFFO0lBQ3hGLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxlQUFlLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7UUFDM0QsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUVILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQWtCLEVBQVcsRUFBRTtJQUN2RCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssZUFBZSxFQUFFO1FBQzdCLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDN0I7O09BRUc7SUFDSCxRQUFRLENBQUMsS0FBaUI7UUFDdEIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUVILFNBQVMsQ0FBQyxLQUFpQjtRQUN2QixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUVILGNBQWMsQ0FBQyxLQUFpQixFQUFFLEVBQWM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFCLEVBQUUsRUFBRSxDQUFDO1FBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNEOzs7T0FHRztJQUVILGFBQWEsQ0FBQyxLQUFpQixFQUFFLEVBQWM7UUFDM0MsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLEVBQUUsRUFBRSxDQUFDO1FBQ0wsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNRVJHSU5HLCBQbGFpdEJvYXJkLCBQbGFpdE9wZXJhdGlvbiwgU0FWSU5HIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0byBtZXJnZSBhbiBvcGVyYXRpb24gaW50byB0aGUgcHJldmlvdXMgb3BlcmF0aW9uLlxuICovXG5cbmV4cG9ydCBjb25zdCBzaG91bGRNZXJnZSA9IChvcDogUGxhaXRPcGVyYXRpb24sIHByZXY6IFBsYWl0T3BlcmF0aW9uIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKG9wLnR5cGUgPT09ICdzZXRfdmlld3BvcnQnICYmIG9wLnR5cGUgPT09IHByZXY/LnR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBvcGVyYXRpb24gbmVlZHMgdG8gYmUgc2F2ZWQgdG8gdGhlIGhpc3RvcnkuXG4gKi9cblxuZXhwb3J0IGNvbnN0IHNob3VsZFNhdmUgPSAob3A6IFBsYWl0T3BlcmF0aW9uLCBwcmV2OiBQbGFpdE9wZXJhdGlvbiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChvcC50eXBlID09PSAnc2V0X3NlbGVjdGlvbicgfHwgb3AudHlwZSA9PT0gJ3NldF92aWV3cG9ydCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGFuIG9wZXJhdGlvbiBzaG91bGQgY2xlYXIgdGhlIHJlZG9zIHN0YWNrLlxuICovXG5cbmV4cG9ydCBjb25zdCBzaG91bGRDbGVhciA9IChvcDogUGxhaXRPcGVyYXRpb24pOiBib29sZWFuID0+IHtcbiAgICBpZiAob3AudHlwZSA9PT0gJ3NldF9zZWxlY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBQbGFpdEhpc3RvcnlCb2FyZCA9IHtcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHNhdmluZyBmbGFnJ3MgY3VycmVudCB2YWx1ZS5cbiAgICAgKi9cbiAgICBpc1NhdmluZyhib2FyZDogUGxhaXRCb2FyZCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gU0FWSU5HLmdldChib2FyZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgbWVyZ2UgZmxhZydzIGN1cnJlbnQgdmFsdWUuXG4gICAgICovXG5cbiAgICBpc01lcmdpbmcoYm9hcmQ6IFBsYWl0Qm9hcmQpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIE1FUkdJTkcuZ2V0KGJvYXJkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQXBwbHkgYSBzZXJpZXMgb2YgY2hhbmdlcyBpbnNpZGUgYSBzeW5jaHJvbm91cyBgZm5gLCB3aXRob3V0IG1lcmdpbmcgYW55IG9mXG4gICAgICogdGhlIG5ldyBvcGVyYXRpb25zIGludG8gcHJldmlvdXMgc2F2ZSBwb2ludCBpbiB0aGUgaGlzdG9yeS5cbiAgICAgKi9cblxuICAgIHdpdGhvdXRNZXJnaW5nKGJvYXJkOiBQbGFpdEJvYXJkLCBmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2ID0gUGxhaXRIaXN0b3J5Qm9hcmQuaXNNZXJnaW5nKGJvYXJkKTtcbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgZm4oKTtcbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIHByZXYpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQXBwbHkgYSBzZXJpZXMgb2YgY2hhbmdlcyBpbnNpZGUgYSBzeW5jaHJvbm91cyBgZm5gLCB3aXRob3V0IHNhdmluZyBhbnkgb2ZcbiAgICAgKiB0aGVpciBvcGVyYXRpb25zIGludG8gdGhlIGhpc3RvcnkuXG4gICAgICovXG5cbiAgICB3aXRob3V0U2F2aW5nKGJvYXJkOiBQbGFpdEJvYXJkLCBmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2ID0gUGxhaXRIaXN0b3J5Qm9hcmQuaXNTYXZpbmcoYm9hcmQpO1xuICAgICAgICBTQVZJTkcuc2V0KGJvYXJkLCBmYWxzZSk7XG4gICAgICAgIGZuKCk7XG4gICAgICAgIFNBVklORy5zZXQoYm9hcmQsIHByZXYpO1xuICAgIH1cbn07XG4iXX0=
|
package/fesm2015/plait-core.mjs
CHANGED
|
@@ -1,32 +1,13 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Component, ChangeDetectionStrategy, Input, EventEmitter, HostBinding, ViewChild, Output, NgModule } from '@angular/core';
|
|
3
|
-
import
|
|
3
|
+
import rough from 'roughjs/bin/rough';
|
|
4
4
|
import { Subject, fromEvent } from 'rxjs';
|
|
5
5
|
import { takeUntil, filter } from 'rxjs/operators';
|
|
6
|
-
import
|
|
6
|
+
import produce, { createDraft, finishDraft, isDraft } from 'immer';
|
|
7
7
|
import { isKeyHotkey, isHotkey } from 'is-hotkey';
|
|
8
8
|
import * as i2 from '@angular/common';
|
|
9
9
|
import { BrowserModule } from '@angular/platform-browser';
|
|
10
10
|
|
|
11
|
-
// record richtext type status
|
|
12
|
-
const FLUSHING = new WeakMap();
|
|
13
|
-
const IS_TEXT_EDITABLE = new WeakMap();
|
|
14
|
-
const BOARD_TO_ON_CHANGE = new WeakMap();
|
|
15
|
-
const HOST_TO_ROUGH_SVG = new WeakMap();
|
|
16
|
-
|
|
17
|
-
function isNullOrUndefined(value) {
|
|
18
|
-
return value === null || value === undefined;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const Viewport = {
|
|
22
|
-
isViewport: (value) => {
|
|
23
|
-
return (!isNullOrUndefined(value.offsetX) &&
|
|
24
|
-
!isNullOrUndefined(value.offsetY) &&
|
|
25
|
-
!isNullOrUndefined(value.zoom) &&
|
|
26
|
-
!isNullOrUndefined(value.viewBackgroundColor));
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
|
|
30
11
|
const Path = {
|
|
31
12
|
parent(path) {
|
|
32
13
|
if (path.length === 0) {
|
|
@@ -165,6 +146,92 @@ const Path = {
|
|
|
165
146
|
}
|
|
166
147
|
};
|
|
167
148
|
|
|
149
|
+
const isSetViewportOperation = (value) => {
|
|
150
|
+
return value.type === 'set_viewport';
|
|
151
|
+
};
|
|
152
|
+
const inverse = (op) => {
|
|
153
|
+
switch (op.type) {
|
|
154
|
+
case 'insert_node': {
|
|
155
|
+
return Object.assign(Object.assign({}, op), { type: 'remove_node' });
|
|
156
|
+
}
|
|
157
|
+
case 'remove_node': {
|
|
158
|
+
return Object.assign(Object.assign({}, op), { type: 'insert_node' });
|
|
159
|
+
}
|
|
160
|
+
case 'move_node': {
|
|
161
|
+
const { newPath, path } = op;
|
|
162
|
+
// PERF: in this case the move operation is a no-op anyways.
|
|
163
|
+
if (Path.equals(newPath, path)) {
|
|
164
|
+
return op;
|
|
165
|
+
}
|
|
166
|
+
// If the move happens completely within a single parent the path and
|
|
167
|
+
// newPath are stable with respect to each other.
|
|
168
|
+
if (Path.isSibling(path, newPath)) {
|
|
169
|
+
return Object.assign(Object.assign({}, op), { path: newPath, newPath: path });
|
|
170
|
+
}
|
|
171
|
+
// If the move does not happen within a single parent it is possible
|
|
172
|
+
// for the move to impact the true path to the location where the node
|
|
173
|
+
// was removed from and where it was inserted. We have to adjust for this
|
|
174
|
+
// and find the original path. We can accomplish this (only in non-sibling)
|
|
175
|
+
// moves by looking at the impact of the move operation on the node
|
|
176
|
+
// after the original move path.
|
|
177
|
+
const inversePath = Path.transform(path, op);
|
|
178
|
+
const inverseNewPath = Path.transform(Path.next(path), op);
|
|
179
|
+
return Object.assign(Object.assign({}, op), { path: inversePath, newPath: inverseNewPath });
|
|
180
|
+
}
|
|
181
|
+
case 'set_node': {
|
|
182
|
+
const { properties, newProperties } = op;
|
|
183
|
+
return Object.assign(Object.assign({}, op), { properties: newProperties, newProperties: properties });
|
|
184
|
+
}
|
|
185
|
+
case 'set_selection': {
|
|
186
|
+
const { properties, newProperties } = op;
|
|
187
|
+
if (properties == null) {
|
|
188
|
+
return Object.assign(Object.assign({}, op), { properties: newProperties, newProperties: null });
|
|
189
|
+
}
|
|
190
|
+
else if (newProperties == null) {
|
|
191
|
+
return Object.assign(Object.assign({}, op), { properties: null, newProperties: properties });
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
return Object.assign(Object.assign({}, op), { properties: newProperties, newProperties: properties });
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
case 'set_viewport': {
|
|
198
|
+
const { properties, newProperties } = op;
|
|
199
|
+
if (properties == null) {
|
|
200
|
+
return Object.assign(Object.assign({}, op), { properties: newProperties, newProperties: newProperties });
|
|
201
|
+
}
|
|
202
|
+
else if (newProperties == null) {
|
|
203
|
+
return Object.assign(Object.assign({}, op), { properties: properties, newProperties: properties });
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
return Object.assign(Object.assign({}, op), { properties: newProperties, newProperties: properties });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
const PlaitOperation = {
|
|
212
|
+
isSetViewportOperation,
|
|
213
|
+
inverse
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
// record richtext type status
|
|
217
|
+
const FLUSHING = new WeakMap();
|
|
218
|
+
const IS_TEXT_EDITABLE = new WeakMap();
|
|
219
|
+
const BOARD_TO_ON_CHANGE = new WeakMap();
|
|
220
|
+
const HOST_TO_ROUGH_SVG = new WeakMap();
|
|
221
|
+
|
|
222
|
+
function isNullOrUndefined(value) {
|
|
223
|
+
return value === null || value === undefined;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
const Viewport = {
|
|
227
|
+
isViewport: (value) => {
|
|
228
|
+
return (!isNullOrUndefined(value.offsetX) &&
|
|
229
|
+
!isNullOrUndefined(value.offsetY) &&
|
|
230
|
+
!isNullOrUndefined(value.zoom) &&
|
|
231
|
+
!isNullOrUndefined(value.viewBackgroundColor));
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
|
|
168
235
|
const PlaitNode = {
|
|
169
236
|
parent: (board, path) => {
|
|
170
237
|
const parentPath = Path.parent(path);
|
|
@@ -442,6 +509,9 @@ function withBoard(board) {
|
|
|
442
509
|
return board;
|
|
443
510
|
}
|
|
444
511
|
|
|
512
|
+
const SAVING = new WeakMap();
|
|
513
|
+
const MERGING = new WeakMap();
|
|
514
|
+
|
|
445
515
|
const NS = 'http://www.w3.org/2000/svg';
|
|
446
516
|
function toPoint(x, y, container) {
|
|
447
517
|
const rect = container.getBoundingClientRect();
|
|
@@ -464,155 +534,6 @@ function createText(x, y, fill, textContent) {
|
|
|
464
534
|
return text;
|
|
465
535
|
}
|
|
466
536
|
|
|
467
|
-
function toRectangleClient(points) {
|
|
468
|
-
const xArray = points.map(ele => ele[0]);
|
|
469
|
-
const yArray = points.map(ele => ele[1]);
|
|
470
|
-
const xMin = Math.min(...xArray);
|
|
471
|
-
const xMax = Math.max(...xArray);
|
|
472
|
-
const yMin = Math.min(...yArray);
|
|
473
|
-
const yMax = Math.max(...yArray);
|
|
474
|
-
const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };
|
|
475
|
-
return rect;
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
function transformPoints(board, points) {
|
|
479
|
-
const newPoints = points.map(point => {
|
|
480
|
-
return transformPoint(board, point);
|
|
481
|
-
});
|
|
482
|
-
return newPoints;
|
|
483
|
-
}
|
|
484
|
-
function transformPoint(board, point) {
|
|
485
|
-
const { width, height } = board.host.getBoundingClientRect();
|
|
486
|
-
const viewBox = getViewBox(board);
|
|
487
|
-
let x = (point[0] / width) * viewBox.width + viewBox.minX;
|
|
488
|
-
let y = (point[1] / height) * viewBox.height + viewBox.minY;
|
|
489
|
-
const newPoint = [x - board.viewport.offsetX, y - board.viewport.offsetY];
|
|
490
|
-
return newPoint;
|
|
491
|
-
}
|
|
492
|
-
function getViewBox(board) {
|
|
493
|
-
const { width, height } = board.host.getBoundingClientRect();
|
|
494
|
-
const scaleWidth = (board.viewport.zoom - 1) * width;
|
|
495
|
-
const scaleHeight = (board.viewport.zoom - 1) * height;
|
|
496
|
-
const viewBoxWidth = width - scaleWidth;
|
|
497
|
-
const viewBoxHeight = height - scaleHeight;
|
|
498
|
-
const minX = scaleWidth / 2;
|
|
499
|
-
const minY = scaleHeight / 2;
|
|
500
|
-
return { minX, minY: minY, width: viewBoxWidth, height: viewBoxHeight };
|
|
501
|
-
}
|
|
502
|
-
function isNoSelectionElement(e) {
|
|
503
|
-
var _a;
|
|
504
|
-
return (_a = e.target) === null || _a === void 0 ? void 0 : _a.closest('.plait-board-attached');
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
function withSelection(board) {
|
|
508
|
-
const { mousedown, mousemove, globalMouseup } = board;
|
|
509
|
-
let start = null;
|
|
510
|
-
let end = null;
|
|
511
|
-
board.mousedown = (event) => {
|
|
512
|
-
mousedown(event);
|
|
513
|
-
};
|
|
514
|
-
board.mousemove = (event) => {
|
|
515
|
-
const movedTarget = toPoint(event.x, event.y, board.host);
|
|
516
|
-
if (start) {
|
|
517
|
-
const rectangleClient = toRectangleClient([start, movedTarget]);
|
|
518
|
-
if (start && Math.hypot(rectangleClient.width, rectangleClient.height) > 5) {
|
|
519
|
-
end = movedTarget;
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
mousemove(event);
|
|
523
|
-
};
|
|
524
|
-
board.globalMouseup = (event) => {
|
|
525
|
-
if (isNoSelectionElement(event)) {
|
|
526
|
-
return globalMouseup(event);
|
|
527
|
-
}
|
|
528
|
-
else {
|
|
529
|
-
if (!start && event.target instanceof Node && board.host.contains(event.target)) {
|
|
530
|
-
start = toPoint(event.x, event.y, board.host);
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
if (start) {
|
|
534
|
-
Transforms.setSelection(board, { anchor: start, focus: start });
|
|
535
|
-
}
|
|
536
|
-
else {
|
|
537
|
-
Transforms.setSelection(board, null);
|
|
538
|
-
}
|
|
539
|
-
start = null;
|
|
540
|
-
end = null;
|
|
541
|
-
globalMouseup(event);
|
|
542
|
-
};
|
|
543
|
-
return board;
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
const isSetViewportOperation = (value) => {
|
|
547
|
-
return value.type === 'set_viewport';
|
|
548
|
-
};
|
|
549
|
-
const inverse = (op) => {
|
|
550
|
-
switch (op.type) {
|
|
551
|
-
case 'insert_node': {
|
|
552
|
-
return Object.assign(Object.assign({}, op), { type: 'remove_node' });
|
|
553
|
-
}
|
|
554
|
-
case 'remove_node': {
|
|
555
|
-
return Object.assign(Object.assign({}, op), { type: 'insert_node' });
|
|
556
|
-
}
|
|
557
|
-
case 'move_node': {
|
|
558
|
-
const { newPath, path } = op;
|
|
559
|
-
// PERF: in this case the move operation is a no-op anyways.
|
|
560
|
-
if (Path.equals(newPath, path)) {
|
|
561
|
-
return op;
|
|
562
|
-
}
|
|
563
|
-
// If the move happens completely within a single parent the path and
|
|
564
|
-
// newPath are stable with respect to each other.
|
|
565
|
-
if (Path.isSibling(path, newPath)) {
|
|
566
|
-
return Object.assign(Object.assign({}, op), { path: newPath, newPath: path });
|
|
567
|
-
}
|
|
568
|
-
// If the move does not happen within a single parent it is possible
|
|
569
|
-
// for the move to impact the true path to the location where the node
|
|
570
|
-
// was removed from and where it was inserted. We have to adjust for this
|
|
571
|
-
// and find the original path. We can accomplish this (only in non-sibling)
|
|
572
|
-
// moves by looking at the impact of the move operation on the node
|
|
573
|
-
// after the original move path.
|
|
574
|
-
const inversePath = Path.transform(path, op);
|
|
575
|
-
const inverseNewPath = Path.transform(Path.next(path), op);
|
|
576
|
-
return Object.assign(Object.assign({}, op), { path: inversePath, newPath: inverseNewPath });
|
|
577
|
-
}
|
|
578
|
-
case 'set_node': {
|
|
579
|
-
const { properties, newProperties } = op;
|
|
580
|
-
return Object.assign(Object.assign({}, op), { properties: newProperties, newProperties: properties });
|
|
581
|
-
}
|
|
582
|
-
case 'set_selection': {
|
|
583
|
-
const { properties, newProperties } = op;
|
|
584
|
-
if (properties == null) {
|
|
585
|
-
return Object.assign(Object.assign({}, op), { properties: newProperties, newProperties: null });
|
|
586
|
-
}
|
|
587
|
-
else if (newProperties == null) {
|
|
588
|
-
return Object.assign(Object.assign({}, op), { properties: null, newProperties: properties });
|
|
589
|
-
}
|
|
590
|
-
else {
|
|
591
|
-
return Object.assign(Object.assign({}, op), { properties: newProperties, newProperties: properties });
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
case 'set_viewport': {
|
|
595
|
-
const { properties, newProperties } = op;
|
|
596
|
-
if (properties == null) {
|
|
597
|
-
return Object.assign(Object.assign({}, op), { properties: newProperties, newProperties: newProperties });
|
|
598
|
-
}
|
|
599
|
-
else if (newProperties == null) {
|
|
600
|
-
return Object.assign(Object.assign({}, op), { properties: properties, newProperties: properties });
|
|
601
|
-
}
|
|
602
|
-
else {
|
|
603
|
-
return Object.assign(Object.assign({}, op), { properties: newProperties, newProperties: properties });
|
|
604
|
-
}
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
};
|
|
608
|
-
const PlaitOperation = {
|
|
609
|
-
isSetViewportOperation,
|
|
610
|
-
inverse
|
|
611
|
-
};
|
|
612
|
-
|
|
613
|
-
const SAVING = new WeakMap();
|
|
614
|
-
const MERGING = new WeakMap();
|
|
615
|
-
|
|
616
537
|
const IS_IOS = typeof navigator !== 'undefined' &&
|
|
617
538
|
typeof window !== 'undefined' &&
|
|
618
539
|
/iPad|iPhone|iPod/.test(navigator.userAgent) &&
|
|
@@ -626,6 +547,17 @@ const IS_CHROME = typeof navigator !== 'undefined' && /Chrome/i.test(navigator.u
|
|
|
626
547
|
// Native beforeInput events don't work well with react on Chrome 75 and older, Chrome 76+ can use beforeInput
|
|
627
548
|
const IS_CHROME_LEGACY = typeof navigator !== 'undefined' && /Chrome?\/(?:[0-7][0-5]|[0-6][0-9])/i.test(navigator.userAgent);
|
|
628
549
|
|
|
550
|
+
function toRectangleClient(points) {
|
|
551
|
+
const xArray = points.map(ele => ele[0]);
|
|
552
|
+
const yArray = points.map(ele => ele[1]);
|
|
553
|
+
const xMin = Math.min(...xArray);
|
|
554
|
+
const xMax = Math.max(...xArray);
|
|
555
|
+
const yMin = Math.min(...yArray);
|
|
556
|
+
const yMax = Math.max(...yArray);
|
|
557
|
+
const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };
|
|
558
|
+
return rect;
|
|
559
|
+
}
|
|
560
|
+
|
|
629
561
|
/**
|
|
630
562
|
* Hotkey mappings for each platform.
|
|
631
563
|
*/
|
|
@@ -769,6 +701,35 @@ function rotate(x1, y1, x2, y2, angle) {
|
|
|
769
701
|
return [(x1 - x2) * Math.cos(angle) - (y1 - y2) * Math.sin(angle) + x2, (x1 - x2) * Math.sin(angle) + (y1 - y2) * Math.cos(angle) + y2];
|
|
770
702
|
}
|
|
771
703
|
|
|
704
|
+
function transformPoints(board, points) {
|
|
705
|
+
const newPoints = points.map(point => {
|
|
706
|
+
return transformPoint(board, point);
|
|
707
|
+
});
|
|
708
|
+
return newPoints;
|
|
709
|
+
}
|
|
710
|
+
function transformPoint(board, point) {
|
|
711
|
+
const { width, height } = board.host.getBoundingClientRect();
|
|
712
|
+
const viewBox = getViewBox(board);
|
|
713
|
+
let x = (point[0] / width) * viewBox.width + viewBox.minX;
|
|
714
|
+
let y = (point[1] / height) * viewBox.height + viewBox.minY;
|
|
715
|
+
const newPoint = [x - board.viewport.offsetX, y - board.viewport.offsetY];
|
|
716
|
+
return newPoint;
|
|
717
|
+
}
|
|
718
|
+
function getViewBox(board) {
|
|
719
|
+
const { width, height } = board.host.getBoundingClientRect();
|
|
720
|
+
const scaleWidth = (board.viewport.zoom - 1) * width;
|
|
721
|
+
const scaleHeight = (board.viewport.zoom - 1) * height;
|
|
722
|
+
const viewBoxWidth = width - scaleWidth;
|
|
723
|
+
const viewBoxHeight = height - scaleHeight;
|
|
724
|
+
const minX = scaleWidth / 2;
|
|
725
|
+
const minY = scaleHeight / 2;
|
|
726
|
+
return { minX, minY: minY, width: viewBoxWidth, height: viewBoxHeight };
|
|
727
|
+
}
|
|
728
|
+
function isNoSelectionElement(e) {
|
|
729
|
+
var _a;
|
|
730
|
+
return (_a = e.target) === null || _a === void 0 ? void 0 : _a.closest('.plait-board-attached');
|
|
731
|
+
}
|
|
732
|
+
|
|
772
733
|
/**
|
|
773
734
|
* Check whether to merge an operation into the previous operation.
|
|
774
735
|
*/
|
|
@@ -782,7 +743,7 @@ const shouldMerge = (op, prev) => {
|
|
|
782
743
|
* Check whether an operation needs to be saved to the history.
|
|
783
744
|
*/
|
|
784
745
|
const shouldSave = (op, prev) => {
|
|
785
|
-
if (op.type === 'set_selection') {
|
|
746
|
+
if (op.type === 'set_selection' || op.type === 'set_viewport') {
|
|
786
747
|
return false;
|
|
787
748
|
}
|
|
788
749
|
return true;
|
|
@@ -915,6 +876,45 @@ function withHistroy(board) {
|
|
|
915
876
|
return board;
|
|
916
877
|
}
|
|
917
878
|
|
|
879
|
+
function withSelection(board) {
|
|
880
|
+
const { mousedown, mousemove, globalMouseup } = board;
|
|
881
|
+
let start = null;
|
|
882
|
+
let end = null;
|
|
883
|
+
board.mousedown = (event) => {
|
|
884
|
+
mousedown(event);
|
|
885
|
+
};
|
|
886
|
+
board.mousemove = (event) => {
|
|
887
|
+
const movedTarget = toPoint(event.x, event.y, board.host);
|
|
888
|
+
if (start) {
|
|
889
|
+
const rectangleClient = toRectangleClient([start, movedTarget]);
|
|
890
|
+
if (start && Math.hypot(rectangleClient.width, rectangleClient.height) > 5) {
|
|
891
|
+
end = movedTarget;
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
mousemove(event);
|
|
895
|
+
};
|
|
896
|
+
board.globalMouseup = (event) => {
|
|
897
|
+
if (isNoSelectionElement(event)) {
|
|
898
|
+
return globalMouseup(event);
|
|
899
|
+
}
|
|
900
|
+
else {
|
|
901
|
+
if (!start && event.target instanceof Node && board.host.contains(event.target)) {
|
|
902
|
+
start = toPoint(event.x, event.y, board.host);
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
if (start) {
|
|
906
|
+
Transforms.setSelection(board, { anchor: start, focus: start });
|
|
907
|
+
}
|
|
908
|
+
else {
|
|
909
|
+
Transforms.setSelection(board, null);
|
|
910
|
+
}
|
|
911
|
+
start = null;
|
|
912
|
+
end = null;
|
|
913
|
+
globalMouseup(event);
|
|
914
|
+
};
|
|
915
|
+
return board;
|
|
916
|
+
}
|
|
917
|
+
|
|
918
918
|
class PlaitElementComponent {
|
|
919
919
|
constructor(renderer2, viewContainerRef) {
|
|
920
920
|
this.renderer2 = renderer2;
|
|
@@ -1006,6 +1006,9 @@ class PlaitBoardComponent {
|
|
|
1006
1006
|
var _a;
|
|
1007
1007
|
return (_a = this.board) === null || _a === void 0 ? void 0 : _a.selection;
|
|
1008
1008
|
}
|
|
1009
|
+
get focused() {
|
|
1010
|
+
return this.isFocused;
|
|
1011
|
+
}
|
|
1009
1012
|
ngOnInit() {
|
|
1010
1013
|
const roughSVG = rough.svg(this.host, { options: { roughness: 0, strokeWidth: 1 } });
|
|
1011
1014
|
HOST_TO_ROUGH_SVG.set(this.host, roughSVG);
|
|
@@ -1153,7 +1156,7 @@ class PlaitBoardComponent {
|
|
|
1153
1156
|
}
|
|
1154
1157
|
}
|
|
1155
1158
|
PlaitBoardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PlaitBoardComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
1156
|
-
PlaitBoardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: PlaitBoardComponent, selector: "plait-board", inputs: { plaitValue: "plaitValue", plaitViewport: "plaitViewport", plaitPlugins: "plaitPlugins", plaitReadonly: "plaitReadonly", plaitAllowClearBoard: "plaitAllowClearBoard" }, outputs: { plaitChange: "plaitChange", plaitBoardInitialized: "plaitBoardInitialized" }, host: { properties: { "class": "this.hostClass" } }, viewQueries: [{ propertyName: "svg", first: true, predicate: ["svg"], descendants: true, static: true }], ngImport: i0, template: `
|
|
1159
|
+
PlaitBoardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: PlaitBoardComponent, selector: "plait-board", inputs: { plaitValue: "plaitValue", plaitViewport: "plaitViewport", plaitPlugins: "plaitPlugins", plaitReadonly: "plaitReadonly", plaitAllowClearBoard: "plaitAllowClearBoard" }, outputs: { plaitChange: "plaitChange", plaitBoardInitialized: "plaitBoardInitialized" }, host: { properties: { "class": "this.hostClass", "class.focused": "this.focused" } }, viewQueries: [{ propertyName: "svg", first: true, predicate: ["svg"], descendants: true, static: true }], ngImport: i0, template: `
|
|
1157
1160
|
<svg #svg width="100%" height="100%" style="position: relative"></svg>
|
|
1158
1161
|
<div *ngIf="isFocused" class="plait-toolbar island zoom-toolbar plait-board-attached">
|
|
1159
1162
|
<button class="item" (mousedown)="zoomOut($event)">-</button>
|
|
@@ -1215,6 +1218,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
1215
1218
|
type: Output
|
|
1216
1219
|
}], plaitBoardInitialized: [{
|
|
1217
1220
|
type: Output
|
|
1221
|
+
}], focused: [{
|
|
1222
|
+
type: HostBinding,
|
|
1223
|
+
args: ['class.focused']
|
|
1218
1224
|
}] } });
|
|
1219
1225
|
|
|
1220
1226
|
class PlaitModule {
|