pdm-ui-kit 0.2.0 → 0.3.1

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.
Files changed (44) hide show
  1. package/README.md +168 -3
  2. package/esm2020/lib/components/button-group/button-group.component.mjs +211 -182
  3. package/esm2020/lib/components/combobox/combobox.component.mjs +136 -14
  4. package/esm2020/lib/components/context-menu/context-menu.component.mjs +121 -42
  5. package/esm2020/lib/components/data-table/data-table.component.mjs +3 -3
  6. package/esm2020/lib/components/date-picker/date-picker.component.mjs +66 -54
  7. package/esm2020/lib/components/dialog/dialog.component.mjs +111 -94
  8. package/esm2020/lib/components/hover-card/hover-card.component.mjs +185 -24
  9. package/esm2020/lib/components/input/input.component.mjs +15 -15
  10. package/esm2020/lib/components/input-group/input-group.component.mjs +14 -14
  11. package/esm2020/lib/components/menubar/menubar.component.mjs +105 -29
  12. package/esm2020/lib/components/popover/popover.component.mjs +107 -75
  13. package/esm2020/lib/components/select/select.component.mjs +23 -22
  14. package/esm2020/lib/components/table/table.component.mjs +77 -68
  15. package/esm2020/lib/components/tabs/tabs.component.mjs +6 -6
  16. package/esm2020/lib/components/toggle-group/toggle-group.component.mjs +6 -6
  17. package/esm2020/lib/components/tooltip/tooltip.component.mjs +162 -19
  18. package/esm2020/lib/overlay/z-index-helper.mjs +69 -0
  19. package/esm2020/lib/utils/z-index.mjs +25 -28
  20. package/esm2020/public-api.mjs +67 -66
  21. package/fesm2015/pdm-ui-kit.mjs +1379 -654
  22. package/fesm2015/pdm-ui-kit.mjs.map +1 -1
  23. package/fesm2020/pdm-ui-kit.mjs +1383 -654
  24. package/fesm2020/pdm-ui-kit.mjs.map +1 -1
  25. package/lib/components/button-group/button-group.component.d.ts +8 -2
  26. package/lib/components/combobox/combobox.component.d.ts +20 -3
  27. package/lib/components/context-menu/context-menu.component.d.ts +17 -8
  28. package/lib/components/date-picker/date-picker.component.d.ts +5 -6
  29. package/lib/components/dialog/dialog.component.d.ts +5 -5
  30. package/lib/components/hover-card/hover-card.component.d.ts +27 -4
  31. package/lib/components/input/input.component.d.ts +3 -3
  32. package/lib/components/input-group/input-group.component.d.ts +1 -1
  33. package/lib/components/menubar/menubar.component.d.ts +16 -8
  34. package/lib/components/popover/popover.component.d.ts +13 -12
  35. package/lib/components/select/select.component.d.ts +4 -5
  36. package/lib/components/table/table.component.d.ts +2 -2
  37. package/lib/components/tabs/tabs.component.d.ts +1 -1
  38. package/lib/components/toggle-group/toggle-group.component.d.ts +1 -1
  39. package/lib/components/tooltip/tooltip.component.d.ts +21 -3
  40. package/lib/overlay/z-index-helper.d.ts +36 -0
  41. package/lib/utils/z-index.d.ts +14 -18
  42. package/package.json +6 -6
  43. package/public-api.d.ts +66 -65
  44. package/src/lib/styles/tokens.css +182 -0
@@ -1,36 +1,61 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output, ViewChild, } from "@angular/core";
2
+ import { TemplatePortal } from "@angular/cdk/portal";
3
+ import { mergeOverlayPanelClass, OVERLAY_BASE_Z_INDEX, } from "../../overlay/z-index-helper";
2
4
  import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
5
+ import * as i1 from "@angular/cdk/overlay";
6
+ import * as i2 from "@angular/common";
4
7
  export class PdmMenubarComponent {
5
- constructor(elementRef, cdr) {
8
+ constructor(overlay, viewContainerRef, elementRef, cdr) {
9
+ this.overlay = overlay;
10
+ this.viewContainerRef = viewContainerRef;
6
11
  this.elementRef = elementRef;
7
12
  this.cdr = cdr;
8
13
  this.menus = [];
9
- this.className = '';
14
+ this.className = "";
15
+ this.panelClassName = "";
10
16
  this.itemSelect = new EventEmitter();
11
17
  this.openIndex = -1;
18
+ this.overlayRef = null;
19
+ this.outsideClickSub = null;
12
20
  }
13
- ngOnInit() {
14
- this.boundPointerDown = (event) => this.onDocumentPointerDown(event);
15
- document.addEventListener('pointerdown', this.boundPointerDown, { capture: true });
16
- }
21
+ ngOnInit() { }
17
22
  ngOnDestroy() {
18
- if (this.boundPointerDown) {
19
- document.removeEventListener('pointerdown', this.boundPointerDown, { capture: true });
20
- }
23
+ this.destroyOverlay();
21
24
  }
22
- onEsc() {
25
+ onDocumentClickOrEsc(event) {
26
+ // Close on escape
27
+ if (event.type === "keydown") {
28
+ if (this.openIndex >= 0) {
29
+ this.openIndex = -1;
30
+ this.cdr.markForCheck();
31
+ }
32
+ return;
33
+ }
34
+ // Close on click outside
23
35
  if (this.openIndex >= 0) {
24
- this.openIndex = -1;
25
- this.cdr.markForCheck();
36
+ const target = event.target;
37
+ if (!this.elementRef.nativeElement.contains(target)) {
38
+ this.openIndex = -1;
39
+ this.cdr.markForCheck();
40
+ }
26
41
  }
27
42
  }
28
- toggle(index) {
43
+ toggle(index, event) {
44
+ event.stopPropagation();
29
45
  this.openIndex = this.openIndex === index ? -1 : index;
46
+ this.cdr.markForCheck();
47
+ if (this.openIndex >= 0) {
48
+ this.createOverlay(event);
49
+ }
50
+ else {
51
+ this.destroyOverlay();
52
+ }
30
53
  }
31
54
  select(value) {
32
55
  this.itemSelect.emit(value);
33
56
  this.openIndex = -1;
57
+ this.cdr.markForCheck();
58
+ this.destroyOverlay();
34
59
  }
35
60
  selectItem(item) {
36
61
  if (item.disabled || !item.value) {
@@ -38,31 +63,82 @@ export class PdmMenubarComponent {
38
63
  }
39
64
  this.select(item.value);
40
65
  }
41
- onDocumentPointerDown(event) {
42
- if (this.openIndex < 0)
43
- return;
44
- const target = event.target;
45
- if (!target)
46
- return;
47
- if (!this.elementRef.nativeElement.contains(target)) {
66
+ createOverlay(event) {
67
+ this.destroyOverlay();
68
+ const triggerEl = event.currentTarget;
69
+ const positionStrategy = this.overlay
70
+ .position()
71
+ .flexibleConnectedTo(triggerEl)
72
+ .withPositions(this.getPositionConfigs())
73
+ .withFlexibleDimensions(false)
74
+ .withPush(true);
75
+ const panelClass = mergeOverlayPanelClass(OVERLAY_BASE_Z_INDEX, this.panelClassName);
76
+ this.overlayRef = this.overlay.create({
77
+ positionStrategy,
78
+ panelClass,
79
+ });
80
+ const portal = new TemplatePortal(this.menuTemplateRef, this.viewContainerRef);
81
+ this.overlayRef.attach(portal);
82
+ // Close on click outside
83
+ this.outsideClickSub = this.overlayRef
84
+ .outsidePointerEvents()
85
+ .subscribe(() => {
48
86
  this.openIndex = -1;
49
87
  this.cdr.markForCheck();
88
+ this.destroyOverlay();
89
+ });
90
+ }
91
+ destroyOverlay() {
92
+ if (this.outsideClickSub) {
93
+ this.outsideClickSub.unsubscribe();
94
+ this.outsideClickSub = null;
50
95
  }
96
+ if (this.overlayRef) {
97
+ this.overlayRef.detach();
98
+ this.overlayRef.dispose();
99
+ this.overlayRef = null;
100
+ }
101
+ }
102
+ getPositionConfigs() {
103
+ return [
104
+ {
105
+ originX: "start",
106
+ originY: "bottom",
107
+ overlayX: "start",
108
+ overlayY: "top",
109
+ offsetY: 4,
110
+ },
111
+ {
112
+ originX: "start",
113
+ originY: "top",
114
+ overlayX: "start",
115
+ overlayY: "bottom",
116
+ offsetY: -4,
117
+ },
118
+ ];
51
119
  }
52
120
  }
53
- PdmMenubarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmMenubarComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
54
- PdmMenubarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmMenubarComponent, selector: "pdm-menubar", inputs: { menus: "menus", className: "className" }, outputs: { itemSelect: "itemSelect" }, host: { listeners: { "document:keydown.escape": "onEsc()" } }, ngImport: i0, template: "<nav role=\"menubar\" [ngClass]=\"['inline-flex h-9 items-center gap-0.5 rounded-md border border-border bg-background p-1 shadow-sm', className]\">\n <div *ngFor=\"let menu of menus; let i = index\" class=\"relative\">\n <button type=\"button\" class=\"inline-flex h-7 appearance-none items-center rounded-sm border-0 bg-transparent px-3 text-sm text-foreground hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\" (click)=\"toggle(i)\">{{ menu.label }}</button>\n <div *ngIf=\"openIndex === i\" class=\"absolute left-0 top-full z-[70] mt-1 min-w-40 rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md sm:min-w-48\">\n <button\n *ngFor=\"let item of menu.items\"\n type=\"button\"\n [disabled]=\"item.disabled || !item.value\"\n class=\"relative flex w-full appearance-none cursor-default select-none items-center rounded-sm border-0 bg-transparent px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"selectItem(item)\"\n >\n {{ item.label }}\n </button>\n </div>\n </div>\n</nav>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
121
+ PdmMenubarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmMenubarComponent, deps: [{ token: i1.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
122
+ PdmMenubarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmMenubarComponent, selector: "pdm-menubar", inputs: { menus: "menus", className: "className", panelClassName: "panelClassName" }, outputs: { itemSelect: "itemSelect" }, host: { listeners: { "document:click": "onDocumentClickOrEsc()", "document:keydown.escape": "onDocumentClickOrEsc()" } }, viewQueries: [{ propertyName: "menuTemplateRef", first: true, predicate: ["menuTemplate"], descendants: true }], ngImport: i0, template: "<nav\n role=\"menubar\"\n [ngClass]=\"[\n 'inline-flex h-9 items-center gap-0.5 rounded-md border border-border bg-background p-1 shadow-sm',\n className,\n ]\"\n>\n <div *ngFor=\"let menu of menus; let i = index\" class=\"relative\">\n <button\n type=\"button\"\n class=\"inline-flex h-7 appearance-none items-center rounded-sm border-0 bg-transparent px-3 text-sm text-foreground hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n [attr.aria-expanded]=\"openIndex === i\"\n (click)=\"toggle(i, $event)\"\n >\n {{ menu.label }}\n </button>\n </div>\n\n <!-- Template for CDK Overlay -->\n <ng-template #menuTemplate>\n <div\n class=\"min-w-40 rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md sm:min-w-48\"\n >\n <button\n *ngFor=\"let item of menus[openIndex]?.items || []\"\n type=\"button\"\n [disabled]=\"item.disabled || !item.value\"\n class=\"relative flex w-full appearance-none cursor-default select-none items-center rounded-sm border-0 bg-transparent px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"selectItem(item)\"\n >\n {{ item.label }}\n </button>\n </div>\n </ng-template>\n</nav>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
55
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmMenubarComponent, decorators: [{
56
124
  type: Component,
57
- args: [{ selector: 'pdm-menubar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav role=\"menubar\" [ngClass]=\"['inline-flex h-9 items-center gap-0.5 rounded-md border border-border bg-background p-1 shadow-sm', className]\">\n <div *ngFor=\"let menu of menus; let i = index\" class=\"relative\">\n <button type=\"button\" class=\"inline-flex h-7 appearance-none items-center rounded-sm border-0 bg-transparent px-3 text-sm text-foreground hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\" (click)=\"toggle(i)\">{{ menu.label }}</button>\n <div *ngIf=\"openIndex === i\" class=\"absolute left-0 top-full z-[70] mt-1 min-w-40 rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md sm:min-w-48\">\n <button\n *ngFor=\"let item of menu.items\"\n type=\"button\"\n [disabled]=\"item.disabled || !item.value\"\n class=\"relative flex w-full appearance-none cursor-default select-none items-center rounded-sm border-0 bg-transparent px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"selectItem(item)\"\n >\n {{ item.label }}\n </button>\n </div>\n </div>\n</nav>\n" }]
58
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { menus: [{
125
+ args: [{ selector: "pdm-menubar", changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav\n role=\"menubar\"\n [ngClass]=\"[\n 'inline-flex h-9 items-center gap-0.5 rounded-md border border-border bg-background p-1 shadow-sm',\n className,\n ]\"\n>\n <div *ngFor=\"let menu of menus; let i = index\" class=\"relative\">\n <button\n type=\"button\"\n class=\"inline-flex h-7 appearance-none items-center rounded-sm border-0 bg-transparent px-3 text-sm text-foreground hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n [attr.aria-expanded]=\"openIndex === i\"\n (click)=\"toggle(i, $event)\"\n >\n {{ menu.label }}\n </button>\n </div>\n\n <!-- Template for CDK Overlay -->\n <ng-template #menuTemplate>\n <div\n class=\"min-w-40 rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md sm:min-w-48\"\n >\n <button\n *ngFor=\"let item of menus[openIndex]?.items || []\"\n type=\"button\"\n [disabled]=\"item.disabled || !item.value\"\n class=\"relative flex w-full appearance-none cursor-default select-none items-center rounded-sm border-0 bg-transparent px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\"\n (click)=\"selectItem(item)\"\n >\n {{ item.label }}\n </button>\n </div>\n </ng-template>\n</nav>\n", styles: [":host{display:block}\n"] }]
126
+ }], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { menus: [{
59
127
  type: Input
60
128
  }], className: [{
61
129
  type: Input
130
+ }], panelClassName: [{
131
+ type: Input
62
132
  }], itemSelect: [{
63
133
  type: Output
64
- }], onEsc: [{
134
+ }], menuTemplateRef: [{
135
+ type: ViewChild,
136
+ args: ["menuTemplate"]
137
+ }], onDocumentClickOrEsc: [{
138
+ type: HostListener,
139
+ args: ["document:click"]
140
+ }, {
65
141
  type: HostListener,
66
- args: ['document:keydown.escape']
142
+ args: ["document:keydown.escape"]
67
143
  }] } });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbWVudWJhci9tZW51YmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tZW51YmFyL21lbnViYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDOzs7QUFhdkIsTUFBTSxPQUFPLG1CQUFtQjtJQVM5QixZQUNtQixVQUFtQyxFQUNuQyxHQUFzQjtRQUR0QixlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQVZoQyxVQUFLLEdBQXFCLEVBQUUsQ0FBQztRQUM3QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2QsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFbEQsY0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBT1osQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkYsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDdkY7SUFDSCxDQUFDO0lBR0QsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDekQsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhO1FBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFpQjtRQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2hDLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxLQUFtQjtRQUMvQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFL0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXBCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQzs7Z0hBNURVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLDZNQ3hCaEMsdzBDQWdCQTsyRkRRYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsYUFBYSxtQkFFTix1QkFBdUIsQ0FBQyxNQUFNO2lJQUd0QyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQXVCUCxLQUFLO3NCQURKLFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBkbU1lbnVJdGVtIH0gZnJvbSAnLi4vZHJvcGRvd24tbWVudS9kcm9wZG93bi1tZW51LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGRtTWVudWJhckl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICBpdGVtczogUGRtTWVudUl0ZW1bXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGRtLW1lbnViYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVudWJhci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBkbU1lbnViYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIG1lbnVzOiBQZG1NZW51YmFySXRlbVtdID0gW107XG4gIEBJbnB1dCgpIGNsYXNzTmFtZSA9ICcnO1xuICBAT3V0cHV0KCkgaXRlbVNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIG9wZW5JbmRleCA9IC0xO1xuXG4gIHByaXZhdGUgYm91bmRQb2ludGVyRG93biE6IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmJvdW5kUG9pbnRlckRvd24gPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4gdGhpcy5vbkRvY3VtZW50UG9pbnRlckRvd24oZXZlbnQpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5ib3VuZFBvaW50ZXJEb3duLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ib3VuZFBvaW50ZXJEb3duKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMuYm91bmRQb2ludGVyRG93biwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJylcbiAgb25Fc2MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3BlbkluZGV4ID49IDApIHtcbiAgICAgIHRoaXMub3BlbkluZGV4ID0gLTE7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMub3BlbkluZGV4ID0gdGhpcy5vcGVuSW5kZXggPT09IGluZGV4ID8gLTEgOiBpbmRleDtcbiAgfVxuXG4gIHNlbGVjdCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtU2VsZWN0LmVtaXQodmFsdWUpO1xuICAgIHRoaXMub3BlbkluZGV4ID0gLTE7XG4gIH1cblxuICBzZWxlY3RJdGVtKGl0ZW06IFBkbU1lbnVJdGVtKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0uZGlzYWJsZWQgfHwgIWl0ZW0udmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdChpdGVtLnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Eb2N1bWVudFBvaW50ZXJEb3duKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcGVuSW5kZXggPCAwKSByZXR1cm47XG5cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgTm9kZSB8IG51bGw7XG4gICAgaWYgKCF0YXJnZXQpIHJldHVybjtcblxuICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgdGhpcy5vcGVuSW5kZXggPSAtMTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxufVxuIiwiPG5hdiByb2xlPVwibWVudWJhclwiIFtuZ0NsYXNzXT1cIlsnaW5saW5lLWZsZXggaC05IGl0ZW1zLWNlbnRlciBnYXAtMC41IHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctYmFja2dyb3VuZCBwLTEgc2hhZG93LXNtJywgY2xhc3NOYW1lXVwiPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBtZW51IG9mIG1lbnVzOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJyZWxhdGl2ZVwiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiaW5saW5lLWZsZXggaC03IGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIgcm91bmRlZC1zbSBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0zIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1iYWNrZ3JvdW5kXCIgKGNsaWNrKT1cInRvZ2dsZShpKVwiPnt7IG1lbnUubGFiZWwgfX08L2J1dHRvbj5cbiAgICA8ZGl2ICpuZ0lmPVwib3BlbkluZGV4ID09PSBpXCIgY2xhc3M9XCJhYnNvbHV0ZSBsZWZ0LTAgdG9wLWZ1bGwgei1bNzBdIG10LTEgbWluLXctNDAgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1wb3BvdmVyIHAtMSB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBzaGFkb3ctbWQgc206bWluLXctNDhcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbWVudS5pdGVtc1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCB8fCAhaXRlbS52YWx1ZVwiXG4gICAgICAgIGNsYXNzPVwicmVsYXRpdmUgZmxleCB3LWZ1bGwgYXBwZWFyYW5jZS1ub25lIGN1cnNvci1kZWZhdWx0IHNlbGVjdC1ub25lIGl0ZW1zLWNlbnRlciByb3VuZGVkLXNtIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHB4LTIgcHktMS41IHRleHQtc20gb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6YmctYWNjZW50IGZvY3VzLXZpc2libGU6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTBcIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0SXRlbShpdGVtKVwiXG4gICAgICA+XG4gICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmF2PlxuIl19
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbWVudWJhci9tZW51YmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tZW51YmFyL21lbnViYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUNOLHNCQUFzQixFQUN0QixvQkFBb0IsR0FDcEIsTUFBTSw4QkFBOEIsQ0FBQzs7OztBQWN0QyxNQUFNLE9BQU8sbUJBQW1CO0lBYy9CLFlBQ2tCLE9BQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxVQUFtQyxFQUNuQyxHQUFzQjtRQUh0QixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFqQi9CLFVBQUssR0FBcUIsRUFBRSxDQUFDO1FBQzdCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUVuQixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVsRCxjQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFJUCxlQUFVLEdBQXNCLElBQUksQ0FBQztRQUNyQyxvQkFBZSxHQUFRLElBQUksQ0FBQztJQU9qQyxDQUFDO0lBRUosUUFBUSxLQUFVLENBQUM7SUFDbkIsV0FBVztRQUNWLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FB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LEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFJb0IsZUFBZTtzQkFBekMsU0FBUzt1QkFBQyxjQUFjO2dCQW1CekIsb0JBQW9CO3NCQUZuQixZQUFZO3VCQUFDLGdCQUFnQjs7c0JBQzdCLFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHRDb21wb25lbnQsXG5cdEVsZW1lbnRSZWYsXG5cdEV2ZW50RW1pdHRlcixcblx0SG9zdExpc3RlbmVyLFxuXHRJbnB1dCxcblx0T25EZXN0cm95LFxuXHRPbkluaXQsXG5cdE91dHB1dCxcblx0Vmlld0NoaWxkLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiwgQ29ubmVjdGVkUG9zaXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIjtcbmltcG9ydCB7XG5cdG1lcmdlT3ZlcmxheVBhbmVsQ2xhc3MsXG5cdE9WRVJMQVlfQkFTRV9aX0lOREVYLFxufSBmcm9tIFwiLi4vLi4vb3ZlcmxheS96LWluZGV4LWhlbHBlclwiO1xuaW1wb3J0IHsgUGRtTWVudUl0ZW0gfSBmcm9tIFwiLi4vZHJvcGRvd24tbWVudS9kcm9wZG93bi1tZW51LmNvbXBvbmVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBkbU1lbnViYXJJdGVtIHtcblx0bGFiZWw6IHN0cmluZztcblx0aXRlbXM6IFBkbU1lbnVJdGVtW107XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJwZG0tbWVudWJhclwiLFxuXHR0ZW1wbGF0ZVVybDogXCIuL21lbnViYXIuY29tcG9uZW50Lmh0bWxcIixcblx0c3R5bGVzOiBbXCI6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9XCJdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUGRtTWVudWJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblx0QElucHV0KCkgbWVudXM6IFBkbU1lbnViYXJJdGVtW10gPSBbXTtcblx0QElucHV0KCkgY2xhc3NOYW1lID0gXCJcIjtcblx0QElucHV0KCkgcGFuZWxDbGFzc05hbWUgPSBcIlwiO1xuXG5cdEBPdXRwdXQoKSBpdGVtU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cblx0b3BlbkluZGV4ID0gLTE7XG5cblx0QFZpZXdDaGlsZChcIm1lbnVUZW1wbGF0ZVwiKSBtZW51VGVtcGxhdGVSZWY6IGFueTtcblxuXHRwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBvdXRzaWRlQ2xpY2tTdWI6IGFueSA9IG51bGw7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSByZWFkb25seSBvdmVybGF5OiBPdmVybGF5LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcblx0XHRwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcblx0KSB7fVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge31cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5kZXN0cm95T3ZlcmxheSgpO1xuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OmNsaWNrXCIpXG5cdEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDprZXlkb3duLmVzY2FwZVwiKVxuXHRvbkRvY3VtZW50Q2xpY2tPckVzYyhldmVudDogTW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcblx0XHQvLyBDbG9zZSBvbiBlc2NhcGVcblx0XHRpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIHtcblx0XHRcdGlmICh0aGlzLm9wZW5JbmRleCA+PSAwKSB7XG5cdFx0XHRcdHRoaXMub3BlbkluZGV4ID0gLTE7XG5cdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENsb3NlIG9uIGNsaWNrIG91dHNpZGVcblx0XHRpZiAodGhpcy5vcGVuSW5kZXggPj0gMCkge1xuXHRcdFx0Y29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIE5vZGU7XG5cdFx0XHRpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcblx0XHRcdFx0dGhpcy5vcGVuSW5kZXggPSAtMTtcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dG9nZ2xlKGluZGV4OiBudW1iZXIsIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0dGhpcy5vcGVuSW5kZXggPSB0aGlzLm9wZW5JbmRleCA9PT0gaW5kZXggPyAtMSA6IGluZGV4O1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG5cdFx0aWYgKHRoaXMub3BlbkluZGV4ID49IDApIHtcblx0XHRcdHRoaXMuY3JlYXRlT3ZlcmxheShldmVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZGVzdHJveU92ZXJsYXkoKTtcblx0XHR9XG5cdH1cblxuXHRzZWxlY3QodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuaXRlbVNlbGVjdC5lbWl0KHZhbHVlKTtcblx0XHR0aGlzLm9wZW5JbmRleCA9IC0xO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdHRoaXMuZGVzdHJveU92ZXJsYXkoKTtcblx0fVxuXG5cdHNlbGVjdEl0ZW0oaXRlbTogUGRtTWVudUl0ZW0pOiB2b2lkIHtcblx0XHRpZiAoaXRlbS5kaXNhYmxlZCB8fCAhaXRlbS52YWx1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLnNlbGVjdChpdGVtLnZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlT3ZlcmxheShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMuZGVzdHJveU92ZXJsYXkoKTtcblxuXHRcdGNvbnN0IHRyaWdnZXJFbCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cblx0XHRjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XG5cdFx0XHQucG9zaXRpb24oKVxuXHRcdFx0LmZsZXhpYmxlQ29ubmVjdGVkVG8odHJpZ2dlckVsKVxuXHRcdFx0LndpdGhQb3NpdGlvbnModGhpcy5nZXRQb3NpdGlvbkNvbmZpZ3MoKSlcblx0XHRcdC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuXHRcdFx0LndpdGhQdXNoKHRydWUpO1xuXG5cdFx0Y29uc3QgcGFuZWxDbGFzcyA9IG1lcmdlT3ZlcmxheVBhbmVsQ2xhc3MoXG5cdFx0XHRPVkVSTEFZX0JBU0VfWl9JTkRFWCxcblx0XHRcdHRoaXMucGFuZWxDbGFzc05hbWUsXG5cdFx0KTtcblxuXHRcdHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuXHRcdFx0cG9zaXRpb25TdHJhdGVneSxcblx0XHRcdHBhbmVsQ2xhc3MsXG5cdFx0fSk7XG5cblx0XHRjb25zdCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwoXG5cdFx0XHR0aGlzLm1lbnVUZW1wbGF0ZVJlZixcblx0XHRcdHRoaXMudmlld0NvbnRhaW5lclJlZixcblx0XHQpO1xuXHRcdHRoaXMub3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcblxuXHRcdC8vIENsb3NlIG9uIGNsaWNrIG91dHNpZGVcblx0XHR0aGlzLm91dHNpZGVDbGlja1N1YiA9IHRoaXMub3ZlcmxheVJlZlxuXHRcdFx0Lm91dHNpZGVQb2ludGVyRXZlbnRzKClcblx0XHRcdC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLm9wZW5JbmRleCA9IC0xO1xuXHRcdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdFx0dGhpcy5kZXN0cm95T3ZlcmxheSgpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGRlc3Ryb3lPdmVybGF5KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm91dHNpZGVDbGlja1N1Yikge1xuXHRcdFx0dGhpcy5vdXRzaWRlQ2xpY2tTdWIudW5zdWJzY3JpYmUoKTtcblx0XHRcdHRoaXMub3V0c2lkZUNsaWNrU3ViID0gbnVsbDtcblx0XHR9XG5cdFx0aWYgKHRoaXMub3ZlcmxheVJlZikge1xuXHRcdFx0dGhpcy5vdmVybGF5UmVmLmRldGFjaCgpO1xuXHRcdFx0dGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcblx0XHRcdHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRQb3NpdGlvbkNvbmZpZ3MoKTogQ29ubmVjdGVkUG9zaXRpb25bXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0b3JpZ2luWDogXCJzdGFydFwiLFxuXHRcdFx0XHRvcmlnaW5ZOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRvdmVybGF5WDogXCJzdGFydFwiLFxuXHRcdFx0XHRvdmVybGF5WTogXCJ0b3BcIixcblx0XHRcdFx0b2Zmc2V0WTogNCxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG9yaWdpblg6IFwic3RhcnRcIixcblx0XHRcdFx0b3JpZ2luWTogXCJ0b3BcIixcblx0XHRcdFx0b3ZlcmxheVg6IFwic3RhcnRcIixcblx0XHRcdFx0b3ZlcmxheVk6IFwiYm90dG9tXCIsXG5cdFx0XHRcdG9mZnNldFk6IC00LFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG59XG4iLCI8bmF2XG4gIHJvbGU9XCJtZW51YmFyXCJcbiAgW25nQ2xhc3NdPVwiW1xuICAgICdpbmxpbmUtZmxleCBoLTkgaXRlbXMtY2VudGVyIGdhcC0wLjUgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1iYWNrZ3JvdW5kIHAtMSBzaGFkb3ctc20nLFxuICAgIGNsYXNzTmFtZSxcbiAgXVwiXG4+XG4gIDxkaXYgKm5nRm9yPVwibGV0IG1lbnUgb2YgbWVudXM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtNyBhcHBlYXJhbmNlLW5vbmUgaXRlbXMtY2VudGVyIHJvdW5kZWQtc20gYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgcHgtMyB0ZXh0LXNtIHRleHQtZm9yZWdyb3VuZCBob3ZlcjpiZy1hY2NlbnQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtYmFja2dyb3VuZFwiXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW5JbmRleCA9PT0gaVwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlKGksICRldmVudClcIlxuICAgID5cbiAgICAgIHt7IG1lbnUubGFiZWwgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBUZW1wbGF0ZSBmb3IgQ0RLIE92ZXJsYXkgLS0+XG4gIDxuZy10ZW1wbGF0ZSAjbWVudVRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibWluLXctNDAgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1wb3BvdmVyIHAtMSB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBzaGFkb3ctbWQgc206bWluLXctNDhcIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbWVudXNbb3BlbkluZGV4XT8uaXRlbXMgfHwgW11cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgfHwgIWl0ZW0udmFsdWVcIlxuICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGZsZXggdy1mdWxsIGFwcGVhcmFuY2Utbm9uZSBjdXJzb3ItZGVmYXVsdCBzZWxlY3Qtbm9uZSBpdGVtcy1jZW50ZXIgcm91bmRlZC1zbSBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yIHB5LTEuNSB0ZXh0LXNtIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJnLWFjY2VudCBmb2N1cy12aXNpYmxlOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwXCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0oaXRlbSlcIlxuICAgICAgPlxuICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmF2PlxuIl19
@@ -1,53 +1,43 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
2
- import { Z_INDEX } from '../../utils/z-index';
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output, ViewChild, } from "@angular/core";
2
+ import { TemplatePortal } from "@angular/cdk/portal";
3
+ import { mergeOverlayPanelClass, OVERLAY_BASE_Z_INDEX, } from "../../overlay/z-index-helper";
3
4
  import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
+ import * as i1 from "@angular/cdk/overlay";
6
+ import * as i2 from "@angular/common";
5
7
  export class PdmPopoverComponent {
6
- constructor(elementRef, cdr) {
8
+ constructor(overlay, viewContainerRef, elementRef, cdr) {
9
+ this.overlay = overlay;
10
+ this.viewContainerRef = viewContainerRef;
7
11
  this.elementRef = elementRef;
8
12
  this.cdr = cdr;
9
13
  this._open = false;
10
- this.triggerText = 'Open';
11
- this.className = '';
12
- this.panelClassName = '';
14
+ this.triggerText = "Open";
15
+ this.className = "";
16
+ this.panelClassName = "";
13
17
  this.showTrigger = true;
14
18
  this.openChange = new EventEmitter();
15
- this.panelPlacement = 'bottom';
16
- }
17
- ngOnInit() {
18
- this.boundPointerDown = (event) => this.onDocumentPointerDown(event);
19
- document.addEventListener('pointerdown', this.boundPointerDown, { capture: true });
19
+ this.overlayRef = null;
20
+ this.outsideClickSub = null;
20
21
  }
22
+ ngOnInit() { }
21
23
  ngOnDestroy() {
22
- if (this.boundPointerDown) {
23
- document.removeEventListener('pointerdown', this.boundPointerDown, { capture: true });
24
- }
24
+ this.destroyOverlay();
25
25
  }
26
26
  set open(value) {
27
- this._open = !!value;
28
- if (this._open) {
29
- this.schedulePanelPlacementUpdate();
27
+ if (this._open === !!value)
28
+ return;
29
+ if (value) {
30
+ this.openPanel();
30
31
  }
31
32
  else {
32
- this.panelPlacement = 'bottom';
33
+ this.closePanel();
33
34
  }
34
- this.cdr.markForCheck();
35
35
  }
36
36
  get open() {
37
37
  return this._open;
38
38
  }
39
- get panelClasses() {
40
- const baseClasses = 'min-w-80 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md';
41
- return [
42
- this.panelPlacement === 'top'
43
- ? `absolute bottom-full left-0 ${Z_INDEX.popover} mb-2 ${baseClasses}`
44
- : `absolute left-0 top-full ${Z_INDEX.popover} mt-2 ${baseClasses}`,
45
- this.panelClassName
46
- ];
47
- }
48
39
  toggle() {
49
40
  this.open = !this.open;
50
- this.openChange.emit(this.open);
51
41
  }
52
42
  onEsc() {
53
43
  if (this.open) {
@@ -55,48 +45,99 @@ export class PdmPopoverComponent {
55
45
  this.openChange.emit(false);
56
46
  }
57
47
  }
58
- onViewportChange() {
59
- this.updatePanelPlacement();
60
- }
61
- onDocumentPointerDown(event) {
62
- if (!this.open)
48
+ openPanel() {
49
+ if (this.overlayRef)
50
+ return;
51
+ const triggerEl = this.triggerRef?.nativeElement;
52
+ if (!triggerEl)
63
53
  return;
64
- const target = event.target;
65
- if (target && !this.elementRef.nativeElement.contains(target)) {
54
+ this._open = true;
55
+ this.openChange.emit(true);
56
+ this.cdr.markForCheck();
57
+ const positionStrategy = this.overlay
58
+ .position()
59
+ .flexibleConnectedTo(triggerEl)
60
+ .withPositions(this.getPositionConfigs())
61
+ .withFlexibleDimensions(false)
62
+ .withPush(true);
63
+ const panelClass = mergeOverlayPanelClass(OVERLAY_BASE_Z_INDEX, this.panelClassName);
64
+ this.overlayRef = this.overlay.create({
65
+ positionStrategy,
66
+ panelClass,
67
+ });
68
+ const portal = new TemplatePortal(this.panelTemplateRef, this.viewContainerRef);
69
+ this.overlayRef.attach(portal);
70
+ // Close on click outside
71
+ this.outsideClickSub = this.overlayRef
72
+ .outsidePointerEvents()
73
+ .subscribe(() => {
66
74
  this.open = false;
67
75
  this.openChange.emit(false);
68
- }
69
- }
70
- schedulePanelPlacementUpdate() {
71
- setTimeout(() => this.updatePanelPlacement());
76
+ });
77
+ this.cdr.markForCheck();
72
78
  }
73
- updatePanelPlacement() {
74
- if (!this.open)
75
- return;
76
- const anchorEl = this.triggerRef?.nativeElement || this.anchorRef?.nativeElement;
77
- const panelEl = this.panelRef?.nativeElement;
78
- if (!anchorEl || !panelEl || typeof window === 'undefined') {
79
+ closePanel() {
80
+ if (!this.overlayRef)
79
81
  return;
82
+ this._open = false;
83
+ this.openChange.emit(false);
84
+ this.cdr.markForCheck();
85
+ this.destroyOverlay();
86
+ }
87
+ destroyOverlay() {
88
+ if (this.outsideClickSub) {
89
+ this.outsideClickSub.unsubscribe();
90
+ this.outsideClickSub = null;
80
91
  }
81
- const viewportHeight = window.innerHeight;
82
- const gap = 8;
83
- const anchorRect = anchorEl.getBoundingClientRect();
84
- const panelHeight = panelEl.offsetHeight;
85
- const spaceBelow = Math.max(0, viewportHeight - anchorRect.bottom - gap);
86
- const spaceAbove = Math.max(0, anchorRect.top - gap);
87
- const nextPlacement = spaceBelow < panelHeight && spaceAbove > spaceBelow ? 'top' : 'bottom';
88
- if (this.panelPlacement !== nextPlacement) {
89
- this.panelPlacement = nextPlacement;
90
- this.cdr.markForCheck();
92
+ if (this.overlayRef) {
93
+ this.overlayRef.detach();
94
+ this.overlayRef.dispose();
95
+ this.overlayRef = null;
91
96
  }
92
97
  }
98
+ getPositionConfigs() {
99
+ return [
100
+ // Bottom (default)
101
+ {
102
+ originX: "start",
103
+ originY: "bottom",
104
+ overlayX: "start",
105
+ overlayY: "top",
106
+ offsetY: 8,
107
+ },
108
+ // Top (fallback)
109
+ {
110
+ originX: "start",
111
+ originY: "top",
112
+ overlayX: "start",
113
+ overlayY: "bottom",
114
+ offsetY: -8,
115
+ },
116
+ // Right
117
+ {
118
+ originX: "end",
119
+ originY: "bottom",
120
+ overlayX: "start",
121
+ overlayY: "top",
122
+ offsetY: 8,
123
+ },
124
+ // Left
125
+ {
126
+ originX: "start",
127
+ originY: "bottom",
128
+ overlayX: "end",
129
+ overlayY: "top",
130
+ offsetY: 8,
131
+ },
132
+ ];
133
+ }
93
134
  }
94
- PdmPopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmPopoverComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
95
- PdmPopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmPopoverComponent, selector: "pdm-popover", inputs: { triggerText: "triggerText", className: "className", panelClassName: "panelClassName", showTrigger: "showTrigger", open: "open" }, outputs: { openChange: "openChange" }, host: { listeners: { "document:keydown.escape": "onEsc()", "window:resize": "onViewportChange()", "window:scroll": "onViewportChange()" } }, viewQueries: [{ propertyName: "anchorRef", first: true, predicate: ["anchorEl"], descendants: true }, { propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true }, { propertyName: "panelRef", first: true, predicate: ["panelEl"], descendants: true }], ngImport: i0, template: "<div #anchorEl class=\"relative inline-block\" [ngClass]=\"className\">\n <button #triggerEl *ngIf=\"showTrigger\" type=\"button\" class=\"inline-flex h-9 appearance-none items-center justify-center rounded-md border border-input bg-background px-3 text-sm font-medium text-foreground shadow-sm\" [attr.aria-expanded]=\"open\" (click)=\"toggle()\">{{ triggerText }}</button>\n <div #panelEl *ngIf=\"open || !showTrigger\" [ngClass]=\"panelClasses\">\n <ng-content></ng-content>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
135
+ PdmPopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmPopoverComponent, deps: [{ token: i1.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
136
+ PdmPopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmPopoverComponent, selector: "pdm-popover", inputs: { triggerText: "triggerText", className: "className", panelClassName: "panelClassName", showTrigger: "showTrigger", open: "open" }, outputs: { openChange: "openChange" }, host: { listeners: { "document:keydown.escape": "onEsc()" } }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true }, { propertyName: "panelTemplateRef", first: true, predicate: ["panelTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"relative inline-block\" [ngClass]=\"className\">\n <button\n #triggerEl\n *ngIf=\"showTrigger\"\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center rounded-md border border-input bg-background px-3 text-sm font-medium text-foreground shadow-sm\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-haspopup]=\"'dialog'\"\n (click)=\"toggle()\"\n >\n {{ triggerText }}\n </button>\n\n <!-- Trigger slot for custom trigger -->\n <ng-content select=\"[pdmPopoverTrigger]\"></ng-content>\n\n <!-- Template for CDK Overlay -->\n <ng-template #panelTemplate>\n <div\n class=\"min-w-80 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md\"\n >\n <ng-content></ng-content>\n </div>\n </ng-template>\n</div>\n", styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
96
137
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmPopoverComponent, decorators: [{
97
138
  type: Component,
98
- args: [{ selector: 'pdm-popover', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #anchorEl class=\"relative inline-block\" [ngClass]=\"className\">\n <button #triggerEl *ngIf=\"showTrigger\" type=\"button\" class=\"inline-flex h-9 appearance-none items-center justify-center rounded-md border border-input bg-background px-3 text-sm font-medium text-foreground shadow-sm\" [attr.aria-expanded]=\"open\" (click)=\"toggle()\">{{ triggerText }}</button>\n <div #panelEl *ngIf=\"open || !showTrigger\" [ngClass]=\"panelClasses\">\n <ng-content></ng-content>\n </div>\n</div>\n" }]
99
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { triggerText: [{
139
+ args: [{ selector: "pdm-popover", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative inline-block\" [ngClass]=\"className\">\n <button\n #triggerEl\n *ngIf=\"showTrigger\"\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center rounded-md border border-input bg-background px-3 text-sm font-medium text-foreground shadow-sm\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-haspopup]=\"'dialog'\"\n (click)=\"toggle()\"\n >\n {{ triggerText }}\n </button>\n\n <!-- Trigger slot for custom trigger -->\n <ng-content select=\"[pdmPopoverTrigger]\"></ng-content>\n\n <!-- Template for CDK Overlay -->\n <ng-template #panelTemplate>\n <div\n class=\"min-w-80 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md\"\n >\n <ng-content></ng-content>\n </div>\n </ng-template>\n</div>\n", styles: [":host{display:inline-block}\n"] }]
140
+ }], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { triggerText: [{
100
141
  type: Input
101
142
  }], className: [{
102
143
  type: Input
@@ -106,25 +147,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
106
147
  type: Input
107
148
  }], openChange: [{
108
149
  type: Output
109
- }], anchorRef: [{
110
- type: ViewChild,
111
- args: ['anchorEl']
112
150
  }], triggerRef: [{
113
151
  type: ViewChild,
114
- args: ['triggerEl']
115
- }], panelRef: [{
152
+ args: ["triggerEl"]
153
+ }], panelTemplateRef: [{
116
154
  type: ViewChild,
117
- args: ['panelEl']
155
+ args: ["panelTemplate"]
118
156
  }], open: [{
119
157
  type: Input
120
158
  }], onEsc: [{
121
159
  type: HostListener,
122
- args: ['document:keydown.escape']
123
- }], onViewportChange: [{
124
- type: HostListener,
125
- args: ['window:resize']
126
- }, {
127
- type: HostListener,
128
- args: ['window:scroll']
160
+ args: ["document:keydown.escape"]
129
161
  }] } });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQU85QyxNQUFNLE9BQU8sbUJBQW1CO0lBZ0I5QixZQUNtQixVQUFtQyxFQUNuQyxHQUFzQjtRQUR0QixlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWpCakMsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNiLGdCQUFXLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNsQixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUVuRCxtQkFBYyxHQUFxQixRQUFRLENBQUM7SUFXekMsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkYsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFD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cnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBaX0lOREVYIH0gZnJvbSAnLi4vLi4vdXRpbHMvei1pbmRleCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1wb3BvdmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQZG1Qb3BvdmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9vcGVuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRyaWdnZXJUZXh0ID0gJ09wZW4nO1xuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcbiAgQElucHV0KCkgcGFuZWxDbGFzc05hbWUgPSAnJztcbiAgQElucHV0KCkgc2hvd1RyaWdnZXIgPSB0cnVlO1xuICBAT3V0cHV0KCkgb3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBwYW5lbFBsYWNlbWVudDogJ3RvcCcgfCAnYm90dG9tJyA9ICdib3R0b20nO1xuXG4gIEBWaWV3Q2hpbGQoJ2FuY2hvckVsJykgcHJpdmF0ZSBhbmNob3JSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgndHJpZ2dlckVsJykgcHJpdmF0ZSB0cmlnZ2VyUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3BhbmVsRWwnKSBwcml2YXRlIHBhbmVsUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcHJpdmF0ZSBib3VuZFBvaW50ZXJEb3duITogKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYm91bmRQb2ludGVyRG93biA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB0aGlzLm9uRG9jdW1lbnRQb2ludGVyRG93bihldmVudCk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLmJvdW5kUG9pbnRlckRvd24sIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmJvdW5kUG9pbnRlckRvd24pIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5ib3VuZFBvaW50ZXJEb3duLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IG9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9vcGVuID0gISF2YWx1ZTtcbiAgICBpZiAodGhpcy5fb3Blbikge1xuICAgICAgdGhpcy5zY2hlZHVsZVBhbmVsUGxhY2VtZW50VXBkYXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFuZWxQbGFjZW1lbnQgPSAnYm90dG9tJztcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgZ2V0IG9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29wZW47XG4gIH1cblxuICBnZXQgcGFuZWxDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBiYXNlQ2xhc3NlcyA9ICdtaW4tdy04MCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItYm9yZGVyIGJnLXBvcG92ZXIgcC00IHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIHNoYWRvdy1tZCc7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMucGFuZWxQbGFjZW1lbnQgPT09ICd0b3AnXG4gICAgICAgID8gYGFic29sdXRlIGJvdHRvbS1mdWxsIGxlZnQtMCAke1pfSU5ERVgucG9wb3Zlcn0gbWItMiAke2Jhc2VDbGFzc2VzfWBcbiAgICAgICAgOiBgYWJzb2x1dGUgbGVmdC0wIHRvcC1mdWxsICR7Wl9JTkRFWC5wb3BvdmVyfSBtdC0yICR7YmFzZUNsYXNzZXN9YCxcbiAgICAgIHRoaXMucGFuZWxDbGFzc05hbWVcbiAgICBdO1xuICB9XG5cbiAgdG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQodGhpcy5vcGVuKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJylcbiAgb25Fc2MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxuICBvblZpZXdwb3J0Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlUGFuZWxQbGFjZW1lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Eb2N1bWVudFBvaW50ZXJEb3duKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3BlbikgcmV0dXJuO1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBOb2RlIHwgbnVsbDtcbiAgICBpZiAodGFyZ2V0ICYmICF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlUGFuZWxQbGFjZW1lbnRVcGRhdGUoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVBhbmVsUGxhY2VtZW50KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQYW5lbFBsYWNlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3BlbikgcmV0dXJuO1xuXG4gICAgY29uc3QgYW5jaG9yRWwgPSB0aGlzLnRyaWdnZXJSZWY/Lm5hdGl2ZUVsZW1lbnQgfHwgdGhpcy5hbmNob3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgcGFuZWxFbCA9IHRoaXMucGFuZWxSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFhbmNob3JFbCB8fCAhcGFuZWxFbCB8fCB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuICAgIGNvbnN0IGdhcCA9IDg7XG4gICAgY29uc3QgYW5jaG9yUmVjdCA9IGFuY2hvckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHBhbmVsSGVpZ2h0ID0gcGFuZWxFbC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3Qgc3BhY2VCZWxvdyA9IE1hdGgubWF4KDAsIHZpZXdwb3J0SGVpZ2h0IC0gYW5jaG9yUmVjdC5ib3R0b20gLSBnYXApO1xuICAgIGNvbnN0IHNwYWNlQWJvdmUgPSBNYXRoLm1heCgwLCBhbmNob3JSZWN0LnRvcCAtIGdhcCk7XG4gICAgY29uc3QgbmV4dFBsYWNlbWVudDogJ3RvcCcgfCAnYm90dG9tJyA9XG4gICAgICBzcGFjZUJlbG93IDwgcGFuZWxIZWlnaHQgJiYgc3BhY2VBYm92ZSA+IHNwYWNlQmVsb3cgPyAndG9wJyA6ICdib3R0b20nO1xuXG4gICAgaWYgKHRoaXMucGFuZWxQbGFjZW1lbnQgIT09IG5leHRQbGFjZW1lbnQpIHtcbiAgICAgIHRoaXMucGFuZWxQbGFjZW1lbnQgPSBuZXh0UGxhY2VtZW50O1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2ICNhbmNob3JFbCBjbGFzcz1cInJlbGF0aXZlIGlubGluZS1ibG9ja1wiIFtuZ0NsYXNzXT1cImNsYXNzTmFtZVwiPlxuICA8YnV0dG9uICN0cmlnZ2VyRWwgKm5nSWY9XCJzaG93VHJpZ2dlclwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImlubGluZS1mbGV4IGgtOSBhcHBlYXJhbmNlLW5vbmUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIHB4LTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgc2hhZG93LXNtXCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuXCIgKGNsaWNrKT1cInRvZ2dsZSgpXCI+e3sgdHJpZ2dlclRleHQgfX08L2J1dHRvbj5cbiAgPGRpdiAjcGFuZWxFbCAqbmdJZj1cIm9wZW4gfHwgIXNob3dUcmlnZ2VyXCIgW25nQ2xhc3NdPVwicGFuZWxDbGFzc2VzXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUNOLHNCQUFzQixFQUN0QixvQkFBb0IsR0FDcEIsTUFBTSw4QkFBOEIsQ0FBQzs7OztBQVF0QyxNQUFNLE9BQU8sbUJBQW1CO0lBZ0IvQixZQUNrQixPQUFnQixFQUNoQixnQkFBa0MsRUFDbEMsVUFBbUMsRUFDbkMsR0FBc0I7UUFIdEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQ25DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBbkJoQyxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBRWIsZ0JBQVcsR0FBRyxNQUFNLENBQUM7UUFDckIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRWxCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBSzNDLGVBQVUsR0FBc0IsSUFBSSxDQUFDO1FBQ3JDLG9CQUFlLEdBQVEsSUFBSSxDQUFDO0lBT2pDLENBQUM7SUFFSixRQUFRLEtBQVUsQ0FBQztJQUNuQixXQUFXO1FBQ1Ys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U0FBUztzQkFBakIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFFeUIsVUFBVTtzQkFBekMsU0FBUzt1QkFBQyxXQUFXO2dCQUNjLGdCQUFnQjtzQkFBbkQsU0FBUzt1QkFBQyxlQUFlO2dCQWtCdEIsSUFBSTtzQkFEUCxLQUFLO2dCQW1CTixLQUFLO3NCQURKLFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHRDb21wb25lbnQsXG5cdEVsZW1lbnRSZWYsXG5cdEV2ZW50RW1pdHRlcixcblx0SG9zdExpc3RlbmVyLFxuXHRJbnB1dCxcblx0T25EZXN0cm95LFxuXHRPbkluaXQsXG5cdE91dHB1dCxcblx0Vmlld0NoaWxkLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiwgQ29ubmVjdGVkUG9zaXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIjtcbmltcG9ydCB7XG5cdG1lcmdlT3ZlcmxheVBhbmVsQ2xhc3MsXG5cdE9WRVJMQVlfQkFTRV9aX0lOREVYLFxufSBmcm9tIFwiLi4vLi4vb3ZlcmxheS96LWluZGV4LWhlbHBlclwiO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwicGRtLXBvcG92ZXJcIixcblx0dGVtcGxhdGVVcmw6IFwiLi9wb3BvdmVyLmNvbXBvbmVudC5odG1sXCIsXG5cdHN0eWxlczogW1wiOmhvc3QgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cIl0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQZG1Qb3BvdmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXHRwcml2YXRlIF9vcGVuID0gZmFsc2U7XG5cblx0QElucHV0KCkgdHJpZ2dlclRleHQgPSBcIk9wZW5cIjtcblx0QElucHV0KCkgY2xhc3NOYW1lID0gXCJcIjtcblx0QElucHV0KCkgcGFuZWxDbGFzc05hbWUgPSBcIlwiO1xuXHRASW5wdXQoKSBzaG93VHJpZ2dlciA9IHRydWU7XG5cblx0QE91dHB1dCgpIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cblx0QFZpZXdDaGlsZChcInRyaWdnZXJFbFwiKSBwcml2YXRlIHRyaWdnZXJSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pjtcblx0QFZpZXdDaGlsZChcInBhbmVsVGVtcGxhdGVcIikgcHJpdmF0ZSBwYW5lbFRlbXBsYXRlUmVmOiBhbnk7XG5cblx0cHJpdmF0ZSBvdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgb3V0c2lkZUNsaWNrU3ViOiBhbnkgPSBudWxsO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSxcblx0XHRwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pixcblx0XHRwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG5cdCkge31cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHt9XG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuZGVzdHJveU92ZXJsYXkoKTtcblx0fVxuXG5cdEBJbnB1dCgpXG5cdHNldCBvcGVuKHZhbHVlOiBib29sZWFuKSB7XG5cdFx0aWYgKHRoaXMuX29wZW4gPT09ICEhdmFsdWUpIHJldHVybjtcblxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0dGhpcy5vcGVuUGFuZWwoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jbG9zZVBhbmVsKCk7XG5cdFx0fVxuXHR9XG5cdGdldCBvcGVuKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9vcGVuO1xuXHR9XG5cblx0dG9nZ2xlKCk6IHZvaWQge1xuXHRcdHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGVcIilcblx0b25Fc2MoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMub3Blbikge1xuXHRcdFx0dGhpcy5vcGVuID0gZmFsc2U7XG5cdFx0XHR0aGlzLm9wZW5DaGFuZ2UuZW1pdChmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBvcGVuUGFuZWwoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMub3ZlcmxheVJlZikgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdHJpZ2dlckVsID0gdGhpcy50cmlnZ2VyUmVmPy5uYXRpdmVFbGVtZW50O1xuXHRcdGlmICghdHJpZ2dlckVsKSByZXR1cm47XG5cblx0XHR0aGlzLl9vcGVuID0gdHJ1ZTtcblx0XHR0aGlzLm9wZW5DaGFuZ2UuZW1pdCh0cnVlKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuXHRcdGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlcblx0XHRcdC5wb3NpdGlvbigpXG5cdFx0XHQuZmxleGlibGVDb25uZWN0ZWRUbyh0cmlnZ2VyRWwpXG5cdFx0XHQud2l0aFBvc2l0aW9ucyh0aGlzLmdldFBvc2l0aW9uQ29uZmlncygpKVxuXHRcdFx0LndpdGhGbGV4aWJsZURpbWVuc2lvbnMoZmFsc2UpXG5cdFx0XHQud2l0aFB1c2godHJ1ZSk7XG5cblx0XHRjb25zdCBwYW5lbENsYXNzID0gbWVyZ2VPdmVybGF5UGFuZWxDbGFzcyhcblx0XHRcdE9WRVJMQVlfQkFTRV9aX0lOREVYLFxuXHRcdFx0dGhpcy5wYW5lbENsYXNzTmFtZSxcblx0XHQpO1xuXG5cdFx0dGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG5cdFx0XHRwb3NpdGlvblN0cmF0ZWd5LFxuXHRcdFx0cGFuZWxDbGFzcyxcblx0XHR9KTtcblxuXHRcdGNvbnN0IHBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbChcblx0XHRcdHRoaXMucGFuZWxUZW1wbGF0ZVJlZixcblx0XHRcdHRoaXMudmlld0NvbnRhaW5lclJlZixcblx0XHQpO1xuXHRcdHRoaXMub3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcblxuXHRcdC8vIENsb3NlIG9uIGNsaWNrIG91dHNpZGVcblx0XHR0aGlzLm91dHNpZGVDbGlja1N1YiA9IHRoaXMub3ZlcmxheVJlZlxuXHRcdFx0Lm91dHNpZGVQb2ludGVyRXZlbnRzKClcblx0XHRcdC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLm9wZW4gPSBmYWxzZTtcblx0XHRcdFx0dGhpcy5vcGVuQ2hhbmdlLmVtaXQoZmFsc2UpO1xuXHRcdFx0fSk7XG5cblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgY2xvc2VQYW5lbCgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMub3ZlcmxheVJlZikgcmV0dXJuO1xuXG5cdFx0dGhpcy5fb3BlbiA9IGZhbHNlO1xuXHRcdHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR0aGlzLmRlc3Ryb3lPdmVybGF5KCk7XG5cdH1cblxuXHRwcml2YXRlIGRlc3Ryb3lPdmVybGF5KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm91dHNpZGVDbGlja1N1Yikge1xuXHRcdFx0dGhpcy5vdXRzaWRlQ2xpY2tTdWIudW5zdWJzY3JpYmUoKTtcblx0XHRcdHRoaXMub3V0c2lkZUNsaWNrU3ViID0gbnVsbDtcblx0XHR9XG5cdFx0aWYgKHRoaXMub3ZlcmxheVJlZikge1xuXHRcdFx0dGhpcy5vdmVybGF5UmVmLmRldGFjaCgpO1xuXHRcdFx0dGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcblx0XHRcdHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRQb3NpdGlvbkNvbmZpZ3MoKTogQ29ubmVjdGVkUG9zaXRpb25bXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdC8vIEJvdHRvbSAoZGVmYXVsdClcblx0XHRcdHtcblx0XHRcdFx0b3JpZ2luWDogXCJzdGFydFwiLFxuXHRcdFx0XHRvcmlnaW5ZOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRvdmVybGF5WDogXCJzdGFydFwiLFxuXHRcdFx0XHRvdmVybGF5WTogXCJ0b3BcIixcblx0XHRcdFx0b2Zmc2V0WTogOCxcblx0XHRcdH0sXG5cdFx0XHQvLyBUb3AgKGZhbGxiYWNrKVxuXHRcdFx0e1xuXHRcdFx0XHRvcmlnaW5YOiBcInN0YXJ0XCIsXG5cdFx0XHRcdG9yaWdpblk6IFwidG9wXCIsXG5cdFx0XHRcdG92ZXJsYXlYOiBcInN0YXJ0XCIsXG5cdFx0XHRcdG92ZXJsYXlZOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRvZmZzZXRZOiAtOCxcblx0XHRcdH0sXG5cdFx0XHQvLyBSaWdodFxuXHRcdFx0e1xuXHRcdFx0XHRvcmlnaW5YOiBcImVuZFwiLFxuXHRcdFx0XHRvcmlnaW5ZOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRvdmVybGF5WDogXCJzdGFydFwiLFxuXHRcdFx0XHRvdmVybGF5WTogXCJ0b3BcIixcblx0XHRcdFx0b2Zmc2V0WTogOCxcblx0XHRcdH0sXG5cdFx0XHQvLyBMZWZ0XG5cdFx0XHR7XG5cdFx0XHRcdG9yaWdpblg6IFwic3RhcnRcIixcblx0XHRcdFx0b3JpZ2luWTogXCJib3R0b21cIixcblx0XHRcdFx0b3ZlcmxheVg6IFwiZW5kXCIsXG5cdFx0XHRcdG92ZXJsYXlZOiBcInRvcFwiLFxuXHRcdFx0XHRvZmZzZXRZOiA4LFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG59XG4iLCI8ZGl2IGNsYXNzPVwicmVsYXRpdmUgaW5saW5lLWJsb2NrXCIgW25nQ2xhc3NdPVwiY2xhc3NOYW1lXCI+XG4gIDxidXR0b25cbiAgICAjdHJpZ2dlckVsXG4gICAgKm5nSWY9XCJzaG93VHJpZ2dlclwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgYXBwZWFyYW5jZS1ub25lIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItaW5wdXQgYmctYmFja2dyb3VuZCBweC0zIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbVwiXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuXCJcbiAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIidkaWFsb2cnXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxuICA+XG4gICAge3sgdHJpZ2dlclRleHQgfX1cbiAgPC9idXR0b24+XG5cbiAgPCEtLSBUcmlnZ2VyIHNsb3QgZm9yIGN1c3RvbSB0cmlnZ2VyIC0tPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbcGRtUG9wb3ZlclRyaWdnZXJdXCI+PC9uZy1jb250ZW50PlxuXG4gIDwhLS0gVGVtcGxhdGUgZm9yIENESyBPdmVybGF5IC0tPlxuICA8bmctdGVtcGxhdGUgI3BhbmVsVGVtcGxhdGU+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtaW4tdy04MCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItYm9yZGVyIGJnLXBvcG92ZXIgcC00IHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIHNoYWRvdy1tZFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=