@patter/ngx-components 0.5.12 → 0.5.13

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.
@@ -0,0 +1,23 @@
1
+ import { ChangeDetectionStrategy, Component, Input, signal } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class PtrTabComponent {
4
+ label;
5
+ link;
6
+ active = signal(false);
7
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: PtrTabComponent, isStandalone: true, selector: "ptr-tab", inputs: { label: "label", link: "link" }, ngImport: i0, template: '@if(active()){<ng-content></ng-content>}', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrTabComponent, decorators: [{
11
+ type: Component,
12
+ args: [{
13
+ selector: 'ptr-tab',
14
+ standalone: true,
15
+ template: '@if(active()){<ng-content></ng-content>}',
16
+ changeDetection: ChangeDetectionStrategy.OnPush
17
+ }]
18
+ }], propDecorators: { label: [{
19
+ type: Input
20
+ }], link: [{
21
+ type: Input
22
+ }] } });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHRyLXRhYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXR0ZXIvbmd4LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYnMvcHRyLXRhYi9wdHItdGFiLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBUWxGLE1BQU0sT0FBTyxlQUFlO0lBQ2pCLEtBQUssQ0FBVTtJQUNmLElBQUksQ0FBVTtJQUV2QixNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO3VHQUpaLGVBQWU7MkZBQWYsZUFBZSw2R0FIaEIsMENBQTBDOzsyRkFHekMsZUFBZTtrQkFOM0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsU0FBUztvQkFDbkIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSwwQ0FBMEM7b0JBQ3BELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs4QkFFVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwdHItdGFiJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHRlbXBsYXRlOiAnQGlmKGFjdGl2ZSgpKXs8bmctY29udGVudD48L25nLWNvbnRlbnQ+fScsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFB0clRhYkNvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgbGFiZWwhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbGluaz86IHN0cmluZztcclxuXHJcbiAgYWN0aXZlID0gc2lnbmFsKGZhbHNlKTtcclxufVxyXG4iXX0=
@@ -0,0 +1,71 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, ContentChildren, DestroyRef, effect, inject, signal, ViewChildren } from '@angular/core';
3
+ import { Router, RouterModule } from '@angular/router';
4
+ import { PtrTabComponent } from '../ptr-tab/ptr-tab.component';
5
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/router";
8
+ export class PtrTabsComponent {
9
+ tabComponents;
10
+ buttons;
11
+ router = inject(Router);
12
+ destroyRef = inject(DestroyRef);
13
+ tabs = signal([]);
14
+ activeTabIndex = signal(0);
15
+ useLinks = signal(false);
16
+ sliderPosition = signal({ transform: 'translateX(0)', width: '0' });
17
+ constructor() {
18
+ effect(() => {
19
+ const activeTab = this.tabs().find(tab => tab.active());
20
+ if (activeTab?.link) {
21
+ this.router.navigate([activeTab.link]);
22
+ }
23
+ this.updateSliderPosition();
24
+ }, { allowSignalWrites: true });
25
+ }
26
+ ngAfterViewInit() {
27
+ this.tabComponents.changes
28
+ .pipe(takeUntilDestroyed(this.destroyRef))
29
+ .subscribe(() => {
30
+ this.updateTabs();
31
+ });
32
+ this.updateTabs();
33
+ }
34
+ updateTabs() {
35
+ this.tabs.set(this.tabComponents.toArray());
36
+ this.useLinks.set(this.tabs().some(tab => !!tab.link));
37
+ if (this.tabs().length > 0 && !this.tabs().some(tab => tab.active())) {
38
+ this.selectTab(0);
39
+ }
40
+ else {
41
+ this.updateSliderPosition();
42
+ }
43
+ }
44
+ selectTab(index) {
45
+ this.tabs().forEach((tab, i) => tab.active.set(i === index));
46
+ this.activeTabIndex.set(index);
47
+ }
48
+ updateSliderPosition() {
49
+ const activeButton = this.buttons?.get(this.activeTabIndex())?.nativeElement;
50
+ if (activeButton) {
51
+ const { offsetLeft, offsetWidth } = activeButton;
52
+ this.sliderPosition.set({
53
+ transform: `translateX(${offsetLeft}px)`,
54
+ width: `${offsetWidth}px`
55
+ });
56
+ }
57
+ }
58
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
59
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: PtrTabsComponent, isStandalone: true, selector: "ptr-tabs", queries: [{ propertyName: "tabComponents", predicate: PtrTabComponent }], viewQueries: [{ propertyName: "buttons", predicate: ["tabButton"], descendants: true }], ngImport: i0, template: "<div class=\"tabs-container\" role=\"tablist\">\r\n @for (tab of tabs(); track $index; let i = $index) {\r\n <button #tabButton [attr.role]=\"tab.link ? 'link' : 'tab'\" [attr.aria-selected]=\"tab.active()\"\r\n [class.active]=\"tab.active()\" (click)=\"selectTab(i)\" [routerLink]=\"tab.link\">{{tab.label}}</button>\r\n }\r\n\r\n <div class=\"slider\" [style.transform]=\"sliderPosition().transform\" [style.width]=\"sliderPosition().width\"></div>\r\n</div>\r\n\r\n@if (!useLinks()) {\r\n<div class=\"tab-content\">\r\n <ng-content></ng-content>\r\n</div>\r\n}\r\n", styles: [".tabs-container{display:flex;position:relative}button{display:inline-flex;max-width:360px;appearance:none;padding:.5rem 1rem;border:none;background:none;cursor:pointer;font-weight:700;font-size:var(--wp--preset--font-size--small, inherit)}button:hover,button:focus{background-color:var(----wp--preset--color--light, rgba(51, 54, 70, .0392156863))}.slider{position:absolute;bottom:-2px;height:2px;background-color:var(--wp--preset--color--secondary, #0073aa);transition:transform .3s ease}.tab-content{padding:20px 0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
60
+ }
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrTabsComponent, decorators: [{
62
+ type: Component,
63
+ args: [{ selector: 'ptr-tabs', standalone: true, imports: [CommonModule, RouterModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"tabs-container\" role=\"tablist\">\r\n @for (tab of tabs(); track $index; let i = $index) {\r\n <button #tabButton [attr.role]=\"tab.link ? 'link' : 'tab'\" [attr.aria-selected]=\"tab.active()\"\r\n [class.active]=\"tab.active()\" (click)=\"selectTab(i)\" [routerLink]=\"tab.link\">{{tab.label}}</button>\r\n }\r\n\r\n <div class=\"slider\" [style.transform]=\"sliderPosition().transform\" [style.width]=\"sliderPosition().width\"></div>\r\n</div>\r\n\r\n@if (!useLinks()) {\r\n<div class=\"tab-content\">\r\n <ng-content></ng-content>\r\n</div>\r\n}\r\n", styles: [".tabs-container{display:flex;position:relative}button{display:inline-flex;max-width:360px;appearance:none;padding:.5rem 1rem;border:none;background:none;cursor:pointer;font-weight:700;font-size:var(--wp--preset--font-size--small, inherit)}button:hover,button:focus{background-color:var(----wp--preset--color--light, rgba(51, 54, 70, .0392156863))}.slider{position:absolute;bottom:-2px;height:2px;background-color:var(--wp--preset--color--secondary, #0073aa);transition:transform .3s ease}.tab-content{padding:20px 0}\n"] }]
64
+ }], ctorParameters: () => [], propDecorators: { tabComponents: [{
65
+ type: ContentChildren,
66
+ args: [PtrTabComponent]
67
+ }], buttons: [{
68
+ type: ViewChildren,
69
+ args: ['tabButton']
70
+ }] } });
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHRyLXRhYnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy90YWJzL3B0ci10YWJzL3B0ci10YWJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvdGFicy9wdHItdGFicy9wdHItdGFicy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWMsTUFBTSxFQUFhLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUssT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQVdoRSxNQUFNLE9BQU8sZ0JBQWdCO0lBRU8sYUFBYSxDQUE4QjtJQUNsRCxPQUFPLENBQXlCO0lBRW5ELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV4QyxJQUFJLEdBQUcsTUFBTSxDQUFvQixFQUFFLENBQUMsQ0FBQztJQUNyQyxjQUFjLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsY0FBYyxHQUFHLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFcEU7UUFDRSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELElBQUksU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFDRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5QixDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPO2FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDekMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUNMLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNyRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYTtRQUNyQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxhQUFhLENBQUM7UUFDN0UsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUFHLFlBQVksQ0FBQztZQUNqRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztnQkFDdEIsU0FBUyxFQUFFLGNBQWMsVUFBVSxLQUFLO2dCQUN4QyxLQUFLLEVBQUUsR0FBRyxXQUFXLElBQUk7YUFDMUIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7dUdBeERVLGdCQUFnQjsyRkFBaEIsZ0JBQWdCLGtHQUVWLGVBQWUsc0hDakJsQyxpa0JBY0EsK2pCREpZLFlBQVksOEJBQUUsWUFBWTs7MkZBS3pCLGdCQUFnQjtrQkFSNUIsU0FBUzsrQkFDRSxVQUFVLGNBQ1IsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxtQkFHcEIsdUJBQXVCLENBQUMsTUFBTTt3REFJYixhQUFhO3NCQUE5QyxlQUFlO3VCQUFDLGVBQWU7Z0JBQ0wsT0FBTztzQkFBakMsWUFBWTt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBEZXN0cm95UmVmLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgUXVlcnlMaXN0LCBzaWduYWwsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFB0clRhYkNvbXBvbmVudCB9IGZyb20gJy4uL3B0ci10YWIvcHRyLXRhYi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwdHItdGFicycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSb3V0ZXJNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wdHItdGFicy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3B0ci10YWJzLmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHRyVGFic0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFB0clRhYkNvbXBvbmVudCkgdGFiQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxQdHJUYWJDb21wb25lbnQ+O1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ3RhYkJ1dHRvbicpIGJ1dHRvbnMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgcHJpdmF0ZSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG5cclxuICB0YWJzID0gc2lnbmFsPFB0clRhYkNvbXBvbmVudFtdPihbXSk7XHJcbiAgYWN0aXZlVGFiSW5kZXggPSBzaWduYWwoMCk7XHJcbiAgdXNlTGlua3MgPSBzaWduYWwoZmFsc2UpO1xyXG4gIHNsaWRlclBvc2l0aW9uID0gc2lnbmFsKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScsIHdpZHRoOiAnMCcgfSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy50YWJzKCkuZmluZCh0YWIgPT4gdGFiLmFjdGl2ZSgpKTtcclxuICAgICAgaWYgKGFjdGl2ZVRhYj8ubGluaykge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFthY3RpdmVUYWIubGlua10pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlU2xpZGVyUG9zaXRpb24oKTtcclxuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnRhYkNvbXBvbmVudHMuY2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUYWJzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy51cGRhdGVUYWJzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUYWJzKCkge1xyXG4gICAgdGhpcy50YWJzLnNldCh0aGlzLnRhYkNvbXBvbmVudHMudG9BcnJheSgpKTtcclxuICAgIHRoaXMudXNlTGlua3Muc2V0KHRoaXMudGFicygpLnNvbWUodGFiID0+ICEhdGFiLmxpbmspKTtcclxuICAgIGlmICh0aGlzLnRhYnMoKS5sZW5ndGggPiAwICYmICF0aGlzLnRhYnMoKS5zb21lKHRhYiA9PiB0YWIuYWN0aXZlKCkpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGFiKDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy51cGRhdGVTbGlkZXJQb3NpdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0VGFiKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMudGFicygpLmZvckVhY2goKHRhYiwgaSkgPT4gdGFiLmFjdGl2ZS5zZXQoaSA9PT0gaW5kZXgpKTtcclxuICAgIHRoaXMuYWN0aXZlVGFiSW5kZXguc2V0KGluZGV4KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNsaWRlclBvc2l0aW9uKCkge1xyXG4gICAgY29uc3QgYWN0aXZlQnV0dG9uID0gdGhpcy5idXR0b25zPy5nZXQodGhpcy5hY3RpdmVUYWJJbmRleCgpKT8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChhY3RpdmVCdXR0b24pIHtcclxuICAgICAgY29uc3QgeyBvZmZzZXRMZWZ0LCBvZmZzZXRXaWR0aCB9ID0gYWN0aXZlQnV0dG9uO1xyXG4gICAgICB0aGlzLnNsaWRlclBvc2l0aW9uLnNldCh7XHJcbiAgICAgICAgdHJhbnNmb3JtOiBgdHJhbnNsYXRlWCgke29mZnNldExlZnR9cHgpYCxcclxuICAgICAgICB3aWR0aDogYCR7b2Zmc2V0V2lkdGh9cHhgXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRhYnMtY29udGFpbmVyXCIgcm9sZT1cInRhYmxpc3RcIj5cclxuICBAZm9yICh0YWIgb2YgdGFicygpOyB0cmFjayAkaW5kZXg7IGxldCBpID0gJGluZGV4KSB7XHJcbiAgPGJ1dHRvbiAjdGFiQnV0dG9uIFthdHRyLnJvbGVdPVwidGFiLmxpbmsgPyAnbGluaycgOiAndGFiJ1wiIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwidGFiLmFjdGl2ZSgpXCJcclxuICAgIFtjbGFzcy5hY3RpdmVdPVwidGFiLmFjdGl2ZSgpXCIgKGNsaWNrKT1cInNlbGVjdFRhYihpKVwiIFtyb3V0ZXJMaW5rXT1cInRhYi5saW5rXCI+e3t0YWIubGFiZWx9fTwvYnV0dG9uPlxyXG4gIH1cclxuXHJcbiAgPGRpdiBjbGFzcz1cInNsaWRlclwiIFtzdHlsZS50cmFuc2Zvcm1dPVwic2xpZGVyUG9zaXRpb24oKS50cmFuc2Zvcm1cIiBbc3R5bGUud2lkdGhdPVwic2xpZGVyUG9zaXRpb24oKS53aWR0aFwiPjwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbkBpZiAoIXVzZUxpbmtzKCkpIHtcclxuPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L2Rpdj5cclxufVxyXG4iXX0=
@@ -3,6 +3,7 @@ import { PtrButtonComponent } from '../../ptr-button/ptr-button.component';
3
3
  import * as i0 from "@angular/core";
4
4
  export class PtrDialogComponent {
5
5
  dialogElement;
6
+ title = '';
6
7
  message = '';
7
8
  buttonText = 'Confirm';
8
9
  buttonStyle = 'normal';
@@ -21,16 +22,18 @@ export class PtrDialogComponent {
21
22
  this.closed.emit(null);
22
23
  }
23
24
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
24
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: PtrDialogComponent, isStandalone: true, selector: "ptr-dialog", inputs: { message: "message", buttonText: "buttonText", buttonStyle: "buttonStyle" }, outputs: { closed: "closed" }, viewQueries: [{ propertyName: "dialogElement", first: true, predicate: ["dialogElement"], descendants: true }], ngImport: i0, template: "<dialog #dialogElement class=\"ptr-modal\" (close)=\"onClose()\">\r\n <div class=\"ptr-modal__content\">\r\n <button class=\"ptr-modal__close\" (click)=\"close()\" aria-label=\"Close dialog\">\r\n &times;\r\n </button>\r\n <p>{{ message }}</p>\r\n <div class=\"ptr-modal__actions\">\r\n <ptr-button [buttonStyle]=\"buttonStyle\" (clicked)=\"confirm()\" [isSmallSize]=\"true\">{{buttonText}}</ptr-button>\r\n </div>\r\n </div>\r\n</dialog>", styles: [".ptr-modal{border-radius:var(--wp--custom--default-border-radius);border:none;padding:1rem}.ptr-modal__content{padding:1rem;position:relative}.ptr-modal__close{position:absolute;right:0;top:0;background:none;border:none;font-size:1.5rem;cursor:pointer;padding:0;line-height:1rem}.ptr-modal__actions{margin-top:20px;text-align:right}dialog.ptr-modal{opacity:0;transition:all .7s allow-discrete}dialog.ptr-modal[open]{opacity:1}dialog.ptr-modal::backdrop{background-color:#0000;transition:all .7s allow-discrete;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}dialog.ptr-modal[open]::backdrop{background-color:#0006}@starting-style{dialog[open]{opacity:0}}@starting-style{dialog[open]::backdrop{background-color:#0000}}\n"], dependencies: [{ kind: "component", type: PtrButtonComponent, selector: "ptr-button", inputs: ["buttonStyle", "buttonType", "isDisabled", "hrefLink", "routerLinkValue", "extraClasses", "isSmallSize", "isIconButton", "ariaLabel"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
25
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: PtrDialogComponent, isStandalone: true, selector: "ptr-dialog", inputs: { title: "title", message: "message", buttonText: "buttonText", buttonStyle: "buttonStyle" }, outputs: { closed: "closed" }, viewQueries: [{ propertyName: "dialogElement", first: true, predicate: ["dialogElement"], descendants: true }], ngImport: i0, template: "<dialog #dialogElement class=\"ptr-modal\" (close)=\"onClose()\">\r\n <div class=\"ptr-modal__content\">\r\n\r\n <div class=\"ptr-modal__header\">\r\n <h2 class=\"ptr-modal__title\">{{title}}</h2>\r\n <button class=\"ptr-modal__close\" (click)=\"close()\" aria-label=\"Close dialog\">&times;</button>\r\n </div>\r\n\r\n <p>{{ message }}</p>\r\n <div class=\"ptr-modal__actions\">\r\n <ptr-button buttonStyle=\"secondary\" (clicked)=\"close()\" [isSmallSize]=\"true\">Cancel</ptr-button>\r\n <ptr-button class=\"ml-auto\" [buttonStyle]=\"buttonStyle\" (clicked)=\"confirm()\"\r\n [isSmallSize]=\"true\">{{buttonText}}</ptr-button>\r\n </div>\r\n\r\n </div>\r\n</dialog>\r\n", styles: [".ptr-modal{border-radius:min(var(--wp--custom--default-border-radius),6px);border:none;padding:.75rem}.ptr-modal__content{padding:.75rem;position:relative}.ptr-modal__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.ptr-modal__header h2{margin:0;font-size:calc(var(--wp--preset--font-size--medium) * 1.125)}.ptr-modal__close{background:none;border:none;font-size:1.5rem;cursor:pointer;padding:0;line-height:1.5rem;transform:translateY(-25%)}.ptr-modal__close:hover,.ptr-modal__close:focus{background-color:var(----wp--preset--color--light, rgba(51, 54, 70, .0392156863))}.ptr-modal__actions{margin-top:20px;text-align:right;display:flex;justify-content:space-between}dialog.ptr-modal{opacity:0;transition:all .2s}dialog.ptr-modal[open]{opacity:1}@starting-style{dialog.ptr-modal[open]{opacity:0}}dialog.ptr-modal::backdrop{opacity:0;background-color:#0000;transition:all .2s}dialog.ptr-modal[open]::backdrop{background-color:#25273499;opacity:1}@starting-style{dialog.ptr-modal[open]::backdrop{opacity:0;background-color:#0000}}\n"], dependencies: [{ kind: "component", type: PtrButtonComponent, selector: "ptr-button", inputs: ["buttonStyle", "buttonType", "isDisabled", "hrefLink", "routerLinkValue", "extraClasses", "isSmallSize", "isIconButton", "ariaLabel"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
25
26
  }
26
27
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrDialogComponent, decorators: [{
27
28
  type: Component,
28
29
  args: [{ selector: 'ptr-dialog', standalone: true, imports: [
29
30
  PtrButtonComponent
30
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<dialog #dialogElement class=\"ptr-modal\" (close)=\"onClose()\">\r\n <div class=\"ptr-modal__content\">\r\n <button class=\"ptr-modal__close\" (click)=\"close()\" aria-label=\"Close dialog\">\r\n &times;\r\n </button>\r\n <p>{{ message }}</p>\r\n <div class=\"ptr-modal__actions\">\r\n <ptr-button [buttonStyle]=\"buttonStyle\" (clicked)=\"confirm()\" [isSmallSize]=\"true\">{{buttonText}}</ptr-button>\r\n </div>\r\n </div>\r\n</dialog>", styles: [".ptr-modal{border-radius:var(--wp--custom--default-border-radius);border:none;padding:1rem}.ptr-modal__content{padding:1rem;position:relative}.ptr-modal__close{position:absolute;right:0;top:0;background:none;border:none;font-size:1.5rem;cursor:pointer;padding:0;line-height:1rem}.ptr-modal__actions{margin-top:20px;text-align:right}dialog.ptr-modal{opacity:0;transition:all .7s allow-discrete}dialog.ptr-modal[open]{opacity:1}dialog.ptr-modal::backdrop{background-color:#0000;transition:all .7s allow-discrete;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}dialog.ptr-modal[open]::backdrop{background-color:#0006}@starting-style{dialog[open]{opacity:0}}@starting-style{dialog[open]::backdrop{background-color:#0000}}\n"] }]
31
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<dialog #dialogElement class=\"ptr-modal\" (close)=\"onClose()\">\r\n <div class=\"ptr-modal__content\">\r\n\r\n <div class=\"ptr-modal__header\">\r\n <h2 class=\"ptr-modal__title\">{{title}}</h2>\r\n <button class=\"ptr-modal__close\" (click)=\"close()\" aria-label=\"Close dialog\">&times;</button>\r\n </div>\r\n\r\n <p>{{ message }}</p>\r\n <div class=\"ptr-modal__actions\">\r\n <ptr-button buttonStyle=\"secondary\" (clicked)=\"close()\" [isSmallSize]=\"true\">Cancel</ptr-button>\r\n <ptr-button class=\"ml-auto\" [buttonStyle]=\"buttonStyle\" (clicked)=\"confirm()\"\r\n [isSmallSize]=\"true\">{{buttonText}}</ptr-button>\r\n </div>\r\n\r\n </div>\r\n</dialog>\r\n", styles: [".ptr-modal{border-radius:min(var(--wp--custom--default-border-radius),6px);border:none;padding:.75rem}.ptr-modal__content{padding:.75rem;position:relative}.ptr-modal__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.ptr-modal__header h2{margin:0;font-size:calc(var(--wp--preset--font-size--medium) * 1.125)}.ptr-modal__close{background:none;border:none;font-size:1.5rem;cursor:pointer;padding:0;line-height:1.5rem;transform:translateY(-25%)}.ptr-modal__close:hover,.ptr-modal__close:focus{background-color:var(----wp--preset--color--light, rgba(51, 54, 70, .0392156863))}.ptr-modal__actions{margin-top:20px;text-align:right;display:flex;justify-content:space-between}dialog.ptr-modal{opacity:0;transition:all .2s}dialog.ptr-modal[open]{opacity:1}@starting-style{dialog.ptr-modal[open]{opacity:0}}dialog.ptr-modal::backdrop{opacity:0;background-color:#0000;transition:all .2s}dialog.ptr-modal[open]::backdrop{background-color:#25273499;opacity:1}@starting-style{dialog.ptr-modal[open]::backdrop{opacity:0;background-color:#0000}}\n"] }]
31
32
  }], propDecorators: { dialogElement: [{
32
33
  type: ViewChild,
33
34
  args: ['dialogElement']
35
+ }], title: [{
36
+ type: Input
34
37
  }], message: [{
35
38
  type: Input
36
39
  }], buttonText: [{
@@ -40,4 +43,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
40
43
  }], closed: [{
41
44
  type: Output
42
45
  }] } });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHRyLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXR0ZXIvbmd4LWNvbXBvbmVudHMvc3JjL2xpYi9kaWFsb2cvcHRyLWRpYWxvZy9wdHItZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvbGliL2RpYWxvZy9wdHItZGlhbG9nL3B0ci1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3RJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQVkzRSxNQUFNLE9BQU8sa0JBQWtCO0lBRUQsYUFBYSxDQUFpQztJQUVqRSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2IsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUN2QixXQUFXLEdBQXFDLFFBQVEsQ0FBQztJQUV4RCxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7SUFFdEQsZUFBZTtRQUNiLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7dUdBekJVLGtCQUFrQjsyRkFBbEIsa0JBQWtCLDJTQ2IvQixtZEFVUyxxeEJESEwsa0JBQWtCOzsyRkFNVCxrQkFBa0I7a0JBVjlCLFNBQVM7K0JBQ0UsWUFBWSxjQUNWLElBQUksV0FDUDt3QkFDUCxrQkFBa0I7cUJBQ25CLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUluQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBRWpCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHRyQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHRyLWJ1dHRvbi9wdHItYnV0dG9uLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3B0ci1kaWFsb2cnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgUHRyQnV0dG9uQ29tcG9uZW50XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcHRyLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3B0ci1kaWFsb2cuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFB0ckRpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBAVmlld0NoaWxkKCdkaWFsb2dFbGVtZW50JykgZGlhbG9nRWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTERpYWxvZ0VsZW1lbnQ+O1xyXG5cclxuICBASW5wdXQoKSBtZXNzYWdlID0gJyc7XHJcbiAgQElucHV0KCkgYnV0dG9uVGV4dCA9ICdDb25maXJtJztcclxuICBASW5wdXQoKSBidXR0b25TdHlsZTogJ25vcm1hbCcgfCAnZXJyb3InIHwgJ3NlY29uZGFyeScgPSAnbm9ybWFsJztcclxuXHJcbiAgQE91dHB1dCgpIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbiB8IG51bGw+KCk7XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuZGlhbG9nRWxlbWVudC5uYXRpdmVFbGVtZW50LnNob3dNb2RhbCgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0VsZW1lbnQubmF0aXZlRWxlbWVudC5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybSgpIHtcclxuICAgIHRoaXMuY2xvc2VkLmVtaXQodHJ1ZSk7XHJcbiAgICB0aGlzLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBvbkNsb3NlKCkge1xyXG4gICAgdGhpcy5jbG9zZWQuZW1pdChudWxsKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaWFsb2cgI2RpYWxvZ0VsZW1lbnQgY2xhc3M9XCJwdHItbW9kYWxcIiAoY2xvc2UpPVwib25DbG9zZSgpXCI+XHJcbiAgPGRpdiBjbGFzcz1cInB0ci1tb2RhbF9fY29udGVudFwiPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInB0ci1tb2RhbF9fY2xvc2VcIiAoY2xpY2spPVwiY2xvc2UoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZSBkaWFsb2dcIj5cclxuICAgICAgJnRpbWVzO1xyXG4gICAgPC9idXR0b24+XHJcbiAgICA8cD57eyBtZXNzYWdlIH19PC9wPlxyXG4gICAgPGRpdiBjbGFzcz1cInB0ci1tb2RhbF9fYWN0aW9uc1wiPlxyXG4gICAgICA8cHRyLWJ1dHRvbiBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uU3R5bGVcIiAoY2xpY2tlZCk9XCJjb25maXJtKClcIiBbaXNTbWFsbFNpemVdPVwidHJ1ZVwiPnt7YnV0dG9uVGV4dH19PC9wdHItYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGlhbG9nPiJdfQ==
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHRyLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXR0ZXIvbmd4LWNvbXBvbmVudHMvc3JjL2xpYi9kaWFsb2cvcHRyLWRpYWxvZy9wdHItZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvbGliL2RpYWxvZy9wdHItZGlhbG9nL3B0ci1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3RJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQVkzRSxNQUFNLE9BQU8sa0JBQWtCO0lBRUQsYUFBYSxDQUFpQztJQUVqRSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNiLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDdkIsV0FBVyxHQUFxQyxRQUFRLENBQUM7SUFFeEQsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO0lBRXRELGVBQWU7UUFDYixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO3VHQTFCVSxrQkFBa0I7MkZBQWxCLGtCQUFrQiwyVENiL0IsOHNCQWlCQSx3bUNEVkksa0JBQWtCOzsyRkFNVCxrQkFBa0I7a0JBVjlCLFNBQVM7K0JBQ0UsWUFBWSxjQUNWLElBQUksV0FDUDt3QkFDUCxrQkFBa0I7cUJBQ25CLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUluQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBRWpCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFB0ckJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3B0ci1idXR0b24vcHRyLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwdHItZGlhbG9nJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIFB0ckJ1dHRvbkNvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3B0ci1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1wiLi9wdHItZGlhbG9nLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQdHJEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZGlhbG9nRWxlbWVudCcpIGRpYWxvZ0VsZW1lbnQhOiBFbGVtZW50UmVmPEhUTUxEaWFsb2dFbGVtZW50PjtcclxuXHJcbiAgQElucHV0KCkgdGl0bGUgPSAnJztcclxuICBASW5wdXQoKSBtZXNzYWdlID0gJyc7XHJcbiAgQElucHV0KCkgYnV0dG9uVGV4dCA9ICdDb25maXJtJztcclxuICBASW5wdXQoKSBidXR0b25TdHlsZTogJ25vcm1hbCcgfCAnZXJyb3InIHwgJ3NlY29uZGFyeScgPSAnbm9ybWFsJztcclxuXHJcbiAgQE91dHB1dCgpIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbiB8IG51bGw+KCk7XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuZGlhbG9nRWxlbWVudC5uYXRpdmVFbGVtZW50LnNob3dNb2RhbCgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0VsZW1lbnQubmF0aXZlRWxlbWVudC5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybSgpIHtcclxuICAgIHRoaXMuY2xvc2VkLmVtaXQodHJ1ZSk7XHJcbiAgICB0aGlzLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBvbkNsb3NlKCkge1xyXG4gICAgdGhpcy5jbG9zZWQuZW1pdChudWxsKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaWFsb2cgI2RpYWxvZ0VsZW1lbnQgY2xhc3M9XCJwdHItbW9kYWxcIiAoY2xvc2UpPVwib25DbG9zZSgpXCI+XHJcbiAgPGRpdiBjbGFzcz1cInB0ci1tb2RhbF9fY29udGVudFwiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJwdHItbW9kYWxfX2hlYWRlclwiPlxyXG4gICAgICA8aDIgY2xhc3M9XCJwdHItbW9kYWxfX3RpdGxlXCI+e3t0aXRsZX19PC9oMj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInB0ci1tb2RhbF9fY2xvc2VcIiAoY2xpY2spPVwiY2xvc2UoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZSBkaWFsb2dcIj4mdGltZXM7PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8cD57eyBtZXNzYWdlIH19PC9wPlxyXG4gICAgPGRpdiBjbGFzcz1cInB0ci1tb2RhbF9fYWN0aW9uc1wiPlxyXG4gICAgICA8cHRyLWJ1dHRvbiBidXR0b25TdHlsZT1cInNlY29uZGFyeVwiIChjbGlja2VkKT1cImNsb3NlKClcIiBbaXNTbWFsbFNpemVdPVwidHJ1ZVwiPkNhbmNlbDwvcHRyLWJ1dHRvbj5cclxuICAgICAgPHB0ci1idXR0b24gY2xhc3M9XCJtbC1hdXRvXCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvblN0eWxlXCIgKGNsaWNrZWQpPVwiY29uZmlybSgpXCJcclxuICAgICAgICBbaXNTbWFsbFNpemVdPVwidHJ1ZVwiPnt7YnV0dG9uVGV4dH19PC9wdHItYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG48L2RpYWxvZz5cclxuIl19
@@ -63,9 +63,9 @@ export class PtrFormComponent {
63
63
  }
64
64
  getFieldPlaceholder(field) {
65
65
  if (!field.conditional?.placeholder)
66
- return field.placeholder || '';
66
+ return field.placeholder || null;
67
67
  const conditionalPlaceholder = this.evaluateConditionalRules(field.conditional.placeholder);
68
- return conditionalPlaceholder || field.placeholder || '';
68
+ return conditionalPlaceholder || field.placeholder || null;
69
69
  }
70
70
  evaluateConditionalRules(rules) {
71
71
  for (const rule of rules) {
@@ -77,7 +77,7 @@ export class PtrFormComponent {
77
77
  return false;
78
78
  }
79
79
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
80
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: PtrFormComponent, isStandalone: true, selector: "ptr-form", inputs: { config: "config", loading: "loading", error: "error" }, outputs: { formSubmit: "formSubmit", formGroupCreated: "formGroupCreated" }, ngImport: i0, template: "<div [class]=\"'gform_wrapper ' + config.formClass\">\r\n\r\n @if (error) {\r\n <div class=\"gform_validation_errors\">\r\n <h2 class=\"gform_submission_error hide_summary\">{{error}}</h2>\r\n </div>\r\n }\r\n\r\n @if (config.title) {\r\n <div class=\"gform_heading\">\r\n <h2 class=\"gform_title\">{{ config.title }}</h2>\r\n </div>\r\n }\r\n\r\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <div class=\"gform_fields\">\r\n\r\n @for (field of config.fields; track field.name) {\r\n @if(isFieldVisible(field)) {\r\n\r\n <div class=\"gfield gfield--width-{{field.size}}\" [class.gform_hidden]=\"field.type === 'hidden'\"\r\n [class.gfield_error]=\"formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched\">\r\n\r\n @switch (field.type) {\r\n @case ('textarea') {\r\n <label class=\"gfield_label gform-field-label\" [for]=\"field.name\">{{ getFieldLabel(field) }}</label>\r\n @if(field.description){\r\n <div class=\"gfield_description\">{{field.description}}</div>\r\n }\r\n <div class=\"gfield--input-wrapper ginput_container\">\r\n <textarea [id]=\"field.name\" [formControlName]=\"field.name\" [attr.placeholder]=\"getFieldPlaceholder(field)\"></textarea>\r\n </div>\r\n }\r\n @case ('select') {\r\n <ptr-select [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [options]=\"field.options\"\r\n [placeholder]=\"getFieldPlaceholder(field)\"></ptr-select>\r\n }\r\n @default {\r\n <ptr-input [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [type]=\"field.type\"\r\n [placeholder]=\"getFieldPlaceholder(field)\" [autocomplete]=\"field.autocomplete\" [searchFn]=\"field.searchFn\"\r\n [dialogHelpText]=\"field.dialogHelpText\" />\r\n }\r\n }\r\n\r\n @if (formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n @if (formGroup.get(field.name)?.errors?.['required']) {\r\n This field is required.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['email']) {\r\n Please enter a valid email address.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['minlength']) {\r\n Minimum length is {{ formGroup.get(field.name)?.errors?.['minlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['maxlength']) {\r\n Maximum length is {{ formGroup.get(field.name)?.errors?.['maxlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['pattern']) {\r\n Please match the required format.\r\n }\r\n </div>\r\n }\r\n @if (field.validationMessages && formGroup.invalid && !formGroup.get(field.name)?.invalid &&\r\n formGroup.get(field.name)?.touched) {\r\n @for (error of formGroup.errors | keyvalue; track error) {\r\n @if (field.validationMessages[error.key]) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n {{ field.validationMessages[error.key] }}\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n @if(config.submitText){\r\n <div class=\"gform_footer\">\r\n <ptr-button buttonType=\"submit\" [isDisabled]=\"loading || !formGroup.valid\">{{config.submitText}}</ptr-button>\r\n </div>\r\n }\r\n\r\n </form>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: PtrButtonComponent, selector: "ptr-button", inputs: ["buttonStyle", "buttonType", "isDisabled", "hrefLink", "routerLinkValue", "extraClasses", "isSmallSize", "isIconButton", "ariaLabel"], outputs: ["clicked"] }, { kind: "component", type: PtrSelectComponent, selector: "ptr-select", inputs: ["options", "showSearch", "placeholder", "label", "description"], outputs: ["selectionChange"] }, { kind: "component", type: PtrInputComponent, selector: "ptr-input", inputs: ["type", "label", "placeholder", "autocomplete", "description", "dialogHelpText", "searchFn"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
80
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: PtrFormComponent, isStandalone: true, selector: "ptr-form", inputs: { config: "config", loading: "loading", error: "error" }, outputs: { formSubmit: "formSubmit", formGroupCreated: "formGroupCreated" }, ngImport: i0, template: "<div [class]=\"'gform_wrapper ' + config.formClass\">\r\n\r\n @if (error) {\r\n <div class=\"gform_validation_errors\">\r\n <h2 class=\"gform_submission_error hide_summary\">{{error}}</h2>\r\n </div>\r\n }\r\n\r\n @if (config.title) {\r\n <div class=\"gform_heading\">\r\n <h2 class=\"gform_title\">{{ config.title }}</h2>\r\n </div>\r\n }\r\n\r\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <div class=\"gform_fields\">\r\n\r\n @for (field of config.fields; track field.name) {\r\n @if(isFieldVisible(field)) {\r\n\r\n <div class=\"gfield gfield--width-{{field.size}}\" [class.gform_hidden]=\"field.type === 'hidden'\"\r\n [class.gfield_error]=\"formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched\">\r\n\r\n @switch (field.type) {\r\n @case ('textarea') {\r\n <label class=\"gfield_label gform-field-label\" [for]=\"field.name\">{{ getFieldLabel(field) }}</label>\r\n @if(field.description){\r\n <div class=\"gfield_description\">{{field.description}}</div>\r\n }\r\n <div class=\"gfield--input-wrapper ginput_container\">\r\n <textarea [id]=\"field.name\" [formControlName]=\"field.name\" [attr.placeholder]=\"getFieldPlaceholder(field)\"></textarea>\r\n </div>\r\n }\r\n @case ('select') {\r\n <ptr-select [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [options]=\"field.options\"\r\n [placeholder]=\"getFieldPlaceholder(field)\" [labelPosition]=\"config.labelPosition\" />\r\n }\r\n @default {\r\n <ptr-input [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [type]=\"field.type\"\r\n [placeholder]=\"getFieldPlaceholder(field)\" [autocomplete]=\"field.autocomplete\" [searchFn]=\"field.searchFn\"\r\n [dialogHelpText]=\"field.dialogHelpText\" [labelPosition]=\"config.labelPosition\" />\r\n }\r\n }\r\n\r\n @if (formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n @if (formGroup.get(field.name)?.errors?.['required']) {\r\n This field is required.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['email']) {\r\n Please enter a valid email address.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['minlength']) {\r\n Minimum length is {{ formGroup.get(field.name)?.errors?.['minlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['maxlength']) {\r\n Maximum length is {{ formGroup.get(field.name)?.errors?.['maxlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['pattern']) {\r\n Please match the required format.\r\n }\r\n </div>\r\n }\r\n @if (field.validationMessages && formGroup.invalid && !formGroup.get(field.name)?.invalid &&\r\n formGroup.get(field.name)?.touched) {\r\n @for (error of formGroup.errors | keyvalue; track error) {\r\n @if (field.validationMessages[error.key]) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n {{ field.validationMessages[error.key] }}\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n @if(config.submitText){\r\n <div class=\"gform_footer\">\r\n <ptr-button buttonType=\"submit\" [isDisabled]=\"loading || !formGroup.valid\">{{config.submitText}}</ptr-button>\r\n </div>\r\n }\r\n\r\n </form>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: PtrButtonComponent, selector: "ptr-button", inputs: ["buttonStyle", "buttonType", "isDisabled", "hrefLink", "routerLinkValue", "extraClasses", "isSmallSize", "isIconButton", "ariaLabel"], outputs: ["clicked"] }, { kind: "component", type: PtrSelectComponent, selector: "ptr-select", inputs: ["options", "showSearch", "placeholder", "label", "description", "labelPosition"], outputs: ["selectionChange"] }, { kind: "component", type: PtrInputComponent, selector: "ptr-input", inputs: ["type", "label", "placeholder", "autocomplete", "description", "dialogHelpText", "searchFn", "labelPosition"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
81
81
  }
82
82
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrFormComponent, decorators: [{
83
83
  type: Component,
@@ -87,7 +87,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
87
87
  PtrButtonComponent,
88
88
  PtrSelectComponent,
89
89
  PtrInputComponent
90
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"'gform_wrapper ' + config.formClass\">\r\n\r\n @if (error) {\r\n <div class=\"gform_validation_errors\">\r\n <h2 class=\"gform_submission_error hide_summary\">{{error}}</h2>\r\n </div>\r\n }\r\n\r\n @if (config.title) {\r\n <div class=\"gform_heading\">\r\n <h2 class=\"gform_title\">{{ config.title }}</h2>\r\n </div>\r\n }\r\n\r\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <div class=\"gform_fields\">\r\n\r\n @for (field of config.fields; track field.name) {\r\n @if(isFieldVisible(field)) {\r\n\r\n <div class=\"gfield gfield--width-{{field.size}}\" [class.gform_hidden]=\"field.type === 'hidden'\"\r\n [class.gfield_error]=\"formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched\">\r\n\r\n @switch (field.type) {\r\n @case ('textarea') {\r\n <label class=\"gfield_label gform-field-label\" [for]=\"field.name\">{{ getFieldLabel(field) }}</label>\r\n @if(field.description){\r\n <div class=\"gfield_description\">{{field.description}}</div>\r\n }\r\n <div class=\"gfield--input-wrapper ginput_container\">\r\n <textarea [id]=\"field.name\" [formControlName]=\"field.name\" [attr.placeholder]=\"getFieldPlaceholder(field)\"></textarea>\r\n </div>\r\n }\r\n @case ('select') {\r\n <ptr-select [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [options]=\"field.options\"\r\n [placeholder]=\"getFieldPlaceholder(field)\"></ptr-select>\r\n }\r\n @default {\r\n <ptr-input [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [type]=\"field.type\"\r\n [placeholder]=\"getFieldPlaceholder(field)\" [autocomplete]=\"field.autocomplete\" [searchFn]=\"field.searchFn\"\r\n [dialogHelpText]=\"field.dialogHelpText\" />\r\n }\r\n }\r\n\r\n @if (formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n @if (formGroup.get(field.name)?.errors?.['required']) {\r\n This field is required.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['email']) {\r\n Please enter a valid email address.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['minlength']) {\r\n Minimum length is {{ formGroup.get(field.name)?.errors?.['minlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['maxlength']) {\r\n Maximum length is {{ formGroup.get(field.name)?.errors?.['maxlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['pattern']) {\r\n Please match the required format.\r\n }\r\n </div>\r\n }\r\n @if (field.validationMessages && formGroup.invalid && !formGroup.get(field.name)?.invalid &&\r\n formGroup.get(field.name)?.touched) {\r\n @for (error of formGroup.errors | keyvalue; track error) {\r\n @if (field.validationMessages[error.key]) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n {{ field.validationMessages[error.key] }}\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n @if(config.submitText){\r\n <div class=\"gform_footer\">\r\n <ptr-button buttonType=\"submit\" [isDisabled]=\"loading || !formGroup.valid\">{{config.submitText}}</ptr-button>\r\n </div>\r\n }\r\n\r\n </form>\r\n</div>\r\n" }]
90
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"'gform_wrapper ' + config.formClass\">\r\n\r\n @if (error) {\r\n <div class=\"gform_validation_errors\">\r\n <h2 class=\"gform_submission_error hide_summary\">{{error}}</h2>\r\n </div>\r\n }\r\n\r\n @if (config.title) {\r\n <div class=\"gform_heading\">\r\n <h2 class=\"gform_title\">{{ config.title }}</h2>\r\n </div>\r\n }\r\n\r\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <div class=\"gform_fields\">\r\n\r\n @for (field of config.fields; track field.name) {\r\n @if(isFieldVisible(field)) {\r\n\r\n <div class=\"gfield gfield--width-{{field.size}}\" [class.gform_hidden]=\"field.type === 'hidden'\"\r\n [class.gfield_error]=\"formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched\">\r\n\r\n @switch (field.type) {\r\n @case ('textarea') {\r\n <label class=\"gfield_label gform-field-label\" [for]=\"field.name\">{{ getFieldLabel(field) }}</label>\r\n @if(field.description){\r\n <div class=\"gfield_description\">{{field.description}}</div>\r\n }\r\n <div class=\"gfield--input-wrapper ginput_container\">\r\n <textarea [id]=\"field.name\" [formControlName]=\"field.name\" [attr.placeholder]=\"getFieldPlaceholder(field)\"></textarea>\r\n </div>\r\n }\r\n @case ('select') {\r\n <ptr-select [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [options]=\"field.options\"\r\n [placeholder]=\"getFieldPlaceholder(field)\" [labelPosition]=\"config.labelPosition\" />\r\n }\r\n @default {\r\n <ptr-input [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [type]=\"field.type\"\r\n [placeholder]=\"getFieldPlaceholder(field)\" [autocomplete]=\"field.autocomplete\" [searchFn]=\"field.searchFn\"\r\n [dialogHelpText]=\"field.dialogHelpText\" [labelPosition]=\"config.labelPosition\" />\r\n }\r\n }\r\n\r\n @if (formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n @if (formGroup.get(field.name)?.errors?.['required']) {\r\n This field is required.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['email']) {\r\n Please enter a valid email address.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['minlength']) {\r\n Minimum length is {{ formGroup.get(field.name)?.errors?.['minlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['maxlength']) {\r\n Maximum length is {{ formGroup.get(field.name)?.errors?.['maxlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['pattern']) {\r\n Please match the required format.\r\n }\r\n </div>\r\n }\r\n @if (field.validationMessages && formGroup.invalid && !formGroup.get(field.name)?.invalid &&\r\n formGroup.get(field.name)?.touched) {\r\n @for (error of formGroup.errors | keyvalue; track error) {\r\n @if (field.validationMessages[error.key]) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n {{ field.validationMessages[error.key] }}\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n @if(config.submitText){\r\n <div class=\"gform_footer\">\r\n <ptr-button buttonType=\"submit\" [isDisabled]=\"loading || !formGroup.valid\">{{config.submitText}}</ptr-button>\r\n </div>\r\n }\r\n\r\n </form>\r\n</div>\r\n" }]
91
91
  }], propDecorators: { config: [{
92
92
  type: Input
93
93
  }], loading: [{
@@ -99,4 +99,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
99
99
  }], formGroupCreated: [{
100
100
  type: Output
101
101
  }] } });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXR0ZXIvbmd4LWNvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvZm9ybXMvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0ksT0FBTyxFQUFFLFdBQVcsRUFBYSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBaUJoRSxNQUFNLE9BQU8sZ0JBQWdCO0lBRWxCLE1BQU0sQ0FBaUI7SUFDdkIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixLQUFLLEdBQWtCLElBQUksQ0FBQztJQUVyQyw4REFBOEQ7SUFDcEQsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDckMsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztJQUUzRCxTQUFTLENBQWE7SUFFZCxFQUFFLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FB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IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFB0ckNvbmRpdGlvbmFsUnVsZSwgUHRyRm9ybUNvbmZpZywgUHRyRm9ybUZpZWxkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFB0ckJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3B0ci1idXR0b24vcHRyLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQdHJTZWxlY3RDb21wb25lbnQgfSBmcm9tIFwiLi4vaW5wdXQvc2VsZWN0L3NlbGVjdC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUHRySW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9pbnB1dC9wdHItaW5wdXQvcHRyLWlucHV0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncHRyLWZvcm0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuXHJcbiAgICBQdHJCdXR0b25Db21wb25lbnQsXHJcblxyXG4gICAgUHRyU2VsZWN0Q29tcG9uZW50LFxyXG4gICAgUHRySW5wdXRDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHRyRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IFB0ckZvcm1Db25maWc7XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBAT3V0cHV0KCkgZm9ybVN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtR3JvdXBDcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtR3JvdXA+KCk7XHJcblxyXG4gIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuXHJcbiAgcHJpdmF0ZSBmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XHJcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmJ1aWxkRm9ybSgpO1xyXG4gICAgdGhpcy5mb3JtR3JvdXBDcmVhdGVkLmVtaXQodGhpcy5mb3JtR3JvdXApO1xyXG4gICAgdGhpcy5zZXR1cENvbmRpdGlvbmFsTG9naWMoKTtcclxuICB9XHJcblxyXG4gIGJ1aWxkRm9ybSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGdyb3VwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xyXG4gICAgdGhpcy5jb25maWcuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBncm91cFtmaWVsZC5uYW1lXSA9IFtmaWVsZC52YWx1ZSB8fCAnJywgZmllbGQudmFsaWRhdG9ycyB8fCBbXV07XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoZ3JvdXAsIHRoaXMuY29uZmlnLmZvcm1WYWxpZGF0b3JzID8geyB2YWxpZGF0b3JzOiB0aGlzLmNvbmZpZy5mb3JtVmFsaWRhdG9ycyB9IDogbnVsbCk7XHJcbiAgfVxyXG5cclxuICBvblN1Ym1pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICB0aGlzLmZvcm1TdWJtaXQuZW1pdCh0aGlzLmZvcm1Hcm91cC52YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRGb3JtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAucmVzZXQoKTtcclxuICAgIHRoaXMuY29uZmlnLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKTtcclxuICAgICAgY29udHJvbD8uc2V0VmFsdWUoZmllbGQudmFsdWUgfHwgJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvLyBDb25kaXRpb25hbCBsb2dpY1xyXG4gIHNldHVwQ29uZGl0aW9uYWxMb2dpYygpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxyXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNGaWVsZFZpc2libGUoZmllbGQ6IFB0ckZvcm1GaWVsZCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFmaWVsZC5jb25kaXRpb25hbD8uc2hvd1doZW4pIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXMuZXZhbHVhdGVDb25kaXRpb25hbFJ1bGVzKGZpZWxkLmNvbmRpdGlvbmFsLnNob3dXaGVuKSBhcyBib29sZWFuO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGRMYWJlbChmaWVsZDogUHRyRm9ybUZpZWxkKTogc3RyaW5nIHtcclxuICAgIGlmICghZmllbGQuY29uZGl0aW9uYWw/LmxhYmVsKSByZXR1cm4gZmllbGQubGFiZWw7XHJcbiAgICBjb25zdCBjb25kaXRpb25hbExhYmVsID0gdGhpcy5ldmFsdWF0ZUNvbmRpdGlvbmFsUnVsZXMoZmllbGQuY29uZGl0aW9uYWwubGFiZWwpO1xyXG4gICAgcmV0dXJuIGNvbmRpdGlvbmFsTGFiZWwgYXMgc3RyaW5nIHx8IGZpZWxkLmxhYmVsO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGRQbGFjZWhvbGRlcihmaWVsZDogUHRyRm9ybUZpZWxkKTogc3RyaW5nIHtcclxuICAgIGlmICghZmllbGQuY29uZGl0aW9uYWw/LnBsYWNlaG9sZGVyKSByZXR1cm4gZmllbGQucGxhY2Vob2xkZXIgfHwgJyc7XHJcbiAgICBjb25zdCBjb25kaXRpb25hbFBsYWNlaG9sZGVyID0gdGhpcy5ldmFsdWF0ZUNvbmRpdGlvbmFsUnVsZXMoZmllbGQuY29uZGl0aW9uYWwucGxhY2Vob2xkZXIpO1xyXG4gICAgcmV0dXJuIGNvbmRpdGlvbmFsUGxhY2Vob2xkZXIgYXMgc3RyaW5nIHx8IGZpZWxkLnBsYWNlaG9sZGVyIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsdWF0ZUNvbmRpdGlvbmFsUnVsZXMocnVsZXM6IFB0ckNvbmRpdGlvbmFsUnVsZVtdKTogc3RyaW5nIHwgYm9vbGVhbiB7XHJcbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcclxuICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldChydWxlLmZpZWxkKT8udmFsdWU7XHJcbiAgICAgIGlmIChmaWVsZFZhbHVlID09PSBydWxlLnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHJ1bGUucmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IFtjbGFzc109XCInZ2Zvcm1fd3JhcHBlciAnICsgY29uZmlnLmZvcm1DbGFzc1wiPlxyXG5cclxuICBAaWYgKGVycm9yKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcnNcIj5cclxuICAgICAgPGgyIGNsYXNzPVwiZ2Zvcm1fc3VibWlzc2lvbl9lcnJvciBoaWRlX3N1bW1hcnlcIj57e2Vycm9yfX08L2gyPlxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG5cclxuICBAaWYgKGNvbmZpZy50aXRsZSkge1xyXG4gICAgPGRpdiBjbGFzcz1cImdmb3JtX2hlYWRpbmdcIj5cclxuICAgICAgPGgyIGNsYXNzPVwiZ2Zvcm1fdGl0bGVcIj57eyBjb25maWcudGl0bGUgfX08L2gyPlxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG5cclxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImdmb3JtX2ZpZWxkc1wiPlxyXG5cclxuICAgICAgQGZvciAoZmllbGQgb2YgY29uZmlnLmZpZWxkczsgdHJhY2sgZmllbGQubmFtZSkge1xyXG4gICAgICAgIEBpZihpc0ZpZWxkVmlzaWJsZShmaWVsZCkpIHtcclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImdmaWVsZCBnZmllbGQtLXdpZHRoLXt7ZmllbGQuc2l6ZX19XCIgW2NsYXNzLmdmb3JtX2hpZGRlbl09XCJmaWVsZC50eXBlID09PSAnaGlkZGVuJ1wiXHJcbiAgICAgICAgICBbY2xhc3MuZ2ZpZWxkX2Vycm9yXT1cImZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmludmFsaWQgJiYgZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8udG91Y2hlZFwiPlxyXG5cclxuICAgICAgICAgIEBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcclxuICAgICAgICAgICAgQGNhc2UgKCd0ZXh0YXJlYScpIHtcclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnZmllbGRfbGFiZWwgZ2Zvcm0tZmllbGQtbGFiZWxcIiBbZm9yXT1cImZpZWxkLm5hbWVcIj57eyBnZXRGaWVsZExhYmVsKGZpZWxkKSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgQGlmKGZpZWxkLmRlc2NyaXB0aW9uKXtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnZmllbGRfZGVzY3JpcHRpb25cIj57e2ZpZWxkLmRlc2NyaXB0aW9ufX08L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdmaWVsZC0taW5wdXQtd3JhcHBlciBnaW5wdXRfY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgW2lkXT1cImZpZWxkLm5hbWVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLm5hbWVcIiBbYXR0ci5wbGFjZWhvbGRlcl09XCJnZXRGaWVsZFBsYWNlaG9sZGVyKGZpZWxkKVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQGNhc2UgKCdzZWxlY3QnKSB7XHJcbiAgICAgICAgICAgICAgPHB0ci1zZWxlY3QgW2xhYmVsXT1cImdldEZpZWxkTGFiZWwoZmllbGQpXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5uYW1lXCIgW29wdGlvbnNdPVwiZmllbGQub3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZ2V0RmllbGRQbGFjZWhvbGRlcihmaWVsZClcIj48L3B0ci1zZWxlY3Q+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQGRlZmF1bHQge1xyXG4gICAgICAgICAgICA8cHRyLWlucHV0IFtsYWJlbF09XCJnZXRGaWVsZExhYmVsKGZpZWxkKVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQubmFtZVwiIFt0eXBlXT1cImZpZWxkLnR5cGVcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRGaWVsZFBsYWNlaG9sZGVyKGZpZWxkKVwiIFthdXRvY29tcGxldGVdPVwiZmllbGQuYXV0b2NvbXBsZXRlXCIgW3NlYXJjaEZuXT1cImZpZWxkLnNlYXJjaEZuXCJcclxuICAgICAgICAgICAgICBbZGlhbG9nSGVscFRleHRdPVwiZmllbGQuZGlhbG9nSGVscFRleHRcIiAvPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgQGlmIChmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy5pbnZhbGlkICYmIGZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LnRvdWNoZWQpIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdmaWVsZF9kZXNjcmlwdGlvbiB2YWxpZGF0aW9uX21lc3NhZ2UgZ2ZpZWxkX3ZhbGlkYXRpb25fbWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgIEBpZiAoZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8uZXJyb3JzPy5bJ3JlcXVpcmVkJ10pIHtcclxuICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIEBpZiAoZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8uZXJyb3JzPy5bJ2VtYWlsJ10pIHtcclxuICAgICAgICAgICAgICAgIFBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIEBpZiAoZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8uZXJyb3JzPy5bJ21pbmxlbmd0aCddKSB7XHJcbiAgICAgICAgICAgICAgICBNaW5pbXVtIGxlbmd0aCBpcyB7eyBmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy5lcnJvcnM/LlsnbWlubGVuZ3RoJ10ucmVxdWlyZWRMZW5ndGggfX0gY2hhcmFjdGVycy5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgQGlmIChmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy5lcnJvcnM/LlsnbWF4bGVuZ3RoJ10pIHtcclxuICAgICAgICAgICAgICAgIE1heGltdW0gbGVuZ3RoIGlzIHt7IGZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmVycm9ycz8uWydtYXhsZW5ndGgnXS5yZXF1aXJlZExlbmd0aCB9fSBjaGFyYWN0ZXJzLlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAaWYgKGZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmVycm9ycz8uWydwYXR0ZXJuJ10pIHtcclxuICAgICAgICAgICAgICAgIFBsZWFzZSBtYXRjaCB0aGUgcmVxdWlyZWQgZm9ybWF0LlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBAaWYgKGZpZWxkLnZhbGlkYXRpb25NZXNzYWdlcyAmJiBmb3JtR3JvdXAuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8uaW52YWxpZCAmJlxyXG4gICAgICAgICAgZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8udG91Y2hlZCkge1xyXG4gICAgICAgICAgICBAZm9yIChlcnJvciBvZiBmb3JtR3JvdXAuZXJyb3JzIHwga2V5dmFsdWU7IHRyYWNrIGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgQGlmIChmaWVsZC52YWxpZGF0aW9uTWVzc2FnZXNbZXJyb3Iua2V5XSkge1xyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnZmllbGRfZGVzY3JpcHRpb24gdmFsaWRhdGlvbl9tZXNzYWdlIGdmaWVsZF92YWxpZGF0aW9uX21lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgIHt7IGZpZWxkLnZhbGlkYXRpb25NZXNzYWdlc1tlcnJvci5rZXldIH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICBAaWYoY29uZmlnLnN1Ym1pdFRleHQpe1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ2Zvcm1fZm9vdGVyXCI+XHJcbiAgICAgICAgPHB0ci1idXR0b24gYnV0dG9uVHlwZT1cInN1Ym1pdFwiIFtpc0Rpc2FibGVkXT1cImxvYWRpbmcgfHwgIWZvcm1Hcm91cC52YWxpZFwiPnt7Y29uZmlnLnN1Ym1pdFRleHR9fTwvcHRyLWJ1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcblxyXG4gIDwvZm9ybT5cclxuPC9kaXY+XHJcbiJdfQ==
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXR0ZXIvbmd4LWNvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvZm9ybXMvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0ksT0FBTyxFQUFFLFdBQVcsRUFBYSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBaUJoRSxNQUFNLE9BQU8sZ0JBQWdCO0lBRWxCLE1BQU0sQ0FBaUI7SUFDdkIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixLQUFLLEdBQWtCLElBQUksQ0FBQztJQUVyQyw4REFBOEQ7SUFDcEQsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDckMsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztJQUUzRCxTQUFTLENBQWE7SUFFZCxFQUFFLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FB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IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFB0ckNvbmRpdGlvbmFsUnVsZSwgUHRyRm9ybUNvbmZpZywgUHRyRm9ybUZpZWxkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFB0ckJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3B0ci1idXR0b24vcHRyLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQdHJTZWxlY3RDb21wb25lbnQgfSBmcm9tIFwiLi4vaW5wdXQvc2VsZWN0L3NlbGVjdC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUHRySW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9pbnB1dC9wdHItaW5wdXQvcHRyLWlucHV0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncHRyLWZvcm0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuXHJcbiAgICBQdHJCdXR0b25Db21wb25lbnQsXHJcblxyXG4gICAgUHRyU2VsZWN0Q29tcG9uZW50LFxyXG4gICAgUHRySW5wdXRDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHRyRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IFB0ckZvcm1Db25maWc7XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBAT3V0cHV0KCkgZm9ybVN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtR3JvdXBDcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtR3JvdXA+KCk7XHJcblxyXG4gIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuXHJcbiAgcHJpdmF0ZSBmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XHJcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmJ1aWxkRm9ybSgpO1xyXG4gICAgdGhpcy5mb3JtR3JvdXBDcmVhdGVkLmVtaXQodGhpcy5mb3JtR3JvdXApO1xyXG4gICAgdGhpcy5zZXR1cENvbmRpdGlvbmFsTG9naWMoKTtcclxuICB9XHJcblxyXG4gIGJ1aWxkRm9ybSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGdyb3VwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xyXG4gICAgdGhpcy5jb25maWcuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBncm91cFtmaWVsZC5uYW1lXSA9IFtmaWVsZC52YWx1ZSB8fCAnJywgZmllbGQudmFsaWRhdG9ycyB8fCBbXV07XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoZ3JvdXAsIHRoaXMuY29uZmlnLmZvcm1WYWxpZGF0b3JzID8geyB2YWxpZGF0b3JzOiB0aGlzLmNvbmZpZy5mb3JtVmFsaWRhdG9ycyB9IDogbnVsbCk7XHJcbiAgfVxyXG5cclxuICBvblN1Ym1pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICB0aGlzLmZvcm1TdWJtaXQuZW1pdCh0aGlzLmZvcm1Hcm91cC52YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRGb3JtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAucmVzZXQoKTtcclxuICAgIHRoaXMuY29uZmlnLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKTtcclxuICAgICAgY29udHJvbD8uc2V0VmFsdWUoZmllbGQudmFsdWUgfHwgJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvLyBDb25kaXRpb25hbCBsb2dpY1xyXG4gIHNldHVwQ29uZGl0aW9uYWxMb2dpYygpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxyXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNGaWVsZFZpc2libGUoZmllbGQ6IFB0ckZvcm1GaWVsZCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFmaWVsZC5jb25kaXRpb25hbD8uc2hvd1doZW4pIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXMuZXZhbHVhdGVDb25kaXRpb25hbFJ1bGVzKGZpZWxkLmNvbmRpdGlvbmFsLnNob3dXaGVuKSBhcyBib29sZWFuO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGRMYWJlbChmaWVsZDogUHRyRm9ybUZpZWxkKTogc3RyaW5nIHtcclxuICAgIGlmICghZmllbGQuY29uZGl0aW9uYWw/LmxhYmVsKSByZXR1cm4gZmllbGQubGFiZWw7XHJcbiAgICBjb25zdCBjb25kaXRpb25hbExhYmVsID0gdGhpcy5ldmFsdWF0ZUNvbmRpdGlvbmFsUnVsZXMoZmllbGQuY29uZGl0aW9uYWwubGFiZWwpO1xyXG4gICAgcmV0dXJuIGNvbmRpdGlvbmFsTGFiZWwgYXMgc3RyaW5nIHx8IGZpZWxkLmxhYmVsO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGRQbGFjZWhvbGRlcihmaWVsZDogUHRyRm9ybUZpZWxkKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAoIWZpZWxkLmNvbmRpdGlvbmFsPy5wbGFjZWhvbGRlcikgcmV0dXJuIGZpZWxkLnBsYWNlaG9sZGVyIHx8IG51bGw7XHJcbiAgICBjb25zdCBjb25kaXRpb25hbFBsYWNlaG9sZGVyID0gdGhpcy5ldmFsdWF0ZUNvbmRpdGlvbmFsUnVsZXMoZmllbGQuY29uZGl0aW9uYWwucGxhY2Vob2xkZXIpO1xyXG4gICAgcmV0dXJuIGNvbmRpdGlvbmFsUGxhY2Vob2xkZXIgYXMgc3RyaW5nIHx8IGZpZWxkLnBsYWNlaG9sZGVyIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWx1YXRlQ29uZGl0aW9uYWxSdWxlcyhydWxlczogUHRyQ29uZGl0aW9uYWxSdWxlW10pOiBzdHJpbmcgfCBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xyXG4gICAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHJ1bGUuZmllbGQpPy52YWx1ZTtcclxuICAgICAgaWYgKGZpZWxkVmFsdWUgPT09IHJ1bGUudmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gcnVsZS5yZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgW2NsYXNzXT1cIidnZm9ybV93cmFwcGVyICcgKyBjb25maWcuZm9ybUNsYXNzXCI+XHJcblxyXG4gIEBpZiAoZXJyb3IpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJnZm9ybV92YWxpZGF0aW9uX2Vycm9yc1wiPlxyXG4gICAgICA8aDIgY2xhc3M9XCJnZm9ybV9zdWJtaXNzaW9uX2Vycm9yIGhpZGVfc3VtbWFyeVwiPnt7ZXJyb3J9fTwvaDI+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcblxyXG4gIEBpZiAoY29uZmlnLnRpdGxlKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ2Zvcm1faGVhZGluZ1wiPlxyXG4gICAgICA8aDIgY2xhc3M9XCJnZm9ybV90aXRsZVwiPnt7IGNvbmZpZy50aXRsZSB9fTwvaDI+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcblxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZ2Zvcm1fZmllbGRzXCI+XHJcblxyXG4gICAgICBAZm9yIChmaWVsZCBvZiBjb25maWcuZmllbGRzOyB0cmFjayBmaWVsZC5uYW1lKSB7XHJcbiAgICAgICAgQGlmKGlzRmllbGRWaXNpYmxlKGZpZWxkKSkge1xyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2ZpZWxkIGdmaWVsZC0td2lkdGgte3tmaWVsZC5zaXplfX1cIiBbY2xhc3MuZ2Zvcm1faGlkZGVuXT1cImZpZWxkLnR5cGUgPT09ICdoaWRkZW4nXCJcclxuICAgICAgICAgIFtjbGFzcy5nZmllbGRfZXJyb3JdPVwiZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8uaW52YWxpZCAmJiBmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy50b3VjaGVkXCI+XHJcblxyXG4gICAgICAgICAgQHN3aXRjaCAoZmllbGQudHlwZSkge1xyXG4gICAgICAgICAgICBAY2FzZSAoJ3RleHRhcmVhJykge1xyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdmaWVsZF9sYWJlbCBnZm9ybS1maWVsZC1sYWJlbFwiIFtmb3JdPVwiZmllbGQubmFtZVwiPnt7IGdldEZpZWxkTGFiZWwoZmllbGQpIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICBAaWYoZmllbGQuZGVzY3JpcHRpb24pe1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdmaWVsZF9kZXNjcmlwdGlvblwiPnt7ZmllbGQuZGVzY3JpcHRpb259fTwvZGl2PlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2ZpZWxkLS1pbnB1dC13cmFwcGVyIGdpbnB1dF9jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBbaWRdPVwiZmllbGQubmFtZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQubmFtZVwiIFthdHRyLnBsYWNlaG9sZGVyXT1cImdldEZpZWxkUGxhY2Vob2xkZXIoZmllbGQpXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAY2FzZSAoJ3NlbGVjdCcpIHtcclxuICAgICAgICAgICAgICA8cHRyLXNlbGVjdCBbbGFiZWxdPVwiZ2V0RmllbGRMYWJlbChmaWVsZClcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLm5hbWVcIiBbb3B0aW9uc109XCJmaWVsZC5vcHRpb25zXCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRGaWVsZFBsYWNlaG9sZGVyKGZpZWxkKVwiIFtsYWJlbFBvc2l0aW9uXT1cImNvbmZpZy5sYWJlbFBvc2l0aW9uXCIgLz5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAZGVmYXVsdCB7XHJcbiAgICAgICAgICAgIDxwdHItaW5wdXQgW2xhYmVsXT1cImdldEZpZWxkTGFiZWwoZmllbGQpXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5uYW1lXCIgW3R5cGVdPVwiZmllbGQudHlwZVwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdldEZpZWxkUGxhY2Vob2xkZXIoZmllbGQpXCIgW2F1dG9jb21wbGV0ZV09XCJmaWVsZC5hdXRvY29tcGxldGVcIiBbc2VhcmNoRm5dPVwiZmllbGQuc2VhcmNoRm5cIlxyXG4gICAgICAgICAgICAgIFtkaWFsb2dIZWxwVGV4dF09XCJmaWVsZC5kaWFsb2dIZWxwVGV4dFwiIFtsYWJlbFBvc2l0aW9uXT1cImNvbmZpZy5sYWJlbFBvc2l0aW9uXCIgLz5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIEBpZiAoZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8uaW52YWxpZCAmJiBmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy50b3VjaGVkKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnZmllbGRfZGVzY3JpcHRpb24gdmFsaWRhdGlvbl9tZXNzYWdlIGdmaWVsZF92YWxpZGF0aW9uX21lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICBAaWYgKGZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmVycm9ycz8uWydyZXF1aXJlZCddKSB7XHJcbiAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAaWYgKGZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmVycm9ycz8uWydlbWFpbCddKSB7XHJcbiAgICAgICAgICAgICAgICBQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAaWYgKGZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmVycm9ycz8uWydtaW5sZW5ndGgnXSkge1xyXG4gICAgICAgICAgICAgICAgTWluaW11bSBsZW5ndGggaXMge3sgZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8uZXJyb3JzPy5bJ21pbmxlbmd0aCddLnJlcXVpcmVkTGVuZ3RoIH19IGNoYXJhY3RlcnMuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIEBpZiAoZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8uZXJyb3JzPy5bJ21heGxlbmd0aCddKSB7XHJcbiAgICAgICAgICAgICAgICBNYXhpbXVtIGxlbmd0aCBpcyB7eyBmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy5lcnJvcnM/LlsnbWF4bGVuZ3RoJ10ucmVxdWlyZWRMZW5ndGggfX0gY2hhcmFjdGVycy5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgQGlmIChmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy5lcnJvcnM/LlsncGF0dGVybiddKSB7XHJcbiAgICAgICAgICAgICAgICBQbGVhc2UgbWF0Y2ggdGhlIHJlcXVpcmVkIGZvcm1hdC5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgQGlmIChmaWVsZC52YWxpZGF0aW9uTWVzc2FnZXMgJiYgZm9ybUdyb3VwLmludmFsaWQgJiYgIWZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmludmFsaWQgJiZcclxuICAgICAgICAgIGZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LnRvdWNoZWQpIHtcclxuICAgICAgICAgICAgQGZvciAoZXJyb3Igb2YgZm9ybUdyb3VwLmVycm9ycyB8IGtleXZhbHVlOyB0cmFjayBlcnJvcikge1xyXG4gICAgICAgICAgICAgIEBpZiAoZmllbGQudmFsaWRhdGlvbk1lc3NhZ2VzW2Vycm9yLmtleV0pIHtcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2ZpZWxkX2Rlc2NyaXB0aW9uIHZhbGlkYXRpb25fbWVzc2FnZSBnZmllbGRfdmFsaWRhdGlvbl9tZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBmaWVsZC52YWxpZGF0aW9uTWVzc2FnZXNbZXJyb3Iua2V5XSB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgQGlmKGNvbmZpZy5zdWJtaXRUZXh0KXtcclxuICAgICAgPGRpdiBjbGFzcz1cImdmb3JtX2Zvb3RlclwiPlxyXG4gICAgICAgIDxwdHItYnV0dG9uIGJ1dHRvblR5cGU9XCJzdWJtaXRcIiBbaXNEaXNhYmxlZF09XCJsb2FkaW5nIHx8ICFmb3JtR3JvdXAudmFsaWRcIj57e2NvbmZpZy5zdWJtaXRUZXh0fX08L3B0ci1idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICA8L2Zvcm0+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -14,6 +14,7 @@ export class PtrInputComponent {
14
14
  description = '';
15
15
  dialogHelpText = '';
16
16
  searchFn;
17
+ labelPosition = 'top';
17
18
  input;
18
19
  dialogList;
19
20
  componentId = Math.random().toString(36).substring(2);
@@ -26,8 +27,10 @@ export class PtrInputComponent {
26
27
  onChange = () => { };
27
28
  onTouched = () => { };
28
29
  onDocumentClick(event) {
29
- if (!this.dialogList.dialog.nativeElement.contains(event.target) && this.dialogList.isOpen()) {
30
- this.dialogList.closeDialog();
30
+ if (this.searchFn) {
31
+ if (!this.dialogList?.dialog.nativeElement.contains(event.target) && this.dialogList?.isOpen()) {
32
+ this.dialogList.closeDialog();
33
+ }
31
34
  }
32
35
  }
33
36
  ngOnInit() {
@@ -85,13 +88,13 @@ export class PtrInputComponent {
85
88
  }
86
89
  }
87
90
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
88
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: PtrInputComponent, isStandalone: true, selector: "ptr-input", inputs: { type: "type", label: "label", placeholder: "placeholder", autocomplete: "autocomplete", description: "description", dialogHelpText: "dialogHelpText", searchFn: "searchFn" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, providers: [
91
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: PtrInputComponent, isStandalone: true, selector: "ptr-input", inputs: { type: "type", label: "label", placeholder: "placeholder", autocomplete: "autocomplete", description: "description", dialogHelpText: "dialogHelpText", searchFn: "searchFn", labelPosition: "labelPosition" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, providers: [
89
92
  {
90
93
  provide: NG_VALUE_ACCESSOR,
91
94
  useExisting: forwardRef(() => PtrInputComponent),
92
95
  multi: true
93
96
  }
94
- ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "dialogList", first: true, predicate: ["dialogList"], descendants: true }], ngImport: i0, template: "<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\">{{ label }}</label>\r\n@if(description){\r\n <div class=\"gfield_description\">{{description}}</div>\r\n}\r\n<div class=\"gfield--input-wrapper ginput_container\">\r\n\r\n <input #input [id]=\"inputId\" [type]=\"type\" [attr.autocomplete]=\"autocomplete || null\"\r\n [attr.placeholder]=\"placeholder || null\" [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" />\r\n\r\n <ptr-dialog-list #dialogList [options]=\"searchResultOptions()\" (selectionChange)=\"onOptionSelected($event)\"\r\n [dialogTitle]=\"dialogHelpText\" />\r\n\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: PtrDialogListComponent, selector: "ptr-dialog-list", inputs: ["options", "showSearch", "searchPlaceholder", "dialogTitle"], outputs: ["selectionChange", "dialogClosed", "searchTermChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
97
+ ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "dialogList", first: true, predicate: ["dialogList"], descendants: true }], ngImport: i0, template: "<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\r\n@if(description){\r\n <div class=\"gfield_description\">{{description}}</div>\r\n}\r\n<div class=\"gfield--input-wrapper ginput_container\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\r\n\r\n <input #input [id]=\"inputId\" [type]=\"type\" [attr.autocomplete]=\"autocomplete || null\"\r\n [attr.placeholder]=\"placeholder || null\" [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" />\r\n\r\n @if (labelPosition === 'inline') {\r\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\r\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\r\n <span>{{label}}</span>\r\n </legend>\r\n </fieldset>\r\n }\r\n\r\n @if (searchFn) {\r\n <ptr-dialog-list #dialogList [options]=\"searchResultOptions()\" (selectionChange)=\"onOptionSelected($event)\"\r\n [dialogTitle]=\"dialogHelpText\" />\r\n }\r\n\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: PtrDialogListComponent, selector: "ptr-dialog-list", inputs: ["options", "showSearch", "searchPlaceholder", "dialogTitle"], outputs: ["selectionChange", "dialogClosed", "searchTermChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
95
98
  }
96
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrInputComponent, decorators: [{
97
100
  type: Component,
@@ -106,7 +109,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
106
109
  useExisting: forwardRef(() => PtrInputComponent),
107
110
  multi: true
108
111
  }
109
- ], template: "<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\">{{ label }}</label>\r\n@if(description){\r\n <div class=\"gfield_description\">{{description}}</div>\r\n}\r\n<div class=\"gfield--input-wrapper ginput_container\">\r\n\r\n <input #input [id]=\"inputId\" [type]=\"type\" [attr.autocomplete]=\"autocomplete || null\"\r\n [attr.placeholder]=\"placeholder || null\" [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" />\r\n\r\n <ptr-dialog-list #dialogList [options]=\"searchResultOptions()\" (selectionChange)=\"onOptionSelected($event)\"\r\n [dialogTitle]=\"dialogHelpText\" />\r\n\r\n</div>\r\n" }]
112
+ ], template: "<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\r\n@if(description){\r\n <div class=\"gfield_description\">{{description}}</div>\r\n}\r\n<div class=\"gfield--input-wrapper ginput_container\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\r\n\r\n <input #input [id]=\"inputId\" [type]=\"type\" [attr.autocomplete]=\"autocomplete || null\"\r\n [attr.placeholder]=\"placeholder || null\" [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" />\r\n\r\n @if (labelPosition === 'inline') {\r\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\r\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\r\n <span>{{label}}</span>\r\n </legend>\r\n </fieldset>\r\n }\r\n\r\n @if (searchFn) {\r\n <ptr-dialog-list #dialogList [options]=\"searchResultOptions()\" (selectionChange)=\"onOptionSelected($event)\"\r\n [dialogTitle]=\"dialogHelpText\" />\r\n }\r\n\r\n</div>\r\n" }]
110
113
  }], propDecorators: { type: [{
111
114
  type: Input
112
115
  }], label: [{
@@ -121,6 +124,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
121
124
  type: Input
122
125
  }], searchFn: [{
123
126
  type: Input
127
+ }], labelPosition: [{
128
+ type: Input
124
129
  }], input: [{
125
130
  type: ViewChild,
126
131
  args: ['input']
@@ -131,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
131
136
  type: HostListener,
132
137
  args: ['document:click', ['$event']]
133
138
  }] } });
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHRyLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zL2lucHV0L3B0ci1pbnB1dC9wdHItaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvZm9ybXMvaW5wdXQvcHRyLWlucHV0L3B0ci1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNJLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDaEcsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQXFCL0MsTUFBTSxPQUFPLGlCQUFpQjtJQUVuQixJQUFJLEdBQTRFLE1BQU0sQ0FBQztJQUN2RixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsV0FBVyxHQUFJLEVBQUUsQ0FBQztJQUNsQixZQUFZLEdBQUksRUFBRSxDQUFDO0lBQ25CLFdBQVcsR0FBSSxFQUFFLENBQUM7SUFDbEIsY0FBYyxHQUFJLEVBQUUsQ0FBQztJQUNyQixRQUFRLENBQTBDO0lBRXZDLEtBQUssQ0FBZ0M7SUFDaEMsVUFBVSxD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U0FBUzsrQkFDRSxXQUFXLGNBQ1QsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLHNCQUFzQjtxQkFDdkIsbUJBRWdCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUM7NEJBQ2hELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzhCQUlRLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVjLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDTyxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBY3ZCLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiAqL1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIHNpZ25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFB0ckRpYWxvZ0xpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvcHRyLWRpYWxvZy1saXN0L3B0ci1kaWFsb2ctbGlzdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3B0ci1pbnB1dCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBQdHJEaWFsb2dMaXN0Q29tcG9uZW50XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcHRyLWlucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFB0cklucHV0Q29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQdHJJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSB0eXBlOiAndGV4dCcgfCAnbnVtYmVyJyB8ICdlbWFpbCcgfCAncGFzc3dvcmQnIHwgJ3NlYXJjaCcgfCAnaGlkZGVuJyB8ICdkYXRlJyA9ICd0ZXh0JztcclxuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyPyA9ICcnO1xyXG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZT8gPSAnJztcclxuICBASW5wdXQoKSBkZXNjcmlwdGlvbj8gPSAnJztcclxuICBASW5wdXQoKSBkaWFsb2dIZWxwVGV4dD8gPSAnJztcclxuICBASW5wdXQoKSBzZWFyY2hGbj86ICh0ZXJtOiBzdHJpbmcpID0+IE9ic2VydmFibGU8c3RyaW5nW10+O1xyXG5cclxuICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKCdkaWFsb2dMaXN0JykgZGlhbG9nTGlzdCE6IFB0ckRpYWxvZ0xpc3RDb21wb25lbnQ7XHJcblxyXG4gIHByaXZhdGUgY29tcG9uZW50SWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XHJcbiAgcHJpdmF0ZSBtaW5DaGFycyA9IDM7XHJcbiAgcHJpdmF0ZSBzZWFyY2hUZXJtcyA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwcml2YXRlIGhhc1NlbGVjdGVkT3B0aW9uID0gZmFsc2U7XHJcblxyXG4gIGlucHV0SWQgPSBgJHt0aGlzLmNvbXBvbmVudElkfS1pbnB1dGA7XHJcbiAgaW5wdXRWYWx1ZSA9IHNpZ25hbCgnJyk7XHJcbiAgc2VhcmNoUmVzdWx0T3B0aW9ucyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xyXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9ICgpID0+IHsgfTtcclxuICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7IH07XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5kaWFsb2dMaXN0LmRpYWxvZy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSAmJiB0aGlzLmRpYWxvZ0xpc3QuaXNPcGVuKCkpIHtcclxuICAgICAgdGhpcy5kaWFsb2dMaXN0LmNsb3NlRGlhbG9nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0dXBTZWFyY2goKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBTZWFyY2goKSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hGbikge1xyXG4gICAgICB0aGlzLnNlYXJjaFRlcm1zLnBpcGUoXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICBzd2l0Y2hNYXAodGVybSA9PiB0ZXJtLmxlbmd0aCA+PSB0aGlzLm1pbkNoYXJzID8gdGhpcy5zZWFyY2hGbiEodGVybSkgOiBvZihbXSkpXHJcbiAgICAgICkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0T3B0aW9ucy5zZXQocmVzdWx0cyk7XHJcbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID4gMCAmJiB0aGlzLmRpYWxvZ0xpc3QpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nTGlzdC5vcGVuRGlhbG9nU2lsZW50KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nTGlzdC5jbG9zZURpYWxvZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbklucHV0Q2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuaW5wdXRWYWx1ZS5zZXQodmFsdWUpO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICBpZiAoIXRoaXMuaGFzU2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5zZWFyY2hGbiAmJiB2YWx1ZS5sZW5ndGggPj0gdGhpcy5taW5DaGFycykge1xyXG4gICAgICB0aGlzLnNlYXJjaFRlcm1zLm5leHQodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oYXNTZWxlY3RlZE9wdGlvbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25PcHRpb25TZWxlY3RlZChvcHRpb25WYWx1ZTogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgdGhpcy5oYXNTZWxlY3RlZE9wdGlvbiA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5pbnB1dFZhbHVlLnNldChvcHRpb25WYWx1ZSA/PyAnJyk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKG9wdGlvblZhbHVlID8/ICcnKTtcclxuICAgIGlmICh0aGlzLmRpYWxvZ0xpc3QpIHtcclxuICAgICAgdGhpcy5kaWFsb2dMaXN0LmNsb3NlRGlhbG9nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzKCkge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoUmVzdWx0T3B0aW9ucygpLmxlbmd0aCA+IDAgJiYgdGhpcy5kaWFsb2dMaXN0ICYmICF0aGlzLmhhc1NlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nTGlzdC5vcGVuRGlhbG9nU2lsZW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoKSB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmlucHV0VmFsdWUuc2V0KHZhbHVlID8/ICcnKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8bGFiZWwgY2xhc3M9XCJnZmllbGRfbGFiZWwgZ2Zvcm0tZmllbGQtbGFiZWxcIiBbYXR0ci5mb3JdPVwiaW5wdXRJZFwiPnt7IGxhYmVsIH19PC9sYWJlbD5cclxuQGlmKGRlc2NyaXB0aW9uKXtcclxuICA8ZGl2IGNsYXNzPVwiZ2ZpZWxkX2Rlc2NyaXB0aW9uXCI+e3tkZXNjcmlwdGlvbn19PC9kaXY+XHJcbn1cclxuPGRpdiBjbGFzcz1cImdmaWVsZC0taW5wdXQtd3JhcHBlciBnaW5wdXRfY29udGFpbmVyXCI+XHJcblxyXG4gIDxpbnB1dCAjaW5wdXQgW2lkXT1cImlucHV0SWRcIiBbdHlwZV09XCJ0eXBlXCIgW2F0dHIuYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZSB8fCBudWxsXCJcclxuICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8IG51bGxcIiBbbmdNb2RlbF09XCJpbnB1dFZhbHVlKClcIiAobmdNb2RlbENoYW5nZSk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIChibHVyKT1cIm9uQmx1cigpXCIgLz5cclxuXHJcbiAgPHB0ci1kaWFsb2ctbGlzdCAjZGlhbG9nTGlzdCBbb3B0aW9uc109XCJzZWFyY2hSZXN1bHRPcHRpb25zKClcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uT3B0aW9uU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICBbZGlhbG9nVGl0bGVdPVwiZGlhbG9nSGVscFRleHRcIiAvPlxyXG5cclxuPC9kaXY+XHJcbiJdfQ==
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHRyLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zL2lucHV0L3B0ci1pbnB1dC9wdHItaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvZm9ybXMvaW5wdXQvcHRyLWlucHV0L3B0ci1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNJLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDaEcsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQXFCL0MsTUFBTSxPQUFPLGlCQUFpQjtJQUVuQixJQUFJLEdBQTRFLE1BQU0sQ0FBQztJQUN2RixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsV0FBVyxHQUFtQixFQUFFLENBQUM7SUFDakMsWUFBWSxHQUFJLEVBQUUsQ0FBQztJQUNuQixXQUFXLEdBQUksRUFBRSxDQUFDO0lBQ2xCLGNBQWMsR0FBSSxFQUFFLENBQUM7SUFDckIsUUFBUSxDQUEwQztJQUNsRCxhQUFhLEdBQXNCLEtBQUssQ0FBQztJ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MEJBLDJDRGZJLFlBQVksOEJBQ1osV0FBVyw4bUJBQ1gsbUJBQW1CLCtCQUNuQixzQkFBc0I7OzJGQVliLGlCQUFpQjtrQkFuQjdCLFNBQVM7K0JBQ0UsV0FBVyxjQUNULElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixzQkFBc0I7cUJBQ3ZCLG1CQUVnQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDOzRCQUNoRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs4QkFJUSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVjLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDTyxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBY3ZCLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiAqL1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIHNpZ25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFB0ckRpYWxvZ0xpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvcHRyLWRpYWxvZy1saXN0L3B0ci1kaWFsb2ctbGlzdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3B0ci1pbnB1dCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBQdHJEaWFsb2dMaXN0Q29tcG9uZW50XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcHRyLWlucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFB0cklucHV0Q29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQdHJJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSB0eXBlOiAndGV4dCcgfCAnbnVtYmVyJyB8ICdlbWFpbCcgfCAncGFzc3dvcmQnIHwgJ3NlYXJjaCcgfCAnaGlkZGVuJyB8ICdkYXRlJyA9ICd0ZXh0JztcclxuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgbnVsbCA9ICcnO1xyXG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZT8gPSAnJztcclxuICBASW5wdXQoKSBkZXNjcmlwdGlvbj8gPSAnJztcclxuICBASW5wdXQoKSBkaWFsb2dIZWxwVGV4dD8gPSAnJztcclxuICBASW5wdXQoKSBzZWFyY2hGbj86ICh0ZXJtOiBzdHJpbmcpID0+IE9ic2VydmFibGU8c3RyaW5nW10+O1xyXG4gIEBJbnB1dCgpIGxhYmVsUG9zaXRpb24/OiAndG9wJyB8ICdpbmxpbmUnID0gJ3RvcCc7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0xpc3QnKSBkaWFsb2dMaXN0ITogUHRyRGlhbG9nTGlzdENvbXBvbmVudDtcclxuXHJcbiAgcHJpdmF0ZSBjb21wb25lbnRJZCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTtcclxuICBwcml2YXRlIG1pbkNoYXJzID0gMztcclxuICBwcml2YXRlIHNlYXJjaFRlcm1zID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHByaXZhdGUgaGFzU2VsZWN0ZWRPcHRpb24gPSBmYWxzZTtcclxuXHJcbiAgaW5wdXRJZCA9IGAke3RoaXMuY29tcG9uZW50SWR9LWlucHV0YDtcclxuICBpbnB1dFZhbHVlID0gc2lnbmFsKCcnKTtcclxuICBzZWFyY2hSZXN1bHRPcHRpb25zID0gc2lnbmFsPHN0cmluZ1tdPihbXSk7XHJcbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkID0gKCkgPT4geyB9O1xyXG4gIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoRm4pIHtcclxuICAgICAgaWYgKCF0aGlzLmRpYWxvZ0xpc3Q/LmRpYWxvZy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSAmJiB0aGlzLmRpYWxvZ0xpc3Q/LmlzT3BlbigpKSB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dMaXN0LmNsb3NlRGlhbG9nKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXR1cFNlYXJjaCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFNlYXJjaCgpIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaEZuKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGVybXMucGlwZShcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgIHN3aXRjaE1hcCh0ZXJtID0+IHRlcm0ubGVuZ3RoID49IHRoaXMubWluQ2hhcnMgPyB0aGlzLnNlYXJjaEZuISh0ZXJtKSA6IG9mKFtdKSlcclxuICAgICAgKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRPcHRpb25zLnNldChyZXN1bHRzKTtcclxuICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPiAwICYmIHRoaXMuZGlhbG9nTGlzdCkge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dMaXN0Lm9wZW5EaWFsb2dTaWxlbnQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dMaXN0LmNsb3NlRGlhbG9nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSW5wdXRDaGFuZ2UodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5pbnB1dFZhbHVlLnNldCh2YWx1ZSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcclxuICAgIGlmICghdGhpcy5oYXNTZWxlY3RlZE9wdGlvbiAmJiB0aGlzLnNlYXJjaEZuICYmIHZhbHVlLmxlbmd0aCA+PSB0aGlzLm1pbkNoYXJzKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGVybXMubmV4dCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhhc1NlbGVjdGVkT3B0aW9uID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbk9wdGlvblNlbGVjdGVkKG9wdGlvblZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICB0aGlzLmhhc1NlbGVjdGVkT3B0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmlucHV0VmFsdWUuc2V0KG9wdGlvblZhbHVlID8/ICcnKTtcclxuICAgIHRoaXMub25DaGFuZ2Uob3B0aW9uVmFsdWUgPz8gJycpO1xyXG4gICAgaWYgKHRoaXMuZGlhbG9nTGlzdCkge1xyXG4gICAgICB0aGlzLmRpYWxvZ0xpc3QuY2xvc2VEaWFsb2coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRm9jdXMoKSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hSZXN1bHRPcHRpb25zKCkubGVuZ3RoID4gMCAmJiB0aGlzLmRpYWxvZ0xpc3QgJiYgIXRoaXMuaGFzU2VsZWN0ZWRPcHRpb24pIHtcclxuICAgICAgdGhpcy5kaWFsb2dMaXN0Lm9wZW5EaWFsb2dTaWxlbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQmx1cigpIHtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5wdXRWYWx1ZS5zZXQodmFsdWUgPz8gJycpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxsYWJlbCBjbGFzcz1cImdmaWVsZF9sYWJlbCBnZm9ybS1maWVsZC1sYWJlbFwiIFthdHRyLmZvcl09XCJpbnB1dElkXCJcclxuICBbY2xhc3MuZ2ZpZWxkLS1pbnB1dC13cmFwcGVyLS1sYWJlbC1pbmxpbmVdPVwibGFiZWxQb3NpdGlvbiA9PT0gJ2lubGluZSdcIj57eyBsYWJlbCB9fTwvbGFiZWw+XHJcbkBpZihkZXNjcmlwdGlvbil7XHJcbiAgPGRpdiBjbGFzcz1cImdmaWVsZF9kZXNjcmlwdGlvblwiPnt7ZGVzY3JpcHRpb259fTwvZGl2PlxyXG59XHJcbjxkaXYgY2xhc3M9XCJnZmllbGQtLWlucHV0LXdyYXBwZXIgZ2lucHV0X2NvbnRhaW5lclwiXHJcbiAgW2NsYXNzLmdmaWVsZC0taW5wdXQtd3JhcHBlci0tbGFiZWwtaW5saW5lXT1cImxhYmVsUG9zaXRpb24gPT09ICdpbmxpbmUnXCI+XHJcblxyXG4gIDxpbnB1dCAjaW5wdXQgW2lkXT1cImlucHV0SWRcIiBbdHlwZV09XCJ0eXBlXCIgW2F0dHIuYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZSB8fCBudWxsXCJcclxuICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8IG51bGxcIiBbbmdNb2RlbF09XCJpbnB1dFZhbHVlKClcIiAobmdNb2RlbENoYW5nZSk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIChibHVyKT1cIm9uQmx1cigpXCIgLz5cclxuXHJcbiAgQGlmIChsYWJlbFBvc2l0aW9uID09PSAnaW5saW5lJykge1xyXG4gICAgPGZpZWxkc2V0IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiaW5wdXQtZmllbGRzZXRcIj5cclxuICAgICAgPGxlZ2VuZCBjbGFzcz1cImlucHV0LWxlZ2VuZCBnZmllbGRfbGFiZWwgZ2Zvcm0tZmllbGQtbGFiZWwgZ2Zvcm0tZmllbGQtbGFiZWwtLWhpZGRlblwiPlxyXG4gICAgICAgIDxzcGFuPnt7bGFiZWx9fTwvc3Bhbj5cclxuICAgICAgPC9sZWdlbmQ+XHJcbiAgICA8L2ZpZWxkc2V0PlxyXG4gIH1cclxuXHJcbiAgQGlmIChzZWFyY2hGbikge1xyXG4gICAgPHB0ci1kaWFsb2ctbGlzdCAjZGlhbG9nTGlzdCBbb3B0aW9uc109XCJzZWFyY2hSZXN1bHRPcHRpb25zKClcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uT3B0aW9uU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgIFtkaWFsb2dUaXRsZV09XCJkaWFsb2dIZWxwVGV4dFwiIC8+XHJcbiAgICB9XHJcblxyXG48L2Rpdj5cclxuIl19