@patter/ngx-components 0.5.17 → 19.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/README.md +24 -24
  2. package/fesm2022/patter-ngx-components.mjs +79 -79
  3. package/fesm2022/patter-ngx-components.mjs.map +1 -1
  4. package/package.json +3 -5
  5. package/patter-ngx-components-19.0.0.tgz +0 -0
  6. package/esm2022/lib/components/tabs/ptr-tab/ptr-tab.component.mjs +0 -23
  7. package/esm2022/lib/components/tabs/ptr-tabs/ptr-tabs.component.mjs +0 -71
  8. package/esm2022/lib/dialog/ptr-dialog/ptr-dialog.component.mjs +0 -46
  9. package/esm2022/lib/dialog/ptr-dialog.service.mjs +0 -48
  10. package/esm2022/lib/dialog/ptr-tooltip/ptr-tooltip.component.mjs +0 -32
  11. package/esm2022/lib/forms/form/form.component.mjs +0 -102
  12. package/esm2022/lib/forms/input/ptr-input/ptr-input.component.mjs +0 -139
  13. package/esm2022/lib/forms/input/select/select.component.mjs +0 -129
  14. package/esm2022/lib/forms/interfaces.mjs +0 -2
  15. package/esm2022/lib/forms/shared/ptr-dialog-list/ptr-dialog-list.component.mjs +0 -195
  16. package/esm2022/lib/loading-spinner/loading-spinner.component.mjs +0 -11
  17. package/esm2022/lib/loading-spinner/loading-spinner.directive.mjs +0 -84
  18. package/esm2022/lib/menu/menu.component.mjs +0 -16
  19. package/esm2022/lib/ptr-breadcrumbs/interfaces.mjs +0 -2
  20. package/esm2022/lib/ptr-breadcrumbs/ptr-breadcrumbs.component.mjs +0 -60
  21. package/esm2022/lib/ptr-button/ptr-button.component.mjs +0 -111
  22. package/esm2022/lib/ptr-title/ptr-title.component.mjs +0 -54
  23. package/esm2022/lib/ptr-toaster/interfaces.mjs +0 -2
  24. package/esm2022/lib/ptr-toaster/ptr-toaster/ptr-toaster.component.mjs +0 -15
  25. package/esm2022/lib/ptr-toaster/ptr-toaster.service.mjs +0 -52
  26. package/esm2022/lib/services/loading.service.mjs +0 -96
  27. package/esm2022/patter-ngx-components.mjs +0 -5
  28. package/esm2022/public-api.mjs +0 -22
@@ -1,71 +0,0 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHRyLXRhYnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy90YWJzL3B0ci10YWJzL3B0ci10YWJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvdGFicy9wdHItdGFicy9wdHItdGFicy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWMsTUFBTSxFQUFhLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUssT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQVdoRSxNQUFNLE9BQU8sZ0JBQWdCO0lBRU8sYUFBYSxDQUE4QjtJQUNsRCxPQUFPLENBQXlCO0lBRW5ELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV4QyxJQUFJLEdBQUcsTUFBTSxDQUFvQixFQUFFLENBQUMsQ0FBQztJQUNyQyxjQUFjLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsY0FBYyxHQUFHLE1B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cEIsdUJBQXVCLENBQUMsTUFBTTt3REFJYixhQUFhO3NCQUE5QyxlQUFlO3VCQUFDLGVBQWU7Z0JBQ0wsT0FBTztzQkFBakMsWUFBWTt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBEZXN0cm95UmVmLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgUXVlcnlMaXN0LCBzaWduYWwsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFB0clRhYkNvbXBvbmVudCB9IGZyb20gJy4uL3B0ci10YWIvcHRyLXRhYi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwdHItdGFicycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSb3V0ZXJNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wdHItdGFicy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3B0ci10YWJzLmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHRyVGFic0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFB0clRhYkNvbXBvbmVudCkgdGFiQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxQdHJUYWJDb21wb25lbnQ+O1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ3RhYkJ1dHRvbicpIGJ1dHRvbnMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgcHJpdmF0ZSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG5cclxuICB0YWJzID0gc2lnbmFsPFB0clRhYkNvbXBvbmVudFtdPihbXSk7XHJcbiAgYWN0aXZlVGFiSW5kZXggPSBzaWduYWwoMCk7XHJcbiAgdXNlTGlua3MgPSBzaWduYWwoZmFsc2UpO1xyXG4gIHNsaWRlclBvc2l0aW9uID0gc2lnbmFsKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScsIHdpZHRoOiAnMCcgfSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy50YWJzKCkuZmluZCh0YWIgPT4gdGFiLmFjdGl2ZSgpKTtcclxuICAgICAgaWYgKGFjdGl2ZVRhYj8ubGluaykge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFthY3RpdmVUYWIubGlua10pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlU2xpZGVyUG9zaXRpb24oKTtcclxuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnRhYkNvbXBvbmVudHMuY2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUYWJzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy51cGRhdGVUYWJzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUYWJzKCkge1xyXG4gICAgdGhpcy50YWJzLnNldCh0aGlzLnRhYkNvbXBvbmVudHMudG9BcnJheSgpKTtcclxuICAgIHRoaXMudXNlTGlua3Muc2V0KHRoaXMudGFicygpLnNvbWUodGFiID0+ICEhdGFiLmxpbmspKTtcclxuICAgIGlmICh0aGlzLnRhYnMoKS5sZW5ndGggPiAwICYmICF0aGlzLnRhYnMoKS5zb21lKHRhYiA9PiB0YWIuYWN0aXZlKCkpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGFiKDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy51cGRhdGVTbGlkZXJQb3NpdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0VGFiKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMudGFicygpLmZvckVhY2goKHRhYiwgaSkgPT4gdGFiLmFjdGl2ZS5zZXQoaSA9PT0gaW5kZXgpKTtcclxuICAgIHRoaXMuYWN0aXZlVGFiSW5kZXguc2V0KGluZGV4KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNsaWRlclBvc2l0aW9uKCkge1xyXG4gICAgY29uc3QgYWN0aXZlQnV0dG9uID0gdGhpcy5idXR0b25zPy5nZXQodGhpcy5hY3RpdmVUYWJJbmRleCgpKT8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChhY3RpdmVCdXR0b24pIHtcclxuICAgICAgY29uc3QgeyBvZmZzZXRMZWZ0LCBvZmZzZXRXaWR0aCB9ID0gYWN0aXZlQnV0dG9uO1xyXG4gICAgICB0aGlzLnNsaWRlclBvc2l0aW9uLnNldCh7XHJcbiAgICAgICAgdHJhbnNmb3JtOiBgdHJhbnNsYXRlWCgke29mZnNldExlZnR9cHgpYCxcclxuICAgICAgICB3aWR0aDogYCR7b2Zmc2V0V2lkdGh9cHhgXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRhYnMtY29udGFpbmVyXCIgcm9sZT1cInRhYmxpc3RcIj5cclxuICBAZm9yICh0YWIgb2YgdGFicygpOyB0cmFjayAkaW5kZXg7IGxldCBpID0gJGluZGV4KSB7XHJcbiAgPGJ1dHRvbiAjdGFiQnV0dG9uIFthdHRyLnJvbGVdPVwidGFiLmxpbmsgPyAnbGluaycgOiAndGFiJ1wiIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwidGFiLmFjdGl2ZSgpXCJcclxuICAgIFtjbGFzcy5hY3RpdmVdPVwidGFiLmFjdGl2ZSgpXCIgKGNsaWNrKT1cInNlbGVjdFRhYihpKVwiIFtyb3V0ZXJMaW5rXT1cInRhYi5saW5rXCI+e3t0YWIubGFiZWx9fTwvYnV0dG9uPlxyXG4gIH1cclxuXHJcbiAgPGRpdiBjbGFzcz1cInNsaWRlclwiIFtzdHlsZS50cmFuc2Zvcm1dPVwic2xpZGVyUG9zaXRpb24oKS50cmFuc2Zvcm1cIiBbc3R5bGUud2lkdGhdPVwic2xpZGVyUG9zaXRpb24oKS53aWR0aFwiPjwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbkBpZiAoIXVzZUxpbmtzKCkpIHtcclxuPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L2Rpdj5cclxufVxyXG4iXX0=
@@ -1,46 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { PtrButtonComponent } from '../../ptr-button/ptr-button.component';
3
- import * as i0 from "@angular/core";
4
- export class PtrDialogComponent {
5
- dialogElement;
6
- title = '';
7
- message = '';
8
- buttonText = 'Confirm';
9
- buttonStyle = 'normal';
10
- closed = new EventEmitter();
11
- ngAfterViewInit() {
12
- this.dialogElement.nativeElement.showModal();
13
- }
14
- close() {
15
- this.dialogElement.nativeElement.close();
16
- }
17
- confirm() {
18
- this.closed.emit(true);
19
- this.close();
20
- }
21
- onClose() {
22
- this.closed.emit(null);
23
- }
24
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
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 });
26
- }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrDialogComponent, decorators: [{
28
- type: Component,
29
- args: [{ selector: 'ptr-dialog', standalone: true, imports: [
30
- PtrButtonComponent
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"] }]
32
- }], propDecorators: { dialogElement: [{
33
- type: ViewChild,
34
- args: ['dialogElement']
35
- }], title: [{
36
- type: Input
37
- }], message: [{
38
- type: Input
39
- }], buttonText: [{
40
- type: Input
41
- }], buttonStyle: [{
42
- type: Input
43
- }], closed: [{
44
- type: Output
45
- }] } });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHRyLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXR0ZXIvbmd4LWNvbXBvbmVudHMvc3JjL2xpYi9kaWFsb2cvcHRyLWRpYWxvZy9wdHItZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvbGliL2RpYWxvZy9wdHItZGlhbG9nL3B0ci1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3RJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQVkzRSxNQUFNLE9BQU8sa0JBQWtCO0lBRUQsYUFBYSxDQUFpQztJQUVqRSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNiLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDdkIsV0FBVyxHQUFxQyxRQUFRLENBQUM7SUFFeEQsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO0lBRXRELGVBQWU7UUFDYixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO3VHQTFCVSxrQkFBa0I7MkZBQWxCLGtCQUFrQiwyVENiL0IsOHNCQWlCQSx3bUNEVkksa0JBQWtCOzsyRkFNVCxrQkFBa0I7a0JBVjlCLFNBQVM7K0JBQ0UsWUFBWSxjQUNWLElBQUksV0FDUDt3QkFDUCxrQkFBa0I7cUJBQ25CLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUluQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBRWpCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFB0ckJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3B0ci1idXR0b24vcHRyLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwdHItZGlhbG9nJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIFB0ckJ1dHRvbkNvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3B0ci1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1wiLi9wdHItZGlhbG9nLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQdHJEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZGlhbG9nRWxlbWVudCcpIGRpYWxvZ0VsZW1lbnQhOiBFbGVtZW50UmVmPEhUTUxEaWFsb2dFbGVtZW50PjtcclxuXHJcbiAgQElucHV0KCkgdGl0bGUgPSAnJztcclxuICBASW5wdXQoKSBtZXNzYWdlID0gJyc7XHJcbiAgQElucHV0KCkgYnV0dG9uVGV4dCA9ICdDb25maXJtJztcclxuICBASW5wdXQoKSBidXR0b25TdHlsZTogJ25vcm1hbCcgfCAnZXJyb3InIHwgJ3NlY29uZGFyeScgPSAnbm9ybWFsJztcclxuXHJcbiAgQE91dHB1dCgpIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbiB8IG51bGw+KCk7XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuZGlhbG9nRWxlbWVudC5uYXRpdmVFbGVtZW50LnNob3dNb2RhbCgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0VsZW1lbnQubmF0aXZlRWxlbWVudC5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybSgpIHtcclxuICAgIHRoaXMuY2xvc2VkLmVtaXQodHJ1ZSk7XHJcbiAgICB0aGlzLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBvbkNsb3NlKCkge1xyXG4gICAgdGhpcy5jbG9zZWQuZW1pdChudWxsKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaWFsb2cgI2RpYWxvZ0VsZW1lbnQgY2xhc3M9XCJwdHItbW9kYWxcIiAoY2xvc2UpPVwib25DbG9zZSgpXCI+XHJcbiAgPGRpdiBjbGFzcz1cInB0ci1tb2RhbF9fY29udGVudFwiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJwdHItbW9kYWxfX2hlYWRlclwiPlxyXG4gICAgICA8aDIgY2xhc3M9XCJwdHItbW9kYWxfX3RpdGxlXCI+e3t0aXRsZX19PC9oMj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInB0ci1tb2RhbF9fY2xvc2VcIiAoY2xpY2spPVwiY2xvc2UoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZSBkaWFsb2dcIj4mdGltZXM7PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8cD57eyBtZXNzYWdlIH19PC9wPlxyXG4gICAgPGRpdiBjbGFzcz1cInB0ci1tb2RhbF9fYWN0aW9uc1wiPlxyXG4gICAgICA8cHRyLWJ1dHRvbiBidXR0b25TdHlsZT1cInNlY29uZGFyeVwiIChjbGlja2VkKT1cImNsb3NlKClcIiBbaXNTbWFsbFNpemVdPVwidHJ1ZVwiPkNhbmNlbDwvcHRyLWJ1dHRvbj5cclxuICAgICAgPHB0ci1idXR0b24gY2xhc3M9XCJtbC1hdXRvXCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvblN0eWxlXCIgKGNsaWNrZWQpPVwiY29uZmlybSgpXCJcclxuICAgICAgICBbaXNTbWFsbFNpemVdPVwidHJ1ZVwiPnt7YnV0dG9uVGV4dH19PC9wdHItYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG48L2RpYWxvZz5cclxuIl19
@@ -1,48 +0,0 @@
1
- import { createComponent, Injectable } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { PtrDialogComponent } from './ptr-dialog/ptr-dialog.component';
4
- import * as i0 from "@angular/core";
5
- export class PtrDialogService {
6
- appRef;
7
- injector;
8
- dialogComponentRef = null;
9
- constructor(appRef, injector) {
10
- this.appRef = appRef;
11
- this.injector = injector;
12
- }
13
- open(options) {
14
- const dialogResult$ = new Subject();
15
- this.dialogComponentRef = createComponent(PtrDialogComponent, {
16
- environmentInjector: this.injector,
17
- });
18
- const { instance } = this.dialogComponentRef;
19
- instance.title = options.title;
20
- instance.message = options.message;
21
- instance.buttonText = options.buttonText || 'Confirm';
22
- instance.buttonStyle = options.buttonStyle || 'normal';
23
- instance.closed.subscribe((result) => {
24
- this.removeDialog();
25
- dialogResult$.next(result ?? false);
26
- dialogResult$.complete();
27
- });
28
- document.body.appendChild(this.dialogComponentRef.location.nativeElement);
29
- this.appRef.attachView(this.dialogComponentRef.hostView);
30
- return dialogResult$.asObservable();
31
- }
32
- removeDialog() {
33
- if (this.dialogComponentRef) {
34
- this.appRef.detachView(this.dialogComponentRef.hostView);
35
- this.dialogComponentRef.destroy();
36
- this.dialogComponentRef = null;
37
- }
38
- }
39
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrDialogService, deps: [{ token: i0.ApplicationRef }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable });
40
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrDialogService, providedIn: 'root' });
41
- }
42
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrDialogService, decorators: [{
43
- type: Injectable,
44
- args: [{
45
- providedIn: 'root'
46
- }]
47
- }], ctorParameters: () => [{ type: i0.ApplicationRef }, { type: i0.EnvironmentInjector }] });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHRyLWRpYWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvZGlhbG9nL3B0ci1kaWFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdDLGVBQWUsRUFBdUIsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBS3ZFLE1BQU0sT0FBTyxnQkFBZ0I7SUFLakI7SUFDQTtJQUpGLGtCQUFrQixHQUE0QyxJQUFJLENBQUM7SUFFM0UsWUFDVSxNQUFzQixFQUN0QixRQUE2QjtRQUQ3QixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFxQjtJQUNuQyxDQUFDO0lBRUwsSUFBSSxDQUFDLE9BS0o7UUFDQyxNQUFNLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRTdDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxlQUFlLENBQUMsa0JBQWtCLEVBQUU7WUFDNUQsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDbkMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUU3QyxRQUFRLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDL0IsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ25DLFFBQVEsQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUM7UUFDdEQsUUFBUSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQztRQUV2RCxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQXNCLEVBQUUsRUFBRTtZQUNuRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUM7WUFDcEMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFekQsT0FBTyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7dUdBOUNVLGdCQUFnQjsyR0FBaEIsZ0JBQWdCLGNBRmYsTUFBTTs7MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBDb21wb25lbnRSZWYsIGNyZWF0ZUNvbXBvbmVudCwgRW52aXJvbm1lbnRJbmplY3RvciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFB0ckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vcHRyLWRpYWxvZy9wdHItZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQdHJEaWFsb2dTZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBkaWFsb2dDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxQdHJEaWFsb2dDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvclxyXG4gICkgeyB9XHJcblxyXG4gIG9wZW4ob3B0aW9uczoge1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIG1lc3NhZ2U6IHN0cmluZztcclxuICAgIGJ1dHRvblRleHQ/OiBzdHJpbmc7XHJcbiAgICBidXR0b25TdHlsZT86ICdub3JtYWwnIHwgJ2Vycm9yJyB8ICdzZWNvbmRhcnknO1xyXG4gIH0pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IGRpYWxvZ1Jlc3VsdCQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG5cclxuICAgIHRoaXMuZGlhbG9nQ29tcG9uZW50UmVmID0gY3JlYXRlQ29tcG9uZW50KFB0ckRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgeyBpbnN0YW5jZSB9ID0gdGhpcy5kaWFsb2dDb21wb25lbnRSZWY7XHJcblxyXG4gICAgaW5zdGFuY2UudGl0bGUgPSBvcHRpb25zLnRpdGxlO1xyXG4gICAgaW5zdGFuY2UubWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZTtcclxuICAgIGluc3RhbmNlLmJ1dHRvblRleHQgPSBvcHRpb25zLmJ1dHRvblRleHQgfHwgJ0NvbmZpcm0nO1xyXG4gICAgaW5zdGFuY2UuYnV0dG9uU3R5bGUgPSBvcHRpb25zLmJ1dHRvblN0eWxlIHx8ICdub3JtYWwnO1xyXG5cclxuICAgIGluc3RhbmNlLmNsb3NlZC5zdWJzY3JpYmUoKHJlc3VsdDogYm9vbGVhbiB8IG51bGwpID0+IHtcclxuICAgICAgdGhpcy5yZW1vdmVEaWFsb2coKTtcclxuICAgICAgZGlhbG9nUmVzdWx0JC5uZXh0KHJlc3VsdCA/PyBmYWxzZSk7XHJcbiAgICAgIGRpYWxvZ1Jlc3VsdCQuY29tcGxldGUoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5kaWFsb2dDb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XHJcbiAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KHRoaXMuZGlhbG9nQ29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuXHJcbiAgICByZXR1cm4gZGlhbG9nUmVzdWx0JC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlRGlhbG9nKCkge1xyXG4gICAgaWYgKHRoaXMuZGlhbG9nQ29tcG9uZW50UmVmKSB7XHJcbiAgICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5kaWFsb2dDb21wb25lbnRSZWYuaG9zdFZpZXcpO1xyXG4gICAgICB0aGlzLmRpYWxvZ0NvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMuZGlhbG9nQ29tcG9uZW50UmVmID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -1,32 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class PtrTooltipComponent {
5
- content = '';
6
- tooltipDialog;
7
- tooltipTimer;
8
- showTooltip() {
9
- clearTimeout(this.tooltipTimer);
10
- this.tooltipTimer = setTimeout(() => {
11
- this.tooltipDialog.nativeElement.show();
12
- }, 200); // Small delay to prevent flickering on quick mouse movements
13
- }
14
- hideTooltip() {
15
- clearTimeout(this.tooltipTimer);
16
- this.tooltipTimer = setTimeout(() => {
17
- this.tooltipDialog.nativeElement.close();
18
- }, 200); // Small delay to allow moving mouse to tooltip
19
- }
20
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: PtrTooltipComponent, isStandalone: true, selector: "ptr-tooltip", inputs: { content: "content" }, viewQueries: [{ propertyName: "tooltipDialog", first: true, predicate: ["tooltipDialog"], descendants: true }], ngImport: i0, template: "<span (mouseenter)=\"showTooltip()\" (mouseleave)=\"hideTooltip()\" class=\"tooltip-trigger\">\r\n <ng-content></ng-content>\r\n</span>\r\n<dialog #tooltipDialog class=\"ptr-tooltip\">\r\n <div class=\"ptr-tooltip__content\">{{ content }}</div>\r\n</dialog>", styles: [":host{display:inline-block;position:relative}.tooltip-trigger{cursor:help}.ptr-tooltip{position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:none;border-radius:3px;padding:.5rem .75rem;background-color:#212121;border:0;color:#fff;font-size:.875rem;max-width:15.5rem;min-width:12.5rem;z-index:1000;margin:0 0 8px;box-shadow:0 3px 6px #00000029,0 3px 6px #0000003b}.ptr-tooltip:before{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #212121}.ptr-tooltip__content{white-space:pre-wrap;text-align:center;line-height:1.5}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
22
- }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrTooltipComponent, decorators: [{
24
- type: Component,
25
- args: [{ selector: 'ptr-tooltip', standalone: true, imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span (mouseenter)=\"showTooltip()\" (mouseleave)=\"hideTooltip()\" class=\"tooltip-trigger\">\r\n <ng-content></ng-content>\r\n</span>\r\n<dialog #tooltipDialog class=\"ptr-tooltip\">\r\n <div class=\"ptr-tooltip__content\">{{ content }}</div>\r\n</dialog>", styles: [":host{display:inline-block;position:relative}.tooltip-trigger{cursor:help}.ptr-tooltip{position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:none;border-radius:3px;padding:.5rem .75rem;background-color:#212121;border:0;color:#fff;font-size:.875rem;max-width:15.5rem;min-width:12.5rem;z-index:1000;margin:0 0 8px;box-shadow:0 3px 6px #00000029,0 3px 6px #0000003b}.ptr-tooltip:before{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #212121}.ptr-tooltip__content{white-space:pre-wrap;text-align:center;line-height:1.5}\n"] }]
26
- }], propDecorators: { content: [{
27
- type: Input
28
- }], tooltipDialog: [{
29
- type: ViewChild,
30
- args: ['tooltipDialog']
31
- }] } });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHRyLXRvb2x0aXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvZGlhbG9nL3B0ci10b29sdGlwL3B0ci10b29sdGlwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvbGliL2RpYWxvZy9wdHItdG9vbHRpcC9wdHItdG9vbHRpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVVqRyxNQUFNLE9BQU8sbUJBQW1CO0lBRXJCLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFFTSxhQUFhLENBQWlDO0lBRWxFLFlBQVksQ0FBTTtJQUUxQixXQUFXO1FBQ1QsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsNkRBQTZEO0lBQ3hFLENBQUM7SUFFRCxXQUFXO1FBQ1QsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0MsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsK0NBQStDO0lBQzFELENBQUM7dUdBcEJVLG1CQUFtQjsyRkFBbkIsbUJBQW1CLHVOQ1hoQyxxUUFLUzs7MkZETUksbUJBQW1CO2tCQVIvQixTQUFTOytCQUNFLGFBQWEsY0FDWCxJQUFJLFdBQ1AsRUFBRSxtQkFHTSx1QkFBdUIsQ0FBQyxNQUFNOzhCQUl0QyxPQUFPO3NCQUFmLEtBQUs7Z0JBRXNCLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwdHItdG9vbHRpcCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcHRyLXRvb2x0aXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1wiLi9wdHItdG9vbHRpcC5jb21wb25lbnQuc2Nzc1wiXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHRyVG9vbHRpcENvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIGNvbnRlbnQgPSAnJztcclxuXHJcbiAgQFZpZXdDaGlsZCgndG9vbHRpcERpYWxvZycpIHRvb2x0aXBEaWFsb2chOiBFbGVtZW50UmVmPEhUTUxEaWFsb2dFbGVtZW50PjtcclxuXHJcbiAgcHJpdmF0ZSB0b29sdGlwVGltZXI6IGFueTtcclxuXHJcbiAgc2hvd1Rvb2x0aXAoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy50b29sdGlwVGltZXIpO1xyXG4gICAgdGhpcy50b29sdGlwVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy50b29sdGlwRGlhbG9nLm5hdGl2ZUVsZW1lbnQuc2hvdygpO1xyXG4gICAgfSwgMjAwKTsgLy8gU21hbGwgZGVsYXkgdG8gcHJldmVudCBmbGlja2VyaW5nIG9uIHF1aWNrIG1vdXNlIG1vdmVtZW50c1xyXG4gIH1cclxuXHJcbiAgaGlkZVRvb2x0aXAoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy50b29sdGlwVGltZXIpO1xyXG4gICAgdGhpcy50b29sdGlwVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy50b29sdGlwRGlhbG9nLm5hdGl2ZUVsZW1lbnQuY2xvc2UoKTtcclxuICAgIH0sIDIwMCk7IC8vIFNtYWxsIGRlbGF5IHRvIGFsbG93IG1vdmluZyBtb3VzZSB0byB0b29sdGlwXHJcbiAgfVxyXG5cclxufVxyXG4iLCI8c3BhbiAobW91c2VlbnRlcik9XCJzaG93VG9vbHRpcCgpXCIgKG1vdXNlbGVhdmUpPVwiaGlkZVRvb2x0aXAoKVwiIGNsYXNzPVwidG9vbHRpcC10cmlnZ2VyXCI+XHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L3NwYW4+XHJcbjxkaWFsb2cgI3Rvb2x0aXBEaWFsb2cgY2xhc3M9XCJwdHItdG9vbHRpcFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJwdHItdG9vbHRpcF9fY29udGVudFwiPnt7IGNvbnRlbnQgfX08L2Rpdj5cclxuPC9kaWFsb2c+Il19
@@ -1,102 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, EventEmitter, inject, Input, Output } from '@angular/core';
3
- import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
4
- import { PtrButtonComponent } from '../../ptr-button/ptr-button.component';
5
- import { PtrSelectComponent } from "../input/select/select.component";
6
- import { PtrInputComponent } from '../input/ptr-input/ptr-input.component';
7
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common";
10
- import * as i2 from "@angular/forms";
11
- export class PtrFormComponent {
12
- config;
13
- loading = false;
14
- error = null;
15
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
- formSubmit = new EventEmitter();
17
- formGroupCreated = new EventEmitter();
18
- formGroup;
19
- fb = inject(FormBuilder);
20
- cdr = inject(ChangeDetectorRef);
21
- destroyRef = inject(DestroyRef);
22
- ngOnInit() {
23
- this.buildForm();
24
- this.formGroupCreated.emit(this.formGroup);
25
- this.setupConditionalLogic();
26
- }
27
- buildForm() {
28
- const group = {};
29
- this.config.fields.forEach(field => {
30
- group[field.name] = [field.value || '', field.validators || []];
31
- });
32
- this.formGroup = this.fb.group(group, this.config.formValidators ? { validators: this.config.formValidators } : null);
33
- }
34
- onSubmit() {
35
- if (this.formGroup.valid) {
36
- this.formSubmit.emit(this.formGroup.value);
37
- }
38
- }
39
- resetForm() {
40
- this.formGroup.reset();
41
- this.config.fields.forEach(field => {
42
- const control = this.formGroup.get(field.name);
43
- control?.setValue(field.value || '', { emitEvent: false });
44
- });
45
- this.cdr.markForCheck();
46
- }
47
- // Conditional logic
48
- setupConditionalLogic() {
49
- this.formGroup.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
50
- this.cdr.markForCheck();
51
- });
52
- }
53
- isFieldVisible(field) {
54
- if (!field.conditional?.showWhen)
55
- return true;
56
- return this.evaluateConditionalRules(field.conditional.showWhen);
57
- }
58
- getFieldLabel(field) {
59
- if (!field.conditional?.label)
60
- return field.label;
61
- const conditionalLabel = this.evaluateConditionalRules(field.conditional.label);
62
- return conditionalLabel || field.label;
63
- }
64
- getFieldPlaceholder(field) {
65
- if (!field.conditional?.placeholder)
66
- return field.placeholder || null;
67
- const conditionalPlaceholder = this.evaluateConditionalRules(field.conditional.placeholder);
68
- return conditionalPlaceholder || field.placeholder || null;
69
- }
70
- evaluateConditionalRules(rules) {
71
- for (const rule of rules) {
72
- const fieldValue = this.formGroup.get(rule.field)?.value;
73
- if (fieldValue === rule.value) {
74
- return rule.result;
75
- }
76
- }
77
- return false;
78
- }
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\" [class.gfield--label-inline]=\"config.labelPosition === 'inline'\">\r\n\r\n @switch (field.type) {\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\"\r\n [extraClasses]=\"config.submitFullWidth ? 'gform-button--width-full' : ''\">{{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.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
- }
82
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrFormComponent, decorators: [{
83
- type: Component,
84
- args: [{ selector: 'ptr-form', standalone: true, imports: [
85
- CommonModule,
86
- ReactiveFormsModule,
87
- PtrButtonComponent,
88
- PtrSelectComponent,
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\" [class.gfield--label-inline]=\"config.labelPosition === 'inline'\">\r\n\r\n @switch (field.type) {\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\"\r\n [extraClasses]=\"config.submitFullWidth ? 'gform-button--width-full' : ''\">{{config.submitText}}</ptr-button>\r\n </div>\r\n }\r\n\r\n </form>\r\n</div>\r\n" }]
91
- }], propDecorators: { config: [{
92
- type: Input
93
- }], loading: [{
94
- type: Input
95
- }], error: [{
96
- type: Input
97
- }], formSubmit: [{
98
- type: Output
99
- }], formGroupCreated: [{
100
- type: Output
101
- }] } });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXR0ZXIvbmd4LWNvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvZm9ybXMvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0ksT0FBTyxFQUFFLFdBQVcsRUFBYSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBaUJoRSxNQUFNLE9BQU8sZ0JBQWdCO0lBRWxCLE1BQU0sQ0FBaUI7SUFDdkIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixLQUFLLEdBQWtCLElBQUksQ0FBQztJQUVyQyw4REFBOEQ7SUFDcEQsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDckMsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztJQUUzRCxTQUFTLENBQWE7SUFFZCxFQUFFLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FB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IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFB0ckNvbmRpdGlvbmFsUnVsZSwgUHRyRm9ybUNvbmZpZywgUHRyRm9ybUZpZWxkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFB0ckJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3B0ci1idXR0b24vcHRyLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQdHJTZWxlY3RDb21wb25lbnQgfSBmcm9tIFwiLi4vaW5wdXQvc2VsZWN0L3NlbGVjdC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUHRySW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9pbnB1dC9wdHItaW5wdXQvcHRyLWlucHV0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncHRyLWZvcm0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuXHJcbiAgICBQdHJCdXR0b25Db21wb25lbnQsXHJcblxyXG4gICAgUHRyU2VsZWN0Q29tcG9uZW50LFxyXG4gICAgUHRySW5wdXRDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHRyRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IFB0ckZvcm1Db25maWc7XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBAT3V0cHV0KCkgZm9ybVN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtR3JvdXBDcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtR3JvdXA+KCk7XHJcblxyXG4gIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuXHJcbiAgcHJpdmF0ZSBmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XHJcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmJ1aWxkRm9ybSgpO1xyXG4gICAgdGhpcy5mb3JtR3JvdXBDcmVhdGVkLmVtaXQodGhpcy5mb3JtR3JvdXApO1xyXG4gICAgdGhpcy5zZXR1cENvbmRpdGlvbmFsTG9naWMoKTtcclxuICB9XHJcblxyXG4gIGJ1aWxkRm9ybSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGdyb3VwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xyXG4gICAgdGhpcy5jb25maWcuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBncm91cFtmaWVsZC5uYW1lXSA9IFtmaWVsZC52YWx1ZSB8fCAnJywgZmllbGQudmFsaWRhdG9ycyB8fCBbXV07XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoZ3JvdXAsIHRoaXMuY29uZmlnLmZvcm1WYWxpZGF0b3JzID8geyB2YWxpZGF0b3JzOiB0aGlzLmNvbmZpZy5mb3JtVmFsaWRhdG9ycyB9IDogbnVsbCk7XHJcbiAgfVxyXG5cclxuICBvblN1Ym1pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICB0aGlzLmZvcm1TdWJtaXQuZW1pdCh0aGlzLmZvcm1Hcm91cC52YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRGb3JtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAucmVzZXQoKTtcclxuICAgIHRoaXMuY29uZmlnLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKTtcclxuICAgICAgY29udHJvbD8uc2V0VmFsdWUoZmllbGQudmFsdWUgfHwgJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvLyBDb25kaXRpb25hbCBsb2dpY1xyXG4gIHNldHVwQ29uZGl0aW9uYWxMb2dpYygpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxyXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNGaWVsZFZpc2libGUoZmllbGQ6IFB0ckZvcm1GaWVsZCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFmaWVsZC5jb25kaXRpb25hbD8uc2hvd1doZW4pIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXMuZXZhbHVhdGVDb25kaXRpb25hbFJ1bGVzKGZpZWxkLmNvbmRpdGlvbmFsLnNob3dXaGVuKSBhcyBib29sZWFuO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGRMYWJlbChmaWVsZDogUHRyRm9ybUZpZWxkKTogc3RyaW5nIHtcclxuICAgIGlmICghZmllbGQuY29uZGl0aW9uYWw/LmxhYmVsKSByZXR1cm4gZmllbGQubGFiZWw7XHJcbiAgICBjb25zdCBjb25kaXRpb25hbExhYmVsID0gdGhpcy5ldmFsdWF0ZUNvbmRpdGlvbmFsUnVsZXMoZmllbGQuY29uZGl0aW9uYWwubGFiZWwpO1xyXG4gICAgcmV0dXJuIGNvbmRpdGlvbmFsTGFiZWwgYXMgc3RyaW5nIHx8IGZpZWxkLmxhYmVsO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGRQbGFjZWhvbGRlcihmaWVsZDogUHRyRm9ybUZpZWxkKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAoIWZpZWxkLmNvbmRpdGlvbmFsPy5wbGFjZWhvbGRlcikgcmV0dXJuIGZpZWxkLnBsYWNlaG9sZGVyIHx8IG51bGw7XHJcbiAgICBjb25zdCBjb25kaXRpb25hbFBsYWNlaG9sZGVyID0gdGhpcy5ldmFsdWF0ZUNvbmRpdGlvbmFsUnVsZXMoZmllbGQuY29uZGl0aW9uYWwucGxhY2Vob2xkZXIpO1xyXG4gICAgcmV0dXJuIGNvbmRpdGlvbmFsUGxhY2Vob2xkZXIgYXMgc3RyaW5nIHx8IGZpZWxkLnBsYWNlaG9sZGVyIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWx1YXRlQ29uZGl0aW9uYWxSdWxlcyhydWxlczogUHRyQ29uZGl0aW9uYWxSdWxlW10pOiBzdHJpbmcgfCBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xyXG4gICAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHJ1bGUuZmllbGQpPy52YWx1ZTtcclxuICAgICAgaWYgKGZpZWxkVmFsdWUgPT09IHJ1bGUudmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gcnVsZS5yZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgW2NsYXNzXT1cIidnZm9ybV93cmFwcGVyICcgKyBjb25maWcuZm9ybUNsYXNzXCI+XHJcblxyXG4gIEBpZiAoZXJyb3IpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJnZm9ybV92YWxpZGF0aW9uX2Vycm9yc1wiPlxyXG4gICAgICA8aDIgY2xhc3M9XCJnZm9ybV9zdWJtaXNzaW9uX2Vycm9yIGhpZGVfc3VtbWFyeVwiPnt7ZXJyb3J9fTwvaDI+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcblxyXG4gIEBpZiAoY29uZmlnLnRpdGxlKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ2Zvcm1faGVhZGluZ1wiPlxyXG4gICAgICA8aDIgY2xhc3M9XCJnZm9ybV90aXRsZVwiPnt7IGNvbmZpZy50aXRsZSB9fTwvaDI+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcblxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZ2Zvcm1fZmllbGRzXCI+XHJcblxyXG4gICAgICBAZm9yIChmaWVsZCBvZiBjb25maWcuZmllbGRzOyB0cmFjayBmaWVsZC5uYW1lKSB7XHJcbiAgICAgICAgQGlmKGlzRmllbGRWaXNpYmxlKGZpZWxkKSkge1xyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2ZpZWxkIGdmaWVsZC0td2lkdGgte3tmaWVsZC5zaXplfX1cIiBbY2xhc3MuZ2Zvcm1faGlkZGVuXT1cImZpZWxkLnR5cGUgPT09ICdoaWRkZW4nXCJcclxuICAgICAgICAgIFtjbGFzcy5nZmllbGRfZXJyb3JdPVwiZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8uaW52YWxpZCAmJiBmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy50b3VjaGVkXCIgW2NsYXNzLmdmaWVsZC0tbGFiZWwtaW5saW5lXT1cImNvbmZpZy5sYWJlbFBvc2l0aW9uID09PSAnaW5saW5lJ1wiPlxyXG5cclxuICAgICAgICAgIEBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcclxuICAgICAgICAgICAgQGNhc2UgKCdzZWxlY3QnKSB7XHJcbiAgICAgICAgICAgICAgPHB0ci1zZWxlY3QgW2xhYmVsXT1cImdldEZpZWxkTGFiZWwoZmllbGQpXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5uYW1lXCIgW29wdGlvbnNdPVwiZmllbGQub3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZ2V0RmllbGRQbGFjZWhvbGRlcihmaWVsZClcIiBbbGFiZWxQb3NpdGlvbl09XCJjb25maWcubGFiZWxQb3NpdGlvblwiIC8+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQGRlZmF1bHQge1xyXG4gICAgICAgICAgICA8cHRyLWlucHV0IFtsYWJlbF09XCJnZXRGaWVsZExhYmVsKGZpZWxkKVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQubmFtZVwiIFt0eXBlXT1cImZpZWxkLnR5cGVcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRGaWVsZFBsYWNlaG9sZGVyKGZpZWxkKVwiIFthdXRvY29tcGxldGVdPVwiZmllbGQuYXV0b2NvbXBsZXRlXCIgW3NlYXJjaEZuXT1cImZpZWxkLnNlYXJjaEZuXCJcclxuICAgICAgICAgICAgICBbZGlhbG9nSGVscFRleHRdPVwiZmllbGQuZGlhbG9nSGVscFRleHRcIiBbbGFiZWxQb3NpdGlvbl09XCJjb25maWcubGFiZWxQb3NpdGlvblwiIC8+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBAaWYgKGZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmludmFsaWQgJiYgZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8udG91Y2hlZCkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2ZpZWxkX2Rlc2NyaXB0aW9uIHZhbGlkYXRpb25fbWVzc2FnZSBnZmllbGRfdmFsaWRhdGlvbl9tZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgQGlmIChmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy5lcnJvcnM/LlsncmVxdWlyZWQnXSkge1xyXG4gICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgQGlmIChmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy5lcnJvcnM/LlsnZW1haWwnXSkge1xyXG4gICAgICAgICAgICAgICAgUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgQGlmIChmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy5lcnJvcnM/LlsnbWlubGVuZ3RoJ10pIHtcclxuICAgICAgICAgICAgICAgIE1pbmltdW0gbGVuZ3RoIGlzIHt7IGZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmVycm9ycz8uWydtaW5sZW5ndGgnXS5yZXF1aXJlZExlbmd0aCB9fSBjaGFyYWN0ZXJzLlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAaWYgKGZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmVycm9ycz8uWydtYXhsZW5ndGgnXSkge1xyXG4gICAgICAgICAgICAgICAgTWF4aW11bSBsZW5ndGggaXMge3sgZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8uZXJyb3JzPy5bJ21heGxlbmd0aCddLnJlcXVpcmVkTGVuZ3RoIH19IGNoYXJhY3RlcnMuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIEBpZiAoZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8uZXJyb3JzPy5bJ3BhdHRlcm4nXSkge1xyXG4gICAgICAgICAgICAgICAgUGxlYXNlIG1hdGNoIHRoZSByZXF1aXJlZCBmb3JtYXQuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIEBpZiAoZmllbGQudmFsaWRhdGlvbk1lc3NhZ2VzICYmIGZvcm1Hcm91cC5pbnZhbGlkICYmICFmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy5pbnZhbGlkICYmXHJcbiAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy50b3VjaGVkKSB7XHJcbiAgICAgICAgICAgIEBmb3IgKGVycm9yIG9mIGZvcm1Hcm91cC5lcnJvcnMgfCBrZXl2YWx1ZTsgdHJhY2sgZXJyb3IpIHtcclxuICAgICAgICAgICAgICBAaWYgKGZpZWxkLnZhbGlkYXRpb25NZXNzYWdlc1tlcnJvci5rZXldKSB7XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdmaWVsZF9kZXNjcmlwdGlvbiB2YWxpZGF0aW9uX21lc3NhZ2UgZ2ZpZWxkX3ZhbGlkYXRpb25fbWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZmllbGQudmFsaWRhdGlvbk1lc3NhZ2VzW2Vycm9yLmtleV0gfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIEBpZihjb25maWcuc3VibWl0VGV4dCl7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJnZm9ybV9mb290ZXJcIj5cclxuICAgICAgICA8cHRyLWJ1dHRvbiBidXR0b25UeXBlPVwic3VibWl0XCIgW2lzRGlzYWJsZWRdPVwibG9hZGluZyB8fCAhZm9ybUdyb3VwLnZhbGlkXCJcclxuICAgICAgICAgIFtleHRyYUNsYXNzZXNdPVwiY29uZmlnLnN1Ym1pdEZ1bGxXaWR0aCA/ICdnZm9ybS1idXR0b24tLXdpZHRoLWZ1bGwnIDogJydcIj57e2NvbmZpZy5zdWJtaXRUZXh0fX08L3B0ci1idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICA8L2Zvcm0+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,139 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-empty-function */
2
- import { ChangeDetectionStrategy, Component, forwardRef, HostListener, Input, signal, ViewChild } from '@angular/core';
3
- import { FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
4
- import { PtrDialogListComponent } from '../../shared/ptr-dialog-list/ptr-dialog-list.component';
5
- import { debounceTime, distinctUntilChanged, of, Subject, switchMap } from 'rxjs';
6
- import { CommonModule } from '@angular/common';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/forms";
9
- export class PtrInputComponent {
10
- type = 'text';
11
- label = '';
12
- placeholder = '';
13
- autocomplete = '';
14
- description = '';
15
- dialogHelpText = '';
16
- searchFn;
17
- labelPosition = 'top';
18
- input;
19
- dialogList;
20
- componentId = Math.random().toString(36).substring(2);
21
- minChars = 3;
22
- searchTerms = new Subject();
23
- hasSelectedOption = false;
24
- inputId = `${this.componentId}-input`;
25
- inputValue = signal('');
26
- searchResultOptions = signal([]);
27
- onChange = () => { };
28
- onTouched = () => { };
29
- onDocumentClick(event) {
30
- if (this.searchFn) {
31
- if (!this.dialogList?.dialog.nativeElement.contains(event.target) && this.dialogList?.isOpen()) {
32
- this.dialogList.closeDialog();
33
- }
34
- }
35
- }
36
- ngOnInit() {
37
- this.setupSearch();
38
- }
39
- setupSearch() {
40
- if (this.searchFn) {
41
- this.searchTerms.pipe(debounceTime(300), distinctUntilChanged(), switchMap(term => term.length >= this.minChars ? this.searchFn(term) : of([]))).subscribe(results => {
42
- this.searchResultOptions.set(results);
43
- if (results.length > 0 && this.dialogList) {
44
- this.dialogList.openDialogSilent();
45
- }
46
- else {
47
- this.dialogList.closeDialog();
48
- }
49
- });
50
- }
51
- }
52
- onInputChange(value) {
53
- this.inputValue.set(value);
54
- this.onChange(value);
55
- if (!this.hasSelectedOption && this.searchFn && value.length >= this.minChars) {
56
- this.searchTerms.next(value);
57
- }
58
- this.hasSelectedOption = false;
59
- }
60
- onOptionSelected(optionValue) {
61
- this.hasSelectedOption = true;
62
- this.inputValue.set(optionValue ?? '');
63
- this.onChange(optionValue ?? '');
64
- if (this.dialogList) {
65
- this.dialogList.closeDialog();
66
- }
67
- }
68
- onFocus() {
69
- if (this.searchResultOptions().length > 0 && this.dialogList && !this.hasSelectedOption) {
70
- this.dialogList.openDialogSilent();
71
- }
72
- }
73
- onBlur() {
74
- this.onTouched();
75
- }
76
- writeValue(value) {
77
- this.inputValue.set(value ?? '');
78
- }
79
- registerOnChange(fn) {
80
- this.onChange = fn;
81
- }
82
- registerOnTouched(fn) {
83
- this.onTouched = fn;
84
- }
85
- setDisabledState(isDisabled) {
86
- if (this.input?.nativeElement) {
87
- this.input.nativeElement.disabled = isDisabled;
88
- }
89
- }
90
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
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: [
92
- {
93
- provide: NG_VALUE_ACCESSOR,
94
- useExisting: forwardRef(() => PtrInputComponent),
95
- multi: true
96
- }
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 @switch (type) {\r\n @case ('textarea') {\r\n <textarea #input [id]=\"inputId\" [attr.autocomplete]=\"autocomplete || null\" [attr.placeholder]=\"placeholder || null\"\r\n [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [rows]=\"3\"></textarea>\r\n }\r\n @default {\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 }\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 });
98
- }
99
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: PtrInputComponent, decorators: [{
100
- type: Component,
101
- args: [{ selector: 'ptr-input', standalone: true, imports: [
102
- CommonModule,
103
- FormsModule,
104
- ReactiveFormsModule,
105
- PtrDialogListComponent
106
- ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
107
- {
108
- provide: NG_VALUE_ACCESSOR,
109
- useExisting: forwardRef(() => PtrInputComponent),
110
- multi: true
111
- }
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 @switch (type) {\r\n @case ('textarea') {\r\n <textarea #input [id]=\"inputId\" [attr.autocomplete]=\"autocomplete || null\" [attr.placeholder]=\"placeholder || null\"\r\n [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [rows]=\"3\"></textarea>\r\n }\r\n @default {\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 }\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" }]
113
- }], propDecorators: { type: [{
114
- type: Input
115
- }], label: [{
116
- type: Input
117
- }], placeholder: [{
118
- type: Input
119
- }], autocomplete: [{
120
- type: Input
121
- }], description: [{
122
- type: Input
123
- }], dialogHelpText: [{
124
- type: Input
125
- }], searchFn: [{
126
- type: Input
127
- }], labelPosition: [{
128
- type: Input
129
- }], input: [{
130
- type: ViewChild,
131
- args: ['input']
132
- }], dialogList: [{
133
- type: ViewChild,
134
- args: ['dialogList']
135
- }], onDocumentClick: [{
136
- type: HostListener,
137
- args: ['document:click', ['$event']]
138
- }] } });
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHRyLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zL2lucHV0L3B0ci1pbnB1dC9wdHItaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvZm9ybXMvaW5wdXQvcHRyLWlucHV0L3B0ci1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNJLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDaEcsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQXFCL0MsTUFBTSxPQUFPLGlCQUFpQjtJQUVuQixJQUFJLEdBQXlGLE1BQU0sQ0FBQztJQUNwRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsV0FBVyxHQUFtQixFQUFFLENBQUM7SUFDakMsWUFBWSxHQUFJLEVBQUUsQ0FBQztJQUNuQixXQUFXLEdBQUksRUFBRSxDQUFDO0lBQ2xCLGNBQWMsR0FBSSxFQUFFLENBQUM7SUFDckIsUUFBUSxDQUEwQztJQUNsRCxhQUFhLEdBQXNCLEtBQUssQ0FBQztJ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a0NBLDJDRHZCSSxZQUFZLDhCQUNaLFdBQVcsOG1CQUNYLG1CQUFtQiwrQkFDbkIsc0JBQXNCOzsyRkFZYixpQkFBaUI7a0JBbkI3QixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsc0JBQXNCO3FCQUN2QixtQkFFZ0IsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQzs0QkFDaEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7OEJBSVEsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFYyxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBQ08sVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQWN2QixlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24gKi9cclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgZm9yd2FyZFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBzaWduYWwsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBQdHJEaWFsb2dMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3B0ci1kaWFsb2ctbGlzdC9wdHItZGlhbG9nLWxpc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwdHItaW5wdXQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgUHRyRGlhbG9nTGlzdENvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3B0ci1pbnB1dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQdHJJbnB1dENvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHRySW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgdHlwZTogJ3RleHQnIHwgJ251bWJlcicgfCAnZW1haWwnIHwgJ3Bhc3N3b3JkJyB8ICdzZWFyY2gnIHwgJ2hpZGRlbicgfCAnZGF0ZScgfCAndGV4dGFyZWEnID0gJ3RleHQnO1xyXG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCBudWxsID0gJyc7XHJcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlPyA9ICcnO1xyXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uPyA9ICcnO1xyXG4gIEBJbnB1dCgpIGRpYWxvZ0hlbHBUZXh0PyA9ICcnO1xyXG4gIEBJbnB1dCgpIHNlYXJjaEZuPzogKHRlcm06IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmdbXT47XHJcbiAgQElucHV0KCkgbGFiZWxQb3NpdGlvbj86ICd0b3AnIHwgJ2lubGluZScgPSAndG9wJztcclxuXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnZGlhbG9nTGlzdCcpIGRpYWxvZ0xpc3QhOiBQdHJEaWFsb2dMaXN0Q29tcG9uZW50O1xyXG5cclxuICBwcml2YXRlIGNvbXBvbmVudElkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpO1xyXG4gIHByaXZhdGUgbWluQ2hhcnMgPSAzO1xyXG4gIHByaXZhdGUgc2VhcmNoVGVybXMgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgcHJpdmF0ZSBoYXNTZWxlY3RlZE9wdGlvbiA9IGZhbHNlO1xyXG5cclxuICBpbnB1dElkID0gYCR7dGhpcy5jb21wb25lbnRJZH0taW5wdXRgO1xyXG4gIGlucHV0VmFsdWUgPSBzaWduYWwoJycpO1xyXG4gIHNlYXJjaFJlc3VsdE9wdGlvbnMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcclxuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7IH07XHJcbiAgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4geyB9O1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hGbikge1xyXG4gICAgICBpZiAoIXRoaXMuZGlhbG9nTGlzdD8uZGlhbG9nLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpICYmIHRoaXMuZGlhbG9nTGlzdD8uaXNPcGVuKCkpIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ0xpc3QuY2xvc2VEaWFsb2coKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldHVwU2VhcmNoKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwU2VhcmNoKCkge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoRm4pIHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXJtcy5waXBlKFxyXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgc3dpdGNoTWFwKHRlcm0gPT4gdGVybS5sZW5ndGggPj0gdGhpcy5taW5DaGFycyA/IHRoaXMuc2VhcmNoRm4hKHRlcm0pIDogb2YoW10pKVxyXG4gICAgICApLnN1YnNjcmliZShyZXN1bHRzID0+IHtcclxuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdE9wdGlvbnMuc2V0KHJlc3VsdHMpO1xyXG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA+IDAgJiYgdGhpcy5kaWFsb2dMaXN0KSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ0xpc3Qub3BlbkRpYWxvZ1NpbGVudCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ0xpc3QuY2xvc2VEaWFsb2coKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25JbnB1dENoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmlucHV0VmFsdWUuc2V0KHZhbHVlKTtcclxuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgaWYgKCF0aGlzLmhhc1NlbGVjdGVkT3B0aW9uICYmIHRoaXMuc2VhcmNoRm4gJiYgdmFsdWUubGVuZ3RoID49IHRoaXMubWluQ2hhcnMpIHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXJtcy5uZXh0KHZhbHVlKTtcclxuICAgIH1cclxuICAgIHRoaXMuaGFzU2VsZWN0ZWRPcHRpb24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uT3B0aW9uU2VsZWN0ZWQob3B0aW9uVmFsdWU6IHN0cmluZyB8IG51bGwpIHtcclxuICAgIHRoaXMuaGFzU2VsZWN0ZWRPcHRpb24gPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuaW5wdXRWYWx1ZS5zZXQob3B0aW9uVmFsdWUgPz8gJycpO1xyXG4gICAgdGhpcy5vbkNoYW5nZShvcHRpb25WYWx1ZSA/PyAnJyk7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dMaXN0KSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nTGlzdC5jbG9zZURpYWxvZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Gb2N1cygpIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaFJlc3VsdE9wdGlvbnMoKS5sZW5ndGggPiAwICYmIHRoaXMuZGlhbG9nTGlzdCAmJiAhdGhpcy5oYXNTZWxlY3RlZE9wdGlvbikge1xyXG4gICAgICB0aGlzLmRpYWxvZ0xpc3Qub3BlbkRpYWxvZ1NpbGVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25CbHVyKCkge1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pbnB1dFZhbHVlLnNldCh2YWx1ZSA/PyAnJyk7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pbnB1dD8ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGxhYmVsIGNsYXNzPVwiZ2ZpZWxkX2xhYmVsIGdmb3JtLWZpZWxkLWxhYmVsXCIgW2F0dHIuZm9yXT1cImlucHV0SWRcIlxyXG4gIFtjbGFzcy5nZmllbGQtLWlucHV0LXdyYXBwZXItLWxhYmVsLWlubGluZV09XCJsYWJlbFBvc2l0aW9uID09PSAnaW5saW5lJ1wiPnt7IGxhYmVsIH19PC9sYWJlbD5cclxuQGlmKGRlc2NyaXB0aW9uKXtcclxuICA8ZGl2IGNsYXNzPVwiZ2ZpZWxkX2Rlc2NyaXB0aW9uXCI+e3tkZXNjcmlwdGlvbn19PC9kaXY+XHJcbn1cclxuPGRpdiBjbGFzcz1cImdmaWVsZC0taW5wdXQtd3JhcHBlciBnaW5wdXRfY29udGFpbmVyXCJcclxuICBbY2xhc3MuZ2ZpZWxkLS1pbnB1dC13cmFwcGVyLS1sYWJlbC1pbmxpbmVdPVwibGFiZWxQb3NpdGlvbiA9PT0gJ2lubGluZSdcIj5cclxuXHJcbiAgQHN3aXRjaCAodHlwZSkge1xyXG4gIEBjYXNlICgndGV4dGFyZWEnKSB7XHJcbiAgPHRleHRhcmVhICNpbnB1dCBbaWRdPVwiaW5wdXRJZFwiIFthdHRyLmF1dG9jb21wbGV0ZV09XCJhdXRvY29tcGxldGUgfHwgbnVsbFwiIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8IG51bGxcIlxyXG4gICAgW25nTW9kZWxdPVwiaW5wdXRWYWx1ZSgpXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCIgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIChibHVyKT1cIm9uQmx1cigpXCIgW3Jvd3NdPVwiM1wiPjwvdGV4dGFyZWE+XHJcbiAgfVxyXG4gIEBkZWZhdWx0IHtcclxuICA8aW5wdXQgI2lucHV0IFtpZF09XCJpbnB1dElkXCIgW3R5cGVdPVwidHlwZVwiIFthdHRyLmF1dG9jb21wbGV0ZV09XCJhdXRvY29tcGxldGUgfHwgbnVsbFwiXHJcbiAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCBudWxsXCIgW25nTW9kZWxdPVwiaW5wdXRWYWx1ZSgpXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcclxuICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIiAoYmx1cik9XCJvbkJsdXIoKVwiIC8+XHJcbiAgfVxyXG4gIH1cclxuXHJcbiAgQGlmIChsYWJlbFBvc2l0aW9uID09PSAnaW5saW5lJykge1xyXG4gICAgPGZpZWxkc2V0IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiaW5wdXQtZmllbGRzZXRcIj5cclxuICAgICAgPGxlZ2VuZCBjbGFzcz1cImlucHV0LWxlZ2VuZCBnZmllbGRfbGFiZWwgZ2Zvcm0tZmllbGQtbGFiZWwgZ2Zvcm0tZmllbGQtbGFiZWwtLWhpZGRlblwiPlxyXG4gICAgICAgIDxzcGFuPnt7bGFiZWx9fTwvc3Bhbj5cclxuICAgICAgPC9sZWdlbmQ+XHJcbiAgICA8L2ZpZWxkc2V0PlxyXG4gIH1cclxuXHJcbiAgQGlmIChzZWFyY2hGbikge1xyXG4gICAgPHB0ci1kaWFsb2ctbGlzdCAjZGlhbG9nTGlzdCBbb3B0aW9uc109XCJzZWFyY2hSZXN1bHRPcHRpb25zKClcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uT3B0aW9uU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgIFtkaWFsb2dUaXRsZV09XCJkaWFsb2dIZWxwVGV4dFwiIC8+XHJcbiAgICB9XHJcblxyXG48L2Rpdj5cclxuIl19