@sebgroup/green-angular 2.0.3 → 2.1.0

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.
@@ -1,109 +1,64 @@
1
- import { ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Inject, Input, Optional, Output, ViewChild, } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { ON_SCROLL_TOKEN } from '../shared/on-scroll.directive';
4
- import { CONTEXT_MENU_LEFT, CONTEXT_MENU_TOP } from './context-menu.constants';
1
+ import { Input, Output, Component, ViewChild, ElementRef, EventEmitter, } from '@angular/core';
2
+ import '@sebgroup/green-core';
3
+ import { registerTransitionalStyles } from '@sebgroup/green-core/transitional-styles';
5
4
  import * as i0 from "@angular/core";
6
5
  import * as i1 from "@angular/common";
7
- import * as i2 from "rxjs";
6
+ import * as i2 from "../shared/core-element/core-element.directive";
8
7
  export class NggContextMenuComponent {
9
- constructor(changeDetectorRef, elementRef, closeContextMenu) {
10
- this.changeDetectorRef = changeDetectorRef;
8
+ constructor(elementRef) {
11
9
  this.elementRef = elementRef;
12
- this.closeContextMenu = closeContextMenu;
10
+ /**
11
+ * Placement of the popover relative to the anchor element.
12
+ */
13
13
  this.direction = 'ltr';
14
+ /**
15
+ * List of items to be displayed in the context menu.
16
+ */
14
17
  this.menuItems = [];
18
+ /**
19
+ * Custom menu item template.
20
+ */
15
21
  this.menuItemTemplate = null;
22
+ /**
23
+ * Custom menu trigger template.
24
+ */
16
25
  this.menuAnchorTemplate = null;
26
+ /**
27
+ * @deprecated
28
+ * This property no longer has any effect and will be removed in a future version.
29
+ */
17
30
  this.closeOnScroll = false;
31
+ /**
32
+ * Emits when a menu item is clicked.
33
+ */
18
34
  this.contextMenuItemClicked = new EventEmitter();
19
35
  this.isActive = false;
20
- this.top = CONTEXT_MENU_TOP;
21
- this.left = CONTEXT_MENU_LEFT;
36
+ registerTransitionalStyles();
22
37
  }
23
- onDocumentClick(target) {
24
- if (!this.isActive) {
25
- return;
26
- }
27
- if (!this.elementRef.nativeElement.contains(target)) {
28
- this.close();
29
- }
30
- }
31
- ngOnInit() {
32
- this.resizeObserver = new ResizeObserver(() => {
33
- this.close();
34
- });
35
- this.resizeObserver.observe(document.body);
36
- }
37
- ngAfterViewInit() {
38
- if (this.closeOnScroll) {
39
- this.menuCloseSubscription = this.closeContextMenu?.subscribe(() => this.close());
40
- }
41
- }
42
- ngOnDestroy() {
43
- this.resizeObserver?.unobserve(document.body);
44
- this.menuCloseSubscription?.unsubscribe();
38
+ get placement() {
39
+ return this.direction === 'ltr' ? 'bottom-start' : 'bottom-end';
45
40
  }
46
41
  open() {
47
42
  if (this.isActive) {
48
43
  this.close();
49
44
  return;
50
45
  }
51
- const buttonRect = this.anchor?.nativeElement.getBoundingClientRect();
52
- const gapBetweenButtonAndPopover = 3;
53
- const left = this.calculateLeft(this.direction, buttonRect);
54
- const top = buttonRect.bottom + gapBetweenButtonAndPopover;
55
- this.left = `${left}px`;
56
- this.top = `${top}px`;
57
46
  this.isActive = true;
58
47
  }
59
48
  close() {
60
49
  this.isActive = false;
61
- this.top = CONTEXT_MENU_TOP;
62
- this.left = CONTEXT_MENU_LEFT;
63
- this.changeDetectorRef.markForCheck();
64
50
  }
65
51
  onItemClick(item) {
66
52
  this.contextMenuItemClicked.emit(item);
67
53
  this.close();
68
54
  }
69
- onMenuItemKeyDown(event, menuItem) {
70
- switch (event.key) {
71
- case 'Enter':
72
- case ' ':
73
- event.preventDefault();
74
- this.onItemClick(menuItem);
75
- break;
76
- default:
77
- break;
78
- }
79
- }
80
- calculateLeft(direction, buttonRect) {
81
- const popover = this.popover?.nativeElement;
82
- const popoverWidth = popover?.offsetWidth || 0;
83
- switch (direction) {
84
- case 'rtl':
85
- return popoverWidth <= buttonRect.left
86
- ? buttonRect.right - popoverWidth
87
- : buttonRect.left;
88
- case 'ltr':
89
- default:
90
- return buttonRect.right + popoverWidth <= window.innerWidth
91
- ? buttonRect.left
92
- : buttonRect.right - popoverWidth;
93
- }
94
- }
95
55
  }
96
- NggContextMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggContextMenuComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: ON_SCROLL_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component });
97
- NggContextMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NggContextMenuComponent, selector: "ngg-context-menu", inputs: { direction: "direction", menuItems: "menuItems", menuItemTemplate: "menuItemTemplate", menuAnchorTemplate: "menuAnchorTemplate", closeOnScroll: "closeOnScroll" }, outputs: { contextMenuItemClicked: "contextMenuItemClicked" }, host: { listeners: { "document:click": "onDocumentClick($event.target)" } }, viewQueries: [{ propertyName: "popover", first: true, predicate: ["contextMenuPopover"], descendants: true }, { propertyName: "anchor", first: true, predicate: ["contextMenuAnchor"], descendants: true }], ngImport: i0, template: "<button\n #contextMenuAnchor\n class=\"ghost small px-3 border-0\"\n [class.active]=\"isActive\"\n (click)=\"open()\"\n>\n <ng-container\n [ngTemplateOutlet]=\"menuAnchorTemplate ?? defaultButtonTemplate\"\n >\n </ng-container>\n</button>\n\n<div class=\"context-menu-overlay\">\n <div\n class=\"popover popover-context-menu\"\n [class.active]=\"isActive\"\n [style.top]=\"top\"\n [style.left]=\"left\"\n #contextMenuPopover\n >\n <ul role=\"listbox\">\n <li\n *ngFor=\"let menuItem of menuItems\"\n (click)=\"onItemClick(menuItem)\"\n tabindex=\"0\"\n (keydown)=\"onMenuItemKeyDown($event, menuItem)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"menuItemTemplate ?? defaultMenuItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"\n >\n </ng-container>\n </li>\n </ul>\n </div>\n</div>\n\n<ng-template #defaultMenuItemTemplate let-menuItem>\n <span>{{ menuItem.label }}</span>\n</ng-template>\n\n<ng-template #defaultButtonTemplate>\n <i class=\"sg-icon sg-icon-ellipsis\">Open context menu</i>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
56
+ NggContextMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggContextMenuComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
57
+ NggContextMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NggContextMenuComponent, selector: "ngg-context-menu", inputs: { direction: "direction", menuItems: "menuItems", menuItemTemplate: "menuItemTemplate", menuAnchorTemplate: "menuAnchorTemplate", closeOnScroll: "closeOnScroll" }, outputs: { contextMenuItemClicked: "contextMenuItemClicked" }, viewQueries: [{ propertyName: "popover", first: true, predicate: ["contextMenuPopover"], descendants: true }, { propertyName: "anchor", first: true, predicate: ["contextMenuAnchor"], descendants: true }], ngImport: i0, template: "<gds-context-menu\n *nggCoreElement\n data-testid=\"context-menu\"\n [placement]=\"placement\"\n [open]=\"isActive\"\n>\n <span slot=\"trigger\">\n <ng-container\n [ngTemplateOutlet]=\"menuAnchorTemplate ?? defaultButtonTemplate\"\n >\n </ng-container>\n </span>\n <ng-container *ngFor=\"let menuItem of menuItems\">\n <gds-menu-item *nggCoreElement (click)=\"onItemClick(menuItem)\">\n <ng-container\n [ngTemplateOutlet]=\"menuItemTemplate ?? defaultMenuItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"\n >\n </ng-container>\n </gds-menu-item>\n </ng-container>\n</gds-context-menu>\n\n<ng-template #defaultMenuItemTemplate let-menuItem>\n <span>{{ menuItem.label }}</span>\n</ng-template>\n\n<ng-template #defaultButtonTemplate>\n <i class=\"sg-icon sg-icon-ellipsis\">Open context menu</i>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NggCoreElementDirective, selector: "[nggCoreElement]" }] });
98
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggContextMenuComponent, decorators: [{
99
59
  type: Component,
100
- args: [{ selector: 'ngg-context-menu', template: "<button\n #contextMenuAnchor\n class=\"ghost small px-3 border-0\"\n [class.active]=\"isActive\"\n (click)=\"open()\"\n>\n <ng-container\n [ngTemplateOutlet]=\"menuAnchorTemplate ?? defaultButtonTemplate\"\n >\n </ng-container>\n</button>\n\n<div class=\"context-menu-overlay\">\n <div\n class=\"popover popover-context-menu\"\n [class.active]=\"isActive\"\n [style.top]=\"top\"\n [style.left]=\"left\"\n #contextMenuPopover\n >\n <ul role=\"listbox\">\n <li\n *ngFor=\"let menuItem of menuItems\"\n (click)=\"onItemClick(menuItem)\"\n tabindex=\"0\"\n (keydown)=\"onMenuItemKeyDown($event, menuItem)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"menuItemTemplate ?? defaultMenuItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"\n >\n </ng-container>\n </li>\n </ul>\n </div>\n</div>\n\n<ng-template #defaultMenuItemTemplate let-menuItem>\n <span>{{ menuItem.label }}</span>\n</ng-template>\n\n<ng-template #defaultButtonTemplate>\n <i class=\"sg-icon sg-icon-ellipsis\">Open context menu</i>\n</ng-template>\n" }]
101
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i2.Subject, decorators: [{
102
- type: Optional
103
- }, {
104
- type: Inject,
105
- args: [ON_SCROLL_TOKEN]
106
- }] }]; }, propDecorators: { direction: [{
60
+ args: [{ selector: 'ngg-context-menu', template: "<gds-context-menu\n *nggCoreElement\n data-testid=\"context-menu\"\n [placement]=\"placement\"\n [open]=\"isActive\"\n>\n <span slot=\"trigger\">\n <ng-container\n [ngTemplateOutlet]=\"menuAnchorTemplate ?? defaultButtonTemplate\"\n >\n </ng-container>\n </span>\n <ng-container *ngFor=\"let menuItem of menuItems\">\n <gds-menu-item *nggCoreElement (click)=\"onItemClick(menuItem)\">\n <ng-container\n [ngTemplateOutlet]=\"menuItemTemplate ?? defaultMenuItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"\n >\n </ng-container>\n </gds-menu-item>\n </ng-container>\n</gds-context-menu>\n\n<ng-template #defaultMenuItemTemplate let-menuItem>\n <span>{{ menuItem.label }}</span>\n</ng-template>\n\n<ng-template #defaultButtonTemplate>\n <i class=\"sg-icon sg-icon-ellipsis\">Open context menu</i>\n</ng-template>\n" }]
61
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { direction: [{
107
62
  type: Input
108
63
  }], menuItems: [{
109
64
  type: Input
@@ -121,8 +76,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
121
76
  }], anchor: [{
122
77
  type: ViewChild,
123
78
  args: ['contextMenuAnchor']
124
- }], onDocumentClick: [{
125
- type: HostListener,
126
- args: ['document:click', ['$event.target']]
127
79
  }] } });
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBRXRCLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFBO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUMvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTs7OztBQU05RSxNQUFNLE9BQU8sdUJBQXVCO0lBdUJsQyxZQUNVLGlCQUFvQyxFQUNwQyxVQUFtQyxFQUdwQyxnQkFBK0I7UUFKOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUdwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWU7UUF6Qi9CLGNBQVMsR0FBa0IsS0FBSyxDQUFBO1FBQ2hDLGNBQVMsR0FBcUIsRUFBRSxDQUFBO1FBQ2hDLHFCQUFnQixHQUFnQyxJQUFJLENBQUE7UUFDcEQsdUJBQWtCLEdBQWdDLElBQUksQ0FBQTtRQUN0RCxrQkFBYSxHQUFHLEtBQUssQ0FBQTtRQUVwQiwyQkFBc0IsR0FDOUIsSUFBSSxZQUFZLEVBQWtCLENBQUE7UUFNcEMsYUFBUSxHQUFHLEtBQUssQ0FB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QUUsV0FBVyxJQUFJLENBQUMsQ0FBQTtRQUU5QyxRQUFRLFNBQVMsRUFBRTtZQUNqQixLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxZQUFZLElBQUksVUFBVSxDQUFDLElBQUk7b0JBQ3BDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLFlBQVk7b0JBQ2pDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFBO1lBQ3JCLEtBQUssS0FBSyxDQUFDO1lBQ1g7Z0JBQ0UsT0FBTyxVQUFVLENBQUMsS0FBSyxHQUFHLFlBQVksSUFBSSxNQUFNLENBQUMsVUFBVTtvQkFDekQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJO29CQUNqQixDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUE7U0FDdEM7SUFDSCxDQUFDOztvSEF0SFUsdUJBQXVCLDZFQTJCeEIsZUFBZTt3R0EzQmQsdUJBQXVCLDZqQkN6QnBDLDZuQ0E0Q0E7MkZEbkJhLHVCQUF1QjtrQkFKbkMsU0FBUzsrQkFDRSxrQkFBa0I7OzBCQTZCekIsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxlQUFlOzRDQXhCaEIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFSSxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBRzBCLE9BQU87c0JBQXZDLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUVDLE1BQU07c0JBQXJDLFNBQVM7dUJBQUMsbUJBQW1CO2dCQWtCOUIsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRHJvcGRvd25PcHRpb24gfSBmcm9tICcuLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgT05fU0NST0xMX1RPS0VOIH0gZnJvbSAnLi4vc2hhcmVkL29uLXNjcm9sbC5kaXJlY3RpdmUnXG5pbXBvcnQgeyBDT05URVhUX01FTlVfTEVGVCwgQ09OVEVYVF9NRU5VX1RPUCB9IGZyb20gJy4vY29udGV4dC1tZW51LmNvbnN0YW50cydcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdnLWNvbnRleHQtbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZXh0LW1lbnUuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBOZ2dDb250ZXh0TWVudUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0XG57XG4gIEBJbnB1dCgpIGRpcmVjdGlvbjogJ2x0cicgfCAncnRsJyA9ICdsdHInXG4gIEBJbnB1dCgpIG1lbnVJdGVtczogRHJvcGRvd25PcHRpb25bXSA9IFtdXG4gIEBJbnB1dCgpIG1lbnVJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbCA9IG51bGxcbiAgQElucHV0KCkgbWVudUFuY2hvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGwgPSBudWxsXG4gIEBJbnB1dCgpIGNsb3NlT25TY3JvbGwgPSBmYWxzZVxuXG4gIEBPdXRwdXQoKSBjb250ZXh0TWVudUl0ZW1DbGlja2VkOiBFdmVudEVtaXR0ZXI8RHJvcGRvd25PcHRpb24+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPERyb3Bkb3duT3B0aW9uPigpXG5cbiAgQFZpZXdDaGlsZCgnY29udGV4dE1lbnVQb3BvdmVyJykgcG9wb3ZlciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG5cbiAgQFZpZXdDaGlsZCgnY29udGV4dE1lbnVBbmNob3InKSBhbmNob3IhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuXG4gIGlzQWN0aXZlID0gZmFsc2VcbiAgdG9wID0gQ09OVEVYVF9NRU5VX1RPUFxuICBsZWZ0ID0gQ09OVEVYVF9NRU5VX0xFRlRcblxuICByZXNpemVPYnNlcnZlcj86IFJlc2l6ZU9ic2VydmVyXG4gIG1lbnVDbG9zZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KE9OX1NDUk9MTF9UT0tFTilcbiAgICBwdWJsaWMgY2xvc2VDb250ZXh0TWVudTogU3ViamVjdDx2b2lkPlxuICApIHt9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudC50YXJnZXQnXSlcbiAgb25Eb2N1bWVudENsaWNrKHRhcmdldDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNBY3RpdmUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgdGhpcy5jbG9zZSgpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgdGhpcy5jbG9zZSgpXG4gICAgfSlcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSlcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xvc2VPblNjcm9sbCkge1xuICAgICAgdGhpcy5tZW51Q2xvc2VTdWJzY3JpcHRpb24gPSB0aGlzLmNsb3NlQ29udGV4dE1lbnU/LnN1YnNjcmliZSgoKSA9PlxuICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlcj8udW5vYnNlcnZlKGRvY3VtZW50LmJvZHkpXG4gICAgdGhpcy5tZW51Q2xvc2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKClcbiAgfVxuXG4gIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgYnV0dG9uUmVjdCA9IHRoaXMuYW5jaG9yPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cbiAgICBjb25zdCBnYXBCZXR3ZWVuQnV0dG9uQW5kUG9wb3ZlciA9IDNcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5jYWxjdWxhdGVMZWZ0KHRoaXMuZGlyZWN0aW9uLCBidXR0b25SZWN0KVxuICAgIGNvbnN0IHRvcCA9IGJ1dHRvblJlY3QuYm90dG9tICsgZ2FwQmV0d2VlbkJ1dHRvbkFuZFBvcG92ZXJcblxuICAgIHRoaXMubGVmdCA9IGAke2xlZnR9cHhgXG4gICAgdGhpcy50b3AgPSBgJHt0b3B9cHhgXG4gICAgdGhpcy5pc0FjdGl2ZSA9IHRydWVcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZVxuICAgIHRoaXMudG9wID0gQ09OVEVYVF9NRU5VX1RPUFxuICAgIHRoaXMubGVmdCA9IENPTlRFWFRfTUVOVV9MRUZUXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKVxuICB9XG5cbiAgb25JdGVtQ2xpY2soaXRlbTogRHJvcGRvd25PcHRpb24pOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRleHRNZW51SXRlbUNsaWNrZWQuZW1pdChpdGVtKVxuICAgIHRoaXMuY2xvc2UoKVxuICB9XG5cbiAgb25NZW51SXRlbUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIG1lbnVJdGVtOiBEcm9wZG93bk9wdGlvbik6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICB0aGlzLm9uSXRlbUNsaWNrKG1lbnVJdGVtKVxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVMZWZ0KGRpcmVjdGlvbjogc3RyaW5nLCBidXR0b25SZWN0OiBET01SZWN0KTogbnVtYmVyIHtcbiAgICBjb25zdCBwb3BvdmVyID0gdGhpcy5wb3BvdmVyPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50XG4gICAgY29uc3QgcG9wb3ZlcldpZHRoID0gcG9wb3Zlcj8ub2Zmc2V0V2lkdGggfHwgMFxuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIHJldHVybiBwb3BvdmVyV2lkdGggPD0gYnV0dG9uUmVjdC5sZWZ0XG4gICAgICAgICAgPyBidXR0b25SZWN0LnJpZ2h0IC0gcG9wb3ZlcldpZHRoXG4gICAgICAgICAgOiBidXR0b25SZWN0LmxlZnRcbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYnV0dG9uUmVjdC5yaWdodCArIHBvcG92ZXJXaWR0aCA8PSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgICAgID8gYnV0dG9uUmVjdC5sZWZ0XG4gICAgICAgICAgOiBidXR0b25SZWN0LnJpZ2h0IC0gcG9wb3ZlcldpZHRoXG4gICAgfVxuICB9XG59XG4iLCI8YnV0dG9uXG4gICNjb250ZXh0TWVudUFuY2hvclxuICBjbGFzcz1cImdob3N0IHNtYWxsIHB4LTMgYm9yZGVyLTBcIlxuICBbY2xhc3MuYWN0aXZlXT1cImlzQWN0aXZlXCJcbiAgKGNsaWNrKT1cIm9wZW4oKVwiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtZW51QW5jaG9yVGVtcGxhdGUgPz8gZGVmYXVsdEJ1dHRvblRlbXBsYXRlXCJcbiAgPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvYnV0dG9uPlxuXG48ZGl2IGNsYXNzPVwiY29udGV4dC1tZW51LW92ZXJsYXlcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwicG9wb3ZlciBwb3BvdmVyLWNvbnRleHQtbWVudVwiXG4gICAgW2NsYXNzLmFjdGl2ZV09XCJpc0FjdGl2ZVwiXG4gICAgW3N0eWxlLnRvcF09XCJ0b3BcIlxuICAgIFtzdHlsZS5sZWZ0XT1cImxlZnRcIlxuICAgICNjb250ZXh0TWVudVBvcG92ZXJcbiAgPlxuICAgIDx1bCByb2xlPVwibGlzdGJveFwiPlxuICAgICAgPGxpXG4gICAgICAgICpuZ0Zvcj1cImxldCBtZW51SXRlbSBvZiBtZW51SXRlbXNcIlxuICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2sobWVudUl0ZW0pXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgKGtleWRvd24pPVwib25NZW51SXRlbUtleURvd24oJGV2ZW50LCBtZW51SXRlbSlcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibWVudUl0ZW1UZW1wbGF0ZSA/PyBkZWZhdWx0TWVudUl0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBtZW51SXRlbSB9XCJcbiAgICAgICAgPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TWVudUl0ZW1UZW1wbGF0ZSBsZXQtbWVudUl0ZW0+XG4gIDxzcGFuPnt7IG1lbnVJdGVtLmxhYmVsIH19PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0QnV0dG9uVGVtcGxhdGU+XG4gIDxpIGNsYXNzPVwic2ctaWNvbiBzZy1pY29uLWVsbGlwc2lzXCI+T3BlbiBjb250ZXh0IG1lbnU8L2k+XG48L25nLXRlbXBsYXRlPlxuIl19
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEdBRWIsTUFBTSxlQUFlLENBQUE7QUFHdEIsT0FBTyxzQkFBc0IsQ0FBQTtBQUM3QixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQTs7OztBQU1yRixNQUFNLE9BQU8sdUJBQXVCO0lBc0NsQyxZQUFvQixVQUFtQztRQUFuQyxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQXJDdkQ7O1dBRUc7UUFDTSxjQUFTLEdBQWtCLEtBQUssQ0FBQTtRQUV6Qzs7V0FFRztRQUNNLGNBQVMsR0FBcUIsRUFBRSxDQUFBO1FBRXpDOztXQUVHO1FBQ00scUJBQWdCLEdBQWdDLElBQUksQ0FBQTtRQUU3RDs7V0FFRztRQUNNLHVCQUFrQixHQUFnQyxJQUFJLENBQUE7UUFFL0Q7OztXQUdHO1FBQ00sa0JBQWEsR0FBRyxLQUFLLENBQUE7UUFFOUI7O1dBRUc7UUFDTywyQkFBc0IsR0FDOUIsSUFBSSxZQUFZLEVBQWtCLENBQUE7UUFLcEMsYUFBUSxHQUFHLEtBQUssQ0FBQTtRQUdkLDBCQUEwQixFQUFFLENBQUE7SUFDOUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFBO0lBQ2pFLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUNaLE9BQU07U0FDUDtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFBO0lBQ3RCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7SUFDdkIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFvQjtRQUM5QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNkLENBQUM7O29IQTlEVSx1QkFBdUI7d0dBQXZCLHVCQUF1QixnZkNsQnBDLDYzQkE4QkE7MkZEWmEsdUJBQXVCO2tCQUpuQyxTQUFTOytCQUNFLGtCQUFrQjtpR0FPbkIsU0FBUztzQkFBakIsS0FBSztnQkFLRyxTQUFTO3NCQUFqQixLQUFLO2dCQUtHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFLRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBTUcsYUFBYTtzQkFBckIsS0FBSztnQkFLSSxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBRzBCLE9BQU87c0JBQXZDLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUNDLE1BQU07c0JBQXJDLFNBQVM7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgQ29tcG9uZW50LFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBEcm9wZG93bk9wdGlvbiB9IGZyb20gJy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCdcblxuaW1wb3J0ICdAc2ViZ3JvdXAvZ3JlZW4tY29yZSdcbmltcG9ydCB7IHJlZ2lzdGVyVHJhbnNpdGlvbmFsU3R5bGVzIH0gZnJvbSAnQHNlYmdyb3VwL2dyZWVuLWNvcmUvdHJhbnNpdGlvbmFsLXN0eWxlcydcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdnLWNvbnRleHQtbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZXh0LW1lbnUuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBOZ2dDb250ZXh0TWVudUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBQbGFjZW1lbnQgb2YgdGhlIHBvcG92ZXIgcmVsYXRpdmUgdG8gdGhlIGFuY2hvciBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgZGlyZWN0aW9uOiAnbHRyJyB8ICdydGwnID0gJ2x0cidcblxuICAvKipcbiAgICogTGlzdCBvZiBpdGVtcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbnRleHQgbWVudS5cbiAgICovXG4gIEBJbnB1dCgpIG1lbnVJdGVtczogRHJvcGRvd25PcHRpb25bXSA9IFtdXG5cbiAgLyoqXG4gICAqIEN1c3RvbSBtZW51IGl0ZW0gdGVtcGxhdGUuXG4gICAqL1xuICBASW5wdXQoKSBtZW51SXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGwgPSBudWxsXG5cbiAgLyoqXG4gICAqIEN1c3RvbSBtZW51IHRyaWdnZXIgdGVtcGxhdGUuXG4gICAqL1xuICBASW5wdXQoKSBtZW51QW5jaG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbCA9IG51bGxcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogVGhpcyBwcm9wZXJ0eSBubyBsb25nZXIgaGFzIGFueSBlZmZlY3QgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlxuICAgKi9cbiAgQElucHV0KCkgY2xvc2VPblNjcm9sbCA9IGZhbHNlXG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gYSBtZW51IGl0ZW0gaXMgY2xpY2tlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBjb250ZXh0TWVudUl0ZW1DbGlja2VkOiBFdmVudEVtaXR0ZXI8RHJvcGRvd25PcHRpb24+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPERyb3Bkb3duT3B0aW9uPigpXG5cbiAgQFZpZXdDaGlsZCgnY29udGV4dE1lbnVQb3BvdmVyJykgcG9wb3ZlciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51QW5jaG9yJykgYW5jaG9yITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cblxuICBpc0FjdGl2ZSA9IGZhbHNlXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIHJlZ2lzdGVyVHJhbnNpdGlvbmFsU3R5bGVzKClcbiAgfVxuXG4gIGdldCBwbGFjZW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb24gPT09ICdsdHInID8gJ2JvdHRvbS1zdGFydCcgOiAnYm90dG9tLWVuZCdcbiAgfVxuXG4gIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5pc0FjdGl2ZSA9IHRydWVcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZVxuICB9XG5cbiAgb25JdGVtQ2xpY2soaXRlbTogRHJvcGRvd25PcHRpb24pOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRleHRNZW51SXRlbUNsaWNrZWQuZW1pdChpdGVtKVxuICAgIHRoaXMuY2xvc2UoKVxuICB9XG59XG4iLCI8Z2RzLWNvbnRleHQtbWVudVxuICAqbmdnQ29yZUVsZW1lbnRcbiAgZGF0YS10ZXN0aWQ9XCJjb250ZXh0LW1lbnVcIlxuICBbcGxhY2VtZW50XT1cInBsYWNlbWVudFwiXG4gIFtvcGVuXT1cImlzQWN0aXZlXCJcbj5cbiAgPHNwYW4gc2xvdD1cInRyaWdnZXJcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtZW51QW5jaG9yVGVtcGxhdGUgPz8gZGVmYXVsdEJ1dHRvblRlbXBsYXRlXCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvc3Bhbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVudUl0ZW0gb2YgbWVudUl0ZW1zXCI+XG4gICAgPGdkcy1tZW51LWl0ZW0gKm5nZ0NvcmVFbGVtZW50IChjbGljayk9XCJvbkl0ZW1DbGljayhtZW51SXRlbSlcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibWVudUl0ZW1UZW1wbGF0ZSA/PyBkZWZhdWx0TWVudUl0ZW1UZW1wbGF0ZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbWVudUl0ZW0gfVwiXG4gICAgICA+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2dkcy1tZW51LWl0ZW0+XG4gIDwvbmctY29udGFpbmVyPlxuPC9nZHMtY29udGV4dC1tZW51PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRNZW51SXRlbVRlbXBsYXRlIGxldC1tZW51SXRlbT5cbiAgPHNwYW4+e3sgbWVudUl0ZW0ubGFiZWwgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRCdXR0b25UZW1wbGF0ZT5cbiAgPGkgY2xhc3M9XCJzZy1pY29uIHNnLWljb24tZWxsaXBzaXNcIj5PcGVuIGNvbnRleHQgbWVudTwvaT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,18 +1,20 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { NgModule } from '@angular/core';
2
+ import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
3
3
  import { NggContextMenuComponent } from './context-menu.component';
4
+ import { NggCoreWrapperModule } from '../shared/core-element/core-element.module';
4
5
  import * as i0 from "@angular/core";
5
6
  export class NggContextMenuModule {
6
7
  }
7
8
  NggContextMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggContextMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
- NggContextMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: NggContextMenuModule, declarations: [NggContextMenuComponent], imports: [CommonModule], exports: [NggContextMenuComponent] });
9
- NggContextMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggContextMenuModule, imports: [CommonModule] });
9
+ NggContextMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: NggContextMenuModule, declarations: [NggContextMenuComponent], imports: [CommonModule, NggCoreWrapperModule], exports: [NggContextMenuComponent] });
10
+ NggContextMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggContextMenuModule, imports: [CommonModule, NggCoreWrapperModule] });
10
11
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggContextMenuModule, decorators: [{
11
12
  type: NgModule,
12
13
  args: [{
13
14
  declarations: [NggContextMenuComponent],
14
- imports: [CommonModule],
15
+ imports: [CommonModule, NggCoreWrapperModule],
15
16
  exports: [NggContextMenuComponent],
17
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
16
18
  }]
17
19
  }] });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFBOztBQU9sRSxNQUFNLE9BQU8sb0JBQW9COztpSEFBcEIsb0JBQW9CO2tIQUFwQixvQkFBb0IsaUJBSmhCLHVCQUF1QixhQUM1QixZQUFZLGFBQ1osdUJBQXVCO2tIQUV0QixvQkFBb0IsWUFIckIsWUFBWTsyRkFHWCxvQkFBb0I7a0JBTGhDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsdUJBQXVCLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7aUJBQ25DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTmdnQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuL2NvbnRleHQtbWVudS5jb21wb25lbnQnXG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW05nZ0NvbnRleHRNZW51Q29tcG9uZW50XSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGV4cG9ydHM6IFtOZ2dDb250ZXh0TWVudUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIE5nZ0NvbnRleHRNZW51TW9kdWxlIHt9XG4iXX0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFBOztBQVFqRixNQUFNLE9BQU8sb0JBQW9COztpSEFBcEIsb0JBQW9CO2tIQUFwQixvQkFBb0IsaUJBTGhCLHVCQUF1QixhQUM1QixZQUFZLEVBQUUsb0JBQW9CLGFBQ2xDLHVCQUF1QjtrSEFHdEIsb0JBQW9CLFlBSnJCLFlBQVksRUFBRSxvQkFBb0I7MkZBSWpDLG9CQUFvQjtrQkFOaEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztvQkFDdkMsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDO29CQUM3QyxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztvQkFDbEMsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ2xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTmdnQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuL2NvbnRleHQtbWVudS5jb21wb25lbnQnXG5pbXBvcnQgeyBOZ2dDb3JlV3JhcHBlck1vZHVsZSB9IGZyb20gJy4uL3NoYXJlZC9jb3JlLWVsZW1lbnQvY29yZS1lbGVtZW50Lm1vZHVsZSdcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbTmdnQ29udGV4dE1lbnVDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBOZ2dDb3JlV3JhcHBlck1vZHVsZV0sXG4gIGV4cG9ydHM6IFtOZ2dDb250ZXh0TWVudUNvbXBvbmVudF0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmdnQ29udGV4dE1lbnVNb2R1bGUge31cbiJdfQ==
@@ -132,7 +132,7 @@ NggDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
132
132
  useExisting: NggDropdownComponent,
133
133
  multi: true,
134
134
  },
135
- ], queries: [{ propertyName: "customOption", first: true, predicate: NggDropdownOptionDirective, descendants: true }, { propertyName: "customButton", first: true, predicate: NggDropdownButtonDirective, descendants: true }], viewQueries: [{ propertyName: "gdsDropdown", first: true, predicate: ["gdsDropdown"], descendants: true }], ngImport: i0, template: "<div class=\"form-group\">\n <gds-dropdown\n *nggCoreElement\n #gdsDropdown\n [value]=\"value\"\n [searchable]=\"searchable\"\n [label]=\"label\"\n (change)=\"onValueChange($event)\"\n [multiple]=\"multiSelect\"\n [invalid]=\"invalid\"\n [compareWith]=\"compareWithAdapter\"\n [searchFilter]=\"searchFilterAdapter\"\n >\n <span slot=\"message\" #formInfo\n ><ng-content select=\"[data-form-info]\"></ng-content\n ></span>\n\n <span slot=\"trigger\"\n ><ng-container\n *ngTemplateOutlet=\"\n customButton?.templateRef && selectedOption\n ? customButton!.templateRef\n : defaultButton;\n context: { option: selectedOption }\n \"\n ></ng-container\n ></span>\n\n <ng-container *ngFor=\"let option of options; let index = index\">\n <gds-option *nggCoreElement [value]=\"option[useValue]\"\n ><ng-container\n *ngTemplateOutlet=\"\n customOption?.templateRef\n ? customOption!.templateRef\n : defaultOption;\n context: { option: option, index: index }\n \"\n ></ng-container\n ></gds-option>\n </ng-container>\n </gds-dropdown>\n</div>\n\n<ng-template #defaultButton let-selected=\"option\">\n <span>{{ texts?.select }}</span>\n</ng-template>\n\n<ng-template #defaultOption let-option=\"option\">\n {{ display ? option[display] : option.name }}\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NggCoreElementDirective, selector: "[nggCoreElement]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
135
+ ], queries: [{ propertyName: "customOption", first: true, predicate: NggDropdownOptionDirective, descendants: true }, { propertyName: "customButton", first: true, predicate: NggDropdownButtonDirective, descendants: true }], viewQueries: [{ propertyName: "gdsDropdown", first: true, predicate: ["gdsDropdown"], descendants: true }], ngImport: i0, template: "<div class=\"form-group\">\n <gds-dropdown\n *nggCoreElement\n #gdsDropdown\n [value]=\"value\"\n [searchable]=\"searchable\"\n [label]=\"label\"\n (change)=\"onValueChange($event)\"\n [multiple]=\"multiSelect\"\n [invalid]=\"invalid\"\n [compareWith]=\"compareWithAdapter\"\n [searchFilter]=\"searchFilterAdapter\"\n >\n <span slot=\"message\" #formInfo\n ><ng-content select=\"[data-form-info]\"></ng-content\n ></span>\n\n <span slot=\"trigger\"\n ><ng-container\n *ngTemplateOutlet=\"\n customButton?.templateRef && selectedOption\n ? customButton!.templateRef\n : defaultButton;\n context: { option: selectedOption }\n \"\n ></ng-container\n ></span>\n\n <ng-container *ngFor=\"let option of options; let index = index\">\n <gds-option *nggCoreElement [value]=\"option[useValue]\"\n ><ng-container\n *ngTemplateOutlet=\"\n customOption?.templateRef\n ? customOption!.templateRef\n : defaultOption;\n context: { option: option, index: index }\n \"\n ></ng-container\n ></gds-option>\n </ng-container>\n </gds-dropdown>\n</div>\n\n<ng-template #defaultButton let-selected=\"option\">\n <span class=\"trigger\">{{ texts?.select }}</span>\n</ng-template>\n\n<ng-template #defaultOption let-option=\"option\">\n {{ display ? option[display] : option.name }}\n</ng-template>\n", styles: [".trigger{display:block;overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NggCoreElementDirective, selector: "[nggCoreElement]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
136
136
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggDropdownComponent, decorators: [{
137
137
  type: Component,
138
138
  args: [{ selector: 'ngg-dropdown', providers: [
@@ -141,7 +141,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
141
141
  useExisting: NggDropdownComponent,
142
142
  multi: true,
143
143
  },
144
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"form-group\">\n <gds-dropdown\n *nggCoreElement\n #gdsDropdown\n [value]=\"value\"\n [searchable]=\"searchable\"\n [label]=\"label\"\n (change)=\"onValueChange($event)\"\n [multiple]=\"multiSelect\"\n [invalid]=\"invalid\"\n [compareWith]=\"compareWithAdapter\"\n [searchFilter]=\"searchFilterAdapter\"\n >\n <span slot=\"message\" #formInfo\n ><ng-content select=\"[data-form-info]\"></ng-content\n ></span>\n\n <span slot=\"trigger\"\n ><ng-container\n *ngTemplateOutlet=\"\n customButton?.templateRef && selectedOption\n ? customButton!.templateRef\n : defaultButton;\n context: { option: selectedOption }\n \"\n ></ng-container\n ></span>\n\n <ng-container *ngFor=\"let option of options; let index = index\">\n <gds-option *nggCoreElement [value]=\"option[useValue]\"\n ><ng-container\n *ngTemplateOutlet=\"\n customOption?.templateRef\n ? customOption!.templateRef\n : defaultOption;\n context: { option: option, index: index }\n \"\n ></ng-container\n ></gds-option>\n </ng-container>\n </gds-dropdown>\n</div>\n\n<ng-template #defaultButton let-selected=\"option\">\n <span>{{ texts?.select }}</span>\n</ng-template>\n\n<ng-template #defaultOption let-option=\"option\">\n {{ display ? option[display] : option.name }}\n</ng-template>\n" }]
144
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"form-group\">\n <gds-dropdown\n *nggCoreElement\n #gdsDropdown\n [value]=\"value\"\n [searchable]=\"searchable\"\n [label]=\"label\"\n (change)=\"onValueChange($event)\"\n [multiple]=\"multiSelect\"\n [invalid]=\"invalid\"\n [compareWith]=\"compareWithAdapter\"\n [searchFilter]=\"searchFilterAdapter\"\n >\n <span slot=\"message\" #formInfo\n ><ng-content select=\"[data-form-info]\"></ng-content\n ></span>\n\n <span slot=\"trigger\"\n ><ng-container\n *ngTemplateOutlet=\"\n customButton?.templateRef && selectedOption\n ? customButton!.templateRef\n : defaultButton;\n context: { option: selectedOption }\n \"\n ></ng-container\n ></span>\n\n <ng-container *ngFor=\"let option of options; let index = index\">\n <gds-option *nggCoreElement [value]=\"option[useValue]\"\n ><ng-container\n *ngTemplateOutlet=\"\n customOption?.templateRef\n ? customOption!.templateRef\n : defaultOption;\n context: { option: option, index: index }\n \"\n ></ng-container\n ></gds-option>\n </ng-container>\n </gds-dropdown>\n</div>\n\n<ng-template #defaultButton let-selected=\"option\">\n <span class=\"trigger\">{{ texts?.select }}</span>\n</ng-template>\n\n<ng-template #defaultOption let-option=\"option\">\n {{ display ? option[display] : option.name }}\n</ng-template>\n", styles: [".trigger{display:block;overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}\n"] }]
145
145
  }], ctorParameters: function () { return [{ type: i0.Injector, decorators: [{
146
146
  type: Inject,
147
147
  args: [Injector]
@@ -189,4 +189,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
189
189
  type: ViewChild,
190
190
  args: ['gdsDropdown', { static: false }]
191
191
  }] } });
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUVMLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN2QixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUl4RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQTs7OztBQWdDckYsTUFBTSxPQUFPLG9CQUFvQjtJQXlGL0IsWUFDNEIsUUFBa0IsRUFDcEMsSUFBdUI7UUFETCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BDLFNBQUksR0FBSixJQUFJLENBQW1CO1FBeEZ4QixTQUFJLEdBQWEsS0FBSyxDQUFBO1FBQ3RCLFlBQU8sR0FBRyxPQUFPLENBQUE7UUFDakIsYUFBUSxHQUFHLE9BQU8sQ0FBQTtRQUVsQixZQUFPLEdBQXFCLEVBQUUsQ0FBQTtRQWMvQixpQkFBWSxHQUFHLEtBQUssQ0FBQTtRQVNwQixnQkFBVyxHQUFHLEtBQUssQ0FBQTtRQTRCUixnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFBO1FBQ3hELFlBQU8sR0FD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YixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBU08sVUFBVTtzQkFBdEIsS0FBSztnQkFTTyxLQUFLO3NCQUFqQixLQUFLO2dCQXlCYSxXQUFXO3NCQUE3QixNQUFNO2dCQUNZLE9BQU87c0JBQXpCLE1BQU07Z0JBSVAsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLDBCQUEwQjtnQkFJeEMsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLDBCQUEwQjtnQkFHSyxXQUFXO3NCQUF2RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIE5nQ29udHJvbCxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHsgTmdnRHJvcGRvd25PcHRpb25EaXJlY3RpdmUgfSBmcm9tICcuL2Ryb3Bkb3duLW9wdGlvbi5kaXJlY3RpdmUnXG5pbXBvcnQgeyBOZ2dEcm9wZG93bkJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4vZHJvcGRvd24tYnV0dG9uLmRpcmVjdGl2ZSdcblxuaW1wb3J0IHsgR2RzRHJvcGRvd24sIEdkc09wdGlvbiB9IGZyb20gJ0BzZWJncm91cC9ncmVlbi1jb3JlJ1xuXG5pbXBvcnQgeyByZWdpc3RlclRyYW5zaXRpb25hbFN0eWxlcyB9IGZyb20gJ0BzZWJncm91cC9ncmVlbi1jb3JlL3RyYW5zaXRpb25hbC1zdHlsZXMnXG5cbmV4cG9ydCB0eXBlIENvbXBhcmVXaXRoPFQgPSBhbnk+ID0gKG8xOiBULCBvMjogVCkgPT4gYm9vbGVhblxuZXhwb3J0IHR5cGUgU2VhcmNoRmlsdGVyPFQgPSBhbnk+ID0gKHNlYXJjaDogc3RyaW5nLCB2YWx1ZTogVCkgPT4gYm9vbGVhblxuZXhwb3J0IHR5cGUgRHJvcGRvd25QbGFjZW1lbnRzID0gJ2JvdHRvbS1zdGFydCcgfCAndG9wLXN0YXJ0J1xuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93blRleHRzIHtcbiAgc2VsZWN0Pzogc3RyaW5nXG4gIHNlbGVjdGVkPzogc3RyaW5nXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIHNlYXJjaFBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIGNsb3NlPzogc3RyaW5nXG4gIG9wdGlvbnNEZXNjcmlwdGlvbj86IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93bk9wdGlvbiB7XG4gIGxhYmVsPzogc3RyaW5nXG4gIHZhbHVlPzogYW55XG4gIHNlbGVjdGVkPzogYm9vbGVhblxuICBba2V5OiBzdHJpbmddOiBhbnlcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdnLWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICdkcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IE5nZ0Ryb3Bkb3duQ29tcG9uZW50LFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5nZ0Ryb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGlkPzogc3RyaW5nXG4gIEBJbnB1dCgpIHRleHRzPzogRHJvcGRvd25UZXh0c1xuICBASW5wdXQoKSBsb29wPzogYm9vbGVhbiA9IGZhbHNlXG4gIEBJbnB1dCgpIGRpc3BsYXkgPSAnbGFiZWwnXG4gIEBJbnB1dCgpIHVzZVZhbHVlID0gJ3ZhbHVlJ1xuICBASW5wdXQoKSBsYWJlbD86IHN0cmluZ1xuICBASW5wdXQoKSBvcHRpb25zOiBEcm9wZG93bk9wdGlvbltdID0gW11cbiAgQElucHV0KCkgdmFsaWQ/OiBib29sZWFuXG4gIEBJbnB1dCgpIGludmFsaWQ/OiBib29sZWFuXG4gIEBJbnB1dCgpIGNvbXBhcmVXaXRoPzogQ29tcGFyZVdpdGhcbiAgQElucHV0KCkgc2VhcmNoRmlsdGVyPzogU2VhcmNoRmlsdGVyXG4gIEBJbnB1dCgpIGZpeGVkUGxhY2VtZW50PzogRHJvcGRvd25QbGFjZW1lbnRzXG5cbiAgLy9cbiAgQElucHV0KCkgc2V0IG11bHRpU2VsZWN0KHZhbHVlOiBzdHJpbmcgfCBib29sZWFuKSB7XG4gICAgdGhpcy5fbXVsdGlTZWxlY3QgPSB0aGlzLmNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpXG4gIH1cbiAgZ2V0IG11bHRpU2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tdWx0aVNlbGVjdFxuICB9XG4gIHByaXZhdGUgX211bHRpU2VsZWN0ID0gZmFsc2VcblxuICAvL1xuICBASW5wdXQoKSBzZXQgc2VhcmNoYWJsZSh2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbikge1xuICAgIHRoaXMuX3NlYXJjaGFibGUgPSB0aGlzLmNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpXG4gIH1cbiAgZ2V0IHNlYXJjaGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaGFibGVcbiAgfVxuICBwcml2YXRlIF9zZWFyY2hhYmxlID0gZmFsc2VcblxuICAvL1xuICBASW5wdXQoKSBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIGlmICghdGhpcy5vcHRpb25zKSByZXR1cm5cblxuICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWVcblxuICAgIHRoaXMudGV4dHMgPSB7XG4gICAgICAuLi50aGlzLnRleHRzLFxuICAgICAgc2VsZWN0OiB0aGlzLmRpc3BsYXlUZXh0QnlWYWx1ZSh0aGlzLl92YWx1ZSksXG4gICAgfVxuICB9XG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZVxuICB9XG4gIHByaXZhdGUgX3ZhbHVlOiBEcm9wZG93bk9wdGlvbiB8IERyb3Bkb3duT3B0aW9uW10gfCB1bmRlZmluZWRcblxuICAvL1xuICBnZXQgc2VsZWN0ZWRPcHRpb24oKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSlcbiAgICAgID8gdGhpcy52YWx1ZS5tYXAoKHY6IGFueSkgPT4gdGhpcy5vcHRpb25CeVZhbHVlKHYpKVxuICAgICAgOiB0aGlzLm9wdGlvbkJ5VmFsdWUodGhpcy52YWx1ZSlcbiAgfVxuXG4gIG9uQ2hhbmdlRm4/OiAodmFsdWU6IHVua25vd24pID0+IHZvaWRcbiAgb25Ub3VjaGVkRm4/OiAoKSA9PiB2b2lkXG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSB0b3VjaGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKVxuXG4gIEBDb250ZW50Q2hpbGQoTmdnRHJvcGRvd25PcHRpb25EaXJlY3RpdmUpXG4gIGN1c3RvbU9wdGlvbj86IE5nZ0Ryb3Bkb3duT3B0aW9uRGlyZWN0aXZlXG5cbiAgQENvbnRlbnRDaGlsZChOZ2dEcm9wZG93bkJ1dHRvbkRpcmVjdGl2ZSlcbiAgY3VzdG9tQnV0dG9uPzogTmdnRHJvcGRvd25CdXR0b25EaXJlY3RpdmVcblxuICBAVmlld0NoaWxkKCdnZHNEcm9wZG93bicsIHsgc3RhdGljOiBmYWxzZSB9KSBnZHNEcm9wZG93bj86IEVsZW1lbnRSZWZcblxuICBwdWJsaWMgb25WYWx1ZUNoYW5nZTogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBHZHNEcm9wZG93bjxEcm9wZG93bk9wdGlvbj5cbiAgICB0aGlzLl92YWx1ZSA9IHRhcmdldC52YWx1ZVxuXG4gICAgdGhpcy50ZXh0cyA9IHtcbiAgICAgIC4uLnRoaXMudGV4dHMsXG4gICAgICBzZWxlY3Q6IHRoaXMuZGlzcGxheVRleHRCeVZhbHVlKHRoaXMuX3ZhbHVlKSxcbiAgICB9XG5cbiAgICB0aGlzLm9uQ2hhbmdlRm4/Lih0aGlzLnZhbHVlKVxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKVxuXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKVxuICB9XG5cbiAgZ2V0IGNvbnRyb2woKTogTmdDb250cm9sIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sKVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChJbmplY3RvcikgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICByZWdpc3RlclRyYW5zaXRpb25hbFN0eWxlcygpXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3ZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aVNlbGVjdClcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm9wdGlvbnNcbiAgICAgICAgICA/LmZpbHRlcigobykgPT4gby5zZWxlY3RlZCA9PT0gdHJ1ZSlcbiAgICAgICAgICA/Lm1hcCgobykgPT4gb1t0aGlzLnVzZVZhbHVlXSlcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm9wdGlvbnM/LmZpbmQoKG8pID0+IG8uc2VsZWN0ZWQgPT09IHRydWUpPy5bXG4gICAgICAgICAgdGhpcy51c2VWYWx1ZVxuICAgICAgICBdXG5cbiAgICAgIHRoaXMudGV4dHMgPSB7XG4gICAgICAgIC4uLnRoaXMudGV4dHMsXG4gICAgICAgIHNlbGVjdDogdGhpcy5kaXNwbGF5VGV4dEJ5VmFsdWUodGhpcy5fdmFsdWUpLFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudGV4dHMgPSB7XG4gICAgICBjbG9zZTogdGhpcy50ZXh0cz8uY2xvc2UgPz8gJ0Nsb3NlJyxcbiAgICAgIG9wdGlvbnNEZXNjcmlwdGlvbjogdGhpcy50ZXh0cz8ub3B0aW9uc0Rlc2NyaXB0aW9uID8/ICdPcHRpb25zJyxcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnRleHRzPy5wbGFjZWhvbGRlciA/PyAnU2VsZWN0JyxcbiAgICAgIHNlYXJjaFBsYWNlaG9sZGVyOiB0aGlzLnRleHRzPy5zZWFyY2hQbGFjZWhvbGRlciA/PyAnU2VhcmNoJyxcbiAgICAgIHNlbGVjdGVkOiB0aGlzLnRleHRzPy5zZWxlY3RlZCA/PyAnc2VsZWN0ZWQnLFxuICAgICAgc2VsZWN0OiB0aGlzLmRpc3BsYXlUZXh0QnlWYWx1ZSh0aGlzLl92YWx1ZSksXG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoKSA9PiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZUZuID0gZm5cbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWRGbiA9IGZuXG4gIH1cblxuICAvLyBUaGVzZSBhZGFwdGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvbGQgaW50ZXJmYWNlXG4gIGNvbXBhcmVXaXRoQWRhcHRlciA9IChvMTogYW55LCBvMjogYW55KSA9PiB7XG4gICAgY29uc3QgY29tcGFyZUZuID0gdGhpcy5jb21wYXJlV2l0aCB8fCAoKGEsIGIpID0+IGEgPT09IGIpXG4gICAgcmV0dXJuIGNvbXBhcmVGbihvMSwgbzIpXG4gIH1cbiAgc2VhcmNoRmlsdGVyQWRhcHRlciA9IChxOiBzdHJpbmcsIG86IEdkc09wdGlvbikgPT4ge1xuICAgIGlmICh0aGlzLnNlYXJjaEZpbHRlcikgcmV0dXJuIHRoaXMuc2VhcmNoRmlsdGVyKHEsIG8udmFsdWVbdGhpcy51c2VWYWx1ZV0pXG4gICAgZWxzZVxuICAgICAgcmV0dXJuICgocTogc3RyaW5nLCBvOiBHZHNPcHRpb24pID0+XG4gICAgICAgIG8uaW5uZXJIVE1MLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocS50b0xvd2VyQ2FzZSgpKSkocSwgbylcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFRvQm9vbGVhbih2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZS50b1N0cmluZygpID09PSAndHJ1ZScgfHwgZmFsc2VcbiAgICApXG4gIH1cblxuICBwcml2YXRlIG9wdGlvbkJ5VmFsdWUgPSAodmFsdWU6IGFueSkgPT4ge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnM/LmZpbmQoKG8pID0+IG9bdGhpcy51c2VWYWx1ZV0gPT09IHZhbHVlKVxuICB9XG5cbiAgcHJpdmF0ZSBkaXNwbGF5VGV4dEJ5VmFsdWUgPSAodmFsdWU6IGFueSkgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLm9wdGlvbkJ5VmFsdWUodmFsdWUpPy5bdGhpcy5kaXNwbGF5XSB8fFxuICAgICAgICAodGhpcy50ZXh0cz8ucGxhY2Vob2xkZXIgPz8gJ1NlbGVjdCcpXG4gICAgICApXG5cbiAgICBjb25zdCBkaXNwbGF5VmFsdWVzID0gdmFsdWUubWFwKFxuICAgICAgKHYpID0+IHRoaXMub3B0aW9uQnlWYWx1ZSh2KT8uW3RoaXMuZGlzcGxheV1cbiAgICApXG4gICAgcmV0dXJuIGRpc3BsYXlWYWx1ZXM/Lmxlbmd0aCA+IDJcbiAgICAgID8gYCR7ZGlzcGxheVZhbHVlcy5sZW5ndGh9ICR7dGhpcy50ZXh0cz8uc2VsZWN0ZWR9IGBcbiAgICAgIDogZGlzcGxheVZhbHVlcz8uam9pbignLCAnKSB8fCAodGhpcy50ZXh0cz8ucGxhY2Vob2xkZXIgPz8gJ1NlbGVjdCcpXG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gIDxnZHMtZHJvcGRvd25cbiAgICAqbmdnQ29yZUVsZW1lbnRcbiAgICAjZ2RzRHJvcGRvd25cbiAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgIFtzZWFyY2hhYmxlXT1cInNlYXJjaGFibGVcIlxuICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgKGNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgIFttdWx0aXBsZV09XCJtdWx0aVNlbGVjdFwiXG4gICAgW2ludmFsaWRdPVwiaW52YWxpZFwiXG4gICAgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVXaXRoQWRhcHRlclwiXG4gICAgW3NlYXJjaEZpbHRlcl09XCJzZWFyY2hGaWx0ZXJBZGFwdGVyXCJcbiAgPlxuICAgIDxzcGFuIHNsb3Q9XCJtZXNzYWdlXCIgI2Zvcm1JbmZvXG4gICAgICA+PG5nLWNvbnRlbnQgc2VsZWN0PVwiW2RhdGEtZm9ybS1pbmZvXVwiPjwvbmctY29udGVudFxuICAgID48L3NwYW4+XG5cbiAgICA8c3BhbiBzbG90PVwidHJpZ2dlclwiXG4gICAgICA+PG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIGN1c3RvbUJ1dHRvbj8udGVtcGxhdGVSZWYgJiYgc2VsZWN0ZWRPcHRpb25cbiAgICAgICAgICAgID8gY3VzdG9tQnV0dG9uIS50ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgOiBkZWZhdWx0QnV0dG9uO1xuICAgICAgICAgIGNvbnRleHQ6IHsgb3B0aW9uOiBzZWxlY3RlZE9wdGlvbiB9XG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXJcbiAgICA+PC9zcGFuPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnM7IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICA8Z2RzLW9wdGlvbiAqbmdnQ29yZUVsZW1lbnQgW3ZhbHVlXT1cIm9wdGlvblt1c2VWYWx1ZV1cIlxuICAgICAgICA+PG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBjdXN0b21PcHRpb24/LnRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgID8gY3VzdG9tT3B0aW9uIS50ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICA6IGRlZmF1bHRPcHRpb247XG4gICAgICAgICAgICBjb250ZXh0OiB7IG9wdGlvbjogb3B0aW9uLCBpbmRleDogaW5kZXggfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lclxuICAgICAgPjwvZ2RzLW9wdGlvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9nZHMtZHJvcGRvd24+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0QnV0dG9uIGxldC1zZWxlY3RlZD1cIm9wdGlvblwiPlxuICA8c3Bhbj57eyB0ZXh0cz8uc2VsZWN0IH19PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0T3B0aW9uIGxldC1vcHRpb249XCJvcHRpb25cIj5cbiAge3sgZGlzcGxheSA/IG9wdGlvbltkaXNwbGF5XSA6IG9wdGlvbi5uYW1lIH19XG48L25nLXRlbXBsYXRlPlxuIl19
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUVMLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN2QixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUl4RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQTs7OztBQWlDckYsTUFBTSxPQUFPLG9CQUFvQjtJQXlGL0IsWUFDNEIsUUFBa0IsRUFDcEMsSUFBdUI7UUFETCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BDLFNBQUksR0FBSixJQUFJLENBQW1CO1FBeEZ4QixTQUFJLEdBQWEsS0FBSyxDQUFBO1FBQ3RCLFlBQU8sR0FBRyxPQUFPLENBQUE7UUFDakIsYUFBUSxHQUFHLE9BQU8sQ0FBQTtRQUVsQixZQUFPLEdBQXFCLEVBQUUsQ0FBQTtRQWMvQixpQkFBWSxHQUFHLEtBQUssQ0FBQTtRQVNwQixnQkFBVyxHQUFHLEtBQUssQ0FBQTtRQTRCUixnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFBO1FBQ3hELFlBQU8sR0FD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YixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBU08sVUFBVTtzQkFBdEIsS0FBSztnQkFTTyxLQUFLO3NCQUFqQixLQUFLO2dCQXlCYSxXQUFXO3NCQUE3QixNQUFNO2dCQUNZLE9BQU87c0JBQXpCLE1BQU07Z0JBSVAsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLDBCQUEwQjtnQkFJeEMsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLDBCQUEwQjtnQkFHSyxXQUFXO3NCQUF2RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIE5nQ29udHJvbCxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHsgTmdnRHJvcGRvd25PcHRpb25EaXJlY3RpdmUgfSBmcm9tICcuL2Ryb3Bkb3duLW9wdGlvbi5kaXJlY3RpdmUnXG5pbXBvcnQgeyBOZ2dEcm9wZG93bkJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4vZHJvcGRvd24tYnV0dG9uLmRpcmVjdGl2ZSdcblxuaW1wb3J0IHsgR2RzRHJvcGRvd24sIEdkc09wdGlvbiB9IGZyb20gJ0BzZWJncm91cC9ncmVlbi1jb3JlJ1xuXG5pbXBvcnQgeyByZWdpc3RlclRyYW5zaXRpb25hbFN0eWxlcyB9IGZyb20gJ0BzZWJncm91cC9ncmVlbi1jb3JlL3RyYW5zaXRpb25hbC1zdHlsZXMnXG5cbmV4cG9ydCB0eXBlIENvbXBhcmVXaXRoPFQgPSBhbnk+ID0gKG8xOiBULCBvMjogVCkgPT4gYm9vbGVhblxuZXhwb3J0IHR5cGUgU2VhcmNoRmlsdGVyPFQgPSBhbnk+ID0gKHNlYXJjaDogc3RyaW5nLCB2YWx1ZTogVCkgPT4gYm9vbGVhblxuZXhwb3J0IHR5cGUgRHJvcGRvd25QbGFjZW1lbnRzID0gJ2JvdHRvbS1zdGFydCcgfCAndG9wLXN0YXJ0J1xuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93blRleHRzIHtcbiAgc2VsZWN0Pzogc3RyaW5nXG4gIHNlbGVjdGVkPzogc3RyaW5nXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIHNlYXJjaFBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIGNsb3NlPzogc3RyaW5nXG4gIG9wdGlvbnNEZXNjcmlwdGlvbj86IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93bk9wdGlvbiB7XG4gIGxhYmVsPzogc3RyaW5nXG4gIHZhbHVlPzogYW55XG4gIHNlbGVjdGVkPzogYm9vbGVhblxuICBba2V5OiBzdHJpbmddOiBhbnlcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdnLWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICdkcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydkcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBOZ2dEcm9wZG93bkNvbXBvbmVudCxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ2dEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQge1xuICBASW5wdXQoKSBpZD86IHN0cmluZ1xuICBASW5wdXQoKSB0ZXh0cz86IERyb3Bkb3duVGV4dHNcbiAgQElucHV0KCkgbG9vcD86IGJvb2xlYW4gPSBmYWxzZVxuICBASW5wdXQoKSBkaXNwbGF5ID0gJ2xhYmVsJ1xuICBASW5wdXQoKSB1c2VWYWx1ZSA9ICd2YWx1ZSdcbiAgQElucHV0KCkgbGFiZWw/OiBzdHJpbmdcbiAgQElucHV0KCkgb3B0aW9uczogRHJvcGRvd25PcHRpb25bXSA9IFtdXG4gIEBJbnB1dCgpIHZhbGlkPzogYm9vbGVhblxuICBASW5wdXQoKSBpbnZhbGlkPzogYm9vbGVhblxuICBASW5wdXQoKSBjb21wYXJlV2l0aD86IENvbXBhcmVXaXRoXG4gIEBJbnB1dCgpIHNlYXJjaEZpbHRlcj86IFNlYXJjaEZpbHRlclxuICBASW5wdXQoKSBmaXhlZFBsYWNlbWVudD86IERyb3Bkb3duUGxhY2VtZW50c1xuXG4gIC8vXG4gIEBJbnB1dCgpIHNldCBtdWx0aVNlbGVjdCh2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbikge1xuICAgIHRoaXMuX211bHRpU2VsZWN0ID0gdGhpcy5jb252ZXJ0VG9Cb29sZWFuKHZhbHVlKVxuICB9XG4gIGdldCBtdWx0aVNlbGVjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbXVsdGlTZWxlY3RcbiAgfVxuICBwcml2YXRlIF9tdWx0aVNlbGVjdCA9IGZhbHNlXG5cbiAgLy9cbiAgQElucHV0KCkgc2V0IHNlYXJjaGFibGUodmFsdWU6IHN0cmluZyB8IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zZWFyY2hhYmxlID0gdGhpcy5jb252ZXJ0VG9Cb29sZWFuKHZhbHVlKVxuICB9XG4gIGdldCBzZWFyY2hhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hhYmxlXG4gIH1cbiAgcHJpdmF0ZSBfc2VhcmNoYWJsZSA9IGZhbHNlXG5cbiAgLy9cbiAgQElucHV0KCkgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucykgcmV0dXJuXG5cbiAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlXG5cbiAgICB0aGlzLnRleHRzID0ge1xuICAgICAgLi4udGhpcy50ZXh0cyxcbiAgICAgIHNlbGVjdDogdGhpcy5kaXNwbGF5VGV4dEJ5VmFsdWUodGhpcy5fdmFsdWUpLFxuICAgIH1cbiAgfVxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVcbiAgfVxuICBwcml2YXRlIF92YWx1ZTogRHJvcGRvd25PcHRpb24gfCBEcm9wZG93bk9wdGlvbltdIHwgdW5kZWZpbmVkXG5cbiAgLy9cbiAgZ2V0IHNlbGVjdGVkT3B0aW9uKCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICA/IHRoaXMudmFsdWUubWFwKCh2OiBhbnkpID0+IHRoaXMub3B0aW9uQnlWYWx1ZSh2KSlcbiAgICAgIDogdGhpcy5vcHRpb25CeVZhbHVlKHRoaXMudmFsdWUpXG4gIH1cblxuICBvbkNoYW5nZUZuPzogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkXG4gIG9uVG91Y2hlZEZuPzogKCkgPT4gdm9pZFxuXG4gIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdG91Y2hlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KClcblxuICBAQ29udGVudENoaWxkKE5nZ0Ryb3Bkb3duT3B0aW9uRGlyZWN0aXZlKVxuICBjdXN0b21PcHRpb24/OiBOZ2dEcm9wZG93bk9wdGlvbkRpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoTmdnRHJvcGRvd25CdXR0b25EaXJlY3RpdmUpXG4gIGN1c3RvbUJ1dHRvbj86IE5nZ0Ryb3Bkb3duQnV0dG9uRGlyZWN0aXZlXG5cbiAgQFZpZXdDaGlsZCgnZ2RzRHJvcGRvd24nLCB7IHN0YXRpYzogZmFsc2UgfSkgZ2RzRHJvcGRvd24/OiBFbGVtZW50UmVmXG5cbiAgcHVibGljIG9uVmFsdWVDaGFuZ2U6IChldmVudDogRXZlbnQpID0+IHZvaWQgPSAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgR2RzRHJvcGRvd248RHJvcGRvd25PcHRpb24+XG4gICAgdGhpcy5fdmFsdWUgPSB0YXJnZXQudmFsdWVcblxuICAgIHRoaXMudGV4dHMgPSB7XG4gICAgICAuLi50aGlzLnRleHRzLFxuICAgICAgc2VsZWN0OiB0aGlzLmRpc3BsYXlUZXh0QnlWYWx1ZSh0aGlzLl92YWx1ZSksXG4gICAgfVxuXG4gICAgdGhpcy5vbkNoYW5nZUZuPy4odGhpcy52YWx1ZSlcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSlcblxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKClcbiAgfVxuXG4gIGdldCBjb250cm9sKCk6IE5nQ29udHJvbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbClcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoSW5qZWN0b3IpIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgcmVnaXN0ZXJUcmFuc2l0aW9uYWxTdHlsZXMoKVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl92YWx1ZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlTZWxlY3QpXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5vcHRpb25zXG4gICAgICAgICAgPy5maWx0ZXIoKG8pID0+IG8uc2VsZWN0ZWQgPT09IHRydWUpXG4gICAgICAgICAgPy5tYXAoKG8pID0+IG9bdGhpcy51c2VWYWx1ZV0pXG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5vcHRpb25zPy5maW5kKChvKSA9PiBvLnNlbGVjdGVkID09PSB0cnVlKT8uW1xuICAgICAgICAgIHRoaXMudXNlVmFsdWVcbiAgICAgICAgXVxuXG4gICAgICB0aGlzLnRleHRzID0ge1xuICAgICAgICAuLi50aGlzLnRleHRzLFxuICAgICAgICBzZWxlY3Q6IHRoaXMuZGlzcGxheVRleHRCeVZhbHVlKHRoaXMuX3ZhbHVlKSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnRleHRzID0ge1xuICAgICAgY2xvc2U6IHRoaXMudGV4dHM/LmNsb3NlID8/ICdDbG9zZScsXG4gICAgICBvcHRpb25zRGVzY3JpcHRpb246IHRoaXMudGV4dHM/Lm9wdGlvbnNEZXNjcmlwdGlvbiA/PyAnT3B0aW9ucycsXG4gICAgICBwbGFjZWhvbGRlcjogdGhpcy50ZXh0cz8ucGxhY2Vob2xkZXIgPz8gJ1NlbGVjdCcsXG4gICAgICBzZWFyY2hQbGFjZWhvbGRlcjogdGhpcy50ZXh0cz8uc2VhcmNoUGxhY2Vob2xkZXIgPz8gJ1NlYXJjaCcsXG4gICAgICBzZWxlY3RlZDogdGhpcy50ZXh0cz8uc2VsZWN0ZWQgPz8gJ3NlbGVjdGVkJyxcbiAgICAgIHNlbGVjdDogdGhpcy5kaXNwbGF5VGV4dEJ5VmFsdWUodGhpcy5fdmFsdWUpLFxuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKCkgPT4gdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuXG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkRm4gPSBmblxuICB9XG5cbiAgLy8gVGhlc2UgYWRhcHRlciBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb2xkIGludGVyZmFjZVxuICBjb21wYXJlV2l0aEFkYXB0ZXIgPSAobzE6IGFueSwgbzI6IGFueSkgPT4ge1xuICAgIGNvbnN0IGNvbXBhcmVGbiA9IHRoaXMuY29tcGFyZVdpdGggfHwgKChhLCBiKSA9PiBhID09PSBiKVxuICAgIHJldHVybiBjb21wYXJlRm4obzEsIG8yKVxuICB9XG4gIHNlYXJjaEZpbHRlckFkYXB0ZXIgPSAocTogc3RyaW5nLCBvOiBHZHNPcHRpb24pID0+IHtcbiAgICBpZiAodGhpcy5zZWFyY2hGaWx0ZXIpIHJldHVybiB0aGlzLnNlYXJjaEZpbHRlcihxLCBvLnZhbHVlW3RoaXMudXNlVmFsdWVdKVxuICAgIGVsc2VcbiAgICAgIHJldHVybiAoKHE6IHN0cmluZywgbzogR2RzT3B0aW9uKSA9PlxuICAgICAgICBvLmlubmVySFRNTC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEudG9Mb3dlckNhc2UoKSkpKHEsIG8pXG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb0Jvb2xlYW4odmFsdWU6IHN0cmluZyB8IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUudG9TdHJpbmcoKSA9PT0gJ3RydWUnIHx8IGZhbHNlXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBvcHRpb25CeVZhbHVlID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zPy5maW5kKChvKSA9PiBvW3RoaXMudXNlVmFsdWVdID09PSB2YWx1ZSlcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGxheVRleHRCeVZhbHVlID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5vcHRpb25CeVZhbHVlKHZhbHVlKT8uW3RoaXMuZGlzcGxheV0gfHxcbiAgICAgICAgKHRoaXMudGV4dHM/LnBsYWNlaG9sZGVyID8/ICdTZWxlY3QnKVxuICAgICAgKVxuXG4gICAgY29uc3QgZGlzcGxheVZhbHVlcyA9IHZhbHVlLm1hcChcbiAgICAgICh2KSA9PiB0aGlzLm9wdGlvbkJ5VmFsdWUodik/Llt0aGlzLmRpc3BsYXldXG4gICAgKVxuICAgIHJldHVybiBkaXNwbGF5VmFsdWVzPy5sZW5ndGggPiAyXG4gICAgICA/IGAke2Rpc3BsYXlWYWx1ZXMubGVuZ3RofSAke3RoaXMudGV4dHM/LnNlbGVjdGVkfSBgXG4gICAgICA6IGRpc3BsYXlWYWx1ZXM/LmpvaW4oJywgJykgfHwgKHRoaXMudGV4dHM/LnBsYWNlaG9sZGVyID8/ICdTZWxlY3QnKVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICA8Z2RzLWRyb3Bkb3duXG4gICAgKm5nZ0NvcmVFbGVtZW50XG4gICAgI2dkc0Ryb3Bkb3duXG4gICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICBbc2VhcmNoYWJsZV09XCJzZWFyY2hhYmxlXCJcbiAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgIChjaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICBbbXVsdGlwbGVdPVwibXVsdGlTZWxlY3RcIlxuICAgIFtpbnZhbGlkXT1cImludmFsaWRcIlxuICAgIFtjb21wYXJlV2l0aF09XCJjb21wYXJlV2l0aEFkYXB0ZXJcIlxuICAgIFtzZWFyY2hGaWx0ZXJdPVwic2VhcmNoRmlsdGVyQWRhcHRlclwiXG4gID5cbiAgICA8c3BhbiBzbG90PVwibWVzc2FnZVwiICNmb3JtSW5mb1xuICAgICAgPjxuZy1jb250ZW50IHNlbGVjdD1cIltkYXRhLWZvcm0taW5mb11cIj48L25nLWNvbnRlbnRcbiAgICA+PC9zcGFuPlxuXG4gICAgPHNwYW4gc2xvdD1cInRyaWdnZXJcIlxuICAgICAgPjxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBjdXN0b21CdXR0b24/LnRlbXBsYXRlUmVmICYmIHNlbGVjdGVkT3B0aW9uXG4gICAgICAgICAgICA/IGN1c3RvbUJ1dHRvbiEudGVtcGxhdGVSZWZcbiAgICAgICAgICAgIDogZGVmYXVsdEJ1dHRvbjtcbiAgICAgICAgICBjb250ZXh0OiB7IG9wdGlvbjogc2VsZWN0ZWRPcHRpb24gfVxuICAgICAgICBcIlxuICAgICAgPjwvbmctY29udGFpbmVyXG4gICAgPjwvc3Bhbj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgPGdkcy1vcHRpb24gKm5nZ0NvcmVFbGVtZW50IFt2YWx1ZV09XCJvcHRpb25bdXNlVmFsdWVdXCJcbiAgICAgICAgPjxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgY3VzdG9tT3B0aW9uPy50ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICA/IGN1c3RvbU9wdGlvbiEudGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgOiBkZWZhdWx0T3B0aW9uO1xuICAgICAgICAgICAgY29udGV4dDogeyBvcHRpb246IG9wdGlvbiwgaW5kZXg6IGluZGV4IH1cbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXJcbiAgICAgID48L2dkcy1vcHRpb24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZ2RzLWRyb3Bkb3duPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEJ1dHRvbiBsZXQtc2VsZWN0ZWQ9XCJvcHRpb25cIj5cbiAgPHNwYW4gY2xhc3M9XCJ0cmlnZ2VyXCI+e3sgdGV4dHM/LnNlbGVjdCB9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE9wdGlvbiBsZXQtb3B0aW9uPVwib3B0aW9uXCI+XG4gIHt7IGRpc3BsYXkgPyBvcHRpb25bZGlzcGxheV0gOiBvcHRpb24ubmFtZSB9fVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -97,10 +97,10 @@ export class NggModalComponent {
97
97
  }
98
98
  }
99
99
  NggModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggModalComponent, deps: [{ token: i0.ElementRef }, { token: i1.ConfigurableFocusTrapFactory }], target: i0.ɵɵFactoryTarget.Component });
100
- NggModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NggModalComponent, selector: "ngg-modal", inputs: { modalType: "modalType", header: "header", confirmLabel: "confirmLabel", dismissLabel: "dismissLabel", size: "size", hideHeader: "hideHeader", hideFooter: "hideFooter", trapFocus: "trapFocus", isOpen: "isOpen" }, outputs: { isOpenChange: "isOpenChange", closed: "closed", confirm: "confirm", dismiss: "dismiss" }, host: { properties: { "class.open": "this.open" } }, queries: [{ propertyName: "modalHeaderContent", first: true, predicate: NggModalHeaderDirective, descendants: true }, { propertyName: "modalFooterContent", first: true, predicate: NggModalFooterDirective, descendants: true }], viewQueries: [{ propertyName: "backdropRef", first: true, predicate: ["backdrop"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <aside data-testid=\"modal\" *ngSwitchCase=\"'slideout'\" role=\"dialog\" aria-modal=\"true\" [class.small]=\"size === 'sm'\" [class.medium]=\"size === 'md'\" [class.large]=\"size === 'lg'\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main data-testid=\"modal\" *ngSwitchCase=\"'takeover'\" role=\"dialog\" aria-modal=\"true\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section data-testid=\"modal\" *ngSwitchDefault role=\"dialog\" aria-modal=\"true\" [class.small]=\"size === 'sm'\" [class.medium]=\"size === 'md'\" [class.large]=\"size === 'lg'\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header *ngIf=\"!modalHeaderContent; else headerContentTemplate\" ngg-modal-header data-testid=\"modal-header\" [header]=\"header\" (closed)=\"this.handleCloseClick($event)\"></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer *ngIf=\"!modalFooterContent; else footerContentTemplate\" ngg-modal-footer data-testid=\"modal-footer\" [dismissLabel]=\"dismissLabel\" [confirmLabel]=\"confirmLabel\" (dismiss)=\"this.handleDismiss($event)\" (confirm)=\"this.handleConfirm($event)\"></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div #backdrop data-testid=\"modal-backdrop\" class=\"backdrop\" (click)=\"this.handleBackdropClick($event)\" [attr.aria-hidden]=\"true\"></div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal-backdrop)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitch; }), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchCase; }), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchDefault; }), selector: "[ngSwitchDefault]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalHeaderComponent; }), selector: "[ngg-modal-header]", inputs: ["header"], outputs: ["closed"] }, { kind: "component", type: i0.forwardRef(function () { return NggModalBodyComponent; }), selector: "[ngg-modal-body]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalFooterComponent; }), selector: "[ngg-modal-footer]", inputs: ["dismissLabel", "confirmLabel"], outputs: ["dismiss", "confirm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
100
+ NggModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NggModalComponent, selector: "ngg-modal", inputs: { modalType: "modalType", header: "header", confirmLabel: "confirmLabel", dismissLabel: "dismissLabel", size: "size", hideHeader: "hideHeader", hideFooter: "hideFooter", trapFocus: "trapFocus", isOpen: "isOpen" }, outputs: { isOpenChange: "isOpenChange", closed: "closed", confirm: "confirm", dismiss: "dismiss" }, host: { properties: { "class.open": "this.open" } }, queries: [{ propertyName: "modalHeaderContent", first: true, predicate: NggModalHeaderDirective, descendants: true }, { propertyName: "modalFooterContent", first: true, predicate: NggModalFooterDirective, descendants: true }], viewQueries: [{ propertyName: "backdropRef", first: true, predicate: ["backdrop"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <aside data-testid=\"modal\" *ngSwitchCase=\"'slideout'\" role=\"dialog\" aria-modal=\"true\" [class.small]=\"size === 'sm'\" [class.medium]=\"size === 'md'\" [class.large]=\"size === 'lg'\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main data-testid=\"modal\" *ngSwitchCase=\"'takeover'\" role=\"dialog\" aria-modal=\"true\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section data-testid=\"modal\" *ngSwitchDefault role=\"dialog\" aria-modal=\"true\" [class.small]=\"size === 'sm'\" [class.medium]=\"size === 'md'\" [class.large]=\"size === 'lg'\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header *ngIf=\"!modalHeaderContent; else headerContentTemplate\" ngg-modal-header data-testid=\"modal-header\" [header]=\"header\" (closed)=\"this.handleCloseClick($event)\"></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer *ngIf=\"!modalFooterContent; else footerContentTemplate\" ngg-modal-footer data-testid=\"modal-footer\" [dismissLabel]=\"dismissLabel\" [confirmLabel]=\"confirmLabel\" (dismiss)=\"this.handleDismiss($event)\" (confirm)=\"this.handleConfirm($event)\"></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div #backdrop data-testid=\"modal-backdrop\" class=\"backdrop\" (click)=\"this.handleBackdropClick($event)\" [attr.aria-hidden]=\"true\"></div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitch; }), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchCase; }), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchDefault; }), selector: "[ngSwitchDefault]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalHeaderComponent; }), selector: "[ngg-modal-header]", inputs: ["header"], outputs: ["closed"] }, { kind: "component", type: i0.forwardRef(function () { return NggModalBodyComponent; }), selector: "[ngg-modal-body]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalFooterComponent; }), selector: "[ngg-modal-footer]", inputs: ["dismissLabel", "confirmLabel"], outputs: ["dismiss", "confirm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
101
101
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggModalComponent, decorators: [{
102
102
  type: Component,
103
- args: [{ selector: 'ngg-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <aside data-testid=\"modal\" *ngSwitchCase=\"'slideout'\" role=\"dialog\" aria-modal=\"true\" [class.small]=\"size === 'sm'\" [class.medium]=\"size === 'md'\" [class.large]=\"size === 'lg'\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main data-testid=\"modal\" *ngSwitchCase=\"'takeover'\" role=\"dialog\" aria-modal=\"true\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section data-testid=\"modal\" *ngSwitchDefault role=\"dialog\" aria-modal=\"true\" [class.small]=\"size === 'sm'\" [class.medium]=\"size === 'md'\" [class.large]=\"size === 'lg'\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header *ngIf=\"!modalHeaderContent; else headerContentTemplate\" ngg-modal-header data-testid=\"modal-header\" [header]=\"header\" (closed)=\"this.handleCloseClick($event)\"></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer *ngIf=\"!modalFooterContent; else footerContentTemplate\" ngg-modal-footer data-testid=\"modal-footer\" [dismissLabel]=\"dismissLabel\" [confirmLabel]=\"confirmLabel\" (dismiss)=\"this.handleDismiss($event)\" (confirm)=\"this.handleConfirm($event)\"></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div #backdrop data-testid=\"modal-backdrop\" class=\"backdrop\" (click)=\"this.handleBackdropClick($event)\" [attr.aria-hidden]=\"true\"></div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal-backdrop)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] }]
103
+ args: [{ selector: 'ngg-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <aside data-testid=\"modal\" *ngSwitchCase=\"'slideout'\" role=\"dialog\" aria-modal=\"true\" [class.small]=\"size === 'sm'\" [class.medium]=\"size === 'md'\" [class.large]=\"size === 'lg'\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main data-testid=\"modal\" *ngSwitchCase=\"'takeover'\" role=\"dialog\" aria-modal=\"true\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section data-testid=\"modal\" *ngSwitchDefault role=\"dialog\" aria-modal=\"true\" [class.small]=\"size === 'sm'\" [class.medium]=\"size === 'md'\" [class.large]=\"size === 'lg'\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header *ngIf=\"!modalHeaderContent; else headerContentTemplate\" ngg-modal-header data-testid=\"modal-header\" [header]=\"header\" (closed)=\"this.handleCloseClick($event)\"></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer *ngIf=\"!modalFooterContent; else footerContentTemplate\" ngg-modal-footer data-testid=\"modal-footer\" [dismissLabel]=\"dismissLabel\" [confirmLabel]=\"confirmLabel\" (dismiss)=\"this.handleDismiss($event)\" (confirm)=\"this.handleConfirm($event)\"></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div #backdrop data-testid=\"modal-backdrop\" class=\"backdrop\" (click)=\"this.handleBackdropClick($event)\" [attr.aria-hidden]=\"true\"></div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] }]
104
104
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ConfigurableFocusTrapFactory }]; }, propDecorators: { modalType: [{
105
105
  type: Input
106
106
  }], header: [{
@@ -155,7 +155,7 @@ NggModalHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
155
155
  <span className="sr-only">Close</span>
156
156
  <i></i>
157
157
  </button>
158
- `, isInline: true, styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal-backdrop)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] });
158
+ `, isInline: true, styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] });
159
159
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggModalHeaderComponent, decorators: [{
160
160
  type: Component,
161
161
  args: [{ selector: '[ngg-modal-header]', template: `
@@ -164,7 +164,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
164
164
  <span className="sr-only">Close</span>
165
165
  <i></i>
166
166
  </button>
167
- `, styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal-backdrop)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] }]
167
+ `, styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] }]
168
168
  }], propDecorators: { header: [{
169
169
  type: Input
170
170
  }], closed: [{
@@ -173,10 +173,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
173
173
  export class NggModalBodyComponent {
174
174
  }
175
175
  NggModalBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggModalBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
176
- NggModalBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NggModalBodyComponent, selector: "[ngg-modal-body]", ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal-backdrop)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] });
176
+ NggModalBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NggModalBodyComponent, selector: "[ngg-modal-body]", ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] });
177
177
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggModalBodyComponent, decorators: [{
178
178
  type: Component,
179
- args: [{ selector: '[ngg-modal-body]', template: `<ng-content></ng-content>`, styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal-backdrop)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] }]
179
+ args: [{ selector: '[ngg-modal-body]', template: `<ng-content></ng-content>`, styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] }]
180
180
  }] });
181
181
  export class NggModalFooterComponent {
182
182
  constructor() {
@@ -194,13 +194,13 @@ NggModalFooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0",
194
194
  NggModalFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NggModalFooterComponent, selector: "[ngg-modal-footer]", inputs: { dismissLabel: "dismissLabel", confirmLabel: "confirmLabel" }, outputs: { dismiss: "dismiss", confirm: "confirm" }, ngImport: i0, template: `
195
195
  <button data-testid="modal-dismiss-button" *ngIf="dismissLabel" class="secondary" (click)="this.handleDismiss($event)">{{dismissLabel}}</button>
196
196
  <button data-testid="modal-confirm-button" *ngIf="confirmLabel" class="primary" (click)="this.handleConfirm($event)">{{confirmLabel}}</button>
197
- `, isInline: true, styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal-backdrop)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
197
+ `, isInline: true, styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
198
198
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggModalFooterComponent, decorators: [{
199
199
  type: Component,
200
200
  args: [{ selector: '[ngg-modal-footer]', template: `
201
201
  <button data-testid="modal-dismiss-button" *ngIf="dismissLabel" class="secondary" (click)="this.handleDismiss($event)">{{dismissLabel}}</button>
202
202
  <button data-testid="modal-confirm-button" *ngIf="confirmLabel" class="primary" (click)="this.handleConfirm($event)">{{confirmLabel}}</button>
203
- `, styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal-backdrop)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] }]
203
+ `, styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] }]
204
204
  }], propDecorators: { dismissLabel: [{
205
205
  type: Input
206
206
  }], confirmLabel: [{
@@ -210,4 +210,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
210
210
  }], confirm: [{
211
211
  type: Output
212
212
  }] } });
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJLLE9BQU8sRUFBeUIsNEJBQTRCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RixPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUNuQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7O0FBUW5FLE1BQU0sT0FBTyxpQkFBaUI7SUE0RDFCLFlBQW9CLEdBQTRCLEVBQVUsNEJBQTBEO1FBQWhHLFFBQUcsR0FBSCxHQUFHLENBQXlCO1FBQVUsaUNBQTRCLEdBQTVCLDRCQUE0QixDQUE4QjtRQWJuRyxpQkFBWSxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ2xFLFdBQU0sR0FBNkIsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUNsRSxZQUFPLEdBQTZCLElBQUksWUFBWSxFQUFjLENBQUM7UUFDbkUsWUFBTyxHQUE2QixJQUFJLFlBQVksRUFBYyxDQUFDO1FBV2hGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQXRERCxJQUFvQixTQUFTO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBVyxTQUFTLENBQUMsS0FBMEI7UUFDM0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFFeEIsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQzFCO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELElBQ1csTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBVyxNQUFNLENBQUMsS0FBMEI7UUFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFFckIsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUMxQjtZQUVELGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFO2dCQUN0QyxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtvQkFDbkIsNEZBQTRGO29CQUM1RixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDL0MsQ0FBQzthQUNKLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQU9ELElBQStCLElBQUksS0FBSyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBWTdELFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVM7WUFDOUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDOztZQUV2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBaUI7UUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU0sbUJBQW1CLENBQUMsS0FBaUI7UUFDeEMsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYTtZQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBaUI7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVNLGFBQWEsQ0FBQyxLQUFpQjtRQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQWlCO1FBQ2hDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzQjthQUNJO1lBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVPLGVBQWU7UUFDbkIsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDNUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDMUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLDRCQUE0QixFQUFFLENBQUM7U0FDN0Q7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3BCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzVCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1NBQzlDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMscUJBQXFCLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDdEMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3QyxDQUFDOzs4R0FsSFEsaUJBQWlCO2tHQUFqQixpQkFBaUIseWRBc0RaLHVCQUF1QixxRkFDdkIsdUJBQXVCLHlKQ3ZFekMsaXpFQW9DQSw4dENENkdhLHVCQUF1QiwrSUFnQnZCLHFCQUFxQixvR0FZckIsdUJBQXVCOzJGQTdKdkIsaUJBQWlCO2tCQU43QixTQUFTOytCQUNJLFdBQVcsbUJBR0osdUJBQXVCLENBQUMsTUFBTTs0SUFHL0IsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDYyxTQUFTO3NCQUE1QixLQUFLO2dCQWdCSyxNQUFNO3NCQURoQixLQUFLO2dCQXdCVyxZQUFZO3NCQUE1QixNQUFNO2dCQUNVLE1BQU07c0JBQXRCLE1BQU07Z0JBQ1UsT0FBTztzQkFBdkIsTUFBTTtnQkFDVSxPQUFPO3NCQUF2QixNQUFNO2dCQUV3QixJQUFJO3NCQUFsQyxXQUFXO3VCQUFDLFlBQVk7Z0JBQ00sV0FBVztzQkFBekMsU0FBUzt1QkFBQyxVQUFVO2dCQUN5QixrQkFBa0I7c0JBQS9ELFlBQVk7dUJBQUMsdUJBQXVCO2dCQUNTLGtCQUFrQjtzQkFBL0QsWUFBWTt1QkFBQyx1QkFBdUI7O0FBMEV6QyxNQUFNLE9BQU8sdUJBQXVCO0lBWnBDO1FBY2MsV0FBTSxHQUE2QixJQUFJLFlBQVksRUFBYyxDQUFDO0tBTS9FO0lBSkcsV0FBVyxDQUFDLEtBQWlCO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7O29IQU5RLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLHVIQVJ0Qjs7Ozs7O0tBTVQ7MkZBRVEsdUJBQXVCO2tCQVpuQyxTQUFTOytCQUVJLG9CQUFvQixZQUVwQjs7Ozs7O0tBTVQ7OEJBR1EsTUFBTTtzQkFBZCxLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTTs7QUFjWCxNQUFNLE9BQU8scUJBQXFCOztrSEFBckIscUJBQXFCO3NHQUFyQixxQkFBcUIsd0RBRnBCLDJCQUEyQjsyRkFFNUIscUJBQXFCO2tCQU5qQyxTQUFTOytCQUVJLGtCQUFrQixZQUVsQiwyQkFBMkI7O0FBY3pDLE1BQU0sT0FBTyx1QkFBdUI7SUFUcEM7UUFZYyxZQUFPLEdBQTZCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkQsWUFBTyxHQUE2QixJQUFJLFlBQVksRUFBRSxDQUFDO0tBU3BFO0lBUEcsYUFBYSxDQUFDLEtBQWlCO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBaUI7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQzs7b0hBWlEsdUJBQXVCO3dHQUF2Qix1QkFBdUIsdUxBTHRCOzs7S0FHVDsyRkFFUSx1QkFBdUI7a0JBVG5DLFNBQVM7K0JBRUksb0JBQW9CLFlBRXBCOzs7S0FHVDs4QkFHUSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFR5cGUsIFNpemUgfSBmcm9tICdAc2ViZ3JvdXAvZXh0cmFjdCc7XG5pbXBvcnQgeyBDb25maWd1cmFibGVGb2N1c1RyYXAsIENvbmZpZ3VyYWJsZUZvY3VzVHJhcEZhY3RvcnkgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge1xuICAgIGRpc2FibGVCb2R5U2Nyb2xsLFxuICAgIGVuYWJsZUJvZHlTY3JvbGwsXG59IGZyb20gXCJib2R5LXNjcm9sbC1sb2NrXCI7XG5pbXBvcnQgeyBOZ2dNb2RhbEhlYWRlckRpcmVjdGl2ZSB9IGZyb20gJy4vbW9kYWwtaGVhZGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOZ2dNb2RhbEZvb3RlckRpcmVjdGl2ZSB9IGZyb20gJy4vbW9kYWwtZm9vdGVyLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmdnLW1vZGFsJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTmdnTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gICAgQElucHV0KCkgcHVibGljIG1vZGFsVHlwZT86IE1vZGFsVHlwZVxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXI/OiBzdHJpbmdcbiAgICBASW5wdXQoKSBwdWJsaWMgY29uZmlybUxhYmVsPzogc3RyaW5nXG4gICAgQElucHV0KCkgcHVibGljIGRpc21pc3NMYWJlbD86IHN0cmluZ1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzaXplPzogU2l6ZVxuICAgIEBJbnB1dCgpIHB1YmxpYyBoaWRlSGVhZGVyPzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZUZvb3Rlcj86IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGdldCB0cmFwRm9jdXMoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl90cmFwRm9jdXM7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgdHJhcEZvY3VzKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3RyYXBGb2N1cyA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzT3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlRm9jdXNUcmFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVGb2N1c1RyYXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpc09wZW4oKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc09wZW47XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgaXNPcGVuKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2lzT3BlbiA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudHJhcEZvY3VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVGb2N1c1RyYXAoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGlzYWJsZUJvZHlTY3JvbGwodGhpcy5yZWYubmF0aXZlRWxlbWVudCwge1xuICAgICAgICAgICAgICAgIGFsbG93VG91Y2hNb3ZlOiAoZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgdG91Y2htb3ZlIGZvciBlbGVtZW50cyBpbnNpZGUgbW9kYWwsIGl0cyByZXF1aXJlZCBmb3Igc2Nyb2xsIHRvIHdvcmsgb24gaU9TIGRldmljZXNcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlRm9jdXNUcmFwKCk7XG4gICAgICAgICAgICBlbmFibGVCb2R5U2Nyb2xsKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIHB1YmxpYyBpc09wZW5DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIGNsb3NlZDogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgY29uZmlybTogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgZGlzbWlzczogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vcGVuJykgZ2V0IG9wZW4oKSB7IHJldHVybiB0aGlzLmlzT3BlbjsgfVxuICAgIEBWaWV3Q2hpbGQoJ2JhY2tkcm9wJykgcHJpdmF0ZSBiYWNrZHJvcFJlZj86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gICAgQENvbnRlbnRDaGlsZChOZ2dNb2RhbEhlYWRlckRpcmVjdGl2ZSkgcHVibGljIG1vZGFsSGVhZGVyQ29udGVudD86IE5nZ01vZGFsSGVhZGVyRGlyZWN0aXZlO1xuICAgIEBDb250ZW50Q2hpbGQoTmdnTW9kYWxGb290ZXJEaXJlY3RpdmUpIHB1YmxpYyBtb2RhbEZvb3RlckNvbnRlbnQ/OiBOZ2dNb2RhbEZvb3RlckRpcmVjdGl2ZTtcbiAgICBwcml2YXRlIF9pc09wZW4/OiBib29sZWFuO1xuICAgIHByaXZhdGUgX3RyYXBGb2N1cz86IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBjb25maWd1cmFibGVGb2N1c1RyYXA6IENvbmZpZ3VyYWJsZUZvY3VzVHJhcDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcHJpdmF0ZSBjb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5OiBDb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5KSB7XG4gICAgICAgIHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwID0gdGhpcy5jb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzT3BlbiAmJiB0aGlzLnRyYXBGb2N1cylcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRm9jdXNUcmFwKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUZvY3VzVHJhcCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVDbG9zZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuY2xvc2VNb2RhbChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUJhY2tkcm9wQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLmJhY2tkcm9wUmVmPy5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgdGhpcy5jbG9zZU1vZGFsKGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlRGlzbWlzcyhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmRpc21pc3MuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUNvbmZpcm0oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5jb25maXJtLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VNb2RhbChldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQodGhpcy5pc09wZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmFibGVGb2N1c1RyYXAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcCkge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmFibGVGb2N1c1RyYXAuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2FibGVGb2N1c1RyYXAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcCkge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmFibGVGb2N1c1RyYXAuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwPy5kZXN0cm95KCk7XG4gICAgICAgIGVuYWJsZUJvZHlTY3JvbGwodGhpcy5yZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnW25nZy1tb2RhbC1oZWFkZXJdJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgPGgzIGRhdGEtdGVzdGlkPVwibW9kYWwtaGVhZGVyLXRleHRcIj57e2hlYWRlcn19PC9oMz5cbiAgICA8YnV0dG9uIGRhdGEtdGVzdGlkPVwibW9kYWwtY2xvc2UtYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIChjbGljayk9XCJ0aGlzLmhhbmRsZUNsb3NlKCRldmVudClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuICAgICAgICA8aT48L2k+XG4gICAgPC9idXR0b24+XG4gICAgYFxufSlcbmV4cG9ydCBjbGFzcyBOZ2dNb2RhbEhlYWRlckNvbXBvbmVudCB7XG4gICAgQElucHV0KCkgaGVhZGVyPzogc3RyaW5nO1xuICAgIEBPdXRwdXQoKSBjbG9zZWQ6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcblxuICAgIGhhbmRsZUNsb3NlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoZXZlbnQpO1xuICAgIH1cblxufVxuXG5AQ29tcG9uZW50KHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnW25nZy1tb2RhbC1ib2R5XScsXG4gICAgc3R5bGVVcmxzOiBbJy4vbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gXG59KVxuZXhwb3J0IGNsYXNzIE5nZ01vZGFsQm9keUNvbXBvbmVudCB7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdbbmdnLW1vZGFsLWZvb3Rlcl0nLFxuICAgIHN0eWxlVXJsczogWycuL21vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgdGVtcGxhdGU6IGBcbiAgICA8YnV0dG9uIGRhdGEtdGVzdGlkPVwibW9kYWwtZGlzbWlzcy1idXR0b25cIiAqbmdJZj1cImRpc21pc3NMYWJlbFwiIGNsYXNzPVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cInRoaXMuaGFuZGxlRGlzbWlzcygkZXZlbnQpXCI+e3tkaXNtaXNzTGFiZWx9fTwvYnV0dG9uPlxuICAgIDxidXR0b24gZGF0YS10ZXN0aWQ9XCJtb2RhbC1jb25maXJtLWJ1dHRvblwiICpuZ0lmPVwiY29uZmlybUxhYmVsXCIgY2xhc3M9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInRoaXMuaGFuZGxlQ29uZmlybSgkZXZlbnQpXCI+e3tjb25maXJtTGFiZWx9fTwvYnV0dG9uPlxuICAgIGBcbn0pXG5leHBvcnQgY2xhc3MgTmdnTW9kYWxGb290ZXJDb21wb25lbnQge1xuICAgIEBJbnB1dCgpIGRpc21pc3NMYWJlbD86IHN0cmluZztcbiAgICBASW5wdXQoKSBjb25maXJtTGFiZWw/OiBzdHJpbmc7XG4gICAgQE91dHB1dCgpIGRpc21pc3M6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgY29uZmlybTogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgaGFuZGxlRGlzbWlzcyhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmRpc21pc3MuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ29uZmlybShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmNvbmZpcm0uZW1pdChldmVudCk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzT3BlblwiIFtuZ1N3aXRjaF09XCJtb2RhbFR5cGVcIj5cbiAgICA8YXNpZGUgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiICpuZ1N3aXRjaENhc2U9XCInc2xpZGVvdXQnXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCIgW2NsYXNzLnNtYWxsXT1cInNpemUgPT09ICdzbSdcIiBbY2xhc3MubWVkaXVtXT1cInNpemUgPT09ICdtZCdcIiBbY2xhc3MubGFyZ2VdPVwic2l6ZSA9PT0gJ2xnJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9hc2lkZT5cbiAgICA8bWFpbiBkYXRhLXRlc3RpZD1cIm1vZGFsXCIgKm5nU3dpdGNoQ2FzZT1cIid0YWtlb3ZlcidcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbWFpbj5cbiAgICA8c2VjdGlvbiBkYXRhLXRlc3RpZD1cIm1vZGFsXCIgKm5nU3dpdGNoRGVmYXVsdCByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIiBbY2xhc3Muc21hbGxdPVwic2l6ZSA9PT0gJ3NtJ1wiIFtjbGFzcy5tZWRpdW1dPVwic2l6ZSA9PT0gJ21kJ1wiIFtjbGFzcy5sYXJnZV09XCJzaXplID09PSAnbGcnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NlY3Rpb24+XG4gICAgPG5nLXRlbXBsYXRlICNjb250ZW50VGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGlkZUhlYWRlclwiPlxuICAgICAgICAgICAgPGhlYWRlciAqbmdJZj1cIiFtb2RhbEhlYWRlckNvbnRlbnQ7IGVsc2UgaGVhZGVyQ29udGVudFRlbXBsYXRlXCIgbmdnLW1vZGFsLWhlYWRlciBkYXRhLXRlc3RpZD1cIm1vZGFsLWhlYWRlclwiIFtoZWFkZXJdPVwiaGVhZGVyXCIgKGNsb3NlZCk9XCJ0aGlzLmhhbmRsZUNsb3NlQ2xpY2soJGV2ZW50KVwiPjwvaGVhZGVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBuZ2ctbW9kYWwtYm9keSBkYXRhLXRlc3RpZD1cIm1vZGFsLWJvZHlcIiBjbGFzcz1cImJvZHlcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5Q29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhpZGVGb290ZXIgJiYgKGRpc21pc3NMYWJlbCB8fCBjb25maXJtTGFiZWwpXCI+XG4gICAgICAgICAgICA8Zm9vdGVyICpuZ0lmPVwiIW1vZGFsRm9vdGVyQ29udGVudDsgZWxzZSBmb290ZXJDb250ZW50VGVtcGxhdGVcIiBuZ2ctbW9kYWwtZm9vdGVyIGRhdGEtdGVzdGlkPVwibW9kYWwtZm9vdGVyXCIgW2Rpc21pc3NMYWJlbF09XCJkaXNtaXNzTGFiZWxcIiBbY29uZmlybUxhYmVsXT1cImNvbmZpcm1MYWJlbFwiIChkaXNtaXNzKT1cInRoaXMuaGFuZGxlRGlzbWlzcygkZXZlbnQpXCIgKGNvbmZpcm0pPVwidGhpcy5oYW5kbGVDb25maXJtKCRldmVudClcIj48L2Zvb3Rlcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2hlYWRlckNvbnRlbnRUZW1wbGF0ZT5cbiAgICAgICAgPGhlYWRlciBkYXRhLXRlc3RpZD1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25nZ01vZGFsSGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9oZWFkZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2JvZHlDb250ZW50VGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjZm9vdGVyQ29udGVudFRlbXBsYXRlPlxuICAgICAgICA8Zm9vdGVyIGRhdGEtdGVzdGlkPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmdnTW9kYWxGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Zvb3Rlcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxkaXYgI2JhY2tkcm9wIGRhdGEtdGVzdGlkPVwibW9kYWwtYmFja2Ryb3BcIiBjbGFzcz1cImJhY2tkcm9wXCIgKGNsaWNrKT1cInRoaXMuaGFuZGxlQmFja2Ryb3BDbGljaygkZXZlbnQpXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiPjwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJLLE9BQU8sRUFBeUIsNEJBQTRCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RixPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUNuQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7O0FBUW5FLE1BQU0sT0FBTyxpQkFBaUI7SUE0RDFCLFlBQW9CLEdBQTRCLEVBQVUsNEJBQTBEO1FBQWhHLFFBQUcsR0FBSCxHQUFHLENBQXlCO1FBQVUsaUNBQTRCLEdBQTVCLDRCQUE0QixDQUE4QjtRQWJuRyxpQkFBWSxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ2xFLFdBQU0sR0FBNkIsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUNsRSxZQUFPLEdBQTZCLElBQUksWUFBWSxFQUFjLENBQUM7UUFDbkUsWUFBTyxHQUE2QixJQUFJLFlBQVksRUFBYyxDQUFDO1FBV2hGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENB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QWlCO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7O29IQU5RLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLHVIQVJ0Qjs7Ozs7O0tBTVQ7MkZBRVEsdUJBQXVCO2tCQVpuQyxTQUFTOytCQUVJLG9CQUFvQixZQUVwQjs7Ozs7O0tBTVQ7OEJBR1EsTUFBTTtzQkFBZCxLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTTs7QUFjWCxNQUFNLE9BQU8scUJBQXFCOztrSEFBckIscUJBQXFCO3NHQUFyQixxQkFBcUIsd0RBRnBCLDJCQUEyQjsyRkFFNUIscUJBQXFCO2tCQU5qQyxTQUFTOytCQUVJLGtCQUFrQixZQUVsQiwyQkFBMkI7O0FBY3pDLE1BQU0sT0FBTyx1QkFBdUI7SUFUcEM7UUFZYyxZQUFPLEdBQTZCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkQsWUFBTyxHQUE2QixJQUFJLFlBQVksRUFBRSxDQUFDO0tBU3BFO0lBUEcsYUFBYSxDQUFDLEtBQWlCO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBaUI7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQzs7b0hBWlEsdUJBQXVCO3dHQUF2Qix1QkFBdUIsdUxBTHRCOzs7S0FHVDsyRkFFUSx1QkFBdUI7a0JBVG5DLFNBQVM7K0JBRUksb0JBQW9CLFlBRXBCOzs7S0FHVDs4QkFHUSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFR5cGUsIFNpemUgfSBmcm9tICdAc2ViZ3JvdXAvZXh0cmFjdCc7XG5pbXBvcnQgeyBDb25maWd1cmFibGVGb2N1c1RyYXAsIENvbmZpZ3VyYWJsZUZvY3VzVHJhcEZhY3RvcnkgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge1xuICAgIGRpc2FibGVCb2R5U2Nyb2xsLFxuICAgIGVuYWJsZUJvZHlTY3JvbGwsXG59IGZyb20gXCJib2R5LXNjcm9sbC1sb2NrXCI7XG5pbXBvcnQgeyBOZ2dNb2RhbEhlYWRlckRpcmVjdGl2ZSB9IGZyb20gJy4vbW9kYWwtaGVhZGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOZ2dNb2RhbEZvb3RlckRpcmVjdGl2ZSB9IGZyb20gJy4vbW9kYWwtZm9vdGVyLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmdnLW1vZGFsJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTmdnTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gICAgQElucHV0KCkgcHVibGljIG1vZGFsVHlwZT86IE1vZGFsVHlwZVxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXI/OiBzdHJpbmdcbiAgICBASW5wdXQoKSBwdWJsaWMgY29uZmlybUxhYmVsPzogc3RyaW5nXG4gICAgQElucHV0KCkgcHVibGljIGRpc21pc3NMYWJlbD86IHN0cmluZ1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzaXplPzogU2l6ZVxuICAgIEBJbnB1dCgpIHB1YmxpYyBoaWRlSGVhZGVyPzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZUZvb3Rlcj86IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGdldCB0cmFwRm9jdXMoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl90cmFwRm9jdXM7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgdHJhcEZvY3VzKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3RyYXBGb2N1cyA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzT3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlRm9jdXNUcmFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVGb2N1c1RyYXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpc09wZW4oKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc09wZW47XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgaXNPcGVuKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2lzT3BlbiA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudHJhcEZvY3VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVGb2N1c1RyYXAoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGlzYWJsZUJvZHlTY3JvbGwodGhpcy5yZWYubmF0aXZlRWxlbWVudCwge1xuICAgICAgICAgICAgICAgIGFsbG93VG91Y2hNb3ZlOiAoZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgdG91Y2htb3ZlIGZvciBlbGVtZW50cyBpbnNpZGUgbW9kYWwsIGl0cyByZXF1aXJlZCBmb3Igc2Nyb2xsIHRvIHdvcmsgb24gaU9TIGRldmljZXNcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlRm9jdXNUcmFwKCk7XG4gICAgICAgICAgICBlbmFibGVCb2R5U2Nyb2xsKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIHB1YmxpYyBpc09wZW5DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIGNsb3NlZDogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgY29uZmlybTogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgZGlzbWlzczogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vcGVuJykgZ2V0IG9wZW4oKSB7IHJldHVybiB0aGlzLmlzT3BlbjsgfVxuICAgIEBWaWV3Q2hpbGQoJ2JhY2tkcm9wJykgcHJpdmF0ZSBiYWNrZHJvcFJlZj86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gICAgQENvbnRlbnRDaGlsZChOZ2dNb2RhbEhlYWRlckRpcmVjdGl2ZSkgcHVibGljIG1vZGFsSGVhZGVyQ29udGVudD86IE5nZ01vZGFsSGVhZGVyRGlyZWN0aXZlO1xuICAgIEBDb250ZW50Q2hpbGQoTmdnTW9kYWxGb290ZXJEaXJlY3RpdmUpIHB1YmxpYyBtb2RhbEZvb3RlckNvbnRlbnQ/OiBOZ2dNb2RhbEZvb3RlckRpcmVjdGl2ZTtcbiAgICBwcml2YXRlIF9pc09wZW4/OiBib29sZWFuO1xuICAgIHByaXZhdGUgX3RyYXBGb2N1cz86IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBjb25maWd1cmFibGVGb2N1c1RyYXA6IENvbmZpZ3VyYWJsZUZvY3VzVHJhcDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcHJpdmF0ZSBjb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5OiBDb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5KSB7XG4gICAgICAgIHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwID0gdGhpcy5jb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzT3BlbiAmJiB0aGlzLnRyYXBGb2N1cylcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRm9jdXNUcmFwKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUZvY3VzVHJhcCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVDbG9zZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuY2xvc2VNb2RhbChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUJhY2tkcm9wQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLmJhY2tkcm9wUmVmPy5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgdGhpcy5jbG9zZU1vZGFsKGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlRGlzbWlzcyhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmRpc21pc3MuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUNvbmZpcm0oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5jb25maXJtLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VNb2RhbChldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQodGhpcy5pc09wZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmFibGVGb2N1c1RyYXAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcCkge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmFibGVGb2N1c1RyYXAuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2FibGVGb2N1c1RyYXAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcCkge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmFibGVGb2N1c1RyYXAuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwPy5kZXN0cm95KCk7XG4gICAgICAgIGVuYWJsZUJvZHlTY3JvbGwodGhpcy5yZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnW25nZy1tb2RhbC1oZWFkZXJdJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgPGgzIGRhdGEtdGVzdGlkPVwibW9kYWwtaGVhZGVyLXRleHRcIj57e2hlYWRlcn19PC9oMz5cbiAgICA8YnV0dG9uIGRhdGEtdGVzdGlkPVwibW9kYWwtY2xvc2UtYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIChjbGljayk9XCJ0aGlzLmhhbmRsZUNsb3NlKCRldmVudClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuICAgICAgICA8aT48L2k+XG4gICAgPC9idXR0b24+XG4gICAgYFxufSlcbmV4cG9ydCBjbGFzcyBOZ2dNb2RhbEhlYWRlckNvbXBvbmVudCB7XG4gICAgQElucHV0KCkgaGVhZGVyPzogc3RyaW5nO1xuICAgIEBPdXRwdXQoKSBjbG9zZWQ6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcblxuICAgIGhhbmRsZUNsb3NlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoZXZlbnQpO1xuICAgIH1cblxufVxuXG5AQ29tcG9uZW50KHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnW25nZy1tb2RhbC1ib2R5XScsXG4gICAgc3R5bGVVcmxzOiBbJy4vbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gXG59KVxuZXhwb3J0IGNsYXNzIE5nZ01vZGFsQm9keUNvbXBvbmVudCB7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdbbmdnLW1vZGFsLWZvb3Rlcl0nLFxuICAgIHN0eWxlVXJsczogWycuL21vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgdGVtcGxhdGU6IGBcbiAgICA8YnV0dG9uIGRhdGEtdGVzdGlkPVwibW9kYWwtZGlzbWlzcy1idXR0b25cIiAqbmdJZj1cImRpc21pc3NMYWJlbFwiIGNsYXNzPVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cInRoaXMuaGFuZGxlRGlzbWlzcygkZXZlbnQpXCI+e3tkaXNtaXNzTGFiZWx9fTwvYnV0dG9uPlxuICAgIDxidXR0b24gZGF0YS10ZXN0aWQ9XCJtb2RhbC1jb25maXJtLWJ1dHRvblwiICpuZ0lmPVwiY29uZmlybUxhYmVsXCIgY2xhc3M9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInRoaXMuaGFuZGxlQ29uZmlybSgkZXZlbnQpXCI+e3tjb25maXJtTGFiZWx9fTwvYnV0dG9uPlxuICAgIGBcbn0pXG5leHBvcnQgY2xhc3MgTmdnTW9kYWxGb290ZXJDb21wb25lbnQge1xuICAgIEBJbnB1dCgpIGRpc21pc3NMYWJlbD86IHN0cmluZztcbiAgICBASW5wdXQoKSBjb25maXJtTGFiZWw/OiBzdHJpbmc7XG4gICAgQE91dHB1dCgpIGRpc21pc3M6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgY29uZmlybTogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgaGFuZGxlRGlzbWlzcyhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmRpc21pc3MuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ29uZmlybShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmNvbmZpcm0uZW1pdChldmVudCk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzT3BlblwiIFtuZ1N3aXRjaF09XCJtb2RhbFR5cGVcIj5cbiAgICA8YXNpZGUgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiICpuZ1N3aXRjaENhc2U9XCInc2xpZGVvdXQnXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCIgW2NsYXNzLnNtYWxsXT1cInNpemUgPT09ICdzbSdcIiBbY2xhc3MubWVkaXVtXT1cInNpemUgPT09ICdtZCdcIiBbY2xhc3MubGFyZ2VdPVwic2l6ZSA9PT0gJ2xnJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9hc2lkZT5cbiAgICA8bWFpbiBkYXRhLXRlc3RpZD1cIm1vZGFsXCIgKm5nU3dpdGNoQ2FzZT1cIid0YWtlb3ZlcidcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbWFpbj5cbiAgICA8c2VjdGlvbiBkYXRhLXRlc3RpZD1cIm1vZGFsXCIgKm5nU3dpdGNoRGVmYXVsdCByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIiBbY2xhc3Muc21hbGxdPVwic2l6ZSA9PT0gJ3NtJ1wiIFtjbGFzcy5tZWRpdW1dPVwic2l6ZSA9PT0gJ21kJ1wiIFtjbGFzcy5sYXJnZV09XCJzaXplID09PSAnbGcnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NlY3Rpb24+XG4gICAgPG5nLXRlbXBsYXRlICNjb250ZW50VGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGlkZUhlYWRlclwiPlxuICAgICAgICAgICAgPGhlYWRlciAqbmdJZj1cIiFtb2RhbEhlYWRlckNvbnRlbnQ7IGVsc2UgaGVhZGVyQ29udGVudFRlbXBsYXRlXCIgbmdnLW1vZGFsLWhlYWRlciBkYXRhLXRlc3RpZD1cIm1vZGFsLWhlYWRlclwiIFtoZWFkZXJdPVwiaGVhZGVyXCIgKGNsb3NlZCk9XCJ0aGlzLmhhbmRsZUNsb3NlQ2xpY2soJGV2ZW50KVwiPjwvaGVhZGVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBuZ2ctbW9kYWwtYm9keSBkYXRhLXRlc3RpZD1cIm1vZGFsLWJvZHlcIiBjbGFzcz1cImJvZHlcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5Q29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhpZGVGb290ZXIgJiYgKGRpc21pc3NMYWJlbCB8fCBjb25maXJtTGFiZWwpXCI+XG4gICAgICAgICAgICA8Zm9vdGVyICpuZ0lmPVwiIW1vZGFsRm9vdGVyQ29udGVudDsgZWxzZSBmb290ZXJDb250ZW50VGVtcGxhdGVcIiBuZ2ctbW9kYWwtZm9vdGVyIGRhdGEtdGVzdGlkPVwibW9kYWwtZm9vdGVyXCIgW2Rpc21pc3NMYWJlbF09XCJkaXNtaXNzTGFiZWxcIiBbY29uZmlybUxhYmVsXT1cImNvbmZpcm1MYWJlbFwiIChkaXNtaXNzKT1cInRoaXMuaGFuZGxlRGlzbWlzcygkZXZlbnQpXCIgKGNvbmZpcm0pPVwidGhpcy5oYW5kbGVDb25maXJtKCRldmVudClcIj48L2Zvb3Rlcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2hlYWRlckNvbnRlbnRUZW1wbGF0ZT5cbiAgICAgICAgPGhlYWRlciBkYXRhLXRlc3RpZD1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25nZ01vZGFsSGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9oZWFkZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2JvZHlDb250ZW50VGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjZm9vdGVyQ29udGVudFRlbXBsYXRlPlxuICAgICAgICA8Zm9vdGVyIGRhdGEtdGVzdGlkPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmdnTW9kYWxGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Zvb3Rlcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxkaXYgI2JhY2tkcm9wIGRhdGEtdGVzdGlkPVwibW9kYWwtYmFja2Ryb3BcIiBjbGFzcz1cImJhY2tkcm9wXCIgKGNsaWNrKT1cInRoaXMuaGFuZGxlQmFja2Ryb3BDbGljaygkZXZlbnQpXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiPjwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=