@worktile/theia 16.4.0-next.1 → 16.4.0-next.11
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/components/contextmenu/contextmenu.component.d.ts +3 -2
- package/components/toolbar/toolbar.component.d.ts +5 -6
- package/components/toolbar-dropdown/toolbar-dropdown.component.d.ts +5 -5
- package/components/toolbar-item/toolbar-item.component.d.ts +0 -1
- package/core/create-toolbar.d.ts +2 -2
- package/core/index.d.ts +2 -1
- package/core/toolbar-item/base-toolbar-item.d.ts +1 -0
- package/custom-types.d.ts +1 -1
- package/editor.component.d.ts +33 -31
- package/editor.module.d.ts +1 -1
- package/esm2022/components/contextmenu/contextmenu.component.mjs +6 -5
- package/esm2022/components/toolbar/toolbar.component.mjs +44 -44
- package/esm2022/components/toolbar-dropdown/toolbar-dropdown.component.mjs +11 -29
- package/esm2022/components/toolbar-item/toolbar-item.component.mjs +4 -8
- package/esm2022/core/create-toolbar.mjs +19 -19
- package/esm2022/core/index.mjs +3 -2
- package/esm2022/core/toolbar-item/base-toolbar-item.mjs +8 -2
- package/esm2022/core/with-theia.mjs +2 -1
- package/esm2022/custom-types.mjs +1 -1
- package/esm2022/editor.component.mjs +132 -114
- package/esm2022/interfaces/editor.mjs +1 -1
- package/esm2022/interfaces/image.mjs +1 -1
- package/esm2022/interfaces/index.mjs +6 -4
- package/esm2022/interfaces/preset.mjs +3 -0
- package/esm2022/interfaces/toolbar.mjs +1 -1
- package/esm2022/interfaces/upload.mjs +1 -1
- package/esm2022/plugins/align/align.editor.mjs +5 -7
- package/esm2022/plugins/align/align.plugin.mjs +3 -3
- package/esm2022/plugins/autoformat/autoformat.plugin.mjs +3 -3
- package/esm2022/plugins/autoformat/transforms/auto-format-block.mjs +3 -3
- package/esm2022/plugins/blockquote/blockquote.component.mjs +3 -4
- package/esm2022/plugins/blockquote/blockquote.plugin.mjs +4 -4
- package/esm2022/plugins/code/code.component.mjs +20 -30
- package/esm2022/plugins/code/code.editor.mjs +20 -9
- package/esm2022/plugins/color/color.plugin.mjs +7 -3
- package/esm2022/plugins/color/toolbar-item.component.mjs +49 -21
- package/esm2022/plugins/common/block-card.plugin.mjs +35 -2
- package/esm2022/plugins/common/common.plugin.mjs +3 -3
- package/esm2022/plugins/common/move-selection.plugin.mjs +6 -4
- package/esm2022/plugins/common/remove-empty.plugin.mjs +9 -8
- package/esm2022/plugins/common/remove-void.plugin.mjs +7 -4
- package/esm2022/plugins/deserialize/deserialize-html.plugin.mjs +2 -2
- package/esm2022/plugins/deserialize/deserialize-md.plugin.mjs +2 -2
- package/esm2022/plugins/heading/heading.plugin.mjs +4 -4
- package/esm2022/plugins/hr/hr.component.mjs +4 -4
- package/esm2022/plugins/image/image.component.mjs +99 -84
- package/esm2022/plugins/image/image.editor.mjs +34 -16
- package/esm2022/plugins/image/image.plugin.mjs +21 -4
- package/esm2022/plugins/index.mjs +1 -3
- package/esm2022/plugins/inline-code/inline-code.component.mjs +4 -4
- package/esm2022/plugins/link/edit/link-edit.component.mjs +4 -15
- package/esm2022/plugins/link/link.component.mjs +16 -11
- package/esm2022/plugins/link/link.editor.mjs +21 -4
- package/esm2022/plugins/link/link.plugin.mjs +3 -3
- package/esm2022/plugins/list/components/bulleted-list.component.mjs +3 -4
- package/esm2022/plugins/list/components/list-item.component.mjs +3 -4
- package/esm2022/plugins/list/components/numbered-list.component.mjs +3 -4
- package/esm2022/plugins/list/list.editor.mjs +5 -3
- package/esm2022/plugins/list/list.plugin.mjs +4 -4
- package/esm2022/plugins/mention/mention.editor.mjs +7 -13
- package/esm2022/plugins/normalizers/insert-paragraph-nodes.mjs +1 -1
- package/esm2022/plugins/normalizers/trailing-node.plugin.mjs +3 -3
- package/esm2022/plugins/public-api.mjs +2 -1
- package/esm2022/plugins/quick-insert/components/quick-insert.component.mjs +3 -3
- package/esm2022/plugins/quick-insert/quick-insert.editor.mjs +4 -4
- package/esm2022/plugins/soft-break/soft-break.plugin.mjs +1 -1
- package/esm2022/plugins/table/components/insert-mark/insert-mark.component.mjs +9 -8
- package/esm2022/plugins/table/components/row/row.component.mjs +3 -3
- package/esm2022/plugins/table/components/table.component.mjs +117 -101
- package/esm2022/plugins/table/components/td/td.component.mjs +24 -15
- package/esm2022/plugins/table/table.editor.mjs +43 -40
- package/esm2022/plugins/table/table.pipe.mjs +1 -1
- package/esm2022/plugins/table/table.plugin.mjs +7 -4
- package/esm2022/plugins/table/table.service.mjs +9 -34
- package/esm2022/plugins/table/table.store.mjs +29 -29
- package/esm2022/plugins/table/utils/cell-position.mjs +1 -4
- package/esm2022/plugins/table/utils/get-grid-columns.mjs +6 -6
- package/esm2022/plugins/table/utils/get-select-cell-node.mjs +1 -8
- package/esm2022/plugins/table/utils/merge-cell.mjs +21 -19
- package/esm2022/plugins/table/utils/table-position.mjs +1 -1
- package/esm2022/plugins/todo-item/todo-item.component.mjs +12 -7
- package/esm2022/plugins/vertical-align/toolbar-item.component.mjs +3 -5
- package/esm2022/plugins/vertical-align/vertical-align.editor.mjs +2 -2
- package/esm2022/public-api.mjs +11 -12
- package/esm2022/queries/anchor-block-entry.mjs +3 -3
- package/esm2022/queries/anchor-inline-entry.mjs +3 -3
- package/esm2022/queries/find-descendant.mjs +3 -3
- package/esm2022/queries/find-node.mjs +3 -3
- package/esm2022/queries/get-anchor-block-entry.mjs +3 -3
- package/esm2022/queries/get-block-above.mjs +3 -3
- package/esm2022/queries/get-insert-elements-path.mjs +5 -3
- package/esm2022/services/context.service.mjs +11 -10
- package/esm2022/services/table-contextmenu.service.mjs +8 -1
- package/esm2022/transforms/delete-node-by-type.mjs +10 -0
- package/esm2022/transforms/handle-continual-insert-break.mjs +3 -3
- package/esm2022/transforms/index.mjs +4 -2
- package/esm2022/transforms/move-children.mjs +3 -3
- package/esm2022/transforms/set-node-by-type.mjs +10 -0
- package/esm2022/utils/data-transform.mjs +1 -1
- package/esm2022/utils/fragment.mjs +11 -3
- package/esm2022/utils/index.mjs +16 -15
- package/esm2022/utils/insert-data-by-invalid-type.mjs +11 -3
- package/esm2022/utils/match.mjs +3 -3
- package/esm2022/utils/update-popover-position.mjs +26 -0
- package/esm2022/utils/weak-maps.mjs +3 -1
- package/fesm2022/worktile-theia.mjs +5576 -5390
- package/fesm2022/worktile-theia.mjs.map +1 -1
- package/interfaces/editor.d.ts +21 -11
- package/interfaces/image.d.ts +2 -2
- package/interfaces/index.d.ts +5 -3
- package/interfaces/preset.d.ts +8 -0
- package/interfaces/toolbar.d.ts +2 -1
- package/interfaces/upload.d.ts +3 -0
- package/package.json +4 -3
- package/plugins/code/code.component.d.ts +1 -1
- package/plugins/code/code.editor.d.ts +2 -3
- package/plugins/color/toolbar-item.component.d.ts +7 -5
- package/plugins/color/toolbar-item.component.scss +18 -0
- package/plugins/image/image.component.d.ts +17 -15
- package/plugins/image/image.component.scss +2 -2
- package/plugins/image/image.editor.d.ts +5 -13
- package/plugins/link/edit/link-edit.component.d.ts +3 -2
- package/plugins/link/link.component.d.ts +2 -0
- package/plugins/link/link.editor.d.ts +3 -1
- package/plugins/mention/mention.editor.d.ts +1 -1
- package/plugins/normalizers/insert-paragraph-nodes.d.ts +1 -2
- package/plugins/normalizers/trailing-node.plugin.d.ts +1 -2
- package/plugins/public-api.d.ts +1 -0
- package/plugins/quick-insert/components/quick-insert.component.d.ts +1 -1
- package/plugins/soft-break/soft-break.plugin.d.ts +1 -2
- package/plugins/table/components/insert-mark/insert-mark.component.d.ts +1 -0
- package/plugins/table/components/row/row.component.d.ts +1 -1
- package/plugins/table/components/table.component.d.ts +11 -5
- package/plugins/table/components/table.component.scss +9 -3
- package/plugins/table/components/td/td.component.d.ts +1 -1
- package/plugins/table/table.editor.d.ts +10 -10
- package/plugins/table/table.pipe.d.ts +1 -1
- package/plugins/table/table.service.d.ts +0 -2
- package/plugins/table/table.store.d.ts +10 -11
- package/plugins/table/utils/get-grid-columns.d.ts +2 -2
- package/plugins/table/utils/get-select-cell-node.d.ts +0 -1
- package/plugins/todo-item/todo-item.component.d.ts +2 -0
- package/plugins/todo-item/todo-item.component.scss +8 -0
- package/plugins/vertical-align/toolbar-item.component.d.ts +0 -1
- package/plugins/vertical-align/vertical-align.scss +11 -0
- package/public-api.d.ts +10 -11
- package/queries/is-range-across-blocks.d.ts +1 -1
- package/services/context.service.d.ts +5 -6
- package/styles/index.scss +1 -0
- package/transforms/delete-node-by-type.d.ts +3 -0
- package/transforms/index.d.ts +3 -1
- package/transforms/set-node-by-type.d.ts +3 -0
- package/utils/index.d.ts +15 -14
- package/utils/insert-data-by-invalid-type.d.ts +2 -1
- package/utils/update-popover-position.d.ts +4 -0
- package/utils/weak-maps.d.ts +2 -0
- package/esm2022/plugins/common/transforms.plugin.mjs +0 -18
- package/esm2022/test/index.mjs +0 -2
- package/esm2022/test/utils/with-plugin.mjs +0 -11
- package/plugins/common/transforms.plugin.d.ts +0 -8
- package/test/index.d.ts +0 -1
- package/test/utils/with-plugin.d.ts +0 -3
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { OnInit, ElementRef } from '@angular/core';
|
|
1
|
+
import { OnInit, ElementRef, ChangeDetectorRef } from '@angular/core';
|
|
2
2
|
import { ThyPopoverRef } from 'ngx-tethys/popover';
|
|
3
3
|
import { MenuEntity } from '../../plugins/table/table.types';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class TheContextMenuComponent implements OnInit {
|
|
6
6
|
elementRef: ElementRef;
|
|
7
|
+
cdr: ChangeDetectorRef;
|
|
7
8
|
private thyPopoverRef;
|
|
8
9
|
menuEntities: MenuEntity[];
|
|
9
10
|
actionHandle: (entity: MenuEntity) => void;
|
|
@@ -18,7 +19,7 @@ export declare class TheContextMenuComponent implements OnInit {
|
|
|
18
19
|
inputNumberFocus(e: Event): void;
|
|
19
20
|
itemEnterHandle(e: MouseEvent, entity: MenuEntity): void;
|
|
20
21
|
changeColor(color: string, item: MenuEntity): void;
|
|
21
|
-
constructor(elementRef: ElementRef, thyPopoverRef: ThyPopoverRef<TheContextMenuComponent>);
|
|
22
|
+
constructor(elementRef: ElementRef, cdr: ChangeDetectorRef, thyPopoverRef: ThyPopoverRef<TheContextMenuComponent>);
|
|
22
23
|
ngOnInit(): void;
|
|
23
24
|
static ɵfac: i0.ɵɵFactoryDeclaration<TheContextMenuComponent, never>;
|
|
24
25
|
static ɵcmp: i0.ɵɵComponentDeclaration<TheContextMenuComponent, "the-contextmenu", never, { "menuEntities": { "alias": "menuEntities"; "required": false; }; "actionHandle": { "alias": "actionHandle"; "required": false; }; "activeHandle": { "alias": "activeHandle"; "required": false; }; "deactivateHandle": { "alias": "deactivateHandle"; "required": false; }; }, {}, never, never, false, never>;
|
|
@@ -42,16 +42,15 @@ export declare class TheToolbarComponent implements OnInit, OnChanges, OnDestroy
|
|
|
42
42
|
* | | \---------- only when toolbar items overflow --------/ | |
|
|
43
43
|
* | └───────────────────────────────────────────────────────────────────────────────────────────┘ |
|
|
44
44
|
* └───────────────────────────────────────────────────────────────────────────────────────────────┘
|
|
45
|
-
* split width: 13px
|
|
46
|
-
* item width: default item: 32px; dropdown item: 48px
|
|
47
|
-
* default paddingRight: 4px
|
|
48
|
-
* set aside 50px
|
|
49
45
|
*/
|
|
50
46
|
private toolbarItemsCompose;
|
|
51
47
|
/**
|
|
52
|
-
*
|
|
48
|
+
* split width: 13px
|
|
49
|
+
* item width: default item: 32px
|
|
50
|
+
* dropdown item: 48px
|
|
51
|
+
* default paddingRight: 4px
|
|
53
52
|
*/
|
|
54
|
-
private
|
|
53
|
+
private getItemWidth;
|
|
55
54
|
/**
|
|
56
55
|
* filter adjacent repeated dividers
|
|
57
56
|
* @param {ToolbarItem[]} items
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { OnInit, ElementRef, TemplateRef, ViewContainerRef } from '@angular/core';
|
|
2
1
|
import { Overlay } from '@angular/cdk/overlay';
|
|
2
|
+
import { ElementRef, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';
|
|
3
3
|
import { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';
|
|
4
4
|
import { Editor } from 'slate';
|
|
5
|
-
import { DropdownMode } from '../../constants
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { DropdownMode } from '../../constants';
|
|
6
|
+
import { TheBaseToolbarDropdown } from '../../core';
|
|
7
|
+
import { ToolbarItem, ToolbarKey } from '../../interfaces';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
export declare class TheToolbarDropdownComponent extends TheBaseToolbarDropdown implements OnInit {
|
|
10
10
|
elementRef: ElementRef;
|
|
@@ -28,8 +28,8 @@ export declare class TheToolbarDropdownComponent extends TheBaseToolbarDropdown
|
|
|
28
28
|
itemMousedown(event: MouseEvent, item: ToolbarItem): void;
|
|
29
29
|
preventDefault(event: Event): void;
|
|
30
30
|
openDropdownPopover(event: MouseEvent): void;
|
|
31
|
+
updatePopoverPosition(): void;
|
|
31
32
|
closeDropdownPopover(): void;
|
|
32
|
-
createPositionStrategy(): import("@angular/cdk/overlay").FlexibleConnectedPositionStrategy;
|
|
33
33
|
static ɵfac: i0.ɵɵFactoryDeclaration<TheToolbarDropdownComponent, never>;
|
|
34
34
|
static ɵcmp: i0.ɵɵComponentDeclaration<TheToolbarDropdownComponent, "the-toolbar-dropdown", never, {}, {}, never, never, false, never>;
|
|
35
35
|
}
|
|
@@ -2,7 +2,6 @@ import { OnInit } from '@angular/core';
|
|
|
2
2
|
import { TheBaseToolbarItem } from '../../core/toolbar-item/base-toolbar-item';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class TheToolbarItemComponent extends TheBaseToolbarItem implements OnInit {
|
|
5
|
-
className: string;
|
|
6
5
|
toggleDropdown(event: MouseEvent): void;
|
|
7
6
|
constructor();
|
|
8
7
|
ngOnInit(): void;
|
package/core/create-toolbar.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { TheEditor, ToolbarEntity
|
|
2
|
-
export declare const createToolbar: (editor: TheEditor,
|
|
1
|
+
import { TheEditor, ToolbarEntity } from '../interfaces';
|
|
2
|
+
export declare const createToolbar: (editor: TheEditor, global?: string[], inline?: string[]) => {
|
|
3
3
|
globalToolbarClass: string[];
|
|
4
4
|
toolbarEntity: ToolbarEntity;
|
|
5
5
|
};
|
package/core/index.d.ts
CHANGED
package/custom-types.d.ts
CHANGED
package/editor.component.d.ts
CHANGED
|
@@ -1,25 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { ChangeDetectorRef, DestroyRef, ElementRef, EventEmitter, Injector, NgZone, OnChanges, OnDestroy, OnInit, SimpleChanges, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { ThyIconRegistry } from 'ngx-tethys/icon';
|
|
3
|
+
import { Descendant, Editor, Element, NodeEntry, Range, Text } from 'slate';
|
|
4
4
|
import { DOMRange, SlateError } from 'slate-angular';
|
|
5
|
-
import { TheOptions, DomEventDataInfo, TheEditor, ToolbarEntity } from './interfaces';
|
|
6
5
|
import { TheTemplateComponent } from './components/template/template.component';
|
|
7
|
-
import { TheToolbarComponent } from './components/toolbar/toolbar.component';
|
|
8
6
|
import { TheTextComponent } from './components/text/text.component';
|
|
9
|
-
import {
|
|
7
|
+
import { TheToolbarComponent } from './components/toolbar/toolbar.component';
|
|
8
|
+
import { DomEventDataInfo, TheEditor, TheOptions, ThePresetConfig, ToolbarEntity } from './interfaces';
|
|
10
9
|
import { ThePlugin } from './interfaces/plugins/plugins';
|
|
11
|
-
import {
|
|
10
|
+
import { TheContextService } from './services/context.service';
|
|
12
11
|
import * as i0 from "@angular/core";
|
|
13
|
-
declare
|
|
14
|
-
|
|
15
|
-
private
|
|
16
|
-
private theContextService;
|
|
17
|
-
private viewContainerRef;
|
|
12
|
+
export declare class TheEditorComponent implements OnInit, OnChanges, OnDestroy {
|
|
13
|
+
private cdr;
|
|
14
|
+
private destroyRef;
|
|
18
15
|
private elementRef;
|
|
16
|
+
private injector;
|
|
19
17
|
private ngZone;
|
|
20
|
-
private
|
|
18
|
+
private viewContainerRef;
|
|
19
|
+
private theContextService;
|
|
21
20
|
private iconRegistry;
|
|
22
|
-
|
|
21
|
+
private presetConfig;
|
|
23
22
|
theOptions: TheOptions;
|
|
24
23
|
thePlugins: ThePlugin[];
|
|
25
24
|
theGlobalToolbar?: TheToolbarComponent;
|
|
@@ -40,33 +39,40 @@ export declare class TheEditorComponent extends TheEditorComponent_base implemen
|
|
|
40
39
|
editorValue: Descendant[];
|
|
41
40
|
globalToolbarClass: string[];
|
|
42
41
|
isMobileMode: boolean;
|
|
42
|
+
visibleQuickInsertPlus: boolean;
|
|
43
|
+
elementToHtml: WeakMap<Element, string>;
|
|
43
44
|
decorate: (nodeEntry: NodeEntry) => Range[];
|
|
45
|
+
get options(): TheOptions;
|
|
44
46
|
get theGlobalToolbarInstance(): TheToolbarComponent;
|
|
45
47
|
get maxHeight(): string;
|
|
46
|
-
elementToHtml: WeakMap<Element, string>;
|
|
47
48
|
private onChangeCallback;
|
|
48
49
|
private onTouchedCallback;
|
|
49
|
-
constructor(
|
|
50
|
+
constructor(cdr: ChangeDetectorRef, destroyRef: DestroyRef, elementRef: ElementRef, injector: Injector, ngZone: NgZone, viewContainerRef: ViewContainerRef, theContextService: TheContextService, iconRegistry: ThyIconRegistry, presetConfig: ThePresetConfig);
|
|
50
51
|
ngOnInit(): void;
|
|
51
52
|
ngOnChanges(changes: SimpleChanges): void;
|
|
52
53
|
ngOnDestroy(): void;
|
|
53
|
-
initialize
|
|
54
|
-
initializeOptions
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
private initialize;
|
|
55
|
+
private initializeOptions;
|
|
56
|
+
private initializeContext;
|
|
57
|
+
private getPlugins;
|
|
58
|
+
private initializeMobileMode;
|
|
59
|
+
private toolbarCalculate;
|
|
60
|
+
private initializeGlobalToolbar;
|
|
61
|
+
private initializeQuickInsert;
|
|
62
|
+
private initializeEvents;
|
|
63
|
+
private subscribeUploadingStatus;
|
|
64
|
+
private applyAutoFocus;
|
|
59
65
|
writeValue(value: string | Descendant[]): void;
|
|
60
66
|
registerOnChange(fn: any): void;
|
|
61
67
|
registerOnTouched(fn: any): void;
|
|
62
68
|
scrollSelectionIntoView: (e: TheEditor, domRange: DOMRange) => void;
|
|
63
69
|
valueChange(value: Descendant[]): void;
|
|
64
|
-
serializingValue
|
|
65
|
-
onErrorHandler
|
|
70
|
+
private serializingValue;
|
|
71
|
+
private onErrorHandler;
|
|
66
72
|
renderElement: (element: Element) => import("slate-angular").ViewType;
|
|
67
73
|
renderLeaf: (text: Text) => import("slate-angular").ViewType;
|
|
68
74
|
renderText: (text: Text) => typeof TheTextComponent;
|
|
69
|
-
generateDecorate
|
|
75
|
+
private generateDecorate;
|
|
70
76
|
onKeyDown: (event: KeyboardEvent) => void;
|
|
71
77
|
mousedown(event: MouseEvent): void;
|
|
72
78
|
handleSelectAll(): void;
|
|
@@ -86,11 +92,7 @@ export declare class TheEditorComponent extends TheEditorComponent_base implemen
|
|
|
86
92
|
onSlaDragStart: (event: DragEvent) => void;
|
|
87
93
|
onSlaDragOver: (event: DragEvent) => void;
|
|
88
94
|
onDrop: (event: DragEvent) => void;
|
|
89
|
-
getTextAndJSON
|
|
90
|
-
|
|
91
|
-
text: string;
|
|
92
|
-
};
|
|
93
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<TheEditorComponent, never>;
|
|
95
|
+
private getTextAndJSON;
|
|
96
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TheEditorComponent, [null, null, null, null, null, null, null, null, { optional: true; }]>;
|
|
94
97
|
static ɵcmp: i0.ɵɵComponentDeclaration<TheEditorComponent, "the-editor, theEditor", never, { "theOptions": { "alias": "theOptions"; "required": false; }; "thePlugins": { "alias": "thePlugins"; "required": false; }; "theGlobalToolbar": { "alias": "theGlobalToolbar"; "required": false; }; "theDecorate": { "alias": "theDecorate"; "required": false; }; "theOnError": { "alias": "theOnError"; "required": false; }; }, { "theOnSave": "theOnSave"; "theOnDOMEvent": "theOnDOMEvent"; "theEditorCreated": "theEditorCreated"; "theUploadingStatus": "theUploadingStatus"; }, never, never, false, never>;
|
|
95
98
|
}
|
|
96
|
-
export {};
|
package/editor.module.d.ts
CHANGED
|
@@ -101,7 +101,7 @@ import * as i68 from "ngx-tethys/input-number";
|
|
|
101
101
|
import * as i69 from "ngx-tethys/color-picker";
|
|
102
102
|
import * as i70 from "ng-codemirror";
|
|
103
103
|
import * as i71 from "./components/column-resize/column-resize.module";
|
|
104
|
-
export declare const COMPONENTS: (typeof
|
|
104
|
+
export declare const COMPONENTS: (typeof TheToolbarGroupComponent | typeof TheContextMenuComponent | typeof TheListboxOptionDirective | typeof TheListboxGroupDirective | typeof TheListboxDirective | typeof ThePluginMenuComponent | typeof TheVerticalToolbarItemComponent | typeof TheTableOptionsComponent | typeof TheToolbarDropdownComponent | typeof TheToolbarItemComponent | typeof TheToolbarComponent | typeof TheDefaultElementComponent | typeof ThePreventDefaultDirective | typeof TheTextComponent | typeof TheColorToolbarItemComponent | typeof TheConversionHintComponent | typeof TheTableSelectComponent | typeof TheTableToolbarItemComponent | typeof TheInlineToolbarComponent | typeof TheQuickInsertComponent | typeof TheInsertMarkComponent)[];
|
|
105
105
|
export declare const PLUGIN_COMPONENTS: (typeof TheLinkHoverComponent | typeof TheLinkEditComponent | typeof TheLinkComponent | typeof TheTableToolbarComponent | typeof TheTableComponent | typeof TheTemplateComponent | typeof TheBlockquoteComponent | typeof TheCodeComponent | typeof TheImageComponent | typeof TheTableRowComponent | typeof TheTdComponent | typeof TheTodoItemComponent)[];
|
|
106
106
|
export declare class TheEditorModule {
|
|
107
107
|
static ɵfac: i0.ɵɵFactoryDeclaration<TheEditorModule, never>;
|
|
@@ -48,20 +48,21 @@ export class TheContextMenuComponent {
|
|
|
48
48
|
item.backgroundColor = color;
|
|
49
49
|
item.activeHandle(undefined, item);
|
|
50
50
|
}
|
|
51
|
-
constructor(elementRef, thyPopoverRef) {
|
|
51
|
+
constructor(elementRef, cdr, thyPopoverRef) {
|
|
52
52
|
this.elementRef = elementRef;
|
|
53
|
+
this.cdr = cdr;
|
|
53
54
|
this.thyPopoverRef = thyPopoverRef;
|
|
54
55
|
this.menuEntities = [];
|
|
55
56
|
this.wrap = true;
|
|
56
57
|
}
|
|
57
58
|
ngOnInit() { }
|
|
58
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: TheContextMenuComponent, deps: [{ token: i0.ElementRef }, { token: i1.ThyPopoverRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
59
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.4", type: TheContextMenuComponent, selector: "the-contextmenu", inputs: { menuEntities: "menuEntities", actionHandle: "actionHandle", activeHandle: "activeHandle", deactivateHandle: "deactivateHandle" }, host: { listeners: { "document: mousedown": "handleDocumentMouseDown($event)", "mousedown": "handleMouseDown($event)" }, properties: { "class.the-overlay-menu-wrap": "this.wrap" } }, ngImport: i0, template: "<div class=\"thy-dropdown-menu\">\n <ng-container *ngFor=\"let menuItem of menuEntities\">\n <ng-container *ngIf=\"menuItem.visibility && !menuItem?.isInputNumber && menuItem.key !== 'background-color'\">\n <ng-template [ngTemplateOutlet]=\"defaultMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"menuItem.visibility && menuItem.key === 'background-color'\">\n <ng-template [ngTemplateOutlet]=\"backgroundColorTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"menuItem.visibility && menuItem?.isInputNumber\">\n <ng-template [ngTemplateOutlet]=\"inputNumberMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <thy-dropdown-menu-divider *ngIf=\"menuItem.divider && menuItem.visibility\"></thy-dropdown-menu-divider>\n </ng-container>\n</div>\n\n<ng-template #defaultMenuTemplate let-item>\n <a\n href=\"javascript:;\"\n thyDropdownMenuItem\n (mousedown)=\"itemMousedown($event, item)\"\n (mouseenter)=\"itemMouseenter($event, item)\"\n (mouseleave)=\"itemMouseleave($event, item)\"\n >\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n <span *ngIf=\"item.extendIcon\" thyDropdownMenuItemExtendIcon>\n <thy-icon thyIconName=\"{{ item.extendIcon }}\"></thy-icon>\n </span>\n </a>\n</ng-template>\n\n<ng-template #backgroundColorTemplate let-item>\n <a\n href=\"javascript:;\"\n thyDropdownMenuItem\n thyColorPicker\n thyTrigger=\"hover\"\n thyPlacement=\"rightTop\"\n [(ngModel)]=\"item.backgroundColor\"\n (ngModelChange)=\"changeColor($event, item)\"\n [thyHasBackdrop]=\"false\"\n >\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\" thyIconType=\"twotone\" [thyTwotoneColor]=\"item.backgroundColor\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n <span *ngIf=\"item.extendIcon\" thyDropdownMenuItemExtendIcon>\n <thy-icon thyIconName=\"{{ item.extendIcon }}\"></thy-icon>\n </span>\n </a>\n</ng-template>\n\n<ng-template #inputNumberMenuTemplate let-item>\n <a href=\"javascript:;\" class=\"the-input-number-menu\" thyDropdownMenuItem (click)=\"itemMousedown($event, item)\">\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName class=\"d-flex align-items-center\">\n {{ item.name }}\n <thy-input-number\n #inputNumber\n class=\"mx-2\"\n thySize=\"sm\"\n [(ngModel)]=\"item.count\"\n [thyStep]=\"1\"\n [thyMin]=\"1\"\n (click)=\"inputNumberFocus($event)\"\n (thyEnter)=\"itemEnterHandle($event, item)\"\n thyStopPropagation\n ></thy-input-number>\n {{ item.nameSuffix }}\n </span>\n </a>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.ThyIconComponent, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: i5.ThyEnterDirective, selector: "[thyEnter]", outputs: ["thyEnter"] }, { kind: "directive", type: i5.ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "component", type: i6.ThyDropdownMenuDividerComponent, selector: "thy-dropdown-menu-divider" }, { kind: "directive", type: i6.ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "directive", type: i6.ThyDropdownMenuItemNameDirective, selector: "[thyDropdownMenuItemName]" }, { kind: "directive", type: i6.ThyDropdownMenuItemIconDirective, selector: "[thyDropdownMenuItemIcon]" }, { kind: "directive", type: i6.ThyDropdownMenuItemExtendIconDirective, selector: "[thyDropdownMenuItemExtendIcon]" }, { kind: "component", type: i7.ThyInputNumberComponent, selector: "thy-input-number", inputs: ["thyAutoFocus", "thyPlaceholder", "thyDisabled", "thyMax", "thyMin", "thyStep", "thySize", "thyPrecision", "thySuffix"], outputs: ["thyBlur", "thyFocus"] }, { kind: "directive", type: i8.ThyColorPickerDirective, selector: "[thyColorPicker]", inputs: ["thyOffset", "thyHasBackdrop", "thyDefaultColor", "thyTransparentColorSelectable", "thyPresetColors", "thyPlacement", "thyTrigger", "thyShowDelay", "thyHideDelay", "thyDisabled"], outputs: ["thyPanelOpen", "thyPanelClose"] }] }); }
|
|
59
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: TheContextMenuComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ThyPopoverRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
60
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.4", type: TheContextMenuComponent, selector: "the-contextmenu", inputs: { menuEntities: "menuEntities", actionHandle: "actionHandle", activeHandle: "activeHandle", deactivateHandle: "deactivateHandle" }, host: { listeners: { "document: mousedown": "handleDocumentMouseDown($event)", "mousedown": "handleMouseDown($event)" }, properties: { "class.the-overlay-menu-wrap": "this.wrap" } }, ngImport: i0, template: "<div class=\"thy-dropdown-menu\">\n <ng-container *ngFor=\"let menuItem of menuEntities\">\n <ng-container *ngIf=\"menuItem.visibility && !menuItem?.isInputNumber && menuItem.key !== 'background-color'\">\n <ng-template [ngTemplateOutlet]=\"defaultMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"menuItem.visibility && menuItem.key === 'background-color'\">\n <ng-template [ngTemplateOutlet]=\"backgroundColorTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"menuItem.visibility && menuItem?.isInputNumber\">\n <ng-template [ngTemplateOutlet]=\"inputNumberMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <thy-dropdown-menu-divider *ngIf=\"menuItem.divider && menuItem.visibility\"></thy-dropdown-menu-divider>\n </ng-container>\n</div>\n\n<ng-template #defaultMenuTemplate let-item>\n <a\n href=\"javascript:;\"\n thyDropdownMenuItem\n (mousedown)=\"itemMousedown($event, item)\"\n (mouseenter)=\"itemMouseenter($event, item)\"\n (mouseleave)=\"itemMouseleave($event, item)\"\n >\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n <span *ngIf=\"item.extendIcon\" thyDropdownMenuItemExtendIcon>\n <thy-icon thyIconName=\"{{ item.extendIcon }}\"></thy-icon>\n </span>\n </a>\n</ng-template>\n\n<ng-template #backgroundColorTemplate let-item>\n <a\n href=\"javascript:;\"\n thyDropdownMenuItem\n thyColorPicker\n thyTrigger=\"hover\"\n thyPlacement=\"rightTop\"\n [(ngModel)]=\"item.backgroundColor\"\n (ngModelChange)=\"changeColor($event, item)\"\n [thyHasBackdrop]=\"false\"\n >\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\" thyIconType=\"twotone\" [thyTwotoneColor]=\"item.backgroundColor\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n <span *ngIf=\"item.extendIcon\" thyDropdownMenuItemExtendIcon>\n <thy-icon thyIconName=\"{{ item.extendIcon }}\"></thy-icon>\n </span>\n </a>\n</ng-template>\n\n<ng-template #inputNumberMenuTemplate let-item>\n <a href=\"javascript:;\" class=\"the-input-number-menu\" thyDropdownMenuItem (click)=\"itemMousedown($event, item)\">\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName class=\"d-flex align-items-center\">\n {{ item.name }}\n <thy-input-number\n #inputNumber\n class=\"mx-2\"\n thySize=\"sm\"\n [(ngModel)]=\"item.count\"\n [thyStep]=\"1\"\n [thyMin]=\"1\"\n (click)=\"inputNumberFocus($event)\"\n (thyEnter)=\"itemEnterHandle($event, item)\"\n thyStopPropagation\n ></thy-input-number>\n {{ item.nameSuffix }}\n </span>\n </a>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.ThyIconComponent, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: i5.ThyEnterDirective, selector: "[thyEnter]", outputs: ["thyEnter"] }, { kind: "directive", type: i5.ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "component", type: i6.ThyDropdownMenuDividerComponent, selector: "thy-dropdown-menu-divider" }, { kind: "directive", type: i6.ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "directive", type: i6.ThyDropdownMenuItemNameDirective, selector: "[thyDropdownMenuItemName]" }, { kind: "directive", type: i6.ThyDropdownMenuItemIconDirective, selector: "[thyDropdownMenuItemIcon]" }, { kind: "directive", type: i6.ThyDropdownMenuItemExtendIconDirective, selector: "[thyDropdownMenuItemExtendIcon]" }, { kind: "component", type: i7.ThyInputNumberComponent, selector: "thy-input-number", inputs: ["thyAutoFocus", "thyPlaceholder", "thyDisabled", "thyMax", "thyMin", "thyStep", "thyStepDelay", "thySize", "thyPrecision", "thySuffix"], outputs: ["thyBlur", "thyFocus"] }, { kind: "directive", type: i8.ThyColorPickerDirective, selector: "[thyColorPicker]", inputs: ["thyOffset", "thyHasBackdrop", "thyDefaultColor", "thyTransparentColorSelectable", "thyPresetColors", "thyPlacement", "thyTrigger", "thyShowDelay", "thyHideDelay", "thyDisabled"], outputs: ["thyPanelOpen", "thyPanelClose"] }] }); }
|
|
60
61
|
}
|
|
61
62
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: TheContextMenuComponent, decorators: [{
|
|
62
63
|
type: Component,
|
|
63
64
|
args: [{ selector: 'the-contextmenu', template: "<div class=\"thy-dropdown-menu\">\n <ng-container *ngFor=\"let menuItem of menuEntities\">\n <ng-container *ngIf=\"menuItem.visibility && !menuItem?.isInputNumber && menuItem.key !== 'background-color'\">\n <ng-template [ngTemplateOutlet]=\"defaultMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"menuItem.visibility && menuItem.key === 'background-color'\">\n <ng-template [ngTemplateOutlet]=\"backgroundColorTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"menuItem.visibility && menuItem?.isInputNumber\">\n <ng-template [ngTemplateOutlet]=\"inputNumberMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <thy-dropdown-menu-divider *ngIf=\"menuItem.divider && menuItem.visibility\"></thy-dropdown-menu-divider>\n </ng-container>\n</div>\n\n<ng-template #defaultMenuTemplate let-item>\n <a\n href=\"javascript:;\"\n thyDropdownMenuItem\n (mousedown)=\"itemMousedown($event, item)\"\n (mouseenter)=\"itemMouseenter($event, item)\"\n (mouseleave)=\"itemMouseleave($event, item)\"\n >\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n <span *ngIf=\"item.extendIcon\" thyDropdownMenuItemExtendIcon>\n <thy-icon thyIconName=\"{{ item.extendIcon }}\"></thy-icon>\n </span>\n </a>\n</ng-template>\n\n<ng-template #backgroundColorTemplate let-item>\n <a\n href=\"javascript:;\"\n thyDropdownMenuItem\n thyColorPicker\n thyTrigger=\"hover\"\n thyPlacement=\"rightTop\"\n [(ngModel)]=\"item.backgroundColor\"\n (ngModelChange)=\"changeColor($event, item)\"\n [thyHasBackdrop]=\"false\"\n >\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\" thyIconType=\"twotone\" [thyTwotoneColor]=\"item.backgroundColor\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n <span *ngIf=\"item.extendIcon\" thyDropdownMenuItemExtendIcon>\n <thy-icon thyIconName=\"{{ item.extendIcon }}\"></thy-icon>\n </span>\n </a>\n</ng-template>\n\n<ng-template #inputNumberMenuTemplate let-item>\n <a href=\"javascript:;\" class=\"the-input-number-menu\" thyDropdownMenuItem (click)=\"itemMousedown($event, item)\">\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName class=\"d-flex align-items-center\">\n {{ item.name }}\n <thy-input-number\n #inputNumber\n class=\"mx-2\"\n thySize=\"sm\"\n [(ngModel)]=\"item.count\"\n [thyStep]=\"1\"\n [thyMin]=\"1\"\n (click)=\"inputNumberFocus($event)\"\n (thyEnter)=\"itemEnterHandle($event, item)\"\n thyStopPropagation\n ></thy-input-number>\n {{ item.nameSuffix }}\n </span>\n </a>\n</ng-template>\n" }]
|
|
64
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ThyPopoverRef }]; }, propDecorators: { menuEntities: [{
|
|
65
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.ThyPopoverRef }]; }, propDecorators: { menuEntities: [{
|
|
65
66
|
type: Input
|
|
66
67
|
}], actionHandle: [{
|
|
67
68
|
type: Input
|
|
@@ -79,4 +80,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImpor
|
|
|
79
80
|
type: HostListener,
|
|
80
81
|
args: ['mousedown', ['$event']]
|
|
81
82
|
}] } });
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dG1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvY29udGV4dG1lbnUvY29udGV4dG1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvY29udGV4dG1lbnUvY29udGV4dG1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUVoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7QUFPeEQsTUFBTSxPQUFPLHVCQUF1QjtJQWlCaEMsdUJBQXVCLENBQUMsS0FBaUI7UUFDckMsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQXFCLENBQUMsRUFBRTtZQUMzQyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFxQixDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDNUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUM5QjtJQUNMLENBQUM7SUFHRCxlQUFlLENBQUMsS0FBaUI7UUFDN0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWlCLEVBQUUsTUFBa0I7UUFDL0MsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWlCLEVBQUUsTUFBa0I7UUFDaEQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFpQixFQUFFLE1BQWtCO1FBQ2hELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsQ0FBUTtRQUNwQixDQUFDLENBQUMsTUFBc0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsZUFBZSxDQUFDLENBQWEsRUFBRSxNQUFrQjtRQUM3QyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWEsRUFBRSxJQUFnQjtRQUN2QyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsWUFBbUIsVUFBc0IsRUFBVSxhQUFxRDtRQUFyRixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQXdDO1FBOUR4RyxpQkFBWSxHQUFpQixFQUFFLENBQUM7UUFZaEMsU0FBSSxHQUFHLElBQUksQ0FBQztJQWtEK0YsQ0FBQztJQUU1RyxRQUFRLEtBQUksQ0FBQzs4R0FsRUosdUJBQXVCO2tHQUF2Qix1QkFBdUIsMFhDVHBDLGtnR0E0RUE7OzJGRG5FYSx1QkFBdUI7a0JBSm5DLFNBQVM7K0JBQ0ksaUJBQWlCOzZIQUszQixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixJQUFJO3NCQURILFdBQVc7dUJBQUMsNkJBQTZCO2dCQUkxQyx1QkFBdUI7c0JBRHRCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVy9DLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkluaXQsIENvbXBvbmVudCwgSW5wdXQsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRoeVBvcG92ZXJSZWYgfSBmcm9tICduZ3gtdGV0aHlzL3BvcG92ZXInO1xuaW1wb3J0IHsgaXNDb2xvclBhbmVsIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29sb3ItcGlja2VyJztcbmltcG9ydCB7IE1lbnVFbnRpdHkgfSBmcm9tICcuLi8uLi9wbHVnaW5zL3RhYmxlL3RhYmxlLnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aGUtY29udGV4dG1lbnUnLFxuICAgIHRlbXBsYXRlVXJsOiAnY29udGV4dG1lbnUuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRoZUNvbnRleHRNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKVxuICAgIG1lbnVFbnRpdGllczogTWVudUVudGl0eVtdID0gW107XG5cbiAgICBASW5wdXQoKVxuICAgIGFjdGlvbkhhbmRsZTogKGVudGl0eTogTWVudUVudGl0eSkgPT4gdm9pZDtcblxuICAgIEBJbnB1dCgpXG4gICAgYWN0aXZlSGFuZGxlOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGVudGl0eTogTWVudUVudGl0eSkgPT4gdm9pZDtcblxuICAgIEBJbnB1dCgpXG4gICAgZGVhY3RpdmF0ZUhhbmRsZTogKGV2ZW50OiBNb3VzZUV2ZW50LCBlbnRpdHk6IE1lbnVFbnRpdHkpID0+IHZvaWQ7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoZS1vdmVybGF5LW1lbnUtd3JhcCcpXG4gICAgd3JhcCA9IHRydWU7XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDogbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVEb2N1bWVudE1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoaXNDb2xvclBhbmVsKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkgJiYgZXZlbnQuYnV0dG9uICE9PSAyKSB7XG4gICAgICAgICAgICB0aGlzLnRoeVBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGl0ZW1Nb3VzZWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQsIGVudGl0eTogTWVudUVudGl0eSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmFjdGlvbkhhbmRsZShlbnRpdHkpO1xuICAgICAgICB0aGlzLnRoeVBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpdGVtTW91c2VsZWF2ZShldmVudDogTW91c2VFdmVudCwgZW50aXR5OiBNZW51RW50aXR5KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZUhhbmRsZShldmVudCwgZW50aXR5KTtcbiAgICB9XG5cbiAgICBpdGVtTW91c2VlbnRlcihldmVudDogTW91c2VFdmVudCwgZW50aXR5OiBNZW51RW50aXR5KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYWN0aXZlSGFuZGxlKGV2ZW50LCBlbnRpdHkpO1xuICAgIH1cblxuICAgIGlucHV0TnVtYmVyRm9jdXMoZTogRXZlbnQpIHtcbiAgICAgICAgKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5mb2N1cygpO1xuICAgIH1cblxuICAgIGl0ZW1FbnRlckhhbmRsZShlOiBNb3VzZUV2ZW50LCBlbnRpdHk6IE1lbnVFbnRpdHkpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmFjdGlvbkhhbmRsZShlbnRpdHkpO1xuICAgICAgICB0aGlzLnRoeVBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VDb2xvcihjb2xvcjogc3RyaW5nLCBpdGVtOiBNZW51RW50aXR5KSB7XG4gICAgICAgIGl0ZW0uYmFja2dyb3VuZENvbG9yID0gY29sb3I7XG4gICAgICAgIGl0ZW0uYWN0aXZlSGFuZGxlKHVuZGVmaW5lZCwgaXRlbSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgdGh5UG9wb3ZlclJlZjogVGh5UG9wb3ZlclJlZjxUaGVDb250ZXh0TWVudUNvbXBvbmVudD4pIHt9XG5cbiAgICBuZ09uSW5pdCgpIHt9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGh5LWRyb3Bkb3duLW1lbnVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVudUl0ZW0gb2YgbWVudUVudGl0aWVzXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lbnVJdGVtLnZpc2liaWxpdHkgJiYgIW1lbnVJdGVtPy5pc0lucHV0TnVtYmVyICYmIG1lbnVJdGVtLmtleSAhPT0gJ2JhY2tncm91bmQtY29sb3InXCI+XG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGVmYXVsdE1lbnVUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbWVudUl0ZW0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lbnVJdGVtLnZpc2liaWxpdHkgJiYgbWVudUl0ZW0ua2V5ID09PSAnYmFja2dyb3VuZC1jb2xvcidcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJiYWNrZ3JvdW5kQ29sb3JUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbWVudUl0ZW0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lbnVJdGVtLnZpc2liaWxpdHkgJiYgbWVudUl0ZW0/LmlzSW5wdXROdW1iZXJcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnB1dE51bWJlck1lbnVUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbWVudUl0ZW0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPHRoeS1kcm9wZG93bi1tZW51LWRpdmlkZXIgKm5nSWY9XCJtZW51SXRlbS5kaXZpZGVyICYmIG1lbnVJdGVtLnZpc2liaWxpdHlcIj48L3RoeS1kcm9wZG93bi1tZW51LWRpdmlkZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE1lbnVUZW1wbGF0ZSBsZXQtaXRlbT5cbiAgPGFcbiAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICB0aHlEcm9wZG93bk1lbnVJdGVtXG4gICAgKG1vdXNlZG93bik9XCJpdGVtTW91c2Vkb3duKCRldmVudCwgaXRlbSlcIlxuICAgIChtb3VzZWVudGVyKT1cIml0ZW1Nb3VzZWVudGVyKCRldmVudCwgaXRlbSlcIlxuICAgIChtb3VzZWxlYXZlKT1cIml0ZW1Nb3VzZWxlYXZlKCRldmVudCwgaXRlbSlcIlxuICA+XG4gICAgPHNwYW4gdGh5RHJvcGRvd25NZW51SXRlbUljb24+XG4gICAgICA8dGh5LWljb24gW3RoeUljb25OYW1lXT1cIml0ZW0uaWNvblwiPjwvdGh5LWljb24+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuIHRoeURyb3Bkb3duTWVudUl0ZW1OYW1lPnt7IGl0ZW0ubmFtZSB9fTwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cIml0ZW0uZXh0ZW5kSWNvblwiIHRoeURyb3Bkb3duTWVudUl0ZW1FeHRlbmRJY29uPlxuICAgICAgPHRoeS1pY29uIHRoeUljb25OYW1lPVwie3sgaXRlbS5leHRlbmRJY29uIH19XCI+PC90aHktaWNvbj5cbiAgICA8L3NwYW4+XG4gIDwvYT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYmFja2dyb3VuZENvbG9yVGVtcGxhdGUgbGV0LWl0ZW0+XG4gIDxhXG4gICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgdGh5RHJvcGRvd25NZW51SXRlbVxuICAgIHRoeUNvbG9yUGlja2VyXG4gICAgdGh5VHJpZ2dlcj1cImhvdmVyXCJcbiAgICB0aHlQbGFjZW1lbnQ9XCJyaWdodFRvcFwiXG4gICAgWyhuZ01vZGVsKV09XCJpdGVtLmJhY2tncm91bmRDb2xvclwiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ29sb3IoJGV2ZW50LCBpdGVtKVwiXG4gICAgW3RoeUhhc0JhY2tkcm9wXT1cImZhbHNlXCJcbiAgPlxuICAgIDxzcGFuIHRoeURyb3Bkb3duTWVudUl0ZW1JY29uPlxuICAgICAgPHRoeS1pY29uIFt0aHlJY29uTmFtZV09XCJpdGVtLmljb25cIiB0aHlJY29uVHlwZT1cInR3b3RvbmVcIiBbdGh5VHdvdG9uZUNvbG9yXT1cIml0ZW0uYmFja2dyb3VuZENvbG9yXCI+PC90aHktaWNvbj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gdGh5RHJvcGRvd25NZW51SXRlbU5hbWU+e3sgaXRlbS5uYW1lIH19PC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5leHRlbmRJY29uXCIgdGh5RHJvcGRvd25NZW51SXRlbUV4dGVuZEljb24+XG4gICAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJ7eyBpdGVtLmV4dGVuZEljb24gfX1cIj48L3RoeS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgPC9hPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbnB1dE51bWJlck1lbnVUZW1wbGF0ZSBsZXQtaXRlbT5cbiAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwidGhlLWlucHV0LW51bWJlci1tZW51XCIgdGh5RHJvcGRvd25NZW51SXRlbSAoY2xpY2spPVwiaXRlbU1vdXNlZG93bigkZXZlbnQsIGl0ZW0pXCI+XG4gICAgPHNwYW4gdGh5RHJvcGRvd25NZW51SXRlbUljb24+XG4gICAgICA8dGh5LWljb24gW3RoeUljb25OYW1lXT1cIml0ZW0uaWNvblwiPjwvdGh5LWljb24+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuIHRoeURyb3Bkb3duTWVudUl0ZW1OYW1lIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICA8dGh5LWlucHV0LW51bWJlclxuICAgICAgICAjaW5wdXROdW1iZXJcbiAgICAgICAgY2xhc3M9XCJteC0yXCJcbiAgICAgICAgdGh5U2l6ZT1cInNtXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLmNvdW50XCJcbiAgICAgICAgW3RoeVN0ZXBdPVwiMVwiXG4gICAgICAgIFt0aHlNaW5dPVwiMVwiXG4gICAgICAgIChjbGljayk9XCJpbnB1dE51bWJlckZvY3VzKCRldmVudClcIlxuICAgICAgICAodGh5RW50ZXIpPVwiaXRlbUVudGVySGFuZGxlKCRldmVudCwgaXRlbSlcIlxuICAgICAgICB0aHlTdG9wUHJvcGFnYXRpb25cbiAgICAgID48L3RoeS1pbnB1dC1udW1iZXI+XG4gICAgICB7eyBpdGVtLm5hbWVTdWZmaXggfX1cbiAgICA8L3NwYW4+XG4gIDwvYT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dG1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvY29udGV4dG1lbnUvY29udGV4dG1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvY29udGV4dG1lbnUvY29udGV4dG1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFFbkgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7O0FBT3hELE1BQU0sT0FBTyx1QkFBdUI7SUFnQmhDLHVCQUF1QixDQUFDLEtBQWlCO1FBQ3JDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFxQixDQUFDLEVBQUU7WUFDM0MsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBcUIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzVGLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDOUI7SUFDTCxDQUFDO0lBR0QsZUFBZSxDQUFDLEtBQWlCO1FBQzdCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFpQixFQUFFLE1BQWtCO1FBQy9DLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFpQixFQUFFLE1BQWtCO1FBQ2hELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBaUIsRUFBRSxNQUFrQjtRQUNoRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGdCQUFnQixDQUFDLENBQVE7UUFDcEIsQ0FBQyxDQUFDLE1BQXNCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELGVBQWUsQ0FBQyxDQUFhLEVBQUUsTUFBa0I7UUFDN0MsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhLEVBQUUsSUFBZ0I7UUFDdkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFlBQ1csVUFBc0IsRUFDdEIsR0FBc0IsRUFDckIsYUFBcUQ7UUFGdEQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUNyQixrQkFBYSxHQUFiLGFBQWEsQ0FBd0M7UUFqRXhELGlCQUFZLEdBQWlCLEVBQUUsQ0FBQztRQVl6QyxTQUFJLEdBQUcsSUFBSSxDQUFDO0lBc0RULENBQUM7SUFFSixRQUFRLEtBQUksQ0FBQzs4R0FyRUosdUJBQXVCO2tHQUF2Qix1QkFBdUIsMFhDVHBDLGtnR0E0RUE7OzJGRG5FYSx1QkFBdUI7a0JBSm5DLFNBQVM7K0JBQ0ksaUJBQWlCOzZKQUlsQixZQUFZO3NCQUFwQixLQUFLO2dCQUdOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxXQUFXO3VCQUFDLDZCQUE2QjtnQkFJMUMsdUJBQXVCO3NCQUR0QixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVcvQyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT25Jbml0LCBDb21wb25lbnQsIElucHV0LCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGh5UG9wb3ZlclJlZiB9IGZyb20gJ25neC10ZXRoeXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBpc0NvbG9yUGFuZWwgfSBmcm9tICcuLi8uLi91dGlscy9jb2xvci1waWNrZXInO1xuaW1wb3J0IHsgTWVudUVudGl0eSB9IGZyb20gJy4uLy4uL3BsdWdpbnMvdGFibGUvdGFibGUudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoZS1jb250ZXh0bWVudScsXG4gICAgdGVtcGxhdGVVcmw6ICdjb250ZXh0bWVudS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVGhlQ29udGV4dE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIG1lbnVFbnRpdGllczogTWVudUVudGl0eVtdID0gW107XG5cbiAgICBASW5wdXQoKVxuICAgIGFjdGlvbkhhbmRsZTogKGVudGl0eTogTWVudUVudGl0eSkgPT4gdm9pZDtcblxuICAgIEBJbnB1dCgpXG4gICAgYWN0aXZlSGFuZGxlOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGVudGl0eTogTWVudUVudGl0eSkgPT4gdm9pZDtcblxuICAgIEBJbnB1dCgpXG4gICAgZGVhY3RpdmF0ZUhhbmRsZTogKGV2ZW50OiBNb3VzZUV2ZW50LCBlbnRpdHk6IE1lbnVFbnRpdHkpID0+IHZvaWQ7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoZS1vdmVybGF5LW1lbnUtd3JhcCcpXG4gICAgd3JhcCA9IHRydWU7XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDogbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVEb2N1bWVudE1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoaXNDb2xvclBhbmVsKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkgJiYgZXZlbnQuYnV0dG9uICE9PSAyKSB7XG4gICAgICAgICAgICB0aGlzLnRoeVBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGl0ZW1Nb3VzZWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQsIGVudGl0eTogTWVudUVudGl0eSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmFjdGlvbkhhbmRsZShlbnRpdHkpO1xuICAgICAgICB0aGlzLnRoeVBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpdGVtTW91c2VsZWF2ZShldmVudDogTW91c2VFdmVudCwgZW50aXR5OiBNZW51RW50aXR5KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZUhhbmRsZShldmVudCwgZW50aXR5KTtcbiAgICB9XG5cbiAgICBpdGVtTW91c2VlbnRlcihldmVudDogTW91c2VFdmVudCwgZW50aXR5OiBNZW51RW50aXR5KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYWN0aXZlSGFuZGxlKGV2ZW50LCBlbnRpdHkpO1xuICAgIH1cblxuICAgIGlucHV0TnVtYmVyRm9jdXMoZTogRXZlbnQpIHtcbiAgICAgICAgKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5mb2N1cygpO1xuICAgIH1cblxuICAgIGl0ZW1FbnRlckhhbmRsZShlOiBNb3VzZUV2ZW50LCBlbnRpdHk6IE1lbnVFbnRpdHkpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmFjdGlvbkhhbmRsZShlbnRpdHkpO1xuICAgICAgICB0aGlzLnRoeVBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VDb2xvcihjb2xvcjogc3RyaW5nLCBpdGVtOiBNZW51RW50aXR5KSB7XG4gICAgICAgIGl0ZW0uYmFja2dyb3VuZENvbG9yID0gY29sb3I7XG4gICAgICAgIGl0ZW0uYWN0aXZlSGFuZGxlKHVuZGVmaW5lZCwgaXRlbSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSB0aHlQb3BvdmVyUmVmOiBUaHlQb3BvdmVyUmVmPFRoZUNvbnRleHRNZW51Q29tcG9uZW50PlxuICAgICkge31cblxuICAgIG5nT25Jbml0KCkge31cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0aHktZHJvcGRvd24tbWVudVwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtZW51SXRlbSBvZiBtZW51RW50aXRpZXNcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVudUl0ZW0udmlzaWJpbGl0eSAmJiAhbWVudUl0ZW0/LmlzSW5wdXROdW1iZXIgJiYgbWVudUl0ZW0ua2V5ICE9PSAnYmFja2dyb3VuZC1jb2xvcidcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJkZWZhdWx0TWVudVRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBtZW51SXRlbSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVudUl0ZW0udmlzaWJpbGl0eSAmJiBtZW51SXRlbS5rZXkgPT09ICdiYWNrZ3JvdW5kLWNvbG9yJ1wiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJhY2tncm91bmRDb2xvclRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBtZW51SXRlbSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVudUl0ZW0udmlzaWJpbGl0eSAmJiBtZW51SXRlbT8uaXNJbnB1dE51bWJlclwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImlucHV0TnVtYmVyTWVudVRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBtZW51SXRlbSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8dGh5LWRyb3Bkb3duLW1lbnUtZGl2aWRlciAqbmdJZj1cIm1lbnVJdGVtLmRpdmlkZXIgJiYgbWVudUl0ZW0udmlzaWJpbGl0eVwiPjwvdGh5LWRyb3Bkb3duLW1lbnUtZGl2aWRlcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TWVudVRlbXBsYXRlIGxldC1pdGVtPlxuICA8YVxuICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgIHRoeURyb3Bkb3duTWVudUl0ZW1cbiAgICAobW91c2Vkb3duKT1cIml0ZW1Nb3VzZWRvd24oJGV2ZW50LCBpdGVtKVwiXG4gICAgKG1vdXNlZW50ZXIpPVwiaXRlbU1vdXNlZW50ZXIoJGV2ZW50LCBpdGVtKVwiXG4gICAgKG1vdXNlbGVhdmUpPVwiaXRlbU1vdXNlbGVhdmUoJGV2ZW50LCBpdGVtKVwiXG4gID5cbiAgICA8c3BhbiB0aHlEcm9wZG93bk1lbnVJdGVtSWNvbj5cbiAgICAgIDx0aHktaWNvbiBbdGh5SWNvbk5hbWVdPVwiaXRlbS5pY29uXCI+PC90aHktaWNvbj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gdGh5RHJvcGRvd25NZW51SXRlbU5hbWU+e3sgaXRlbS5uYW1lIH19PC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5leHRlbmRJY29uXCIgdGh5RHJvcGRvd25NZW51SXRlbUV4dGVuZEljb24+XG4gICAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJ7eyBpdGVtLmV4dGVuZEljb24gfX1cIj48L3RoeS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgPC9hPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNiYWNrZ3JvdW5kQ29sb3JUZW1wbGF0ZSBsZXQtaXRlbT5cbiAgPGFcbiAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICB0aHlEcm9wZG93bk1lbnVJdGVtXG4gICAgdGh5Q29sb3JQaWNrZXJcbiAgICB0aHlUcmlnZ2VyPVwiaG92ZXJcIlxuICAgIHRoeVBsYWNlbWVudD1cInJpZ2h0VG9wXCJcbiAgICBbKG5nTW9kZWwpXT1cIml0ZW0uYmFja2dyb3VuZENvbG9yXCJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDb2xvcigkZXZlbnQsIGl0ZW0pXCJcbiAgICBbdGh5SGFzQmFja2Ryb3BdPVwiZmFsc2VcIlxuICA+XG4gICAgPHNwYW4gdGh5RHJvcGRvd25NZW51SXRlbUljb24+XG4gICAgICA8dGh5LWljb24gW3RoeUljb25OYW1lXT1cIml0ZW0uaWNvblwiIHRoeUljb25UeXBlPVwidHdvdG9uZVwiIFt0aHlUd290b25lQ29sb3JdPVwiaXRlbS5iYWNrZ3JvdW5kQ29sb3JcIj48L3RoeS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiB0aHlEcm9wZG93bk1lbnVJdGVtTmFtZT57eyBpdGVtLm5hbWUgfX08L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJpdGVtLmV4dGVuZEljb25cIiB0aHlEcm9wZG93bk1lbnVJdGVtRXh0ZW5kSWNvbj5cbiAgICAgIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cInt7IGl0ZW0uZXh0ZW5kSWNvbiB9fVwiPjwvdGh5LWljb24+XG4gICAgPC9zcGFuPlxuICA8L2E+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lucHV0TnVtYmVyTWVudVRlbXBsYXRlIGxldC1pdGVtPlxuICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJ0aGUtaW5wdXQtbnVtYmVyLW1lbnVcIiB0aHlEcm9wZG93bk1lbnVJdGVtIChjbGljayk9XCJpdGVtTW91c2Vkb3duKCRldmVudCwgaXRlbSlcIj5cbiAgICA8c3BhbiB0aHlEcm9wZG93bk1lbnVJdGVtSWNvbj5cbiAgICAgIDx0aHktaWNvbiBbdGh5SWNvbk5hbWVdPVwiaXRlbS5pY29uXCI+PC90aHktaWNvbj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gdGh5RHJvcGRvd25NZW51SXRlbU5hbWUgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgIDx0aHktaW5wdXQtbnVtYmVyXG4gICAgICAgICNpbnB1dE51bWJlclxuICAgICAgICBjbGFzcz1cIm14LTJcIlxuICAgICAgICB0aHlTaXplPVwic21cIlxuICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uY291bnRcIlxuICAgICAgICBbdGh5U3RlcF09XCIxXCJcbiAgICAgICAgW3RoeU1pbl09XCIxXCJcbiAgICAgICAgKGNsaWNrKT1cImlucHV0TnVtYmVyRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICh0aHlFbnRlcik9XCJpdGVtRW50ZXJIYW5kbGUoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgIHRoeVN0b3BQcm9wYWdhdGlvblxuICAgICAgPjwvdGh5LWlucHV0LW51bWJlcj5cbiAgICAgIHt7IGl0ZW0ubmFtZVN1ZmZpeCB9fVxuICAgIDwvc3Bhbj5cbiAgPC9hPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { Component, HostBinding, Inject, Input, ViewChild, ViewContainerRef } from '@angular/core';
|
|
2
2
|
import { ThyDividerComponent } from 'ngx-tethys/divider';
|
|
3
3
|
import { Editor, Element } from 'slate';
|
|
4
|
-
import { ElementKinds, ToolbarActionTypes } from '../../constants
|
|
5
|
-
import { TheToolbarGroupToken, ToolbarMoreGroup } from '../../constants/toolbar';
|
|
4
|
+
import { DropdownMode, ElementKinds, TheToolbarGroupToken, ToolbarActionTypes, ToolbarMoreGroup } from '../../constants';
|
|
6
5
|
import { ToolbarItemType } from '../../interfaces/toolbar';
|
|
7
6
|
import { TheToolbarDropdownComponent } from '../toolbar-dropdown/toolbar-dropdown.component';
|
|
8
7
|
import { TheToolbarItemComponent } from '../toolbar-item/toolbar-item.component';
|
|
@@ -110,50 +109,36 @@ export class TheToolbarComponent {
|
|
|
110
109
|
* | | \---------- only when toolbar items overflow --------/ | |
|
|
111
110
|
* | └───────────────────────────────────────────────────────────────────────────────────────────┘ |
|
|
112
111
|
* └───────────────────────────────────────────────────────────────────────────────────────────────┘
|
|
113
|
-
* split width: 13px
|
|
114
|
-
* item width: default item: 32px; dropdown item: 48px
|
|
115
|
-
* default paddingRight: 4px
|
|
116
|
-
* set aside 50px
|
|
117
112
|
*/
|
|
118
113
|
toolbarItemsCompose() {
|
|
119
|
-
|
|
120
|
-
// dropdown item + paddingRight
|
|
121
|
-
const maxItemWidth = 52;
|
|
122
|
-
// default item + paddingRight
|
|
123
|
-
const defaultItemWidth = 36;
|
|
124
|
-
const splitWidth = 13;
|
|
114
|
+
const groupWidth = 32;
|
|
125
115
|
const items = [];
|
|
126
116
|
const group = [];
|
|
117
|
+
let elementWidth = this.isMore ? this.elementWidth : null;
|
|
118
|
+
let isSpaceRemaining = true;
|
|
127
119
|
for (let i = 0; i < this.toolbarItems.length; i++) {
|
|
128
120
|
const item = this.toolbarItems[i];
|
|
129
121
|
if (!this.isMore) {
|
|
130
122
|
items.push(item);
|
|
131
123
|
continue;
|
|
132
124
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
itemWidth = 74;
|
|
137
|
-
break;
|
|
138
|
-
case ToolbarActionTypes.split:
|
|
139
|
-
itemWidth = splitWidth;
|
|
140
|
-
break;
|
|
141
|
-
case ToolbarActionTypes.verticalAlign:
|
|
142
|
-
itemWidth = this.isTableActive() ? maxItemWidth : 0;
|
|
143
|
-
break;
|
|
144
|
-
default:
|
|
145
|
-
const isCustomComponent = item?.type === ToolbarItemType.dropdown || !!item?.iconComponent;
|
|
146
|
-
itemWidth = isCustomComponent ? maxItemWidth : defaultItemWidth;
|
|
125
|
+
if (!isSpaceRemaining) {
|
|
126
|
+
group.push(item);
|
|
127
|
+
continue;
|
|
147
128
|
}
|
|
148
|
-
const
|
|
149
|
-
const
|
|
150
|
-
elementWidth
|
|
129
|
+
const itemWidth = this.getItemWidth(item);
|
|
130
|
+
const occupyWidth = i === this.toolbarItems.length - 1 ? itemWidth : itemWidth + groupWidth;
|
|
131
|
+
const allowRender = elementWidth && elementWidth >= occupyWidth;
|
|
151
132
|
if (allowRender) {
|
|
152
133
|
items.push(item);
|
|
134
|
+
elementWidth -= itemWidth;
|
|
153
135
|
}
|
|
154
136
|
else {
|
|
155
137
|
const isFirstSplit = group.length === 0 && item.key === ToolbarActionTypes.split;
|
|
156
|
-
!isFirstSplit
|
|
138
|
+
if (!isFirstSplit) {
|
|
139
|
+
isSpaceRemaining = false;
|
|
140
|
+
group.push(item);
|
|
141
|
+
}
|
|
157
142
|
}
|
|
158
143
|
}
|
|
159
144
|
return {
|
|
@@ -162,22 +147,37 @@ export class TheToolbarComponent {
|
|
|
162
147
|
};
|
|
163
148
|
}
|
|
164
149
|
/**
|
|
165
|
-
*
|
|
150
|
+
* split width: 13px
|
|
151
|
+
* item width: default item: 32px
|
|
152
|
+
* dropdown item: 48px
|
|
153
|
+
* default paddingRight: 4px
|
|
166
154
|
*/
|
|
167
|
-
|
|
168
|
-
const
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
155
|
+
getItemWidth(item) {
|
|
156
|
+
const paddingRight = 4;
|
|
157
|
+
const defaultItemWidth = 32;
|
|
158
|
+
const iconDropdownItemWidth = 48;
|
|
159
|
+
const textDropdownItemWidth = 70;
|
|
160
|
+
const dropdownActionIconWidth = 16;
|
|
161
|
+
const splitWidth = 9;
|
|
162
|
+
const isDropdownComponent = item?.type === ToolbarItemType.dropdown;
|
|
163
|
+
const isUpdateDropdownItemWidth = !item?.width && isDropdownComponent;
|
|
164
|
+
let itemWidth = item?.width ?? defaultItemWidth;
|
|
165
|
+
if (isUpdateDropdownItemWidth) {
|
|
166
|
+
if (item?.dropdownMode === DropdownMode.icon) {
|
|
167
|
+
itemWidth = iconDropdownItemWidth;
|
|
168
|
+
}
|
|
169
|
+
if (!item?.dropdownMode || item?.dropdownMode === DropdownMode.text) {
|
|
170
|
+
itemWidth = textDropdownItemWidth;
|
|
171
|
+
}
|
|
172
|
+
if (item?.isHideDropdownActionIcon) {
|
|
173
|
+
itemWidth -= dropdownActionIconWidth;
|
|
174
174
|
}
|
|
175
|
-
items.push(item);
|
|
176
175
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
176
|
+
if (item.key === ToolbarActionTypes.split) {
|
|
177
|
+
itemWidth = splitWidth;
|
|
178
|
+
}
|
|
179
|
+
itemWidth += paddingRight;
|
|
180
|
+
return itemWidth;
|
|
181
181
|
}
|
|
182
182
|
/**
|
|
183
183
|
* filter adjacent repeated dividers
|
|
@@ -264,4 +264,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImpor
|
|
|
264
264
|
type: HostBinding,
|
|
265
265
|
args: ['style.justifyContent']
|
|
266
266
|
}] } });
|
|
267
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy90b29sYmFyL3Rvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBR1QsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBT0wsU0FBUyxFQUNULGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUV4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFakYsT0FBTyxFQUFpQyxlQUFlLEVBQTZCLE1BQU0sMEJBQTBCLENBQUM7QUFDckgsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFN0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7OztBQVNqRixNQUFNLE9BQU8sbUJBQW1CO0lBZTVCLElBQXlDLGNBQWM7UUFDbkQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFZRCxZQUNZLEdBQXNCLEVBQ3RCLFVBQXNCLEVBQ3RCLE1BQWMsRUFDZ0IscUJBQThEO1FBSDVGLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNnQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXlDO1FBOUIvRixpQkFBWSxHQUFrQixFQUFFLENBQUM7UUFJakMsbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFFOUIsV0FBTSxHQUFHLElBQUksQ0FBQztRQVV2QixlQUFVLEdBQW1DLElBQUksR0FBRyxFQUE2QixDQUFDO1FBSWxGLGtCQUFhLEdBQUcsZ0JBQWdCLENBQUM7UUFJakMsaUJBQVksR0FBRyxDQUFDLENBQUM7SUFPZCxDQUFDO0lBRUosUUFBUTtRQUNKLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDMUMsSUFBSSxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFO1lBQzNDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzVCO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNwQztJQUNMLENBQUM7SUFFTSxlQUFlO1FBQ2xCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7WUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN2RTtJQUNMLENBQUM7SUFFTyxhQUFhO1FBQ2pCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ3RELGFBQWE7UUFDYixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9DLEtBQUssSUFBSSxLQUFLLElBQUksT0FBTyxFQUFFO2dCQUN2QixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztnQkFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO29CQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7aUJBQzVCO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTyxhQUFhO1FBQ2pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDakgsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ25CLENBQUM7SUFFTSxlQUFlLENBQUMsTUFBYztRQUNqQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUM1QjtRQUVELE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRSxLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksRUFBRTtZQUM3QixJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssa0JBQWtCLENBQUMsS0FBSyxFQUFFO2dCQUN2QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BELElBQUksYUFBYSxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFO29CQUN6RCxhQUFhLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDbEQ7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVNLGlCQUFpQjtRQUNwQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNoRCxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLFlBQVksQ0FBQztRQUV0QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssRUFBRSxNQUFNLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUN2SCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTlCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNqQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtnQkFDdEIsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLGtCQUFrQixDQUFDLEtBQUssRUFBRTtvQkFDdkMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQzFCLFNBQVM7aUJBQ1o7Z0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2hDO1lBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNLLG1CQUFtQjtRQUN2QixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDMUQsK0JBQStCO1FBQy9CLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN4Qiw4QkFBOEI7UUFDOUIsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDNUIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sS0FBSyxHQUFrQixFQUFFLENBQUM7UUFDaEMsTUFBTSxLQUFLLEdBQWtCLEVBQUUsQ0FBQztRQUVoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDZCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQixTQUFTO2FBQ1o7WUFFRCxJQUFJLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztZQUVqQyxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsS0FBSyxZQUFZLENBQUMsV0FBVztvQkFDekIsU0FBUyxHQUFHLEVBQUUsQ0FBQztvQkFDZixNQUFNO2dCQUNWLEtBQUssa0JBQWtCLENBQUMsS0FBSztvQkFDekIsU0FBUyxHQUFHLFVBQVUsQ0FBQztvQkFDdkIsTUFBTTtnQkFDVixLQUFLLGtCQUFrQixDQUFDLGFBQWE7b0JBQ2pDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNwRCxNQUFNO2dCQUNWO29CQUNJLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxFQUFFLElBQUksS0FBSyxlQUFlLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDO29CQUMzRixTQUFTLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7YUFDdkU7WUFFRCxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7WUFDL0YsTUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLFlBQVksSUFBSSxjQUFjLENBQUM7WUFDbkUsWUFBWSxJQUFJLFNBQVMsQ0FBQztZQUUxQixJQUFJLFdBQVcsRUFBRTtnQkFDYixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3BCO2lCQUFNO2dCQUNILE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssa0JBQWtCLENBQUMsS0FBSyxDQUFDO2dCQUNqRixDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3JDO1NBQ0o7UUFFRCxPQUFPO1lBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7WUFDbkMsS0FBSztTQUNSLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSywwQkFBMEI7UUFDOUIsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUVqQixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbEMsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLGtCQUFrQixDQUFDLEtBQUssRUFBRTtnQkFDdkMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakIsU0FBUzthQUNaO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwQjtRQUVELE9BQU87WUFDSCxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztZQUNuQyxLQUFLO1NBQ1IsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUFDLEtBQW9CO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLGtCQUFrQixDQUFDLEtBQUssRUFBRTtnQkFDeEQsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8saUJBQWlCLENBQUMsSUFBaUI7UUFDdkMsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDdkYsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQXFCLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV6SCxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsUUFBUSxFQUFFO1lBQ3hDLE1BQU0sV0FBVyxHQUFHLE9BQTBELENBQUM7WUFDL0UsV0FBVyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUM1RCxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxRQUF5QixDQUFDO1lBQ3ZELFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztTQUM1QztJQUNMLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUNwQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDcEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQW9CO1FBQ3hDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNsRixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUMvQixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3hEO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQXFCO1FBQzNDLElBQUksSUFBSSxLQUFLLGVBQWUsQ0FBQyxPQUFPLEVBQUU7WUFDbEMsT0FBTyx1QkFBdUIsQ0FBQztTQUNsQztRQUNELElBQUksSUFBSSxLQUFLLGVBQWUsQ0FBQyxRQUFRLEVBQUU7WUFDbkMsT0FBTywyQkFBMkIsQ0FBQztTQUN0QztRQUNELE9BQU8sdUJBQXVCLENBQUM7SUFDbkMsQ0FBQzs4R0E5UVEsbUJBQW1CLG1HQWlDaEIsb0JBQW9CO2tHQWpDdkIsbUJBQW1CLGdjQWFXLGdCQUFnQixnRUNoRDNELHdLQUdBOzsyRkRnQ2EsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNJLGFBQWEsUUFFakI7d0JBQ0YsS0FBSyxFQUFFLGlEQUFpRDtxQkFDM0Q7OzBCQW1DSSxNQUFNOzJCQUFDLG9CQUFvQjs0Q0FoQ3ZCLE1BQU07c0JBQWQsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVtRSxnQkFBZ0I7c0JBQXhGLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFOUIsY0FBYztzQkFBdEQsV0FBVzt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaHlEaXZpZGVyQ29tcG9uZW50IH0gZnJvbSAnbmd4LXRldGh5cy9kaXZpZGVyJztcbmltcG9ydCB7IEVkaXRvciwgRWxlbWVudCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IEVsZW1lbnRLaW5kcywgVG9vbGJhckFjdGlvblR5cGVzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL25vZGUtdHlwZXMnO1xuaW1wb3J0IHsgVGhlVG9vbGJhckdyb3VwVG9rZW4sIFRvb2xiYXJNb3JlR3JvdXAgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdG9vbGJhcic7XG5pbXBvcnQgeyBUaGVCYXNlVG9vbGJhckRyb3Bkb3duLCBUaGVCYXNlVG9vbGJhckl0ZW0gfSBmcm9tICcuLi8uLi9jb3JlL3Rvb2xiYXItaXRlbS9iYXNlLXRvb2xiYXItaXRlbSc7XG5pbXBvcnQgeyBUb29sYmFyQWxpZ25tZW50LCBUb29sYmFySXRlbSwgVG9vbGJhckl0ZW1UeXBlLCBUb29sYmFySXRlbXNDb21wb3NlUmV0dXJuIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90b29sYmFyJztcbmltcG9ydCB7IFRoZVRvb2xiYXJEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uL3Rvb2xiYXItZHJvcGRvd24vdG9vbGJhci1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHR5cGUgeyBUaGVUb29sYmFyR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi90b29sYmFyLWdyb3VwL3Rvb2xiYXItZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IFRoZVRvb2xiYXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vdG9vbGJhci1pdGVtL3Rvb2xiYXItaXRlbS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoZS10b29sYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3Rvb2xiYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aGUtdG9vbGJhci1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlcidcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFRoZVRvb2xiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBlZGl0b3I6IEVkaXRvcjtcblxuICAgIEBJbnB1dCgpIHRvb2xiYXJJdGVtczogVG9vbGJhckl0ZW1bXSA9IFtdO1xuXG4gICAgQElucHV0KCkgYWxpZ246IFRvb2xiYXJBbGlnbm1lbnQ7XG5cbiAgICBASW5wdXQoKSBjb250YWluZXJDbGFzczogc3RyaW5nW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIGlzTW9yZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBhZnRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgndG9vbGJhckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pIHRvb2xiYXJDb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmp1c3RpZnlDb250ZW50JykgZ2V0IGp1c3RpZnlDb250ZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGlnbjtcbiAgICB9XG5cbiAgICBjb21wb25lbnRzOiBNYXA8c3RyaW5nLCBDb21wb25lbnRSZWY8YW55Pj4gPSBuZXcgTWFwPHN0cmluZywgQ29tcG9uZW50UmVmPGFueT4+KCk7XG5cbiAgICBjb21wb3NlVG9vbGJhckl0ZW1zOiBUb29sYmFySXRlbXNDb21wb3NlUmV0dXJuO1xuXG4gICAgbW9yZUdyb3VwTWVudSA9IFRvb2xiYXJNb3JlR3JvdXA7XG5cbiAgICByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgICBlbGVtZW50V2lkdGggPSAwO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KFRoZVRvb2xiYXJHcm91cFRva2VuKSBwcml2YXRlIHRvb2xiYXJHcm91cENvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUaGVUb29sYmFyR3JvdXBDb21wb25lbnQ+XG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0VG9vbGJhckNsYXNzKCk7XG4gICAgICAgIHRoaXMucmVuZGVyVG9vbGJhclZpZXcoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UodGhpcy5lZGl0b3IpO1xuICAgICAgICB0aGlzLmlzTW9yZSAmJiB0aGlzLnJlc2l6ZUVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvb2xiYXJJdGVtcyA9IGNoYW5nZXMudG9vbGJhckl0ZW1zO1xuICAgICAgICBpZiAodG9vbGJhckl0ZW1zICYmICF0b29sYmFySXRlbXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVG9vbGJhclZpZXcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VG9vbGJhckNsYXNzKCkge1xuICAgICAgICBpZiAodGhpcy5lZGl0b3IgJiYgISF0aGlzLmNvbnRhaW5lckNsYXNzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi50aGlzLmNvbnRhaW5lckNsYXNzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzaXplRWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgZWRpdGFibGVFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoIH0gPSBlbnRyeS5jb250ZW50UmVjdDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc01vcmUgJiYgdGhpcy5lbGVtZW50V2lkdGggIT09IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFdpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVG9vbGJhclZpZXcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZWRpdGFibGVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVGFibGVBY3RpdmUoKSB7XG4gICAgICAgIGNvbnN0IFt0YWJsZV0gPSBFZGl0b3Iubm9kZXModGhpcy5lZGl0b3IsIHsgbWF0Y2g6IG4gPT4gRWxlbWVudC5pc0VsZW1lbnQobikgJiYgbi50eXBlID09PSBFbGVtZW50S2luZHMudGFibGUgfSk7XG4gICAgICAgIHJldHVybiAhIXRhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3Rpb25DaGFuZ2UoZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNb3JlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRvb2xiYXJWaWV3KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b29sYmFySXRlbXMgPSBbLi4udGhpcy50b29sYmFySXRlbXMsIHRoaXMubW9yZUdyb3VwTWVudV07XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0b29sYmFySXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLmtleSAhPT0gVG9vbGJhckFjdGlvblR5cGVzLnNwbGl0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50cy5nZXQoaXRlbS5rZXkpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtQ29tcG9uZW50ICYmIGl0ZW1Db21wb25lbnQuaW5zdGFuY2Uuc2VsZWN0aW9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Db21wb25lbnQuaW5zdGFuY2Uuc2VsZWN0aW9uQ2hhbmdlKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlclRvb2xiYXJWaWV3KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0b29sYmFySXRlbXMgPSB0aGlzLnRvb2xiYXJJdGVtc0NvbXBvc2UoKTtcbiAgICAgICAgY29uc3QgeyBpdGVtcywgZ3JvdXAgfSA9IHRvb2xiYXJJdGVtcztcblxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSB0aGlzLmNvbXBvc2VUb29sYmFySXRlbXM/Lml0ZW1zPy5sZW5ndGggJiYgZ3JvdXA/Lmxlbmd0aCA9PT0gdGhpcy5jb21wb3NlVG9vbGJhckl0ZW1zPy5ncm91cD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wb3NlVG9vbGJhckl0ZW1zID0gdG9vbGJhckl0ZW1zO1xuICAgICAgICB0aGlzLmNvbXBvbmVudHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy50b29sYmFyQ29udGFpbmVyLmNsZWFyKCk7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmtleSA9PT0gVG9vbGJhckFjdGlvblR5cGVzLnNwbGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVG9vbGJhclNwbGl0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRvb2xiYXJJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jcmVhdGVNb3JlR3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNhbGN1bGF0aW9uIGRpc3BsYXkgdG9vbGJhciBhbmQgbW9yZSBncm91cGVkIHRvb2xiYXJzXG4gICAgICpcbiAgICAgKlx04pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICBHbG9iYWxUb29sYmFyVmlldyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICAgKlx0fCDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgI2NoaWxkcmVuIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCB8XG4gICAgICpcdHwgfCAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAjaXRlbXNWaWV3IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAg4pSM4pSA4pSAICNncm91cGVkSXRlbXNEcm9wZG93biDilIDilIDilIDilJAgICB8IHxcbiAgICAgKlx0fCB8ICAgfCAgICAgICAjdW5ncm91cGVkSXRlbXMgICAgIHwgfCBUb29sYmFyU2VwYXJhdG9yVmlldyB8IHwgICAgICAgICNncm91cGVkSXRlbXMgICAgICAgfCAgIHwgfFxuICAgICAqXHR8IHwgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAt4pSYIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICB8IHxcbiAgICAgKlx0fCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcLS0tLS0tLS0tLSBvbmx5IHdoZW4gdG9vbGJhciBpdGVtcyBvdmVyZmxvdyAtLS0tLS0tLS8gICB8IHxcbiAgICAgKlx0fCDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggfFxuICAgICAqXHTilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICAgKiBzcGxpdCB3aWR0aDogMTNweFxuICAgICAqIGl0ZW0gd2lkdGg6IGRlZmF1bHQgaXRlbTogMzJweDsgZHJvcGRvd24gaXRlbTogNDhweFxuICAgICAqIGRlZmF1bHQgcGFkZGluZ1JpZ2h0OiA0cHhcbiAgICAgKiBzZXQgYXNpZGUgNTBweFxuICAgICAqL1xuICAgIHByaXZhdGUgdG9vbGJhckl0ZW1zQ29tcG9zZSgpOiBUb29sYmFySXRlbXNDb21wb3NlUmV0dXJuIHtcbiAgICAgICAgbGV0IGVsZW1lbnRXaWR0aCA9IHRoaXMuaXNNb3JlID8gdGhpcy5lbGVtZW50V2lkdGggOiBudWxsO1xuICAgICAgICAvLyBkcm9wZG93biBpdGVtICsgcGFkZGluZ1JpZ2h0XG4gICAgICAgIGNvbnN0IG1heEl0ZW1XaWR0aCA9IDUyO1xuICAgICAgICAvLyBkZWZhdWx0IGl0ZW0gKyBwYWRkaW5nUmlnaHRcbiAgICAgICAgY29uc3QgZGVmYXVsdEl0ZW1XaWR0aCA9IDM2O1xuICAgICAgICBjb25zdCBzcGxpdFdpZHRoID0gMTM7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBUb29sYmFySXRlbVtdID0gW107XG4gICAgICAgIGNvbnN0IGdyb3VwOiBUb29sYmFySXRlbVtdID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRvb2xiYXJJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMudG9vbGJhckl0ZW1zW2ldO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTW9yZSkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpdGVtV2lkdGggPSBkZWZhdWx0SXRlbVdpZHRoO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0ua2V5KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBFbGVtZW50S2luZHMuaGVhZGluZ0xpc3Q6XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1XaWR0aCA9IDc0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFRvb2xiYXJBY3Rpb25UeXBlcy5zcGxpdDpcbiAgICAgICAgICAgICAgICAgICAgaXRlbVdpZHRoID0gc3BsaXRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBUb29sYmFyQWN0aW9uVHlwZXMudmVydGljYWxBbGlnbjpcbiAgICAgICAgICAgICAgICAgICAgaXRlbVdpZHRoID0gdGhpcy5pc1RhYmxlQWN0aXZlKCkgPyBtYXhJdGVtV2lkdGggOiAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0N1c3RvbUNvbXBvbmVudCA9IGl0ZW0/LnR5cGUgPT09IFRvb2xiYXJJdGVtVHlwZS5kcm9wZG93biB8fCAhIWl0ZW0/Lmljb25Db21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1XaWR0aCA9IGlzQ3VzdG9tQ29tcG9uZW50ID8gbWF4SXRlbVdpZHRoIDogZGVmYXVsdEl0ZW1XaWR0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nV2lkdGggPSBpID09PSB0aGlzLnRvb2xiYXJJdGVtcy5sZW5ndGggLSAxID8gaXRlbVdpZHRoIDogaXRlbVdpZHRoICsgc3BsaXRXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93UmVuZGVyID0gZWxlbWVudFdpZHRoICYmIGVsZW1lbnRXaWR0aCA+PSByZW1haW5pbmdXaWR0aDtcbiAgICAgICAgICAgIGVsZW1lbnRXaWR0aCAtPSBpdGVtV2lkdGg7XG5cbiAgICAgICAgICAgIGlmIChhbGxvd1JlbmRlcikge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRmlyc3RTcGxpdCA9IGdyb3VwLmxlbmd0aCA9PT0gMCAmJiBpdGVtLmtleSA9PT0gVG9vbGJhckFjdGlvblR5cGVzLnNwbGl0O1xuICAgICAgICAgICAgICAgICFpc0ZpcnN0U3BsaXQgJiYgZ3JvdXAucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtczogdGhpcy5wdXJlVG9vbGJhckl0ZW1zKGl0ZW1zKSxcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZXh0ZXJuYWxseSBkZXNpZ25hdGVkIG1vcmUgZ3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvb2xiYXJJdGVtc0FuZE1vcmVDb21wb3NlKCkge1xuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICBjb25zdCBncm91cCA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnRvb2xiYXJJdGVtcykge1xuICAgICAgICAgICAgaWYgKGl0ZW0ua2V5ID09PSBUb29sYmFyQWN0aW9uVHlwZXMuc3BsaXQpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtczogdGhpcy5wdXJlVG9vbGJhckl0ZW1zKGl0ZW1zKSxcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZmlsdGVyIGFkamFjZW50IHJlcGVhdGVkIGRpdmlkZXJzXG4gICAgICogQHBhcmFtIHtUb29sYmFySXRlbVtdfSBpdGVtc1xuICAgICAqIEByZXR1cm5zXG4gICAgICogQG1lbWJlcm9mIFRoZVRvb2xiYXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdXJlVG9vbGJhckl0ZW1zKGl0ZW1zOiBUb29sYmFySXRlbVtdKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXMuZmlsdGVyKChhLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoaSA+IDAgJiYgaXRlbXNbaSAtIDFdLmtleSAhPT0gVG9vbGJhckFjdGlvblR5cGVzLnNwbGl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYS5rZXkgIT09IFRvb2xiYXJBY3Rpb25UeXBlcy5zcGxpdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUb29sYmFySXRlbShpdGVtOiBUb29sYmFySXRlbSkge1xuICAgICAgICBjb25zdCB7IGljb25Db21wb25lbnQsIHR5cGUsIGRyb3Bkb3duTW9kZSwgZHJvcGRvd25JdGVtS2V5LCBpbmNsdWRlcywgLi4uYXJncyB9ID0gaXRlbTtcbiAgICAgICAgY29uc3Qgdmlld0NvbXBvbmVudCA9IHRoaXMudmlld0NvbXBvbmVudFR5cGUodHlwZSk7XG4gICAgICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLnRvb2xiYXJDb250YWluZXIuY3JlYXRlQ29tcG9uZW50PFRoZUJhc2VUb29sYmFySXRlbT4oaWNvbkNvbXBvbmVudCA/IGljb25Db21wb25lbnQgOiB2aWV3Q29tcG9uZW50KTtcblxuICAgICAgICBjb21wUmVmLmluc3RhbmNlLmVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLnRvb2xiYXJJdGVtID0gaXRlbTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRzLnNldChpdGVtLmtleSwgY29tcFJlZik7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09IFRvb2xiYXJJdGVtVHlwZS5kcm9wZG93bikge1xuICAgICAgICAgICAgY29uc3QgZHJvcGRvd25SZWYgPSBjb21wUmVmIGFzIHVua25vd24gYXMgQ29tcG9uZW50UmVmPFRoZUJhc2VUb29sYmFyRHJvcGRvd24+O1xuICAgICAgICAgICAgZHJvcGRvd25SZWYuaW5zdGFuY2UuZHJvcGRvd25JdGVtS2V5ID0gaXRlbS5kcm9wZG93bkl0ZW1LZXk7XG4gICAgICAgICAgICBkcm9wZG93blJlZi5pbnN0YW5jZS5tZW51cyA9IGluY2x1ZGVzIGFzIFRvb2xiYXJJdGVtW107XG4gICAgICAgICAgICBkcm9wZG93blJlZi5pbnN0YW5jZS5tb2RlID0gZHJvcGRvd25Nb2RlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUb29sYmFyU3BsaXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLnRvb2xiYXJDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KFRoeURpdmlkZXJDb21wb25lbnQpO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLnRoeVZlcnRpY2FsID0gdHJ1ZTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS50aHlDb2xvciA9ICdsaWdodCc7XG4gICAgICAgIGNvbXBSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdteC0yJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVNb3JlR3JvdXAoZ3JvdXA6IFRvb2xiYXJJdGVtW10pIHtcbiAgICAgICAgaWYgKGdyb3VwLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLnRvb2xiYXJDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KHRoaXMudG9vbGJhckdyb3VwQ29tcG9uZW50KTtcbiAgICAgICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgICAgICAgICBjb21wUmVmLmluc3RhbmNlLm1lbnVzID0gZ3JvdXA7XG4gICAgICAgICAgICBjb21wUmVmLmluc3RhbmNlLml0ZW0gPSB0aGlzLm1vcmVHcm91cE1lbnU7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudHMuc2V0KHRoaXMubW9yZUdyb3VwTWVudS5rZXksIGNvbXBSZWYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2aWV3Q29tcG9uZW50VHlwZSh0eXBlOiBUb29sYmFySXRlbVR5cGUpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09IFRvb2xiYXJJdGVtVHlwZS5kZWZhdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gVGhlVG9vbGJhckl0ZW1Db21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09IFRvb2xiYXJJdGVtVHlwZS5kcm9wZG93bikge1xuICAgICAgICAgICAgcmV0dXJuIFRoZVRvb2xiYXJEcm9wZG93bkNvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVGhlVG9vbGJhckl0ZW1Db21wb25lbnQ7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAjdG9vbGJhckNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjxuZy10ZW1wbGF0ZSAqbmdJZj1cImFmdGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJhZnRlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy90b29sYmFyL3Rvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBR1QsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBT0wsU0FBUyxFQUNULGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUV4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpILE9BQU8sRUFBaUMsZUFBZSxFQUE2QixNQUFNLDBCQUEwQixDQUFDO0FBQ3JILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRTdGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7QUFTakYsTUFBTSxPQUFPLG1CQUFtQjtJQWU1QixJQUF5QyxjQUFjO1FBQ25ELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBWUQsWUFDWSxHQUFzQixFQUN0QixVQUFzQixFQUN0QixNQUFjLEVBQ2dCLHFCQUE4RDtRQUg1RixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZ0IsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF5QztRQTlC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QUFLLENBQUM7WUFDL0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN4RDtJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxJQUFxQjtRQUMzQyxJQUFJLElBQUksS0FBSyxlQUFlLENBQUMsT0FBTyxFQUFFO1lBQ2xDLE9BQU8sdUJBQXVCLENBQUM7U0FDbEM7UUFDRCxJQUFJLElBQUksS0FBSyxlQUFlLENBQUMsUUFBUSxFQUFFO1lBQ25DLE9BQU8sMkJBQTJCLENBQUM7U0FDdEM7UUFDRCxPQUFPLHVCQUF1QixDQUFDO0lBQ25DLENBQUM7OEdBaFJRLG1CQUFtQixtR0FpQ2hCLG9CQUFvQjtrR0FqQ3ZCLG1CQUFtQixnY0FhVyxnQkFBZ0IsZ0VDL0MzRCx3S0FHQTs7MkZEK0JhLG1CQUFtQjtrQkFQL0IsU0FBUzsrQkFDSSxhQUFhLFFBRWpCO3dCQUNGLEtBQUssRUFBRSxpREFBaUQ7cUJBQzNEOzswQkFtQ0ksTUFBTTsyQkFBQyxvQkFBb0I7NENBaEN2QixNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFbUUsZ0JBQWdCO3NCQUF4RixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRTlCLGNBQWM7c0JBQXRELFdBQVc7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGh5RGl2aWRlckNvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvZGl2aWRlcic7XG5pbXBvcnQgeyBFZGl0b3IsIEVsZW1lbnQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnc2xhdGUtYW5ndWxhcic7XG5pbXBvcnQgeyBEcm9wZG93bk1vZGUsIEVsZW1lbnRLaW5kcywgVGhlVG9vbGJhckdyb3VwVG9rZW4sIFRvb2xiYXJBY3Rpb25UeXBlcywgVG9vbGJhck1vcmVHcm91cCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBUaGVCYXNlVG9vbGJhckRyb3Bkb3duLCBUaGVCYXNlVG9vbGJhckl0ZW0gfSBmcm9tICcuLi8uLi9jb3JlL3Rvb2xiYXItaXRlbS9iYXNlLXRvb2xiYXItaXRlbSc7XG5pbXBvcnQgeyBUb29sYmFyQWxpZ25tZW50LCBUb29sYmFySXRlbSwgVG9vbGJhckl0ZW1UeXBlLCBUb29sYmFySXRlbXNDb21wb3NlUmV0dXJuIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90b29sYmFyJztcbmltcG9ydCB7IFRoZVRvb2xiYXJEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uL3Rvb2xiYXItZHJvcGRvd24vdG9vbGJhci1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHR5cGUgeyBUaGVUb29sYmFyR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi90b29sYmFyLWdyb3VwL3Rvb2xiYXItZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IFRoZVRvb2xiYXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vdG9vbGJhci1pdGVtL3Rvb2xiYXItaXRlbS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoZS10b29sYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3Rvb2xiYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aGUtdG9vbGJhci1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlcidcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFRoZVRvb2xiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBlZGl0b3I6IEVkaXRvcjtcblxuICAgIEBJbnB1dCgpIHRvb2xiYXJJdGVtczogVG9vbGJhckl0ZW1bXSA9IFtdO1xuXG4gICAgQElucHV0KCkgYWxpZ246IFRvb2xiYXJBbGlnbm1lbnQ7XG5cbiAgICBASW5wdXQoKSBjb250YWluZXJDbGFzczogc3RyaW5nW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIGlzTW9yZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBhZnRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgndG9vbGJhckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pIHRvb2xiYXJDb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmp1c3RpZnlDb250ZW50JykgZ2V0IGp1c3RpZnlDb250ZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGlnbjtcbiAgICB9XG5cbiAgICBjb21wb25lbnRzOiBNYXA8c3RyaW5nLCBDb21wb25lbnRSZWY8YW55Pj4gPSBuZXcgTWFwPHN0cmluZywgQ29tcG9uZW50UmVmPGFueT4+KCk7XG5cbiAgICBjb21wb3NlVG9vbGJhckl0ZW1zOiBUb29sYmFySXRlbXNDb21wb3NlUmV0dXJuO1xuXG4gICAgbW9yZUdyb3VwTWVudSA9IFRvb2xiYXJNb3JlR3JvdXA7XG5cbiAgICByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgICBlbGVtZW50V2lkdGggPSAwO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KFRoZVRvb2xiYXJHcm91cFRva2VuKSBwcml2YXRlIHRvb2xiYXJHcm91cENvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUaGVUb29sYmFyR3JvdXBDb21wb25lbnQ+XG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0VG9vbGJhckNsYXNzKCk7XG4gICAgICAgIHRoaXMucmVuZGVyVG9vbGJhclZpZXcoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UodGhpcy5lZGl0b3IpO1xuICAgICAgICB0aGlzLmlzTW9yZSAmJiB0aGlzLnJlc2l6ZUVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvb2xiYXJJdGVtcyA9IGNoYW5nZXMudG9vbGJhckl0ZW1zO1xuICAgICAgICBpZiAodG9vbGJhckl0ZW1zICYmICF0b29sYmFySXRlbXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVG9vbGJhclZpZXcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VG9vbGJhckNsYXNzKCkge1xuICAgICAgICBpZiAodGhpcy5lZGl0b3IgJiYgISF0aGlzLmNvbnRhaW5lckNsYXNzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi50aGlzLmNvbnRhaW5lckNsYXNzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzaXplRWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgZWRpdGFibGVFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoIH0gPSBlbnRyeS5jb250ZW50UmVjdDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc01vcmUgJiYgdGhpcy5lbGVtZW50V2lkdGggIT09IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFdpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVG9vbGJhclZpZXcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZWRpdGFibGVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVGFibGVBY3RpdmUoKSB7XG4gICAgICAgIGNvbnN0IFt0YWJsZV0gPSBFZGl0b3Iubm9kZXModGhpcy5lZGl0b3IsIHsgbWF0Y2g6IG4gPT4gRWxlbWVudC5pc0VsZW1lbnQobikgJiYgbi50eXBlID09PSBFbGVtZW50S2luZHMudGFibGUgfSk7XG4gICAgICAgIHJldHVybiAhIXRhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3Rpb25DaGFuZ2UoZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNb3JlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRvb2xiYXJWaWV3KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b29sYmFySXRlbXMgPSBbLi4udGhpcy50b29sYmFySXRlbXMsIHRoaXMubW9yZUdyb3VwTWVudV07XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0b29sYmFySXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLmtleSAhPT0gVG9vbGJhckFjdGlvblR5cGVzLnNwbGl0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50cy5nZXQoaXRlbS5rZXkpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtQ29tcG9uZW50ICYmIGl0ZW1Db21wb25lbnQuaW5zdGFuY2Uuc2VsZWN0aW9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Db21wb25lbnQuaW5zdGFuY2Uuc2VsZWN0aW9uQ2hhbmdlKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlclRvb2xiYXJWaWV3KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0b29sYmFySXRlbXMgPSB0aGlzLnRvb2xiYXJJdGVtc0NvbXBvc2UoKTtcbiAgICAgICAgY29uc3QgeyBpdGVtcywgZ3JvdXAgfSA9IHRvb2xiYXJJdGVtcztcblxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSB0aGlzLmNvbXBvc2VUb29sYmFySXRlbXM/Lml0ZW1zPy5sZW5ndGggJiYgZ3JvdXA/Lmxlbmd0aCA9PT0gdGhpcy5jb21wb3NlVG9vbGJhckl0ZW1zPy5ncm91cD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wb3NlVG9vbGJhckl0ZW1zID0gdG9vbGJhckl0ZW1zO1xuICAgICAgICB0aGlzLmNvbXBvbmVudHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy50b29sYmFyQ29udGFpbmVyLmNsZWFyKCk7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmtleSA9PT0gVG9vbGJhckFjdGlvblR5cGVzLnNwbGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVG9vbGJhclNwbGl0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRvb2xiYXJJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jcmVhdGVNb3JlR3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNhbGN1bGF0aW9uIGRpc3BsYXkgdG9vbGJhciBhbmQgbW9yZSBncm91cGVkIHRvb2xiYXJzXG4gICAgICpcbiAgICAgKlx04pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICBHbG9iYWxUb29sYmFyVmlldyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICAgKlx0fCDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgI2NoaWxkcmVuIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCB8XG4gICAgICpcdHwgfCAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAjaXRlbXNWaWV3IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAg4pSM4pSA4pSAICNncm91cGVkSXRlbXNEcm9wZG93biDilIDilIDilIDilJAgICB8IHxcbiAgICAgKlx0fCB8ICAgfCAgICAgICAjdW5ncm91cGVkSXRlbXMgICAgIHwgfCBUb29sYmFyU2VwYXJhdG9yVmlldyB8IHwgICAgICAgICNncm91cGVkSXRlbXMgICAgICAgfCAgIHwgfFxuICAgICAqXHR8IHwgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAt4pSYIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICB8IHxcbiAgICAgKlx0fCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcLS0tLS0tLS0tLSBvbmx5IHdoZW4gdG9vbGJhciBpdGVtcyBvdmVyZmxvdyAtLS0tLS0tLS8gICB8IHxcbiAgICAgKlx0fCDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggfFxuICAgICAqXHTilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvb2xiYXJJdGVtc0NvbXBvc2UoKTogVG9vbGJhckl0ZW1zQ29tcG9zZVJldHVybiB7XG4gICAgICAgIGNvbnN0IGdyb3VwV2lkdGggPSAzMjtcbiAgICAgICAgY29uc3QgaXRlbXM6IFRvb2xiYXJJdGVtW10gPSBbXTtcbiAgICAgICAgY29uc3QgZ3JvdXA6IFRvb2xiYXJJdGVtW10gPSBbXTtcbiAgICAgICAgbGV0IGVsZW1lbnRXaWR0aCA9IHRoaXMuaXNNb3JlID8gdGhpcy5lbGVtZW50V2lkdGggOiBudWxsO1xuICAgICAgICBsZXQgaXNTcGFjZVJlbWFpbmluZyA9IHRydWU7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRvb2xiYXJJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMudG9vbGJhckl0ZW1zW2ldO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTW9yZSkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNTcGFjZVJlbWFpbmluZykge1xuICAgICAgICAgICAgICAgIGdyb3VwLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IHRoaXMuZ2V0SXRlbVdpZHRoKGl0ZW0pO1xuICAgICAgICAgICAgY29uc3Qgb2NjdXB5V2lkdGggPSBpID09PSB0aGlzLnRvb2xiYXJJdGVtcy5sZW5ndGggLSAxID8gaXRlbVdpZHRoIDogaXRlbVdpZHRoICsgZ3JvdXBXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93UmVuZGVyID0gZWxlbWVudFdpZHRoICYmIGVsZW1lbnRXaWR0aCA+PSBvY2N1cHlXaWR0aDtcblxuICAgICAgICAgICAgaWYgKGFsbG93UmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50V2lkdGggLT0gaXRlbVdpZHRoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0ZpcnN0U3BsaXQgPSBncm91cC5sZW5ndGggPT09IDAgJiYgaXRlbS5rZXkgPT09IFRvb2xiYXJBY3Rpb25UeXBlcy5zcGxpdDtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRmlyc3RTcGxpdCkge1xuICAgICAgICAgICAgICAgICAgICBpc1NwYWNlUmVtYWluaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGl0ZW1zOiB0aGlzLnB1cmVUb29sYmFySXRlbXMoaXRlbXMpLFxuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzcGxpdCB3aWR0aDogMTNweFxuICAgICAqIGl0ZW0gd2lkdGg6IGRlZmF1bHQgaXRlbTogMzJweFxuICAgICAqIGRyb3Bkb3duIGl0ZW06IDQ4cHhcbiAgICAgKiBkZWZhdWx0IHBhZGRpbmdSaWdodDogNHB4XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRJdGVtV2lkdGgoaXRlbTogVG9vbGJhckl0ZW0pIHtcbiAgICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gNDtcbiAgICAgICAgY29uc3QgZGVmYXVsdEl0ZW1XaWR0aCA9IDMyO1xuICAgICAgICBjb25zdCBpY29uRHJvcGRvd25JdGVtV2lkdGggPSA0ODtcbiAgICAgICAgY29uc3QgdGV4dERyb3Bkb3duSXRlbVdpZHRoID0gNzA7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3duQWN0aW9uSWNvbldpZHRoID0gMTY7XG4gICAgICAgIGNvbnN0IHNwbGl0V2lkdGggPSA5O1xuICAgICAgICBjb25zdCBpc0Ryb3Bkb3duQ29tcG9uZW50ID0gaXRlbT8udHlwZSA9PT0gVG9vbGJhckl0ZW1UeXBlLmRyb3Bkb3duO1xuICAgICAgICBjb25zdCBpc1VwZGF0ZURyb3Bkb3duSXRlbVdpZHRoID0gIWl0ZW0/LndpZHRoICYmIGlzRHJvcGRvd25Db21wb25lbnQ7XG5cbiAgICAgICAgbGV0IGl0ZW1XaWR0aCA9IGl0ZW0/LndpZHRoID8/IGRlZmF1bHRJdGVtV2lkdGg7XG5cbiAgICAgICAgaWYgKGlzVXBkYXRlRHJvcGRvd25JdGVtV2lkdGgpIHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5kcm9wZG93bk1vZGUgPT09IERyb3Bkb3duTW9kZS5pY29uKSB7XG4gICAgICAgICAgICAgICAgaXRlbVdpZHRoID0gaWNvbkRyb3Bkb3duSXRlbVdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpdGVtPy5kcm9wZG93bk1vZGUgfHwgaXRlbT8uZHJvcGRvd25Nb2RlID09PSBEcm9wZG93bk1vZGUudGV4dCkge1xuICAgICAgICAgICAgICAgIGl0ZW1XaWR0aCA9IHRleHREcm9wZG93bkl0ZW1XaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtPy5pc0hpZGVEcm9wZG93bkFjdGlvbkljb24pIHtcbiAgICAgICAgICAgICAgICBpdGVtV2lkdGggLT0gZHJvcGRvd25BY3Rpb25JY29uV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0ua2V5ID09PSBUb29sYmFyQWN0aW9uVHlwZXMuc3BsaXQpIHtcbiAgICAgICAgICAgIGl0ZW1XaWR0aCA9IHNwbGl0V2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpdGVtV2lkdGggKz0gcGFkZGluZ1JpZ2h0O1xuXG4gICAgICAgIHJldHVybiBpdGVtV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZmlsdGVyIGFkamFjZW50IHJlcGVhdGVkIGRpdmlkZXJzXG4gICAgICogQHBhcmFtIHtUb29sYmFySXRlbVtdfSBpdGVtc1xuICAgICAqIEByZXR1cm5zXG4gICAgICogQG1lbWJlcm9mIFRoZVRvb2xiYXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdXJlVG9vbGJhckl0ZW1zKGl0ZW1zOiBUb29sYmFySXRlbVtdKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXMuZmlsdGVyKChhLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoaSA+IDAgJiYgaXRlbXNbaSAtIDFdLmtleSAhPT0gVG9vbGJhckFjdGlvblR5cGVzLnNwbGl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYS5rZXkgIT09IFRvb2xiYXJBY3Rpb25UeXBlcy5zcGxpdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUb29sYmFySXRlbShpdGVtOiBUb29sYmFySXRlbSkge1xuICAgICAgICBjb25zdCB7IGljb25Db21wb25lbnQsIHR5cGUsIGRyb3Bkb3duTW9kZSwgZHJvcGRvd25JdGVtS2V5LCBpbmNsdWRlcywgLi4uYXJncyB9ID0gaXRlbTtcbiAgICAgICAgY29uc3Qgdmlld0NvbXBvbmVudCA9IHRoaXMudmlld0NvbXBvbmVudFR5cGUodHlwZSk7XG4gICAgICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLnRvb2xiYXJDb250YWluZXIuY3JlYXRlQ29tcG9uZW50PFRoZUJhc2VUb29sYmFySXRlbT4oaWNvbkNvbXBvbmVudCA/IGljb25Db21wb25lbnQgOiB2aWV3Q29tcG9uZW50KTtcblxuICAgICAgICBjb21wUmVmLmluc3RhbmNlLmVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLnRvb2xiYXJJdGVtID0gaXRlbTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRzLnNldChpdGVtLmtleSwgY29tcFJlZik7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09IFRvb2xiYXJJdGVtVHlwZS5kcm9wZG93bikge1xuICAgICAgICAgICAgY29uc3QgZHJvcGRvd25SZWYgPSBjb21wUmVmIGFzIHVua25vd24gYXMgQ29tcG9uZW50UmVmPFRoZUJhc2VUb29sYmFyRHJvcGRvd24+O1xuICAgICAgICAgICAgZHJvcGRvd25SZWYuaW5zdGFuY2UuZHJvcGRvd25JdGVtS2V5ID0gaXRlbS5kcm9wZG93bkl0ZW1LZXk7XG4gICAgICAgICAgICBkcm9wZG93blJlZi5pbnN0YW5jZS5tZW51cyA9IGluY2x1ZGVzIGFzIFRvb2xiYXJJdGVtW107XG4gICAgICAgICAgICBkcm9wZG93blJlZi5pbnN0YW5jZS5tb2RlID0gZHJvcGRvd25Nb2RlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUb29sYmFyU3BsaXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLnRvb2xiYXJDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KFRoeURpdmlkZXJDb21wb25lbnQpO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLnRoeVZlcnRpY2FsID0gdHJ1ZTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS50aHlDb2xvciA9ICdsaWdodCc7XG4gICAgICAgIGNvbXBSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdteC0yJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVNb3JlR3JvdXAoZ3JvdXA6IFRvb2xiYXJJdGVtW10pIHtcbiAgICAgICAgaWYgKGdyb3VwLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLnRvb2xiYXJDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KHRoaXMudG9vbGJhckdyb3VwQ29tcG9uZW50KTtcbiAgICAgICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgICAgICAgICBjb21wUmVmLmluc3RhbmNlLm1lbnVzID0gZ3JvdXA7XG4gICAgICAgICAgICBjb21wUmVmLmluc3RhbmNlLml0ZW0gPSB0aGlzLm1vcmVHcm91cE1lbnU7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudHMuc2V0KHRoaXMubW9yZUdyb3VwTWVudS5rZXksIGNvbXBSZWYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2aWV3Q29tcG9uZW50VHlwZSh0eXBlOiBUb29sYmFySXRlbVR5cGUpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09IFRvb2xiYXJJdGVtVHlwZS5kZWZhdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gVGhlVG9vbGJhckl0ZW1Db21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09IFRvb2xiYXJJdGVtVHlwZS5kcm9wZG93bikge1xuICAgICAgICAgICAgcmV0dXJuIFRoZVRvb2xiYXJEcm9wZG93bkNvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVGhlVG9vbGJhckl0ZW1Db21wb25lbnQ7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAjdG9vbGJhckNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjxuZy10ZW1wbGF0ZSAqbmdJZj1cImFmdGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJhZnRlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|