@plait/core 0.0.41 → 0.0.43

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.
@@ -6,21 +6,18 @@ import { PlaitBoard, PlaitBoardChangeEvent } from '../interfaces/board';
6
6
  import { PlaitElement } from '../interfaces/element';
7
7
  import { PlaitPlugin } from '../interfaces/plugin';
8
8
  import { Viewport } from '../interfaces/viewport';
9
+ import { ViewBox } from '../utils/board';
9
10
  import * as i0 from "@angular/core";
10
11
  export declare class PlaitBoardComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {
11
12
  cdr: ChangeDetectorRef;
12
- private elementRef;
13
13
  private renderer2;
14
+ private elementRef;
14
15
  hasInitialized: boolean;
15
- get hostClass(): string;
16
16
  board: PlaitBoard;
17
17
  roughSVG: RoughSVG;
18
18
  destroy$: Subject<any>;
19
- svg: ElementRef;
20
- toolbarTemplateRef: TemplateRef<any>;
21
- private _viewZoom;
22
- get viewZoom(): number;
23
19
  isMoving: boolean;
20
+ autoFitPadding: number;
24
21
  get isMoveMode(): boolean;
25
22
  get host(): SVGElement;
26
23
  get isFocused(): import("../interfaces").Selection | null;
@@ -31,16 +28,24 @@ export declare class PlaitBoardComponent implements OnInit, OnChanges, AfterView
31
28
  plaitAllowClearBoard: boolean;
32
29
  plaitChange: EventEmitter<PlaitBoardChangeEvent>;
33
30
  plaitBoardInitialized: EventEmitter<PlaitBoard>;
31
+ get hostClass(): string;
34
32
  get readonly(): boolean;
35
33
  get moving(): boolean;
36
34
  get focused(): import("../interfaces").Selection | null;
37
- constructor(cdr: ChangeDetectorRef, elementRef: ElementRef, renderer2: Renderer2);
35
+ svg: ElementRef;
36
+ toolbarTemplateRef: TemplateRef<any>;
37
+ contentContainer: ElementRef;
38
+ constructor(cdr: ChangeDetectorRef, renderer2: Renderer2, elementRef: ElementRef);
38
39
  ngOnInit(): void;
39
40
  ngOnChanges(changes: SimpleChanges): void;
40
41
  ngAfterViewInit(): void;
41
42
  initializePlugins(): void;
42
43
  initializeEvents(): void;
43
- refreshViewport(): void;
44
+ initContainerSize(): void;
45
+ resizeViewport(): void;
46
+ setScroll(left: number, top: number): void;
47
+ getScrollOffset(left: number, top: number): void;
48
+ viewportChange(viewBox: ViewBox): void;
44
49
  updateViewport(): void;
45
50
  trackBy: (index: number, element: PlaitElement) => number;
46
51
  changeMoveMode(cursorStatus: BaseCursorStatus): void;
@@ -48,7 +53,7 @@ export declare class PlaitBoardComponent implements OnInit, OnChanges, AfterView
48
53
  zoomInHandle(): void;
49
54
  zoomOutHandle(): void;
50
55
  resetZoomHandel(): void;
51
- zoomChange(): void;
56
+ setViewport(options: Partial<Viewport>): void;
52
57
  ngOnDestroy(): void;
53
58
  movingChange(isMoving: boolean): void;
54
59
  static ɵfac: i0.ɵɵFactoryDeclaration<PlaitBoardComponent, never>;
@@ -1 +1,2 @@
1
1
  export declare const CLIP_BOARD_FORMAT_KEY = "x-plait-fragment";
2
+ export declare const SCROLL_BAR_WIDTH = 20;
@@ -1,6 +1,6 @@
1
1
  import { OnChanges, OnDestroy, OnInit, Renderer2, SimpleChanges, ViewContainerRef } from '@angular/core';
2
- import { PlaitElement } from '../../interfaces/element';
3
2
  import { PlaitBoard } from '../../interfaces/board';
3
+ import { PlaitElement } from '../../interfaces/element';
4
4
  import { Selection } from '../../interfaces/selection';
5
5
  import { Viewport } from '../../interfaces/viewport';
6
6
  import * as i0 from "@angular/core";
@@ -18,7 +18,6 @@ export declare class PlaitElementComponent implements OnInit, OnChanges, OnDestr
18
18
  constructor(renderer2: Renderer2, viewContainerRef: ViewContainerRef);
19
19
  ngOnInit(): void;
20
20
  initialize(): void;
21
- transform(first?: boolean): void;
22
21
  drawElement(): void;
23
22
  ngOnChanges(changes: SimpleChanges): void;
24
23
  ngOnDestroy(): void;
@@ -2,9 +2,11 @@ import { EventEmitter } from '@angular/core';
2
2
  import { BaseCursorStatus, CursorStatus } from '../../interfaces';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class PlaitToolbarComponent {
5
+ _viewZoom: number;
5
6
  hostClass: string;
6
7
  cursorStatus: CursorStatus;
7
- viewZoom: number;
8
+ set viewZoom(zoom: number);
9
+ get viewZoom(): number;
8
10
  moveHandle: EventEmitter<BaseCursorStatus>;
9
11
  adaptHandle: EventEmitter<any>;
10
12
  zoomInHandle: EventEmitter<any>;
@@ -1,30 +1,30 @@
1
- import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, HostBinding, Input, Output, ViewChild } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, HostBinding, Input, Output, ViewChild } from '@angular/core';
2
2
  import rough from 'roughjs/bin/rough';
3
3
  import { fromEvent, Subject } from 'rxjs';
4
4
  import { filter, takeUntil } from 'rxjs/operators';
5
+ import { SCROLL_BAR_WIDTH } from '../constants';
5
6
  import { BaseCursorStatus } from '../interfaces';
6
- import { PlaitOperation } from '../interfaces/operation';
7
7
  import { createBoard } from '../plugins/create-board';
8
8
  import { withBoard } from '../plugins/with-board';
9
9
  import { withHistory } from '../plugins/with-history';
10
10
  import { withMove } from '../plugins/with-move';
11
11
  import { withSelection } from '../plugins/with-selection';
12
12
  import { Transforms } from '../transfroms';
13
- import { getViewBox, transformViewZoom, transformZoom, updateCursorStatus } from '../utils/board';
13
+ import { calculateZoom, getViewBox, getViewportClientBox, updateCursorStatus } from '../utils/board';
14
14
  import { BOARD_TO_ON_CHANGE, HOST_TO_ROUGH_SVG, IS_TEXT_EDITABLE, PLAIT_BOARD_TO_COMPONENT } from '../utils/weak-maps';
15
15
  import * as i0 from "@angular/core";
16
- import * as i1 from "../core/toolbar/toolbar.component";
17
- import * as i2 from "../core/element/element.component";
16
+ import * as i1 from "../core/element/element.component";
17
+ import * as i2 from "../core/toolbar/toolbar.component";
18
18
  import * as i3 from "@angular/common";
19
19
  export class PlaitBoardComponent {
20
- constructor(cdr, elementRef, renderer2) {
20
+ constructor(cdr, renderer2, elementRef) {
21
21
  this.cdr = cdr;
22
- this.elementRef = elementRef;
23
22
  this.renderer2 = renderer2;
23
+ this.elementRef = elementRef;
24
24
  this.hasInitialized = false;
25
25
  this.destroy$ = new Subject();
26
- this._viewZoom = 100;
27
26
  this.isMoving = false;
27
+ this.autoFitPadding = 8;
28
28
  this.plaitValue = [];
29
29
  this.plaitPlugins = [];
30
30
  this.plaitReadonly = false;
@@ -35,16 +35,6 @@ export class PlaitBoardComponent {
35
35
  return index;
36
36
  };
37
37
  }
38
- get hostClass() {
39
- return `plait-board-container ${this.board.cursor}`;
40
- }
41
- get viewZoom() {
42
- const vZoom = transformZoom(this.board.viewport.zoom);
43
- if (this._viewZoom !== vZoom) {
44
- this._viewZoom = vZoom;
45
- }
46
- return vZoom;
47
- }
48
38
  get isMoveMode() {
49
39
  return this.board.cursor === BaseCursorStatus.move;
50
40
  }
@@ -54,11 +44,14 @@ export class PlaitBoardComponent {
54
44
  get isFocused() {
55
45
  return this.board?.selection;
56
46
  }
47
+ get hostClass() {
48
+ return `plait-board-container ${this.board.cursor}`;
49
+ }
57
50
  get readonly() {
58
51
  return this.plaitReadonly;
59
52
  }
60
53
  get moving() {
61
- return this.isMoving;
54
+ return this.board.cursor === BaseCursorStatus.move && this.isMoving;
62
55
  }
63
56
  get focused() {
64
57
  return this.isFocused;
@@ -68,7 +61,6 @@ export class PlaitBoardComponent {
68
61
  HOST_TO_ROUGH_SVG.set(this.host, roughSVG);
69
62
  this.initializePlugins();
70
63
  this.initializeEvents();
71
- this.updateViewport();
72
64
  PLAIT_BOARD_TO_COMPONENT.set(this.board, this);
73
65
  BOARD_TO_ON_CHANGE.set(this.board, () => {
74
66
  this.cdr.detectChanges();
@@ -78,10 +70,7 @@ export class PlaitBoardComponent {
78
70
  viewport: this.board.viewport,
79
71
  selection: this.board.selection
80
72
  };
81
- // update viewBox
82
- if (this.board.operations.some(op => PlaitOperation.isSetViewportOperation(op))) {
83
- this.updateViewport();
84
- }
73
+ this.updateViewport();
85
74
  this.plaitChange.emit(changeEvent);
86
75
  });
87
76
  this.hasInitialized = true;
@@ -95,6 +84,8 @@ export class PlaitBoardComponent {
95
84
  }
96
85
  ngAfterViewInit() {
97
86
  this.plaitBoardInitialized.emit(this.board);
87
+ this.initContainerSize();
88
+ this.updateViewport();
98
89
  }
99
90
  initializePlugins() {
100
91
  const options = { readonly: this.plaitReadonly, allowClearBoard: this.plaitAllowClearBoard };
@@ -128,19 +119,6 @@ export class PlaitBoardComponent {
128
119
  .subscribe((event) => {
129
120
  this.board.dblclick(event);
130
121
  });
131
- fromEvent(this.host, 'wheel')
132
- .pipe(takeUntil(this.destroy$))
133
- .subscribe((event) => {
134
- if (this.isFocused) {
135
- event.preventDefault();
136
- const viewport = this.board.viewport;
137
- Transforms.setViewport(this.board, {
138
- ...viewport,
139
- offsetX: viewport?.offsetX - event.deltaX,
140
- offsetY: viewport?.offsetY - event.deltaY
141
- });
142
- }
143
- });
144
122
  fromEvent(document, 'keydown')
145
123
  .pipe(takeUntil(this.destroy$), filter(() => {
146
124
  return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;
@@ -179,18 +157,70 @@ export class PlaitBoardComponent {
179
157
  this.board?.setFragment(event.clipboardData);
180
158
  this.board?.deleteFragment(event.clipboardData);
181
159
  });
160
+ fromEvent(this.contentContainer.nativeElement, 'scroll')
161
+ .pipe(takeUntil(this.destroy$), filter(() => {
162
+ return !!this.isFocused;
163
+ }))
164
+ .subscribe((event) => {
165
+ const scrollLeft = event.target.scrollLeft;
166
+ const scrollTop = event.target.scrollTop;
167
+ this.getScrollOffset(scrollLeft, scrollTop);
168
+ this.setScroll(scrollLeft, scrollTop);
169
+ });
182
170
  window.onresize = () => {
183
- this.refreshViewport();
171
+ this.updateViewport();
184
172
  };
185
173
  }
186
- refreshViewport() {
187
- const viewBoxModel = getViewBox(this.board);
188
- const viewBoxValues = this.host.getAttribute('viewBox')?.split(',');
189
- this.renderer2.setAttribute(this.host, 'viewBox', `${viewBoxValues[0].trim()}, ${viewBoxValues[1].trim()}, ${viewBoxModel.width}, ${viewBoxModel.height}`);
174
+ initContainerSize() {
175
+ this.renderer2.setStyle(this.contentContainer.nativeElement, 'overflow', 'auto');
176
+ this.resizeViewport();
177
+ }
178
+ resizeViewport() {
179
+ const container = this.elementRef.nativeElement?.parentElement;
180
+ const containerRect = container?.getBoundingClientRect();
181
+ const width = `${containerRect.width + SCROLL_BAR_WIDTH}px`;
182
+ const height = `${containerRect.height + SCROLL_BAR_WIDTH}px`;
183
+ this.renderer2.setStyle(this.contentContainer.nativeElement, 'width', width);
184
+ this.renderer2.setStyle(this.contentContainer.nativeElement, 'height', height);
185
+ this.renderer2.setStyle(this.contentContainer.nativeElement, 'maxWidth', width);
186
+ this.renderer2.setStyle(this.contentContainer.nativeElement, 'maxHeight', height);
187
+ }
188
+ setScroll(left, top) {
189
+ const container = this.contentContainer.nativeElement;
190
+ container.scrollTo({
191
+ top,
192
+ left
193
+ });
194
+ }
195
+ getScrollOffset(left, top) {
196
+ const viewportBox = getViewportClientBox(this.board);
197
+ const viewBox = getViewBox(this.board);
198
+ const scrollLeftRatio = left / (viewBox.viewportWidth - viewportBox.width);
199
+ const scrollTopRatio = top / (viewBox.viewportHeight - viewportBox.height);
200
+ this.setViewport({
201
+ offsetXRatio: scrollLeftRatio,
202
+ offsetYRatio: scrollTopRatio
203
+ });
204
+ }
205
+ viewportChange(viewBox) {
206
+ const offsetXRatio = this.board.viewport.offsetXRatio;
207
+ const offsetYRatio = this.board.viewport.offsetYRatio;
208
+ const viewportBox = getViewportClientBox(this.board);
209
+ const { minX, minY, width, height, viewportWidth, viewportHeight } = viewBox;
210
+ const box = [minX, minY, width, height];
211
+ const scrollLeft = (viewportWidth - viewportBox.width) * offsetXRatio;
212
+ const scrollTop = (viewportHeight - viewportBox.height) * offsetYRatio;
213
+ this.resizeViewport();
214
+ this.renderer2.setStyle(this.host, 'display', 'block');
215
+ this.renderer2.setStyle(this.host, 'width', `${viewportWidth}px`);
216
+ this.renderer2.setStyle(this.host, 'height', `${viewportHeight}px`);
217
+ this.renderer2.setStyle(this.host, 'cursor', this.plaitReadonly ? 'grab' : 'default');
218
+ this.renderer2.setAttribute(this.host, 'viewBox', box.join());
219
+ this.setScroll(scrollLeft, scrollTop);
190
220
  }
191
221
  updateViewport() {
192
222
  const viewBox = getViewBox(this.board);
193
- this.renderer2.setAttribute(this.host, 'viewBox', `${viewBox.minX}, ${viewBox.minY}, ${viewBox.width}, ${viewBox.height}`);
223
+ this.viewportChange(viewBox);
194
224
  }
195
225
  // 拖拽模式
196
226
  changeMoveMode(cursorStatus) {
@@ -199,39 +229,45 @@ export class PlaitBoardComponent {
199
229
  }
200
230
  // 适应画布
201
231
  adaptHandle() {
202
- const viewport = this.board?.viewport;
203
- Transforms.setViewport(this.board, {
204
- ...viewport,
205
- offsetX: 0,
206
- offsetY: 0
232
+ const viewportBox = getViewportClientBox(this.board);
233
+ const rootGroup = this.host.firstChild;
234
+ const rootGroupBox = rootGroup.getBBox();
235
+ const viewportWidth = viewportBox.width - 2 * this.autoFitPadding;
236
+ const viewportHeight = viewportBox.height - 2 * this.autoFitPadding;
237
+ let zoom = this.board.viewport.zoom;
238
+ if (viewportWidth < rootGroupBox.width || viewportHeight < rootGroupBox.height) {
239
+ zoom = Math.min(viewportWidth / rootGroupBox.width, viewportHeight / rootGroupBox.height);
240
+ }
241
+ this.setViewport({
242
+ zoom: calculateZoom(zoom),
243
+ offsetXRatio: 0.5,
244
+ offsetYRatio: 0.5
207
245
  });
208
- this.resetZoomHandel();
209
246
  }
210
247
  // 放大
211
248
  zoomInHandle() {
212
- if (this._viewZoom >= 400) {
213
- return;
214
- }
215
- this._viewZoom += 10;
216
- this.zoomChange();
249
+ const zoom = this.board.viewport.zoom;
250
+ this.setViewport({
251
+ zoom: calculateZoom(zoom + 0.1)
252
+ });
217
253
  }
218
254
  // 缩小
219
255
  zoomOutHandle() {
220
- if (this._viewZoom <= 20) {
221
- return;
222
- }
223
- this._viewZoom -= 10;
224
- this.zoomChange();
256
+ const zoom = this.board.viewport.zoom;
257
+ this.setViewport({
258
+ zoom: calculateZoom(zoom - 0.1)
259
+ });
225
260
  }
226
261
  resetZoomHandel() {
227
- this._viewZoom = 100;
228
- this.zoomChange();
262
+ this.setViewport({
263
+ zoom: 1
264
+ });
229
265
  }
230
- zoomChange() {
266
+ setViewport(options) {
231
267
  const viewport = this.board?.viewport;
232
268
  Transforms.setViewport(this.board, {
233
269
  ...viewport,
234
- zoom: transformViewZoom(this._viewZoom)
270
+ ...options
235
271
  });
236
272
  }
237
273
  ngOnDestroy() {
@@ -243,69 +279,64 @@ export class PlaitBoardComponent {
243
279
  this.isMoving = isMoving;
244
280
  }
245
281
  }
246
- PlaitBoardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PlaitBoardComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
247
- 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.readonly": "this.readonly", "class.moving": "this.moving", "class.focused": "this.focused" } }, queries: [{ propertyName: "toolbarTemplateRef", first: true, predicate: ["plaitToolbar"], descendants: true }], viewQueries: [{ propertyName: "svg", first: true, predicate: ["svg"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
248
- <svg #svg width="100%" height="100%" style="position: relative"></svg>
282
+ PlaitBoardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PlaitBoardComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
283
+ 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.readonly": "this.readonly", "class.moving": "this.moving", "class.focused": "this.focused" } }, queries: [{ propertyName: "toolbarTemplateRef", first: true, predicate: ["plaitToolbar"], descendants: true }], viewQueries: [{ propertyName: "svg", first: true, predicate: ["svg"], descendants: true, static: true }, { propertyName: "contentContainer", first: true, predicate: ["container"], descendants: true, read: ElementRef, static: true }], usesOnChanges: true, ngImport: i0, template: `
284
+ <div class="container" #container>
285
+ <svg #svg width="100%" height="100%" style="position: relative"></svg>
286
+ <plait-element
287
+ *ngFor="let item of board.children; let index = index; trackBy: trackBy"
288
+ [index]="index"
289
+ [element]="item"
290
+ [board]="board"
291
+ [viewport]="board.viewport"
292
+ [selection]="board.selection"
293
+ [host]="host"
294
+ ></plait-element>
295
+ </div>
249
296
  <plait-toolbar
250
297
  *ngIf="isFocused && !toolbarTemplateRef"
251
298
  [cursorStatus]="board.cursor"
252
- [viewZoom]="viewZoom"
299
+ [viewZoom]="board.viewport!.zoom"
253
300
  (moveHandle)="changeMoveMode($event)"
254
301
  (adaptHandle)="adaptHandle()"
255
302
  (zoomInHandle)="zoomInHandle()"
256
303
  (zoomOutHandle)="zoomOutHandle()"
257
304
  (resetZoomHandel)="resetZoomHandel()"
258
305
  ></plait-toolbar>
259
- <plait-element
260
- *ngFor="let item of board.children; let index = index; trackBy: trackBy"
261
- [index]="index"
262
- [element]="item"
263
- [board]="board"
264
- [viewport]="board.viewport"
265
- [selection]="board.selection"
266
- [host]="host"
267
- ></plait-element>
268
306
  <ng-content></ng-content>
269
- `, isInline: true, components: [{ type: i1.PlaitToolbarComponent, selector: "plait-toolbar", inputs: ["cursorStatus", "viewZoom"], outputs: ["moveHandle", "adaptHandle", "zoomInHandle", "zoomOutHandle", "resetZoomHandel"] }, { type: i2.PlaitElementComponent, selector: "plait-element", inputs: ["index", "element", "board", "viewport", "selection", "host"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
307
+ `, isInline: true, components: [{ type: i1.PlaitElementComponent, selector: "plait-element", inputs: ["index", "element", "board", "viewport", "selection", "host"] }, { type: i2.PlaitToolbarComponent, selector: "plait-toolbar", inputs: ["cursorStatus", "viewZoom"], outputs: ["moveHandle", "adaptHandle", "zoomInHandle", "zoomOutHandle", "resetZoomHandel"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
270
308
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PlaitBoardComponent, decorators: [{
271
309
  type: Component,
272
310
  args: [{
273
311
  selector: 'plait-board',
274
312
  template: `
275
- <svg #svg width="100%" height="100%" style="position: relative"></svg>
313
+ <div class="container" #container>
314
+ <svg #svg width="100%" height="100%" style="position: relative"></svg>
315
+ <plait-element
316
+ *ngFor="let item of board.children; let index = index; trackBy: trackBy"
317
+ [index]="index"
318
+ [element]="item"
319
+ [board]="board"
320
+ [viewport]="board.viewport"
321
+ [selection]="board.selection"
322
+ [host]="host"
323
+ ></plait-element>
324
+ </div>
276
325
  <plait-toolbar
277
326
  *ngIf="isFocused && !toolbarTemplateRef"
278
327
  [cursorStatus]="board.cursor"
279
- [viewZoom]="viewZoom"
328
+ [viewZoom]="board.viewport!.zoom"
280
329
  (moveHandle)="changeMoveMode($event)"
281
330
  (adaptHandle)="adaptHandle()"
282
331
  (zoomInHandle)="zoomInHandle()"
283
332
  (zoomOutHandle)="zoomOutHandle()"
284
333
  (resetZoomHandel)="resetZoomHandel()"
285
334
  ></plait-toolbar>
286
- <plait-element
287
- *ngFor="let item of board.children; let index = index; trackBy: trackBy"
288
- [index]="index"
289
- [element]="item"
290
- [board]="board"
291
- [viewport]="board.viewport"
292
- [selection]="board.selection"
293
- [host]="host"
294
- ></plait-element>
295
335
  <ng-content></ng-content>
296
336
  `,
297
337
  changeDetection: ChangeDetectionStrategy.OnPush
298
338
  }]
299
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { hostClass: [{
300
- type: HostBinding,
301
- args: ['class']
302
- }], svg: [{
303
- type: ViewChild,
304
- args: ['svg', { static: true }]
305
- }], toolbarTemplateRef: [{
306
- type: ContentChild,
307
- args: ['plaitToolbar']
308
- }], plaitValue: [{
339
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { plaitValue: [{
309
340
  type: Input
310
341
  }], plaitViewport: [{
311
342
  type: Input
@@ -319,6 +350,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
319
350
  type: Output
320
351
  }], plaitBoardInitialized: [{
321
352
  type: Output
353
+ }], hostClass: [{
354
+ type: HostBinding,
355
+ args: ['class']
322
356
  }], readonly: [{
323
357
  type: HostBinding,
324
358
  args: ['class.readonly']
@@ -328,5 +362,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
328
362
  }], focused: [{
329
363
  type: HostBinding,
330
364
  args: ['class.focused']
365
+ }], svg: [{
366
+ type: ViewChild,
367
+ args: ['svg', { static: true }]
368
+ }], toolbarTemplateRef: [{
369
+ type: ContentChild,
370
+ args: ['plaitToolbar']
371
+ }], contentContainer: [{
372
+ type: ViewChild,
373
+ args: ['container', { read: ElementRef, static: true }]
331
374
  }] } });
332
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhaXQvc3JjL2JvYXJkL2JvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBRVosWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBSUwsTUFBTSxFQUlOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssTUFBTSxtQkFBbUIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7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Q3ZCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXNCVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQ7eUpBS08sU0FBUztzQkFEWixXQUFXO3VCQUFDLE9BQU87Z0JBWXBCLEdBQUc7c0JBREYsU0FBUzt1QkFBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUkzQixrQkFBa0I7c0JBRHhCLFlBQVk7dUJBQUMsY0FBYztnQkEyQm5CLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcscUJBQXFCO3NCQUE5QixNQUFNO2dCQUdILFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBTXpCLE1BQU07c0JBRFQsV0FBVzt1QkFBQyxjQUFjO2dCQU12QixPQUFPO3NCQURWLFdBQVc7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgcm91Z2ggZnJvbSAncm91Z2hqcy9iaW4vcm91Z2gnO1xuaW1wb3J0IHsgUm91Z2hTVkcgfSBmcm9tICdyb3VnaGpzL2Jpbi9zdmcnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJhc2VDdXJzb3JTdGF0dXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0Qm9hcmRDaGFuZ2VFdmVudCwgUGxhaXRCb2FyZE9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdE9wZXJhdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvb3BlcmF0aW9uJztcbmltcG9ydCB7IFBsYWl0UGx1Z2luIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wbHVnaW4nO1xuaW1wb3J0IHsgVmlld3BvcnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZpZXdwb3J0JztcbmltcG9ydCB7IGNyZWF0ZUJvYXJkIH0gZnJvbSAnLi4vcGx1Z2lucy9jcmVhdGUtYm9hcmQnO1xuaW1wb3J0IHsgd2l0aEJvYXJkIH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLWJvYXJkJztcbmltcG9ydCB7IHdpdGhIaXN0b3J5IH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLWhpc3RvcnknO1xuaW1wb3J0IHsgd2l0aE1vdmUgfSBmcm9tICcuLi9wbHVnaW5zL3dpdGgtbW92ZSc7XG5pbXBvcnQgeyB3aXRoU2VsZWN0aW9uIH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLXNlbGVjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmcm9tcyc7XG5pbXBvcnQgeyBnZXRWaWV3Qm94LCB0cmFuc2Zvcm1WaWV3Wm9vbSwgdHJhbnNmb3JtWm9vbSwgdXBkYXRlQ3Vyc29yU3RhdHVzIH0gZnJvbSAnLi4vdXRpbHMvYm9hcmQnO1xuaW1wb3J0IHsgQk9BUkRfVE9fT05fQ0hBTkdFLCBIT1NUX1RPX1JPVUdIX1NWRywgSVNfVEVYVF9FRElUQUJMRSwgUExBSVRfQk9BUkRfVE9fQ09NUE9ORU5UIH0gZnJvbSAnLi4vdXRpbHMvd2Vhay1tYXBzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwbGFpdC1ib2FyZCcsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPHN2ZyAjc3ZnIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPjwvc3ZnPlxuICAgICAgICA8cGxhaXQtdG9vbGJhclxuICAgICAgICAgICAgKm5nSWY9XCJpc0ZvY3VzZWQgJiYgIXRvb2xiYXJUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbY3Vyc29yU3RhdHVzXT1cImJvYXJkLmN1cnNvclwiXG4gICAgICAgICAgICBbdmlld1pvb21dPVwidmlld1pvb21cIlxuICAgICAgICAgICAgKG1vdmVIYW5kbGUpPVwiY2hhbmdlTW92ZU1vZGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoYWRhcHRIYW5kbGUpPVwiYWRhcHRIYW5kbGUoKVwiXG4gICAgICAgICAgICAoem9vbUluSGFuZGxlKT1cInpvb21JbkhhbmRsZSgpXCJcbiAgICAgICAgICAgICh6b29tT3V0SGFuZGxlKT1cInpvb21PdXRIYW5kbGUoKVwiXG4gICAgICAgICAgICAocmVzZXRab29tSGFuZGVsKT1cInJlc2V0Wm9vbUhhbmRlbCgpXCJcbiAgICAgICAgPjwvcGxhaXQtdG9vbGJhcj5cbiAgICAgICAgPHBsYWl0LWVsZW1lbnRcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJvYXJkLmNoaWxkcmVuOyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVwiXG4gICAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgW2VsZW1lbnRdPVwiaXRlbVwiXG4gICAgICAgICAgICBbYm9hcmRdPVwiYm9hcmRcIlxuICAgICAgICAgICAgW3ZpZXdwb3J0XT1cImJvYXJkLnZpZXdwb3J0XCJcbiAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwiYm9hcmQuc2VsZWN0aW9uXCJcbiAgICAgICAgICAgIFtob3N0XT1cImhvc3RcIlxuICAgICAgICA+PC9wbGFpdC1lbGVtZW50PlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgYCxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQbGFpdEJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgaGFzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIGdldCBob3N0Q2xhc3MoKSB7XG4gICAgICAgIHJldHVybiBgcGxhaXQtYm9hcmQtY29udGFpbmVyICR7dGhpcy5ib2FyZC5jdXJzb3J9YDtcbiAgICB9XG5cbiAgICBib2FyZCE6IFBsYWl0Qm9hcmQ7XG5cbiAgICByb3VnaFNWRyE6IFJvdWdoU1ZHO1xuXG4gICAgZGVzdHJveSQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBAVmlld0NoaWxkKCdzdmcnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHN2ZyE6IEVsZW1lbnRSZWY7XG5cbiAgICBAQ29udGVudENoaWxkKCdwbGFpdFRvb2xiYXInKVxuICAgIHB1YmxpYyB0b29sYmFyVGVtcGxhdGVSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHJpdmF0ZSBfdmlld1pvb206IG51bWJlciA9IDEwMDtcblxuICAgIHB1YmxpYyBnZXQgdmlld1pvb20oKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgdlpvb20gPSB0cmFuc2Zvcm1ab29tKHRoaXMuYm9hcmQudmlld3BvcnQuem9vbSk7XG4gICAgICAgIGlmICh0aGlzLl92aWV3Wm9vbSAhPT0gdlpvb20pIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdab29tID0gdlpvb207XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZab29tO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc01vdmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIGdldCBpc01vdmVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2FyZC5jdXJzb3IgPT09IEJhc2VDdXJzb3JTdGF0dXMubW92ZTtcbiAgICB9XG5cbiAgICBnZXQgaG9zdCgpOiBTVkdFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ZnLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0IGlzRm9jdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9hcmQ/LnNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBwbGFpdFZhbHVlOiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgQElucHV0KCkgcGxhaXRWaWV3cG9ydCE6IFZpZXdwb3J0O1xuXG4gICAgQElucHV0KCkgcGxhaXRQbHVnaW5zOiBQbGFpdFBsdWdpbltdID0gW107XG5cbiAgICBASW5wdXQoKSBwbGFpdFJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBwbGFpdEFsbG93Q2xlYXJCb2FyZCA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIHBsYWl0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8UGxhaXRCb2FyZENoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBwbGFpdEJvYXJkSW5pdGlhbGl6ZWQ6IEV2ZW50RW1pdHRlcjxQbGFpdEJvYXJkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MucmVhZG9ubHknKVxuICAgIGdldCByZWFkb25seSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxhaXRSZWFkb25seTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1vdmluZycpXG4gICAgZ2V0IG1vdmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNb3Zpbmc7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mb2N1c2VkJylcbiAgICBnZXQgZm9jdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGb2N1c2VkO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXIyOiBSZW5kZXJlcjIpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm91Z2hTVkcgPSByb3VnaC5zdmcodGhpcy5ob3N0IGFzIFNWR1NWR0VsZW1lbnQsIHsgb3B0aW9uczogeyByb3VnaG5lc3M6IDAsIHN0cm9rZVdpZHRoOiAxIH0gfSk7XG4gICAgICAgIEhPU1RfVE9fUk9VR0hfU1ZHLnNldCh0aGlzLmhvc3QsIHJvdWdoU1ZHKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUGx1Z2lucygpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVFdmVudHMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydCgpO1xuICAgICAgICBQTEFJVF9CT0FSRF9UT19DT01QT05FTlQuc2V0KHRoaXMuYm9hcmQsIHRoaXMpO1xuICAgICAgICBCT0FSRF9UT19PTl9DSEFOR0Uuc2V0KHRoaXMuYm9hcmQsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZUV2ZW50OiBQbGFpdEJvYXJkQ2hhbmdlRXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuYm9hcmQuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uczogdGhpcy5ib2FyZC5vcGVyYXRpb25zLFxuICAgICAgICAgICAgICAgIHZpZXdwb3J0OiB0aGlzLmJvYXJkLnZpZXdwb3J0LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5ib2FyZC5zZWxlY3Rpb25cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyB1cGRhdGUgdmlld0JveFxuICAgICAgICAgICAgaWYgKHRoaXMuYm9hcmQub3BlcmF0aW9ucy5zb21lKG9wID0+IFBsYWl0T3BlcmF0aW9uLmlzU2V0Vmlld3BvcnRPcGVyYXRpb24ob3ApKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGxhaXRDaGFuZ2UuZW1pdChjaGFuZ2VFdmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmhhc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlID0gY2hhbmdlc1sncGxhaXRWYWx1ZSddO1xuICAgICAgICBpZiAodmFsdWVDaGFuZ2UgJiYgdGhpcy5oYXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5ib2FyZC5jaGlsZHJlbiA9IHZhbHVlQ2hhbmdlLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBsYWl0Qm9hcmRJbml0aWFsaXplZC5lbWl0KHRoaXMuYm9hcmQpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVQbHVnaW5zKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zOiBQbGFpdEJvYXJkT3B0aW9ucyA9IHsgcmVhZG9ubHk6IHRoaXMucGxhaXRSZWFkb25seSwgYWxsb3dDbGVhckJvYXJkOiB0aGlzLnBsYWl0QWxsb3dDbGVhckJvYXJkIH07XG4gICAgICAgIGxldCBib2FyZCA9IHdpdGhNb3ZlKHdpdGhIaXN0b3J5KHdpdGhTZWxlY3Rpb24od2l0aEJvYXJkKGNyZWF0ZUJvYXJkKHRoaXMuaG9zdCwgdGhpcy5wbGFpdFZhbHVlLCBvcHRpb25zKSkpKSk7XG4gICAgICAgIHRoaXMucGxhaXRQbHVnaW5zLmZvckVhY2gocGx1Z2luID0+IHtcbiAgICAgICAgICAgIGJvYXJkID0gcGx1Z2luKGJvYXJkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYm9hcmQgPSBib2FyZDtcbiAgICAgICAgaWYgKHRoaXMucGxhaXRWaWV3cG9ydCkge1xuICAgICAgICAgICAgdGhpcy5ib2FyZC52aWV3cG9ydCA9IHRoaXMucGxhaXRWaWV3cG9ydDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRpYWxpemVFdmVudHMoKSB7XG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdtb3VzZWRvd24nKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLm1vdXNlZG93bihldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnbW91c2Vtb3ZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5tb3VzZW1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2V1cCcpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuZ2xvYmFsTW91c2V1cChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnZGJsY2xpY2snKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmRibGNsaWNrKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxXaGVlbEV2ZW50Pih0aGlzLmhvc3QsICd3aGVlbCcpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogV2hlZWxFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuYm9hcmQudmlld3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Vmlld3BvcnQodGhpcy5ib2FyZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udmlld3BvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRYOiB2aWV3cG9ydD8ub2Zmc2V0WCAtIGV2ZW50LmRlbHRhWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IHZpZXdwb3J0Py5vZmZzZXRZIC0gZXZlbnQuZGVsdGFZXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfVEVYVF9FRElUQUJMRS5nZXQodGhpcy5ib2FyZCkgJiYgISF0aGlzLmJvYXJkLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5rZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleXVwJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIUlTX1RFWFRfRURJVEFCTEUuZ2V0KHRoaXMuYm9hcmQpICYmICEhdGhpcy5ib2FyZC5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8ua2V5dXAoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2NvcHknKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfVEVYVF9FRElUQUJMRS5nZXQodGhpcy5ib2FyZCkgJiYgISF0aGlzLmJvYXJkLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5zZXRGcmFnbWVudChldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4oZG9jdW1lbnQsICdwYXN0ZScpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFJU19URVhUX0VESVRBQkxFLmdldCh0aGlzLmJvYXJkKSAmJiAhIXRoaXMuYm9hcmQuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5pbnNlcnRGcmFnbWVudChldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4oZG9jdW1lbnQsICdjdXQnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfVEVYVF9FRElUQUJMRS5nZXQodGhpcy5ib2FyZCkgJiYgISF0aGlzLmJvYXJkLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5zZXRGcmFnbWVudChldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5kZWxldGVGcmFnbWVudChldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHdpbmRvdy5vbnJlc2l6ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXdwb3J0KCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmVmcmVzaFZpZXdwb3J0KCkge1xuICAgICAgICBjb25zdCB2aWV3Qm94TW9kZWwgPSBnZXRWaWV3Qm94KHRoaXMuYm9hcmQpO1xuICAgICAgICBjb25zdCB2aWV3Qm94VmFsdWVzID0gdGhpcy5ob3N0LmdldEF0dHJpYnV0ZSgndmlld0JveCcpPy5zcGxpdCgnLCcpIGFzIHN0cmluZ1tdO1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICB0aGlzLmhvc3QsXG4gICAgICAgICAgICAndmlld0JveCcsXG4gICAgICAgICAgICBgJHt2aWV3Qm94VmFsdWVzWzBdLnRyaW0oKX0sICR7dmlld0JveFZhbHVlc1sxXS50cmltKCl9LCAke3ZpZXdCb3hNb2RlbC53aWR0aH0sICR7dmlld0JveE1vZGVsLmhlaWdodH1gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXBkYXRlVmlld3BvcnQoKSB7XG4gICAgICAgIGNvbnN0IHZpZXdCb3ggPSBnZXRWaWV3Qm94KHRoaXMuYm9hcmQpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRBdHRyaWJ1dGUodGhpcy5ob3N0LCAndmlld0JveCcsIGAke3ZpZXdCb3gubWluWH0sICR7dmlld0JveC5taW5ZfSwgJHt2aWV3Qm94LndpZHRofSwgJHt2aWV3Qm94LmhlaWdodH1gKTtcbiAgICB9XG5cbiAgICB0cmFja0J5ID0gKGluZGV4OiBudW1iZXIsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfTtcblxuICAgIC8vIOaLluaLveaooeW8j1xuICAgIGNoYW5nZU1vdmVNb2RlKGN1cnNvclN0YXR1czogQmFzZUN1cnNvclN0YXR1cykge1xuICAgICAgICB1cGRhdGVDdXJzb3JTdGF0dXModGhpcy5ib2FyZCwgY3Vyc29yU3RhdHVzKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLy8g6YCC5bqU55S75biDXG4gICAgYWRhcHRIYW5kbGUoKSB7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5ib2FyZD8udmlld3BvcnQgYXMgVmlld3BvcnQ7XG4gICAgICAgIFRyYW5zZm9ybXMuc2V0Vmlld3BvcnQodGhpcy5ib2FyZCwge1xuICAgICAgICAgICAgLi4udmlld3BvcnQsXG4gICAgICAgICAgICBvZmZzZXRYOiAwLFxuICAgICAgICAgICAgb2Zmc2V0WTogMFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXNldFpvb21IYW5kZWwoKTtcbiAgICB9XG5cbiAgICAvLyDmlL7lpKdcbiAgICB6b29tSW5IYW5kbGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl92aWV3Wm9vbSA+PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92aWV3Wm9vbSArPSAxMDtcbiAgICAgICAgdGhpcy56b29tQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLy8g57yp5bCPXG4gICAgem9vbU91dEhhbmRsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdab29tIDw9IDIwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdmlld1pvb20gLT0gMTA7XG4gICAgICAgIHRoaXMuem9vbUNoYW5nZSgpO1xuICAgIH1cblxuICAgIHJlc2V0Wm9vbUhhbmRlbCgpIHtcbiAgICAgICAgdGhpcy5fdmlld1pvb20gPSAxMDA7XG4gICAgICAgIHRoaXMuem9vbUNoYW5nZSgpO1xuICAgIH1cblxuICAgIHpvb21DaGFuZ2UoKSB7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5ib2FyZD8udmlld3BvcnQgYXMgVmlld3BvcnQ7XG4gICAgICAgIFRyYW5zZm9ybXMuc2V0Vmlld3BvcnQodGhpcy5ib2FyZCwge1xuICAgICAgICAgICAgLi4udmlld3BvcnQsXG4gICAgICAgICAgICB6b29tOiB0cmFuc2Zvcm1WaWV3Wm9vbSh0aGlzLl92aWV3Wm9vbSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIEhPU1RfVE9fUk9VR0hfU1ZHLmRlbGV0ZSh0aGlzLmhvc3QpO1xuICAgIH1cblxuICAgIG1vdmluZ0NoYW5nZShpc01vdmluZzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzTW92aW5nID0gaXNNb3Zpbmc7XG4gICAgfVxufVxuIl19
375
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhaXQvc3JjL2JvYXJkL2JvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUlMLE1BQU0sRUFJTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLE1BQU0sbUJBQW1CLENBQUM7QUFFdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBVyxNQUFNLGdCQUFnQixDQUFDO0FBQzlHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9C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SUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCByb3VnaCBmcm9tICdyb3VnaGpzL2Jpbi9yb3VnaCc7XG5pbXBvcnQgeyBSb3VnaFNWRyB9IGZyb20gJ3JvdWdoanMvYmluL3N2Zyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU0NST0xMX0JBUl9XSURUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBCYXNlQ3Vyc29yU3RhdHVzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEJvYXJkQ2hhbmdlRXZlbnQsIFBsYWl0Qm9hcmRPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBQbGFpdEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgUGxhaXRQbHVnaW4gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BsdWdpbic7XG5pbXBvcnQgeyBWaWV3cG9ydCB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmlld3BvcnQnO1xuaW1wb3J0IHsgY3JlYXRlQm9hcmQgfSBmcm9tICcuLi9wbHVnaW5zL2NyZWF0ZS1ib2FyZCc7XG5pbXBvcnQgeyB3aXRoQm9hcmQgfSBmcm9tICcuLi9wbHVnaW5zL3dpdGgtYm9hcmQnO1xuaW1wb3J0IHsgd2l0aEhpc3RvcnkgfSBmcm9tICcuLi9wbHVnaW5zL3dpdGgtaGlzdG9yeSc7XG5pbXBvcnQgeyB3aXRoTW92ZSB9IGZyb20gJy4uL3BsdWdpbnMvd2l0aC1tb3ZlJztcbmltcG9ydCB7IHdpdGhTZWxlY3Rpb24gfSBmcm9tICcuLi9wbHVnaW5zL3dpdGgtc2VsZWN0aW9uJztcbmltcG9ydCB7IFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zyb21zJztcbmltcG9ydCB7IGNhbGN1bGF0ZVpvb20sIGdldFZpZXdCb3gsIGdldFZpZXdwb3J0Q2xpZW50Qm94LCB1cGRhdGVDdXJzb3JTdGF0dXMsIFZpZXdCb3ggfSBmcm9tICcuLi91dGlscy9ib2FyZCc7XG5pbXBvcnQgeyBCT0FSRF9UT19PTl9DSEFOR0UsIEhPU1RfVE9fUk9VR0hfU1ZHLCBJU19URVhUX0VESVRBQkxFLCBQTEFJVF9CT0FSRF9UT19DT01QT05FTlQgfSBmcm9tICcuLi91dGlscy93ZWFrLW1hcHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BsYWl0LWJvYXJkJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgI2NvbnRhaW5lcj5cbiAgICAgICAgICAgIDxzdmcgI3N2ZyB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIj48L3N2Zz5cbiAgICAgICAgICAgIDxwbGFpdC1lbGVtZW50XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYm9hcmQuY2hpbGRyZW47IGxldCBpbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5XCJcbiAgICAgICAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgIFtlbGVtZW50XT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIFtib2FyZF09XCJib2FyZFwiXG4gICAgICAgICAgICAgICAgW3ZpZXdwb3J0XT1cImJvYXJkLnZpZXdwb3J0XCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0aW9uXT1cImJvYXJkLnNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgW2hvc3RdPVwiaG9zdFwiXG4gICAgICAgICAgICA+PC9wbGFpdC1lbGVtZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHBsYWl0LXRvb2xiYXJcbiAgICAgICAgICAgICpuZ0lmPVwiaXNGb2N1c2VkICYmICF0b29sYmFyVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgW2N1cnNvclN0YXR1c109XCJib2FyZC5jdXJzb3JcIlxuICAgICAgICAgICAgW3ZpZXdab29tXT1cImJvYXJkLnZpZXdwb3J0IS56b29tXCJcbiAgICAgICAgICAgIChtb3ZlSGFuZGxlKT1cImNoYW5nZU1vdmVNb2RlKCRldmVudClcIlxuICAgICAgICAgICAgKGFkYXB0SGFuZGxlKT1cImFkYXB0SGFuZGxlKClcIlxuICAgICAgICAgICAgKHpvb21JbkhhbmRsZSk9XCJ6b29tSW5IYW5kbGUoKVwiXG4gICAgICAgICAgICAoem9vbU91dEhhbmRsZSk9XCJ6b29tT3V0SGFuZGxlKClcIlxuICAgICAgICAgICAgKHJlc2V0Wm9vbUhhbmRlbCk9XCJyZXNldFpvb21IYW5kZWwoKVwiXG4gICAgICAgID48L3BsYWl0LXRvb2xiYXI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICBgLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBsYWl0Qm9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBoYXNJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgYm9hcmQhOiBQbGFpdEJvYXJkO1xuXG4gICAgcm91Z2hTVkchOiBSb3VnaFNWRztcblxuICAgIGRlc3Ryb3kkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHVibGljIGlzTW92aW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBhdXRvRml0UGFkZGluZyA9IDg7XG5cbiAgICBwdWJsaWMgZ2V0IGlzTW92ZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvYXJkLmN1cnNvciA9PT0gQmFzZUN1cnNvclN0YXR1cy5tb3ZlO1xuICAgIH1cblxuICAgIGdldCBob3N0KCk6IFNWR0VsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5zdmcubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBnZXQgaXNGb2N1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2FyZD8uc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHBsYWl0VmFsdWU6IFBsYWl0RWxlbWVudFtdID0gW107XG5cbiAgICBASW5wdXQoKSBwbGFpdFZpZXdwb3J0ITogVmlld3BvcnQ7XG5cbiAgICBASW5wdXQoKSBwbGFpdFBsdWdpbnM6IFBsYWl0UGx1Z2luW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHBsYWl0UmVhZG9ubHkgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHBsYWl0QWxsb3dDbGVhckJvYXJkID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgcGxhaXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxQbGFpdEJvYXJkQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIHBsYWl0Qm9hcmRJbml0aWFsaXplZDogRXZlbnRFbWl0dGVyPFBsYWl0Qm9hcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgZ2V0IGhvc3RDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIGBwbGFpdC1ib2FyZC1jb250YWluZXIgJHt0aGlzLmJvYXJkLmN1cnNvcn1gO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MucmVhZG9ubHknKVxuICAgIGdldCByZWFkb25seSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxhaXRSZWFkb25seTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1vdmluZycpXG4gICAgZ2V0IG1vdmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9hcmQuY3Vyc29yID09PSBCYXNlQ3Vyc29yU3RhdHVzLm1vdmUgJiYgdGhpcy5pc01vdmluZztcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZvY3VzZWQnKVxuICAgIGdldCBmb2N1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0ZvY3VzZWQ7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZCgnc3ZnJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBzdmchOiBFbGVtZW50UmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZCgncGxhaXRUb29sYmFyJylcbiAgICBwdWJsaWMgdG9vbGJhclRlbXBsYXRlUmVmITogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgY29udGVudENvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSByZW5kZXJlcjI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdWdoU1ZHID0gcm91Z2guc3ZnKHRoaXMuaG9zdCBhcyBTVkdTVkdFbGVtZW50LCB7IG9wdGlvbnM6IHsgcm91Z2huZXNzOiAwLCBzdHJva2VXaWR0aDogMSB9IH0pO1xuICAgICAgICBIT1NUX1RPX1JPVUdIX1NWRy5zZXQodGhpcy5ob3N0LCByb3VnaFNWRyk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVBsdWdpbnMoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRXZlbnRzKCk7XG4gICAgICAgIFBMQUlUX0JPQVJEX1RPX0NPTVBPTkVOVC5zZXQodGhpcy5ib2FyZCwgdGhpcyk7XG4gICAgICAgIEJPQVJEX1RPX09OX0NIQU5HRS5zZXQodGhpcy5ib2FyZCwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlRXZlbnQ6IFBsYWl0Qm9hcmRDaGFuZ2VFdmVudCA9IHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5ib2FyZC5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25zOiB0aGlzLmJvYXJkLm9wZXJhdGlvbnMsXG4gICAgICAgICAgICAgICAgdmlld3BvcnQ6IHRoaXMuYm9hcmQudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLmJvYXJkLnNlbGVjdGlvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQoKTtcbiAgICAgICAgICAgIHRoaXMucGxhaXRDaGFuZ2UuZW1pdChjaGFuZ2VFdmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmhhc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlID0gY2hhbmdlc1sncGxhaXRWYWx1ZSddO1xuICAgICAgICBpZiAodmFsdWVDaGFuZ2UgJiYgdGhpcy5oYXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5ib2FyZC5jaGlsZHJlbiA9IHZhbHVlQ2hhbmdlLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBsYWl0Qm9hcmRJbml0aWFsaXplZC5lbWl0KHRoaXMuYm9hcmQpO1xuICAgICAgICB0aGlzLmluaXRDb250YWluZXJTaXplKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQoKTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplUGx1Z2lucygpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uczogUGxhaXRCb2FyZE9wdGlvbnMgPSB7IHJlYWRvbmx5OiB0aGlzLnBsYWl0UmVhZG9ubHksIGFsbG93Q2xlYXJCb2FyZDogdGhpcy5wbGFpdEFsbG93Q2xlYXJCb2FyZCB9O1xuICAgICAgICBsZXQgYm9hcmQgPSB3aXRoTW92ZSh3aXRoSGlzdG9yeSh3aXRoU2VsZWN0aW9uKHdpdGhCb2FyZChjcmVhdGVCb2FyZCh0aGlzLmhvc3QsIHRoaXMucGxhaXRWYWx1ZSwgb3B0aW9ucykpKSkpO1xuICAgICAgICB0aGlzLnBsYWl0UGx1Z2lucy5mb3JFYWNoKHBsdWdpbiA9PiB7XG4gICAgICAgICAgICBib2FyZCA9IHBsdWdpbihib2FyZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJvYXJkID0gYm9hcmQ7XG4gICAgICAgIGlmICh0aGlzLnBsYWl0Vmlld3BvcnQpIHtcbiAgICAgICAgICAgIHRoaXMuYm9hcmQudmlld3BvcnQgPSB0aGlzLnBsYWl0Vmlld3BvcnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0aWFsaXplRXZlbnRzKCkge1xuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnbW91c2Vkb3duJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5tb3VzZWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuaG9zdCwgJ21vdXNlbW92ZScpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQubW91c2Vtb3ZlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNldXAnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmdsb2JhbE1vdXNldXAoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuaG9zdCwgJ2RibGNsaWNrJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5kYmxjbGljayhldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIUlTX1RFWFRfRURJVEFCTEUuZ2V0KHRoaXMuYm9hcmQpICYmICEhdGhpcy5ib2FyZC5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8ua2V5ZG93bihldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXl1cCcpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFJU19URVhUX0VESVRBQkxFLmdldCh0aGlzLmJvYXJkKSAmJiAhIXRoaXMuYm9hcmQuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQ/LmtleXVwKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4oZG9jdW1lbnQsICdjb3B5JylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIUlTX1RFWFRfRURJVEFCTEUuZ2V0KHRoaXMuYm9hcmQpICYmICEhdGhpcy5ib2FyZC5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8uc2V0RnJhZ21lbnQoZXZlbnQuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KGRvY3VtZW50LCAncGFzdGUnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfVEVYVF9FRElUQUJMRS5nZXQodGhpcy5ib2FyZCkgJiYgISF0aGlzLmJvYXJkLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8uaW5zZXJ0RnJhZ21lbnQoZXZlbnQuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KGRvY3VtZW50LCAnY3V0JylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIUlTX1RFWFRfRURJVEFCTEUuZ2V0KHRoaXMuYm9hcmQpICYmICEhdGhpcy5ib2FyZC5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8uc2V0RnJhZ21lbnQoZXZlbnQuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8uZGVsZXRlRnJhZ21lbnQoZXZlbnQuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8RXZlbnQ+KHRoaXMuY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gISF0aGlzLmlzRm9jdXNlZDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Nyb2xsT2Zmc2V0KHNjcm9sbExlZnQsIHNjcm9sbFRvcCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTY3JvbGwoc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHdpbmRvdy5vbnJlc2l6ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpbml0Q29udGFpbmVyU2l6ZSgpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICdvdmVyZmxvdycsICdhdXRvJyk7XG4gICAgICAgIHRoaXMucmVzaXplVmlld3BvcnQoKTtcbiAgICB9XG5cbiAgICByZXNpemVWaWV3cG9ydCgpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXI/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IGAke2NvbnRhaW5lclJlY3Qud2lkdGggKyBTQ1JPTExfQkFSX1dJRFRIfXB4YDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gYCR7Y29udGFpbmVyUmVjdC5oZWlnaHQgKyBTQ1JPTExfQkFSX1dJRFRIfXB4YDtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmNvbnRlbnRDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3dpZHRoJywgd2lkdGgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmNvbnRlbnRDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAnbWF4V2lkdGgnLCB3aWR0aCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAnbWF4SGVpZ2h0JywgaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBzZXRTY3JvbGwobGVmdDogbnVtYmVyLCB0b3A6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbnRlbnRDb250YWluZXIubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvKHtcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGxlZnRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0U2Nyb2xsT2Zmc2V0KGxlZnQ6IG51bWJlciwgdG9wOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRCb3ggPSBnZXRWaWV3cG9ydENsaWVudEJveCh0aGlzLmJvYXJkKTtcbiAgICAgICAgY29uc3Qgdmlld0JveCA9IGdldFZpZXdCb3godGhpcy5ib2FyZCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbExlZnRSYXRpbyA9IGxlZnQgLyAodmlld0JveC52aWV3cG9ydFdpZHRoIC0gdmlld3BvcnRCb3gud2lkdGgpO1xuICAgICAgICBjb25zdCBzY3JvbGxUb3BSYXRpbyA9IHRvcCAvICh2aWV3Qm94LnZpZXdwb3J0SGVpZ2h0IC0gdmlld3BvcnRCb3guaGVpZ2h0KTtcblxuICAgICAgICB0aGlzLnNldFZpZXdwb3J0KHtcbiAgICAgICAgICAgIG9mZnNldFhSYXRpbzogc2Nyb2xsTGVmdFJhdGlvLFxuICAgICAgICAgICAgb2Zmc2V0WVJhdGlvOiBzY3JvbGxUb3BSYXRpb1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2aWV3cG9ydENoYW5nZSh2aWV3Qm94OiBWaWV3Qm94KSB7XG4gICAgICAgIGNvbnN0IG9mZnNldFhSYXRpbyA9IHRoaXMuYm9hcmQudmlld3BvcnQub2Zmc2V0WFJhdGlvO1xuICAgICAgICBjb25zdCBvZmZzZXRZUmF0aW8gPSB0aGlzLmJvYXJkLnZpZXdwb3J0Lm9mZnNldFlSYXRpbztcbiAgICAgICAgY29uc3Qgdmlld3BvcnRCb3ggPSBnZXRWaWV3cG9ydENsaWVudEJveCh0aGlzLmJvYXJkKTtcbiAgICAgICAgY29uc3QgeyBtaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0LCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCB9ID0gdmlld0JveDtcbiAgICAgICAgY29uc3QgYm94ID0gW21pblgsIG1pblksIHdpZHRoLCBoZWlnaHRdO1xuICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gKHZpZXdwb3J0V2lkdGggLSB2aWV3cG9ydEJveC53aWR0aCkgKiBvZmZzZXRYUmF0aW87XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9ICh2aWV3cG9ydEhlaWdodCAtIHZpZXdwb3J0Qm94LmhlaWdodCkgKiBvZmZzZXRZUmF0aW87XG5cbiAgICAgICAgdGhpcy5yZXNpemVWaWV3cG9ydCgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmhvc3QsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuaG9zdCwgJ3dpZHRoJywgYCR7dmlld3BvcnRXaWR0aH1weGApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmhvc3QsICdoZWlnaHQnLCBgJHt2aWV3cG9ydEhlaWdodH1weGApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmhvc3QsICdjdXJzb3InLCB0aGlzLnBsYWl0UmVhZG9ubHkgPyAnZ3JhYicgOiAnZGVmYXVsdCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRBdHRyaWJ1dGUodGhpcy5ob3N0LCAndmlld0JveCcsIGJveC5qb2luKCkpO1xuICAgICAgICB0aGlzLnNldFNjcm9sbChzY3JvbGxMZWZ0LCBzY3JvbGxUb3ApO1xuICAgIH1cblxuICAgIHVwZGF0ZVZpZXdwb3J0KCkge1xuICAgICAgICBjb25zdCB2aWV3Qm94ID0gZ2V0Vmlld0JveCh0aGlzLmJvYXJkKTtcbiAgICAgICAgdGhpcy52aWV3cG9ydENoYW5nZSh2aWV3Qm94KTtcbiAgICB9XG5cbiAgICB0cmFja0J5ID0gKGluZGV4OiBudW1iZXIsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfTtcblxuICAgIC8vIOaLluaLveaooeW8j1xuICAgIGNoYW5nZU1vdmVNb2RlKGN1cnNvclN0YXR1czogQmFzZUN1cnNvclN0YXR1cykge1xuICAgICAgICB1cGRhdGVDdXJzb3JTdGF0dXModGhpcy5ib2FyZCwgY3Vyc29yU3RhdHVzKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLy8g6YCC5bqU55S75biDXG4gICAgYWRhcHRIYW5kbGUoKSB7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0Qm94ID0gZ2V0Vmlld3BvcnRDbGllbnRCb3godGhpcy5ib2FyZCk7XG4gICAgICAgIGNvbnN0IHJvb3RHcm91cCA9IHRoaXMuaG9zdC5maXJzdENoaWxkO1xuICAgICAgICBjb25zdCByb290R3JvdXBCb3ggPSAocm9vdEdyb3VwIGFzIFNWR0dyYXBoaWNzRWxlbWVudCkuZ2V0QkJveCgpO1xuICAgICAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gdmlld3BvcnRCb3gud2lkdGggLSAyICogdGhpcy5hdXRvRml0UGFkZGluZztcbiAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSB2aWV3cG9ydEJveC5oZWlnaHQgLSAyICogdGhpcy5hdXRvRml0UGFkZGluZztcblxuICAgICAgICBsZXQgem9vbSA9IHRoaXMuYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICAgICAgaWYgKHZpZXdwb3J0V2lkdGggPCByb290R3JvdXBCb3gud2lkdGggfHwgdmlld3BvcnRIZWlnaHQgPCByb290R3JvdXBCb3guaGVpZ2h0KSB7XG4gICAgICAgICAgICB6b29tID0gTWF0aC5taW4odmlld3BvcnRXaWR0aCAvIHJvb3RHcm91cEJveC53aWR0aCwgdmlld3BvcnRIZWlnaHQgLyByb290R3JvdXBCb3guaGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0Vmlld3BvcnQoe1xuICAgICAgICAgICAgem9vbTogY2FsY3VsYXRlWm9vbSh6b29tKSxcbiAgICAgICAgICAgIG9mZnNldFhSYXRpbzogMC41LFxuICAgICAgICAgICAgb2Zmc2V0WVJhdGlvOiAwLjVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8g5pS+5aSnXG4gICAgem9vbUluSGFuZGxlKCkge1xuICAgICAgICBjb25zdCB6b29tID0gdGhpcy5ib2FyZC52aWV3cG9ydC56b29tO1xuICAgICAgICB0aGlzLnNldFZpZXdwb3J0KHtcbiAgICAgICAgICAgIHpvb206IGNhbGN1bGF0ZVpvb20oem9vbSArIDAuMSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8g57yp5bCPXG4gICAgem9vbU91dEhhbmRsZSgpIHtcbiAgICAgICAgY29uc3Qgem9vbSA9IHRoaXMuYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCh7XG4gICAgICAgICAgICB6b29tOiBjYWxjdWxhdGVab29tKHpvb20gLSAwLjEpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc2V0Wm9vbUhhbmRlbCgpIHtcbiAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCh7XG4gICAgICAgICAgICB6b29tOiAxXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFZpZXdwb3J0KG9wdGlvbnM6IFBhcnRpYWw8Vmlld3BvcnQ+KSB7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5ib2FyZD8udmlld3BvcnQ7XG4gICAgICAgIFRyYW5zZm9ybXMuc2V0Vmlld3BvcnQodGhpcy5ib2FyZCwge1xuICAgICAgICAgICAgLi4udmlld3BvcnQsXG4gICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICBIT1NUX1RPX1JPVUdIX1NWRy5kZWxldGUodGhpcy5ob3N0KTtcbiAgICB9XG5cbiAgICBtb3ZpbmdDaGFuZ2UoaXNNb3Zpbmc6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pc01vdmluZyA9IGlzTW92aW5nO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,2 +1,3 @@
1
1
  export const CLIP_BOARD_FORMAT_KEY = 'x-plait-fragment';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFpdC9zcmMvY29uc3RhbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IENMSVBfQk9BUkRfRk9STUFUX0tFWSA9ICd4LXBsYWl0LWZyYWdtZW50JztcbiJdfQ==
2
+ export const SCROLL_BAR_WIDTH = 20;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFpdC9zcmMvY29uc3RhbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLGtCQUFrQixDQUFDO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBDTElQX0JPQVJEX0ZPUk1BVF9LRVkgPSAneC1wbGFpdC1mcmFnbWVudCc7XG5leHBvcnQgY29uc3QgU0NST0xMX0JBUl9XSURUSCA9IDIwO1xuIl19