@patter/ngx-components 0.5.16 → 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.
- package/README.md +24 -24
- package/fesm2022/patter-ngx-components.mjs +93 -79
- package/fesm2022/patter-ngx-components.mjs.map +1 -1
- package/lib/forms/input/ptr-input/ptr-input.component.d.ts +1 -1
- package/lib/services/loading.service.d.ts +3 -0
- package/package.json +3 -5
- package/patter-ngx-components-19.0.0.tgz +0 -0
- package/esm2022/lib/components/tabs/ptr-tab/ptr-tab.component.mjs +0 -23
- package/esm2022/lib/components/tabs/ptr-tabs/ptr-tabs.component.mjs +0 -71
- package/esm2022/lib/dialog/ptr-dialog/ptr-dialog.component.mjs +0 -46
- package/esm2022/lib/dialog/ptr-dialog.service.mjs +0 -48
- package/esm2022/lib/dialog/ptr-tooltip/ptr-tooltip.component.mjs +0 -32
- package/esm2022/lib/forms/form/form.component.mjs +0 -102
- package/esm2022/lib/forms/input/ptr-input/ptr-input.component.mjs +0 -139
- package/esm2022/lib/forms/input/select/select.component.mjs +0 -129
- package/esm2022/lib/forms/interfaces.mjs +0 -2
- package/esm2022/lib/forms/shared/ptr-dialog-list/ptr-dialog-list.component.mjs +0 -195
- package/esm2022/lib/loading-spinner/loading-spinner.component.mjs +0 -11
- package/esm2022/lib/loading-spinner/loading-spinner.directive.mjs +0 -83
- package/esm2022/lib/menu/menu.component.mjs +0 -16
- package/esm2022/lib/ptr-breadcrumbs/interfaces.mjs +0 -2
- package/esm2022/lib/ptr-breadcrumbs/ptr-breadcrumbs.component.mjs +0 -60
- package/esm2022/lib/ptr-button/ptr-button.component.mjs +0 -111
- package/esm2022/lib/ptr-title/ptr-title.component.mjs +0 -54
- package/esm2022/lib/ptr-toaster/interfaces.mjs +0 -2
- package/esm2022/lib/ptr-toaster/ptr-toaster/ptr-toaster.component.mjs +0 -15
- package/esm2022/lib/ptr-toaster/ptr-toaster.service.mjs +0 -52
- package/esm2022/lib/services/loading.service.mjs +0 -83
- package/esm2022/patter-ngx-components.mjs +0 -5
- package/esm2022/public-api.mjs +0 -22
|
@@ -1,23 +0,0 @@
|
|
|
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=
|
|
@@ -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\">×</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\">×</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 ('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\"\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.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
|
-
}
|
|
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 ('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\"\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+XHJcblxyXG4gICAgICBAZm9yIChmaWVsZCBvZiBjb25maWcuZmllbGRzOyB0cmFjayBmaWVsZC5uYW1lKSB7XHJcbiAgICAgICAgQGlmKGlzRmllbGRWaXNpYmxlKGZpZWxkKSkge1xyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2ZpZWxkIGdmaWVsZC0td2lkdGgte3tmaWVsZC5zaXplfX1cIiBbY2xhc3MuZ2Zvcm1faGlkZGVuXT1cImZpZWxkLnR5cGUgPT09ICdoaWRkZW4nXCJcclxuICAgICAgICAgIFtjbGFzcy5nZmllbGRfZXJyb3JdPVwiZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8uaW52YWxpZCAmJiBmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy50b3VjaGVkXCIgW2NsYXNzLmdmaWVsZC0tbGFiZWwtaW5saW5lXT1cImNvbmZpZy5sYWJlbFBvc2l0aW9uID09PSAnaW5saW5lJ1wiPlxyXG5cclxuICAgICAgICAgIEBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcclxuICAgICAgICAgICAgQGNhc2UgKCd0ZXh0YXJlYScpIHtcclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnZmllbGRfbGFiZWwgZ2Zvcm0tZmllbGQtbGFiZWxcIiBbZm9yXT1cImZpZWxkLm5hbWVcIj57eyBnZXRGaWVsZExhYmVsKGZpZWxkKSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgQGlmKGZpZWxkLmRlc2NyaXB0aW9uKXtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnZmllbGRfZGVzY3JpcHRpb25cIj57e2ZpZWxkLmRlc2NyaXB0aW9ufX08L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdmaWVsZC0taW5wdXQtd3JhcHBlciBnaW5wdXRfY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgW2lkXT1cImZpZWxkLm5hbWVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLm5hbWVcIiBbYXR0ci5wbGFjZWhvbGRlcl09XCJnZXRGaWVsZFBsYWNlaG9sZGVyKGZpZWxkKVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQGNhc2UgKCdzZWxlY3QnKSB7XHJcbiAgICAgICAgICAgICAgPHB0ci1zZWxlY3QgW2xhYmVsXT1cImdldEZpZWxkTGFiZWwoZmllbGQpXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5uYW1lXCIgW29wdGlvbnNdPVwiZmllbGQub3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZ2V0RmllbGRQbGFjZWhvbGRlcihmaWVsZClcIiBbbGFiZWxQb3NpdGlvbl09XCJjb25maWcubGFiZWxQb3NpdGlvblwiIC8+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 <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 });
|
|
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 <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" }]
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHRyLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zL2lucHV0L3B0ci1pbnB1dC9wdHItaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvZm9ybXMvaW5wdXQvcHRyLWlucHV0L3B0ci1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNJLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDaEcsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQXFCL0MsTUFBTSxPQUFPLGlCQUFpQjtJQUVuQixJQUFJLEdBQTRFLE1BQU0sQ0FBQztJQUN2RixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsV0FBVyxHQUFtQixFQUFFLENBQUM7SUFDakMsWUFBWSxHQUFJLEVBQUUsQ0FBQztJQUNuQixXQUFXLEdBQUksRUFBRSxDQUFDO0lBQ2xCLGNBQWMsR0FBSSxFQUFFLENBQUM7SUFDckIsUUFBUSxDQUEwQztJQUNsRCxhQUFhLEdBQXNCLEtBQUssQ0FBQztJ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MEJBLDJDRGZJLFlBQVksOEJBQ1osV0FBVyw4bUJBQ1gsbUJBQW1CLCtCQUNuQixzQkFBc0I7OzJGQVliLGlCQUFpQjtrQkFuQjdCLFNBQVM7K0JBQ0UsV0FBVyxjQUNULElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixzQkFBc0I7cUJBQ3ZCLG1CQUVnQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDOzRCQUNoRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs4QkFJUSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVjLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDTyxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBY3ZCLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiAqL1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIHNpZ25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFB0ckRpYWxvZ0xpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvcHRyLWRpYWxvZy1saXN0L3B0ci1kaWFsb2ctbGlzdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3B0ci1pbnB1dCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBQdHJEaWFsb2dMaXN0Q29tcG9uZW50XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcHRyLWlucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFB0cklucHV0Q29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQdHJJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSB0eXBlOiAndGV4dCcgfCAnbnVtYmVyJyB8ICdlbWFpbCcgfCAncGFzc3dvcmQnIHwgJ3NlYXJjaCcgfCAnaGlkZGVuJyB8ICdkYXRlJyA9ICd0ZXh0JztcclxuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgbnVsbCA9ICcnO1xyXG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZT8gPSAnJztcclxuICBASW5wdXQoKSBkZXNjcmlwdGlvbj8gPSAnJztcclxuICBASW5wdXQoKSBkaWFsb2dIZWxwVGV4dD8gPSAnJztcclxuICBASW5wdXQoKSBzZWFyY2hGbj86ICh0ZXJtOiBzdHJpbmcpID0+IE9ic2VydmFibGU8c3RyaW5nW10+O1xyXG4gIEBJbnB1dCgpIGxhYmVsUG9zaXRpb24/OiAndG9wJyB8ICdpbmxpbmUnID0gJ3RvcCc7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0xpc3QnKSBkaWFsb2dMaXN0ITogUHRyRGlhbG9nTGlzdENvbXBvbmVudDtcclxuXHJcbiAgcHJpdmF0ZSBjb21wb25lbnRJZCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTtcclxuICBwcml2YXRlIG1pbkNoYXJzID0gMztcclxuICBwcml2YXRlIHNlYXJjaFRlcm1zID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHByaXZhdGUgaGFzU2VsZWN0ZWRPcHRpb24gPSBmYWxzZTtcclxuXHJcbiAgaW5wdXRJZCA9IGAke3RoaXMuY29tcG9uZW50SWR9LWlucHV0YDtcclxuICBpbnB1dFZhbHVlID0gc2lnbmFsKCcnKTtcclxuICBzZWFyY2hSZXN1bHRPcHRpb25zID0gc2lnbmFsPHN0cmluZ1tdPihbXSk7XHJcbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkID0gKCkgPT4geyB9O1xyXG4gIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoRm4pIHtcclxuICAgICAgaWYgKCF0aGlzLmRpYWxvZ0xpc3Q/LmRpYWxvZy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSAmJiB0aGlzLmRpYWxvZ0xpc3Q/LmlzT3BlbigpKSB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dMaXN0LmNsb3NlRGlhbG9nKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXR1cFNlYXJjaCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFNlYXJjaCgpIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaEZuKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGVybXMucGlwZShcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgIHN3aXRjaE1hcCh0ZXJtID0+IHRlcm0ubGVuZ3RoID49IHRoaXMubWluQ2hhcnMgPyB0aGlzLnNlYXJjaEZuISh0ZXJtKSA6IG9mKFtdKSlcclxuICAgICAgKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRPcHRpb25zLnNldChyZXN1bHRzKTtcclxuICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPiAwICYmIHRoaXMuZGlhbG9nTGlzdCkge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dMaXN0Lm9wZW5EaWFsb2dTaWxlbnQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dMaXN0LmNsb3NlRGlhbG9nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSW5wdXRDaGFuZ2UodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5pbnB1dFZhbHVlLnNldCh2YWx1ZSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcclxuICAgIGlmICghdGhpcy5oYXNTZWxlY3RlZE9wdGlvbiAmJiB0aGlzLnNlYXJjaEZuICYmIHZhbHVlLmxlbmd0aCA+PSB0aGlzLm1pbkNoYXJzKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGVybXMubmV4dCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhhc1NlbGVjdGVkT3B0aW9uID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbk9wdGlvblNlbGVjdGVkKG9wdGlvblZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICB0aGlzLmhhc1NlbGVjdGVkT3B0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmlucHV0VmFsdWUuc2V0KG9wdGlvblZhbHVlID8/ICcnKTtcclxuICAgIHRoaXMub25DaGFuZ2Uob3B0aW9uVmFsdWUgPz8gJycpO1xyXG4gICAgaWYgKHRoaXMuZGlhbG9nTGlzdCkge1xyXG4gICAgICB0aGlzLmRpYWxvZ0xpc3QuY2xvc2VEaWFsb2coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRm9jdXMoKSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hSZXN1bHRPcHRpb25zKCkubGVuZ3RoID4gMCAmJiB0aGlzLmRpYWxvZ0xpc3QgJiYgIXRoaXMuaGFzU2VsZWN0ZWRPcHRpb24pIHtcclxuICAgICAgdGhpcy5kaWFsb2dMaXN0Lm9wZW5EaWFsb2dTaWxlbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQmx1cigpIHtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5wdXRWYWx1ZS5zZXQodmFsdWUgPz8gJycpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxsYWJlbCBjbGFzcz1cImdmaWVsZF9sYWJlbCBnZm9ybS1maWVsZC1sYWJlbFwiIFthdHRyLmZvcl09XCJpbnB1dElkXCJcclxuICBbY2xhc3MuZ2ZpZWxkLS1pbnB1dC13cmFwcGVyLS1sYWJlbC1pbmxpbmVdPVwibGFiZWxQb3NpdGlvbiA9PT0gJ2lubGluZSdcIj57eyBsYWJlbCB9fTwvbGFiZWw+XHJcbkBpZihkZXNjcmlwdGlvbil7XHJcbiAgPGRpdiBjbGFzcz1cImdmaWVsZF9kZXNjcmlwdGlvblwiPnt7ZGVzY3JpcHRpb259fTwvZGl2PlxyXG59XHJcbjxkaXYgY2xhc3M9XCJnZmllbGQtLWlucHV0LXdyYXBwZXIgZ2lucHV0X2NvbnRhaW5lclwiXHJcbiAgW2NsYXNzLmdmaWVsZC0taW5wdXQtd3JhcHBlci0tbGFiZWwtaW5saW5lXT1cImxhYmVsUG9zaXRpb24gPT09ICdpbmxpbmUnXCI+XHJcblxyXG4gIDxpbnB1dCAjaW5wdXQgW2lkXT1cImlucHV0SWRcIiBbdHlwZV09XCJ0eXBlXCIgW2F0dHIuYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZSB8fCBudWxsXCJcclxuICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8IG51bGxcIiBbbmdNb2RlbF09XCJpbnB1dFZhbHVlKClcIiAobmdNb2RlbENoYW5nZSk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIChibHVyKT1cIm9uQmx1cigpXCIgLz5cclxuXHJcbiAgQGlmIChsYWJlbFBvc2l0aW9uID09PSAnaW5saW5lJykge1xyXG4gICAgPGZpZWxkc2V0IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiaW5wdXQtZmllbGRzZXRcIj5cclxuICAgICAgPGxlZ2VuZCBjbGFzcz1cImlucHV0LWxlZ2VuZCBnZmllbGRfbGFiZWwgZ2Zvcm0tZmllbGQtbGFiZWwgZ2Zvcm0tZmllbGQtbGFiZWwtLWhpZGRlblwiPlxyXG4gICAgICAgIDxzcGFuPnt7bGFiZWx9fTwvc3Bhbj5cclxuICAgICAgPC9sZWdlbmQ+XHJcbiAgICA8L2ZpZWxkc2V0PlxyXG4gIH1cclxuXHJcbiAgQGlmIChzZWFyY2hGbikge1xyXG4gICAgPHB0ci1kaWFsb2ctbGlzdCAjZGlhbG9nTGlzdCBbb3B0aW9uc109XCJzZWFyY2hSZXN1bHRPcHRpb25zKClcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uT3B0aW9uU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgIFtkaWFsb2dUaXRsZV09XCJkaWFsb2dIZWxwVGV4dFwiIC8+XHJcbiAgICB9XHJcblxyXG48L2Rpdj5cclxuIl19
|