ng-prime-tools 1.0.34 → 1.0.36
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/esm2022/lib/models/pt-confirm-dialog-config.model.mjs +2 -0
- package/esm2022/lib/models/pt-dialog-config.model.mjs +3 -0
- package/esm2022/lib/models/public-api.mjs +3 -2
- package/esm2022/lib/pt-advanced-prime-table/pt-advanced-prime-table.component.mjs +2 -2
- package/esm2022/lib/pt-confirm-dialog/pt-confirm-dialog.component.mjs +3 -2
- package/esm2022/lib/pt-dialog/pt-dialog.component.mjs +44 -71
- package/fesm2022/ng-prime-tools.mjs +55 -79
- package/fesm2022/ng-prime-tools.mjs.map +1 -1
- package/lib/models/{dialog-config.model.d.ts → pt-confirm-dialog-config.model.d.ts} +2 -2
- package/lib/models/pt-confirm-dialog-config.model.d.ts.map +1 -0
- package/lib/models/pt-dialog-config.model.d.ts +40 -0
- package/lib/models/pt-dialog-config.model.d.ts.map +1 -0
- package/lib/models/public-api.d.ts +2 -1
- package/lib/models/public-api.d.ts.map +1 -1
- package/lib/pt-confirm-dialog/pt-confirm-dialog.component.d.ts +2 -2
- package/lib/pt-confirm-dialog/pt-confirm-dialog.component.d.ts.map +1 -1
- package/lib/pt-dialog/pt-dialog.component.d.ts +11 -38
- package/lib/pt-dialog/pt-dialog.component.d.ts.map +1 -1
- package/lib/pt-metric-panel/pt-metric-panel.component.d.ts +1 -1
- package/package.json +1 -1
- package/esm2022/lib/models/dialog-config.model.mjs +0 -2
- package/lib/models/dialog-config.model.d.ts.map +0 -1
|
@@ -3,111 +3,84 @@ import * as i0 from "@angular/core";
|
|
|
3
3
|
import * as i1 from "@angular/common";
|
|
4
4
|
import * as i2 from "primeng/dialog";
|
|
5
5
|
import * as i3 from "primeng/api";
|
|
6
|
+
const DEFAULT_DIALOG_CONFIG = {
|
|
7
|
+
modal: true,
|
|
8
|
+
closable: true,
|
|
9
|
+
draggable: true,
|
|
10
|
+
resizable: true,
|
|
11
|
+
maximizable: false,
|
|
12
|
+
dismissableMask: false,
|
|
13
|
+
closeOnEscape: true,
|
|
14
|
+
blockScroll: true,
|
|
15
|
+
bodyScrollable: true,
|
|
16
|
+
showFooter: true,
|
|
17
|
+
position: 'center',
|
|
18
|
+
};
|
|
6
19
|
export class PTDialogComponent {
|
|
7
20
|
constructor() {
|
|
8
|
-
/**
|
|
9
|
-
this.
|
|
10
|
-
|
|
11
|
-
this.
|
|
12
|
-
this.modal = true;
|
|
13
|
-
this.closable = true;
|
|
14
|
-
this.draggable = true;
|
|
15
|
-
this.resizable = true;
|
|
16
|
-
this.maximizable = false;
|
|
17
|
-
this.dismissableMask = false;
|
|
18
|
-
this.closeOnEscape = true;
|
|
19
|
-
this.blockScroll = true;
|
|
20
|
-
this.position = 'center';
|
|
21
|
-
/** internal visible flag used by p-dialog */
|
|
22
|
-
this._visible = false;
|
|
21
|
+
/** Single configuration object */
|
|
22
|
+
this._config = { ...DEFAULT_DIALOG_CONFIG };
|
|
23
|
+
// ---- Internal visible state (PUBLIC so template can read it) ----
|
|
24
|
+
this._internalVisible = false;
|
|
23
25
|
this.visibleChange = new EventEmitter();
|
|
24
26
|
}
|
|
27
|
+
set config(value) {
|
|
28
|
+
this._config = { ...DEFAULT_DIALOG_CONFIG, ...(value || {}) };
|
|
29
|
+
}
|
|
30
|
+
get config() {
|
|
31
|
+
return this._config;
|
|
32
|
+
}
|
|
33
|
+
/** Input visible from parent */
|
|
25
34
|
get visible() {
|
|
26
|
-
return this.
|
|
35
|
+
return this._internalVisible;
|
|
27
36
|
}
|
|
28
37
|
set visible(v) {
|
|
29
|
-
this.
|
|
38
|
+
this._internalVisible = v;
|
|
30
39
|
}
|
|
31
|
-
/** Final class applied to p-dialog */
|
|
32
40
|
get dialogStyleClass() {
|
|
33
41
|
return [
|
|
34
42
|
'border-round-3xl',
|
|
35
43
|
'shadow-6',
|
|
36
44
|
'overflow-hidden',
|
|
37
|
-
'pt-dialog-header-blue',
|
|
38
|
-
this.styleClass,
|
|
45
|
+
'pt-dialog-header-blue',
|
|
46
|
+
this.config.styleClass,
|
|
39
47
|
]
|
|
40
48
|
.filter(Boolean)
|
|
41
49
|
.join(' ');
|
|
42
50
|
}
|
|
43
|
-
|
|
51
|
+
get primePosition() {
|
|
52
|
+
return (this.config.position ?? 'center');
|
|
53
|
+
}
|
|
44
54
|
get bodyStyle() {
|
|
45
55
|
const style = {};
|
|
46
|
-
if (this.bodyWidth) {
|
|
47
|
-
style['max-width'] = this.bodyWidth;
|
|
56
|
+
if (this.config.bodyWidth) {
|
|
57
|
+
style['max-width'] = this.config.bodyWidth;
|
|
48
58
|
}
|
|
49
|
-
if (this.bodyHeight) {
|
|
50
|
-
style['max-height'] = this.bodyHeight;
|
|
51
|
-
if (this.bodyScrollable) {
|
|
59
|
+
if (this.config.bodyHeight) {
|
|
60
|
+
style['max-height'] = this.config.bodyHeight;
|
|
61
|
+
if (this.config.bodyScrollable !== false) {
|
|
52
62
|
style['overflow-y'] = 'auto';
|
|
53
63
|
style['overflow-x'] = 'auto';
|
|
54
64
|
}
|
|
55
65
|
}
|
|
56
66
|
return style;
|
|
57
67
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
this.visibleChange.emit(false);
|
|
68
|
+
/** Sync <p-dialog> → parent */
|
|
69
|
+
onInternalVisibleChange(v) {
|
|
70
|
+
this._internalVisible = v;
|
|
71
|
+
this.visibleChange.emit(v);
|
|
63
72
|
}
|
|
64
73
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
65
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTDialogComponent, selector: "pt-dialog", inputs: {
|
|
74
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTDialogComponent, selector: "pt-dialog", inputs: { config: "config", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: "<p-dialog\n [visible]=\"_internalVisible\"\n (visibleChange)=\"onInternalVisibleChange($event)\"\n [header]=\"config.header\"\n [modal]=\"config.modal\"\n [style]=\"config.style\"\n [breakpoints]=\"config.breakpoints\"\n [closable]=\"config.closable\"\n [draggable]=\"config.draggable\"\n [resizable]=\"config.resizable\"\n [maximizable]=\"config.maximizable\"\n [dismissableMask]=\"config.dismissableMask\"\n [closeOnEscape]=\"config.closeOnEscape\"\n [blockScroll]=\"config.blockScroll\"\n [position]=\"primePosition\"\n [contentStyle]=\"config.contentStyle\"\n [styleClass]=\"dialogStyleClass\"\n>\n <!-- HEADER -->\n <ng-template pTemplate=\"header\">\n <div\n class=\"flex align-items-center justify-content-between w-full px-4 pt-3 pb-2\"\n >\n <div class=\"flex align-items-center gap-2\">\n <i\n *ngIf=\"config.headerIconClass\"\n [ngClass]=\"config.headerIconClass\"\n ></i>\n <ng-content select=\"[ptDialogHeader]\"></ng-content>\n <span *ngIf=\"config.header\" class=\"font-bold text-lg\">\n {{ config.header }}\n </span>\n </div>\n </div>\n </ng-template>\n\n <!-- BODY -->\n <div\n class=\"surface-50 px-4 py-4 flex flex-column gap-3\"\n [ngStyle]=\"bodyStyle\"\n >\n <ng-content select=\"[ptDialogContent]\"></ng-content>\n <ng-content></ng-content>\n </div>\n\n <!-- FOOTER -->\n <ng-template pTemplate=\"footer\" *ngIf=\"config.showFooter !== false\">\n <div class=\"surface-100 px-4 py-2 flex justify-content-end gap-2\">\n <ng-content select=\"[ptDialogFooter]\"></ng-content>\n </div>\n </ng-template>\n</p-dialog>\n", styles: [":host ::ng-deep .pt-dialog-header-blue .p-dialog-header{background-color:#e0f2ff;border-bottom:0}:host ::ng-deep .pt-dialog-header-blue .p-dialog-footer{background-color:#f5f6f8!important;border-top:0!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }] }); }
|
|
66
75
|
}
|
|
67
76
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTDialogComponent, decorators: [{
|
|
68
77
|
type: Component,
|
|
69
|
-
args: [{ selector: 'pt-dialog', template: "<p-dialog\n [
|
|
70
|
-
}], propDecorators: {
|
|
71
|
-
type: Input
|
|
72
|
-
}], style: [{
|
|
73
|
-
type: Input
|
|
74
|
-
}], styleClass: [{
|
|
75
|
-
type: Input
|
|
76
|
-
}], headerIconClass: [{
|
|
77
|
-
type: Input
|
|
78
|
-
}], bodyWidth: [{
|
|
79
|
-
type: Input
|
|
80
|
-
}], bodyHeight: [{
|
|
81
|
-
type: Input
|
|
82
|
-
}], bodyScrollable: [{
|
|
83
|
-
type: Input
|
|
84
|
-
}], showFooter: [{
|
|
85
|
-
type: Input
|
|
86
|
-
}], modal: [{
|
|
87
|
-
type: Input
|
|
88
|
-
}], closable: [{
|
|
89
|
-
type: Input
|
|
90
|
-
}], draggable: [{
|
|
91
|
-
type: Input
|
|
92
|
-
}], resizable: [{
|
|
93
|
-
type: Input
|
|
94
|
-
}], maximizable: [{
|
|
95
|
-
type: Input
|
|
96
|
-
}], dismissableMask: [{
|
|
97
|
-
type: Input
|
|
98
|
-
}], closeOnEscape: [{
|
|
99
|
-
type: Input
|
|
100
|
-
}], blockScroll: [{
|
|
101
|
-
type: Input
|
|
102
|
-
}], breakpoints: [{
|
|
103
|
-
type: Input
|
|
104
|
-
}], position: [{
|
|
105
|
-
type: Input
|
|
106
|
-
}], contentStyle: [{
|
|
78
|
+
args: [{ selector: 'pt-dialog', template: "<p-dialog\n [visible]=\"_internalVisible\"\n (visibleChange)=\"onInternalVisibleChange($event)\"\n [header]=\"config.header\"\n [modal]=\"config.modal\"\n [style]=\"config.style\"\n [breakpoints]=\"config.breakpoints\"\n [closable]=\"config.closable\"\n [draggable]=\"config.draggable\"\n [resizable]=\"config.resizable\"\n [maximizable]=\"config.maximizable\"\n [dismissableMask]=\"config.dismissableMask\"\n [closeOnEscape]=\"config.closeOnEscape\"\n [blockScroll]=\"config.blockScroll\"\n [position]=\"primePosition\"\n [contentStyle]=\"config.contentStyle\"\n [styleClass]=\"dialogStyleClass\"\n>\n <!-- HEADER -->\n <ng-template pTemplate=\"header\">\n <div\n class=\"flex align-items-center justify-content-between w-full px-4 pt-3 pb-2\"\n >\n <div class=\"flex align-items-center gap-2\">\n <i\n *ngIf=\"config.headerIconClass\"\n [ngClass]=\"config.headerIconClass\"\n ></i>\n <ng-content select=\"[ptDialogHeader]\"></ng-content>\n <span *ngIf=\"config.header\" class=\"font-bold text-lg\">\n {{ config.header }}\n </span>\n </div>\n </div>\n </ng-template>\n\n <!-- BODY -->\n <div\n class=\"surface-50 px-4 py-4 flex flex-column gap-3\"\n [ngStyle]=\"bodyStyle\"\n >\n <ng-content select=\"[ptDialogContent]\"></ng-content>\n <ng-content></ng-content>\n </div>\n\n <!-- FOOTER -->\n <ng-template pTemplate=\"footer\" *ngIf=\"config.showFooter !== false\">\n <div class=\"surface-100 px-4 py-2 flex justify-content-end gap-2\">\n <ng-content select=\"[ptDialogFooter]\"></ng-content>\n </div>\n </ng-template>\n</p-dialog>\n", styles: [":host ::ng-deep .pt-dialog-header-blue .p-dialog-header{background-color:#e0f2ff;border-bottom:0}:host ::ng-deep .pt-dialog-header-blue .p-dialog-footer{background-color:#f5f6f8!important;border-top:0!important}\n"] }]
|
|
79
|
+
}], propDecorators: { config: [{
|
|
107
80
|
type: Input
|
|
108
81
|
}], visible: [{
|
|
109
82
|
type: Input
|
|
110
83
|
}], visibleChange: [{
|
|
111
84
|
type: Output
|
|
112
85
|
}] } });
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9saWIvcHQtZGlhbG9nL3B0LWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWRpYWxvZy9wdC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFNdkUsTUFBTSxxQkFBcUIsR0FBbUI7SUFDNUMsS0FBSyxFQUFFLElBQUk7SUFDWCxRQUFRLEVBQUUsSUFBSTtJQUNkLFNBQVMsRUFBRSxJQUFJO0lBQ2YsU0FBUyxFQUFFLElBQUk7SUFDZixXQUFXLEVBQUUsS0FBSztJQUNsQixlQUFlLEVBQUUsS0FBSztJQUN0QixhQUFhLEVBQUUsSUFBSTtJQUNuQixXQUFXLEVBQUUsSUFBSTtJQUNqQixjQUFjLEVBQUUsSUFBSTtJQUNwQixVQUFVLEVBQUUsSUFBSTtJQUNoQixRQUFRLEVBQUUsUUFBUTtDQUNuQixDQUFDO0FBT0YsTUFBTSxPQUFPLGlCQUFpQjtJQUw5QjtRQU1FLGtDQUFrQztRQUMxQixZQUFPLEdBQW1CLEVBQUUsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO1FBVS9ELG9FQUFvRTtRQUNwRSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFXZixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7S0F5Q3ZEO0lBN0RDLElBQ0ksTUFBTSxDQUFDLEtBQWlDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFLRCxnQ0FBZ0M7SUFDaEMsSUFDSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLENBQVU7UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBSUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTztZQUNMLGtCQUFrQjtZQUNsQixVQUFVO1lBQ1YsaUJBQWlCO1lBQ2pCLHVCQUF1QjtZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVU7U0FDdkI7YUFDRSxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQW1CLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE1BQU0sS0FBSyxHQUFRLEVBQUUsQ0FBQztRQUV0QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQzdDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1lBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3pDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQzdCLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDL0IsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsdUJBQXVCLENBQUMsQ0FBVTtRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7K0dBaEVVLGlCQUFpQjttR0FBakIsaUJBQWlCLGdKQ3pCOUIsd29EQW9EQTs7NEZEM0JhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxXQUFXOzhCQVNqQixNQUFNO3NCQURULEtBQUs7Z0JBYUYsT0FBTztzQkFEVixLQUFLO2dCQVFJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRGlhbG9nUG9zaXRpb24sXG4gIFBURGlhbG9nQ29uZmlnLFxufSBmcm9tICcuLi9tb2RlbHMvcHQtZGlhbG9nLWNvbmZpZy5tb2RlbCc7XG5cbmNvbnN0IERFRkFVTFRfRElBTE9HX0NPTkZJRzogUFREaWFsb2dDb25maWcgPSB7XG4gIG1vZGFsOiB0cnVlLFxuICBjbG9zYWJsZTogdHJ1ZSxcbiAgZHJhZ2dhYmxlOiB0cnVlLFxuICByZXNpemFibGU6IHRydWUsXG4gIG1heGltaXphYmxlOiBmYWxzZSxcbiAgZGlzbWlzc2FibGVNYXNrOiBmYWxzZSxcbiAgY2xvc2VPbkVzY2FwZTogdHJ1ZSxcbiAgYmxvY2tTY3JvbGw6IHRydWUsXG4gIGJvZHlTY3JvbGxhYmxlOiB0cnVlLFxuICBzaG93Rm9vdGVyOiB0cnVlLFxuICBwb3NpdGlvbjogJ2NlbnRlcicsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwdC1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHQtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHQtZGlhbG9nLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUFREaWFsb2dDb21wb25lbnQge1xuICAvKiogU2luZ2xlIGNvbmZpZ3VyYXRpb24gb2JqZWN0ICovXG4gIHByaXZhdGUgX2NvbmZpZzogUFREaWFsb2dDb25maWcgPSB7IC4uLkRFRkFVTFRfRElBTE9HX0NPTkZJRyB9O1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjb25maWcodmFsdWU6IFBURGlhbG9nQ29uZmlnIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY29uZmlnID0geyAuLi5ERUZBVUxUX0RJQUxPR19DT05GSUcsIC4uLih2YWx1ZSB8fCB7fSkgfTtcbiAgfVxuICBnZXQgY29uZmlnKCk6IFBURGlhbG9nQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgLy8gLS0tLSBJbnRlcm5hbCB2aXNpYmxlIHN0YXRlIChQVUJMSUMgc28gdGVtcGxhdGUgY2FuIHJlYWQgaXQpIC0tLS1cbiAgX2ludGVybmFsVmlzaWJsZSA9IGZhbHNlO1xuXG4gIC8qKiBJbnB1dCB2aXNpYmxlIGZyb20gcGFyZW50ICovXG4gIEBJbnB1dCgpXG4gIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbFZpc2libGU7XG4gIH1cbiAgc2V0IHZpc2libGUodjogYm9vbGVhbikge1xuICAgIHRoaXMuX2ludGVybmFsVmlzaWJsZSA9IHY7XG4gIH1cblxuICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBnZXQgZGlhbG9nU3R5bGVDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICAnYm9yZGVyLXJvdW5kLTN4bCcsXG4gICAgICAnc2hhZG93LTYnLFxuICAgICAgJ292ZXJmbG93LWhpZGRlbicsXG4gICAgICAncHQtZGlhbG9nLWhlYWRlci1ibHVlJyxcbiAgICAgIHRoaXMuY29uZmlnLnN0eWxlQ2xhc3MsXG4gICAgXVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdldCBwcmltZVBvc2l0aW9uKCk6IERpYWxvZ1Bvc2l0aW9uIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLnBvc2l0aW9uID8/ICdjZW50ZXInKSBhcyBEaWFsb2dQb3NpdGlvbjtcbiAgfVxuXG4gIGdldCBib2R5U3R5bGUoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmJvZHlXaWR0aCkge1xuICAgICAgc3R5bGVbJ21heC13aWR0aCddID0gdGhpcy5jb25maWcuYm9keVdpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5ib2R5SGVpZ2h0KSB7XG4gICAgICBzdHlsZVsnbWF4LWhlaWdodCddID0gdGhpcy5jb25maWcuYm9keUhlaWdodDtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5ib2R5U2Nyb2xsYWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgc3R5bGVbJ292ZXJmbG93LXknXSA9ICdhdXRvJztcbiAgICAgICAgc3R5bGVbJ292ZXJmbG93LXgnXSA9ICdhdXRvJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxuICAvKiogU3luYyA8cC1kaWFsb2c+IOKGkiBwYXJlbnQgKi9cbiAgb25JbnRlcm5hbFZpc2libGVDaGFuZ2UodjogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2ludGVybmFsVmlzaWJsZSA9IHY7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodik7XG4gIH1cbn1cbiIsIjxwLWRpYWxvZ1xuICBbdmlzaWJsZV09XCJfaW50ZXJuYWxWaXNpYmxlXCJcbiAgKHZpc2libGVDaGFuZ2UpPVwib25JbnRlcm5hbFZpc2libGVDaGFuZ2UoJGV2ZW50KVwiXG4gIFtoZWFkZXJdPVwiY29uZmlnLmhlYWRlclwiXG4gIFttb2RhbF09XCJjb25maWcubW9kYWxcIlxuICBbc3R5bGVdPVwiY29uZmlnLnN0eWxlXCJcbiAgW2JyZWFrcG9pbnRzXT1cImNvbmZpZy5icmVha3BvaW50c1wiXG4gIFtjbG9zYWJsZV09XCJjb25maWcuY2xvc2FibGVcIlxuICBbZHJhZ2dhYmxlXT1cImNvbmZpZy5kcmFnZ2FibGVcIlxuICBbcmVzaXphYmxlXT1cImNvbmZpZy5yZXNpemFibGVcIlxuICBbbWF4aW1pemFibGVdPVwiY29uZmlnLm1heGltaXphYmxlXCJcbiAgW2Rpc21pc3NhYmxlTWFza109XCJjb25maWcuZGlzbWlzc2FibGVNYXNrXCJcbiAgW2Nsb3NlT25Fc2NhcGVdPVwiY29uZmlnLmNsb3NlT25Fc2NhcGVcIlxuICBbYmxvY2tTY3JvbGxdPVwiY29uZmlnLmJsb2NrU2Nyb2xsXCJcbiAgW3Bvc2l0aW9uXT1cInByaW1lUG9zaXRpb25cIlxuICBbY29udGVudFN0eWxlXT1cImNvbmZpZy5jb250ZW50U3R5bGVcIlxuICBbc3R5bGVDbGFzc109XCJkaWFsb2dTdHlsZUNsYXNzXCJcbj5cbiAgPCEtLSBIRUFERVIgLS0+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctZnVsbCBweC00IHB0LTMgcGItMlwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxpXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuaGVhZGVySWNvbkNsYXNzXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb25maWcuaGVhZGVySWNvbkNsYXNzXCJcbiAgICAgICAgPjwvaT5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3B0RGlhbG9nSGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjb25maWcuaGVhZGVyXCIgY2xhc3M9XCJmb250LWJvbGQgdGV4dC1sZ1wiPlxuICAgICAgICAgIHt7IGNvbmZpZy5oZWFkZXIgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPCEtLSBCT0RZIC0tPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzdXJmYWNlLTUwIHB4LTQgcHktNCBmbGV4IGZsZXgtY29sdW1uIGdhcC0zXCJcbiAgICBbbmdTdHlsZV09XCJib2R5U3R5bGVcIlxuICA+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3B0RGlhbG9nQ29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cblxuICA8IS0tIEZPT1RFUiAtLT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiICpuZ0lmPVwiY29uZmlnLnNob3dGb290ZXIgIT09IGZhbHNlXCI+XG4gICAgPGRpdiBjbGFzcz1cInN1cmZhY2UtMTAwIHB4LTQgcHktMiBmbGV4IGp1c3RpZnktY29udGVudC1lbmQgZ2FwLTJcIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltwdERpYWxvZ0Zvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZGlhbG9nPlxuIl19
|