ng-prime-tools 1.0.41 → 1.0.43

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.
@@ -71,11 +71,11 @@ export class PTDialogComponent {
71
71
  this.visibleChange.emit(v);
72
72
  }
73
73
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
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"] }] }); }
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 class=\"pt-dialog-header-inner\">\n <div class=\"pt-dialog-header-left\">\n <i\n *ngIf=\"config.headerIconClass\"\n class=\"pt-dialog-header-icon\"\n [ngClass]=\"config.headerIconClass\"\n ></i>\n\n <ng-content select=\"[ptDialogHeader]\"></ng-content>\n\n <span *ngIf=\"config.header\" class=\"pt-dialog-header-title\">\n {{ config.header }}\n </span>\n </div>\n </div>\n </ng-template>\n\n <!-- BODY -->\n <div class=\"pt-dialog-body\" [ngStyle]=\"bodyStyle\">\n <div class=\"pt-dialog-body-inner\">\n <ng-content select=\"[ptDialogContent]\"></ng-content>\n <ng-content></ng-content>\n </div>\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}.pt-dialog-header-inner{width:100%;padding:1rem 1rem .75rem;display:flex;align-items:center;justify-content:space-between}.pt-dialog-header-left{display:flex;align-items:center}.pt-dialog-header-icon{margin-right:.5rem}.pt-dialog-header-title{font-weight:700;font-size:1.125rem}.pt-dialog-body{padding:1.25rem 1rem 1rem;display:flex;justify-content:center}.pt-dialog-body-inner{width:100%;max-width:100%;display:flex;flex-direction:column;gap:.75rem}\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"] }] }); }
75
75
  }
76
76
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTDialogComponent, decorators: [{
77
77
  type: Component,
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"] }]
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 class=\"pt-dialog-header-inner\">\n <div class=\"pt-dialog-header-left\">\n <i\n *ngIf=\"config.headerIconClass\"\n class=\"pt-dialog-header-icon\"\n [ngClass]=\"config.headerIconClass\"\n ></i>\n\n <ng-content select=\"[ptDialogHeader]\"></ng-content>\n\n <span *ngIf=\"config.header\" class=\"pt-dialog-header-title\">\n {{ config.header }}\n </span>\n </div>\n </div>\n </ng-template>\n\n <!-- BODY -->\n <div class=\"pt-dialog-body\" [ngStyle]=\"bodyStyle\">\n <div class=\"pt-dialog-body-inner\">\n <ng-content select=\"[ptDialogContent]\"></ng-content>\n <ng-content></ng-content>\n </div>\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}.pt-dialog-header-inner{width:100%;padding:1rem 1rem .75rem;display:flex;align-items:center;justify-content:space-between}.pt-dialog-header-left{display:flex;align-items:center}.pt-dialog-header-icon{margin-right:.5rem}.pt-dialog-header-title{font-weight:700;font-size:1.125rem}.pt-dialog-body{padding:1.25rem 1rem 1rem;display:flex;justify-content:center}.pt-dialog-body-inner{width:100%;max-width:100%;display:flex;flex-direction:column;gap:.75rem}\n"] }]
79
79
  }], propDecorators: { config: [{
80
80
  type: Input
81
81
  }], visible: [{
@@ -83,4 +83,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
83
83
  }], visibleChange: [{
84
84
  type: Output
85
85
  }] } });
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9saWIvcHQtZGlhbG9nL3B0LWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWRpYWxvZy9wdC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFNdkUsTUFBTSxxQkFBcUIsR0FBbUI7SUFDNUMsS0FBSyxFQUFFLElBQUk7SUFDWCxRQUFRLEVBQUUsSUFBSTtJQUNkLFNBQVMsRUFBRSxJQUFJO0lBQ2YsU0FBUyxFQUFFLElBQUk7SUFDZixXQUFXLEVBQUUsS0FBSztJQUNsQixlQUFlLEVBQUUsS0FBSztJQUN0QixhQUFhLEVBQUUsSUFBSTtJQUNuQixXQUFXLEVBQUUsSUFBSTtJQUNqQixjQUFjLEVBQUUsSUFBSTtJQUNwQixVQUFVLEVBQUUsSUFBSTtJQUNoQixRQUFRLEVBQUUsUUFBUTtDQUNuQixDQUFDO0FBT0YsTUFBTSxPQUFPLGlCQUFpQjtJQUw5QjtRQU1FLGtDQUFrQztRQUMxQixZQUFPLEdBQW1CLEVBQUUsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO1FBVS9ELG9FQUFvRTtRQUNwRSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFXZixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7S0F5Q3ZEO0lBN0RDLElBQ0ksTUFBTSxDQUFDLEtBQWlDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFLRCxnQ0FBZ0M7SUFDaEMsSUFDSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLENBQVU7UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBSUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTztZQUNMLGtCQUFrQjtZQUNsQixVQUFVO1lBQ1YsaUJBQWlCO1lBQ2pCLHVCQUF1QjtZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVU7U0FDdkI7YUFDRSxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQW1CLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE1BQU0sS0FBSyxHQUFRLEVBQUUsQ0FBQztRQUV0QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQzdDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1lBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3pDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQzdCLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDL0IsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsdUJBQXVCLENBQUMsQ0FBVTtRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7K0dBaEVVLGlCQUFpQjttR0FBakIsaUJBQWlCLGdKQ3pCOUIsd29EQW9EQTs7NEZEM0JhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxXQUFXOzhCQVNqQixNQUFNO3NCQURULEtBQUs7Z0JBYUYsT0FBTztzQkFEVixLQUFLO2dCQVFJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRGlhbG9nUG9zaXRpb24sXG4gIFBURGlhbG9nQ29uZmlnLFxufSBmcm9tICcuLi9tb2RlbHMvcHQtZGlhbG9nLWNvbmZpZy5tb2RlbCc7XG5cbmNvbnN0IERFRkFVTFRfRElBTE9HX0NPTkZJRzogUFREaWFsb2dDb25maWcgPSB7XG4gIG1vZGFsOiB0cnVlLFxuICBjbG9zYWJsZTogdHJ1ZSxcbiAgZHJhZ2dhYmxlOiB0cnVlLFxuICByZXNpemFibGU6IHRydWUsXG4gIG1heGltaXphYmxlOiBmYWxzZSxcbiAgZGlzbWlzc2FibGVNYXNrOiBmYWxzZSxcbiAgY2xvc2VPbkVzY2FwZTogdHJ1ZSxcbiAgYmxvY2tTY3JvbGw6IHRydWUsXG4gIGJvZHlTY3JvbGxhYmxlOiB0cnVlLFxuICBzaG93Rm9vdGVyOiB0cnVlLFxuICBwb3NpdGlvbjogJ2NlbnRlcicsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwdC1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHQtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHQtZGlhbG9nLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUFREaWFsb2dDb21wb25lbnQge1xuICAvKiogU2luZ2xlIGNvbmZpZ3VyYXRpb24gb2JqZWN0ICovXG4gIHByaXZhdGUgX2NvbmZpZzogUFREaWFsb2dDb25maWcgPSB7IC4uLkRFRkFVTFRfRElBTE9HX0NPTkZJRyB9O1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjb25maWcodmFsdWU6IFBURGlhbG9nQ29uZmlnIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY29uZmlnID0geyAuLi5ERUZBVUxUX0RJQUxPR19DT05GSUcsIC4uLih2YWx1ZSB8fCB7fSkgfTtcbiAgfVxuICBnZXQgY29uZmlnKCk6IFBURGlhbG9nQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgLy8gLS0tLSBJbnRlcm5hbCB2aXNpYmxlIHN0YXRlIChQVUJMSUMgc28gdGVtcGxhdGUgY2FuIHJlYWQgaXQpIC0tLS1cbiAgX2ludGVybmFsVmlzaWJsZSA9IGZhbHNlO1xuXG4gIC8qKiBJbnB1dCB2aXNpYmxlIGZyb20gcGFyZW50ICovXG4gIEBJbnB1dCgpXG4gIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbFZpc2libGU7XG4gIH1cbiAgc2V0IHZpc2libGUodjogYm9vbGVhbikge1xuICAgIHRoaXMuX2ludGVybmFsVmlzaWJsZSA9IHY7XG4gIH1cblxuICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBnZXQgZGlhbG9nU3R5bGVDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICAnYm9yZGVyLXJvdW5kLTN4bCcsXG4gICAgICAnc2hhZG93LTYnLFxuICAgICAgJ292ZXJmbG93LWhpZGRlbicsXG4gICAgICAncHQtZGlhbG9nLWhlYWRlci1ibHVlJyxcbiAgICAgIHRoaXMuY29uZmlnLnN0eWxlQ2xhc3MsXG4gICAgXVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdldCBwcmltZVBvc2l0aW9uKCk6IERpYWxvZ1Bvc2l0aW9uIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLnBvc2l0aW9uID8/ICdjZW50ZXInKSBhcyBEaWFsb2dQb3NpdGlvbjtcbiAgfVxuXG4gIGdldCBib2R5U3R5bGUoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmJvZHlXaWR0aCkge1xuICAgICAgc3R5bGVbJ21heC13aWR0aCddID0gdGhpcy5jb25maWcuYm9keVdpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5ib2R5SGVpZ2h0KSB7XG4gICAgICBzdHlsZVsnbWF4LWhlaWdodCddID0gdGhpcy5jb25maWcuYm9keUhlaWdodDtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5ib2R5U2Nyb2xsYWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgc3R5bGVbJ292ZXJmbG93LXknXSA9ICdhdXRvJztcbiAgICAgICAgc3R5bGVbJ292ZXJmbG93LXgnXSA9ICdhdXRvJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxuICAvKiogU3luYyA8cC1kaWFsb2c+IOKGkiBwYXJlbnQgKi9cbiAgb25JbnRlcm5hbFZpc2libGVDaGFuZ2UodjogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2ludGVybmFsVmlzaWJsZSA9IHY7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodik7XG4gIH1cbn1cbiIsIjxwLWRpYWxvZ1xuICBbdmlzaWJsZV09XCJfaW50ZXJuYWxWaXNpYmxlXCJcbiAgKHZpc2libGVDaGFuZ2UpPVwib25JbnRlcm5hbFZpc2libGVDaGFuZ2UoJGV2ZW50KVwiXG4gIFtoZWFkZXJdPVwiY29uZmlnLmhlYWRlclwiXG4gIFttb2RhbF09XCJjb25maWcubW9kYWxcIlxuICBbc3R5bGVdPVwiY29uZmlnLnN0eWxlXCJcbiAgW2JyZWFrcG9pbnRzXT1cImNvbmZpZy5icmVha3BvaW50c1wiXG4gIFtjbG9zYWJsZV09XCJjb25maWcuY2xvc2FibGVcIlxuICBbZHJhZ2dhYmxlXT1cImNvbmZpZy5kcmFnZ2FibGVcIlxuICBbcmVzaXphYmxlXT1cImNvbmZpZy5yZXNpemFibGVcIlxuICBbbWF4aW1pemFibGVdPVwiY29uZmlnLm1heGltaXphYmxlXCJcbiAgW2Rpc21pc3NhYmxlTWFza109XCJjb25maWcuZGlzbWlzc2FibGVNYXNrXCJcbiAgW2Nsb3NlT25Fc2NhcGVdPVwiY29uZmlnLmNsb3NlT25Fc2NhcGVcIlxuICBbYmxvY2tTY3JvbGxdPVwiY29uZmlnLmJsb2NrU2Nyb2xsXCJcbiAgW3Bvc2l0aW9uXT1cInByaW1lUG9zaXRpb25cIlxuICBbY29udGVudFN0eWxlXT1cImNvbmZpZy5jb250ZW50U3R5bGVcIlxuICBbc3R5bGVDbGFzc109XCJkaWFsb2dTdHlsZUNsYXNzXCJcbj5cbiAgPCEtLSBIRUFERVIgLS0+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctZnVsbCBweC00IHB0LTMgcGItMlwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxpXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuaGVhZGVySWNvbkNsYXNzXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb25maWcuaGVhZGVySWNvbkNsYXNzXCJcbiAgICAgICAgPjwvaT5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3B0RGlhbG9nSGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjb25maWcuaGVhZGVyXCIgY2xhc3M9XCJmb250LWJvbGQgdGV4dC1sZ1wiPlxuICAgICAgICAgIHt7IGNvbmZpZy5oZWFkZXIgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPCEtLSBCT0RZIC0tPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzdXJmYWNlLTUwIHB4LTQgcHktNCBmbGV4IGZsZXgtY29sdW1uIGdhcC0zXCJcbiAgICBbbmdTdHlsZV09XCJib2R5U3R5bGVcIlxuICA+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3B0RGlhbG9nQ29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cblxuICA8IS0tIEZPT1RFUiAtLT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiICpuZ0lmPVwiY29uZmlnLnNob3dGb290ZXIgIT09IGZhbHNlXCI+XG4gICAgPGRpdiBjbGFzcz1cInN1cmZhY2UtMTAwIHB4LTQgcHktMiBmbGV4IGp1c3RpZnktY29udGVudC1lbmQgZ2FwLTJcIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltwdERpYWxvZ0Zvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZGlhbG9nPlxuIl19
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9saWIvcHQtZGlhbG9nL3B0LWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWRpYWxvZy9wdC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFNdkUsTUFBTSxxQkFBcUIsR0FBbUI7SUFDNUMsS0FBSyxFQUFFLElBQUk7SUFDWCxRQUFRLEVBQUUsSUFBSTtJQUNkLFNBQVMsRUFBRSxJQUFJO0lBQ2YsU0FBUyxFQUFFLElBQUk7SUFDZixXQUFXLEVBQUUsS0FBSztJQUNsQixlQUFlLEVBQUUsS0FBSztJQUN0QixhQUFhLEVBQUUsSUFBSTtJQUNuQixXQUFXLEVBQUUsSUFBSTtJQUNqQixjQUFjLEVBQUUsSUFBSTtJQUNwQixVQUFVLEVBQUUsSUFBSTtJQUNoQixRQUFRLEVBQUUsUUFBUTtDQUNuQixDQUFDO0FBT0YsTUFBTSxPQUFPLGlCQUFpQjtJQUw5QjtRQU1FLGtDQUFrQztRQUMxQixZQUFPLEdBQW1CLEVBQUUsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO1FBVS9ELG9FQUFvRTtRQUNwRSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFXZixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7S0F5Q3ZEO0lBN0RDLElBQ0ksTUFBTSxDQUFDLEtBQWlDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFLRCxnQ0FBZ0M7SUFDaEMsSUFDSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLENBQVU7UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBSUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTztZQUNMLGtCQUFrQjtZQUNsQixVQUFVO1lBQ1YsaUJBQWlCO1lBQ2pCLHVCQUF1QjtZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVU7U0FDdkI7YUFDRSxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQW1CLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE1BQU0sS0FBSyxHQUFRLEVBQUUsQ0FBQztRQUV0QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQzdDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1lBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3pDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQzdCLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDL0IsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsdUJBQXVCLENBQUMsQ0FBVTtRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7K0dBaEVVLGlCQUFpQjttR0FBakIsaUJBQWlCLGdKQ3pCOUIsdW9EQW9EQTs7NEZEM0JhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxXQUFXOzhCQVNqQixNQUFNO3NCQURULEtBQUs7Z0JBYUYsT0FBTztzQkFEVixLQUFLO2dCQVFJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRGlhbG9nUG9zaXRpb24sXG4gIFBURGlhbG9nQ29uZmlnLFxufSBmcm9tICcuLi9tb2RlbHMvcHQtZGlhbG9nLWNvbmZpZy5tb2RlbCc7XG5cbmNvbnN0IERFRkFVTFRfRElBTE9HX0NPTkZJRzogUFREaWFsb2dDb25maWcgPSB7XG4gIG1vZGFsOiB0cnVlLFxuICBjbG9zYWJsZTogdHJ1ZSxcbiAgZHJhZ2dhYmxlOiB0cnVlLFxuICByZXNpemFibGU6IHRydWUsXG4gIG1heGltaXphYmxlOiBmYWxzZSxcbiAgZGlzbWlzc2FibGVNYXNrOiBmYWxzZSxcbiAgY2xvc2VPbkVzY2FwZTogdHJ1ZSxcbiAgYmxvY2tTY3JvbGw6IHRydWUsXG4gIGJvZHlTY3JvbGxhYmxlOiB0cnVlLFxuICBzaG93Rm9vdGVyOiB0cnVlLFxuICBwb3NpdGlvbjogJ2NlbnRlcicsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwdC1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHQtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHQtZGlhbG9nLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUFREaWFsb2dDb21wb25lbnQge1xuICAvKiogU2luZ2xlIGNvbmZpZ3VyYXRpb24gb2JqZWN0ICovXG4gIHByaXZhdGUgX2NvbmZpZzogUFREaWFsb2dDb25maWcgPSB7IC4uLkRFRkFVTFRfRElBTE9HX0NPTkZJRyB9O1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjb25maWcodmFsdWU6IFBURGlhbG9nQ29uZmlnIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY29uZmlnID0geyAuLi5ERUZBVUxUX0RJQUxPR19DT05GSUcsIC4uLih2YWx1ZSB8fCB7fSkgfTtcbiAgfVxuICBnZXQgY29uZmlnKCk6IFBURGlhbG9nQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgLy8gLS0tLSBJbnRlcm5hbCB2aXNpYmxlIHN0YXRlIChQVUJMSUMgc28gdGVtcGxhdGUgY2FuIHJlYWQgaXQpIC0tLS1cbiAgX2ludGVybmFsVmlzaWJsZSA9IGZhbHNlO1xuXG4gIC8qKiBJbnB1dCB2aXNpYmxlIGZyb20gcGFyZW50ICovXG4gIEBJbnB1dCgpXG4gIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbFZpc2libGU7XG4gIH1cbiAgc2V0IHZpc2libGUodjogYm9vbGVhbikge1xuICAgIHRoaXMuX2ludGVybmFsVmlzaWJsZSA9IHY7XG4gIH1cblxuICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBnZXQgZGlhbG9nU3R5bGVDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICAnYm9yZGVyLXJvdW5kLTN4bCcsXG4gICAgICAnc2hhZG93LTYnLFxuICAgICAgJ292ZXJmbG93LWhpZGRlbicsXG4gICAgICAncHQtZGlhbG9nLWhlYWRlci1ibHVlJyxcbiAgICAgIHRoaXMuY29uZmlnLnN0eWxlQ2xhc3MsXG4gICAgXVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdldCBwcmltZVBvc2l0aW9uKCk6IERpYWxvZ1Bvc2l0aW9uIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLnBvc2l0aW9uID8/ICdjZW50ZXInKSBhcyBEaWFsb2dQb3NpdGlvbjtcbiAgfVxuXG4gIGdldCBib2R5U3R5bGUoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmJvZHlXaWR0aCkge1xuICAgICAgc3R5bGVbJ21heC13aWR0aCddID0gdGhpcy5jb25maWcuYm9keVdpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5ib2R5SGVpZ2h0KSB7XG4gICAgICBzdHlsZVsnbWF4LWhlaWdodCddID0gdGhpcy5jb25maWcuYm9keUhlaWdodDtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5ib2R5U2Nyb2xsYWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgc3R5bGVbJ292ZXJmbG93LXknXSA9ICdhdXRvJztcbiAgICAgICAgc3R5bGVbJ292ZXJmbG93LXgnXSA9ICdhdXRvJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxuICAvKiogU3luYyA8cC1kaWFsb2c+IOKGkiBwYXJlbnQgKi9cbiAgb25JbnRlcm5hbFZpc2libGVDaGFuZ2UodjogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2ludGVybmFsVmlzaWJsZSA9IHY7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodik7XG4gIH1cbn1cbiIsIjxwLWRpYWxvZ1xuICBbdmlzaWJsZV09XCJfaW50ZXJuYWxWaXNpYmxlXCJcbiAgKHZpc2libGVDaGFuZ2UpPVwib25JbnRlcm5hbFZpc2libGVDaGFuZ2UoJGV2ZW50KVwiXG4gIFtoZWFkZXJdPVwiY29uZmlnLmhlYWRlclwiXG4gIFttb2RhbF09XCJjb25maWcubW9kYWxcIlxuICBbc3R5bGVdPVwiY29uZmlnLnN0eWxlXCJcbiAgW2JyZWFrcG9pbnRzXT1cImNvbmZpZy5icmVha3BvaW50c1wiXG4gIFtjbG9zYWJsZV09XCJjb25maWcuY2xvc2FibGVcIlxuICBbZHJhZ2dhYmxlXT1cImNvbmZpZy5kcmFnZ2FibGVcIlxuICBbcmVzaXphYmxlXT1cImNvbmZpZy5yZXNpemFibGVcIlxuICBbbWF4aW1pemFibGVdPVwiY29uZmlnLm1heGltaXphYmxlXCJcbiAgW2Rpc21pc3NhYmxlTWFza109XCJjb25maWcuZGlzbWlzc2FibGVNYXNrXCJcbiAgW2Nsb3NlT25Fc2NhcGVdPVwiY29uZmlnLmNsb3NlT25Fc2NhcGVcIlxuICBbYmxvY2tTY3JvbGxdPVwiY29uZmlnLmJsb2NrU2Nyb2xsXCJcbiAgW3Bvc2l0aW9uXT1cInByaW1lUG9zaXRpb25cIlxuICBbY29udGVudFN0eWxlXT1cImNvbmZpZy5jb250ZW50U3R5bGVcIlxuICBbc3R5bGVDbGFzc109XCJkaWFsb2dTdHlsZUNsYXNzXCJcbj5cbiAgPCEtLSBIRUFERVIgLS0+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicHQtZGlhbG9nLWhlYWRlci1pbm5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInB0LWRpYWxvZy1oZWFkZXItbGVmdFwiPlxuICAgICAgICA8aVxuICAgICAgICAgICpuZ0lmPVwiY29uZmlnLmhlYWRlckljb25DbGFzc1wiXG4gICAgICAgICAgY2xhc3M9XCJwdC1kaWFsb2ctaGVhZGVyLWljb25cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbmZpZy5oZWFkZXJJY29uQ2xhc3NcIlxuICAgICAgICA+PC9pPlxuXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltwdERpYWxvZ0hlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjb25maWcuaGVhZGVyXCIgY2xhc3M9XCJwdC1kaWFsb2ctaGVhZGVyLXRpdGxlXCI+XG4gICAgICAgICAge3sgY29uZmlnLmhlYWRlciB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8IS0tIEJPRFkgLS0+XG4gIDxkaXYgY2xhc3M9XCJwdC1kaWFsb2ctYm9keVwiIFtuZ1N0eWxlXT1cImJvZHlTdHlsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJwdC1kaWFsb2ctYm9keS1pbm5lclwiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3B0RGlhbG9nQ29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRk9PVEVSIC0tPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCIgKm5nSWY9XCJjb25maWcuc2hvd0Zvb3RlciAhPT0gZmFsc2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwic3VyZmFjZS0xMDAgcHgtNCBweS0yIGZsZXgganVzdGlmeS1jb250ZW50LWVuZCBnYXAtMlwiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3B0RGlhbG9nRm9vdGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvcC1kaWFsb2c+XG4iXX0=
@@ -1,22 +1,26 @@
1
+ // ng-prime-tools/projects/ng-prime-tools/src/lib/pt-dropdown/pt-dropdown.component.ts
1
2
  import { Component, Input } from '@angular/core';
2
3
  import { FormControl, Validators } from '@angular/forms';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "@angular/common";
5
6
  import * as i2 from "@angular/forms";
6
7
  import * as i3 from "primeng/dropdown";
8
+ import * as i4 from "primeng/api";
7
9
  export class PTDropdownComponent {
8
10
  ngOnInit() {
9
11
  this.setupControl();
10
12
  }
13
+ // -------------------------------------------------------------------
14
+ // 🔧 Control & validation
15
+ // -------------------------------------------------------------------
11
16
  setupControl() {
12
17
  let control = this.formGroup.get(this.formField.name);
13
18
  if (!control) {
14
- control = new FormControl(this.formField.value || null);
19
+ control = new FormControl(this.formField.value ?? null);
15
20
  this.formGroup.addControl(this.formField.name, control);
16
21
  }
17
22
  const validators = this.getValidators();
18
23
  control.setValidators(validators);
19
- // Manage the disabled state using form control
20
24
  setTimeout(() => {
21
25
  if (this.formField.disabled !== undefined) {
22
26
  if (this.formField.disabled) {
@@ -43,15 +47,121 @@ export class PTDropdownComponent {
43
47
  }
44
48
  return '';
45
49
  }
50
+ // -------------------------------------------------------------------
51
+ // 🎨 Icon helpers
52
+ // -------------------------------------------------------------------
53
+ /**
54
+ * Résout l’icône à utiliser pour une option :
55
+ * 1) option.iconStyle | option.iconImageStyle
56
+ * 2) option.icon
57
+ * 3) formField.icon (fallback global)
58
+ */
59
+ getResolvedIcon(option) {
60
+ const source = option?.iconStyle ||
61
+ option?.iconImageStyle ||
62
+ option?.icon ||
63
+ this.formField.icon;
64
+ if (!source) {
65
+ return { type: 'none' };
66
+ }
67
+ // 1) Image icon (IconImageStyle)
68
+ if (this.isIconImageStyle(source)) {
69
+ const img = source;
70
+ return {
71
+ type: 'image',
72
+ imageUrl: img.url,
73
+ imageStyle: this.buildImageStyle(img),
74
+ };
75
+ }
76
+ // 2) Font icon full style (IconStyle)
77
+ if (this.isIconStyle(source)) {
78
+ const style = source;
79
+ return {
80
+ type: 'font',
81
+ fontIconClass: style.code, // ex: 'pi pi-flag' or 'fa fa-flag'
82
+ fontIconStyle: this.buildFontIconStyle(style),
83
+ };
84
+ }
85
+ // 3) Simple string of classes (PrimeNG / Font Awesome)
86
+ if (typeof source === 'string') {
87
+ return {
88
+ type: 'font',
89
+ fontIconClass: source,
90
+ fontIconStyle: {},
91
+ };
92
+ }
93
+ return { type: 'none' };
94
+ }
95
+ isIconStyle(value) {
96
+ return !!value && typeof value === 'object' && 'code' in value;
97
+ }
98
+ isIconImageStyle(value) {
99
+ return !!value && typeof value === 'object' && 'url' in value;
100
+ }
101
+ buildFontIconStyle(icon) {
102
+ const styles = {};
103
+ if (icon.color) {
104
+ styles.color = icon.color;
105
+ }
106
+ if (icon.fontSize) {
107
+ styles['font-size'] = icon.fontSize;
108
+ }
109
+ if (icon.backgroundColor) {
110
+ styles['background-color'] = icon.backgroundColor;
111
+ styles.padding = styles.padding ?? '0.15rem 0.3rem';
112
+ }
113
+ if (icon.shape === 'circular') {
114
+ styles['border-radius'] = '50%';
115
+ }
116
+ else if (icon.shape === 'rounded-square') {
117
+ styles['border-radius'] = '6px';
118
+ }
119
+ return styles;
120
+ }
121
+ buildImageStyle(icon) {
122
+ const styles = {};
123
+ if (icon.width)
124
+ styles.width = icon.width;
125
+ if (icon.height)
126
+ styles.height = icon.height;
127
+ if (icon.marginLeft)
128
+ styles['margin-left'] = icon.marginLeft;
129
+ if (icon.marginRight)
130
+ styles['margin-right'] = icon.marginRight;
131
+ if (icon.marginTop)
132
+ styles['margin-top'] = icon.marginTop;
133
+ if (icon.marginBottom)
134
+ styles['margin-bottom'] = icon.marginBottom;
135
+ if (icon.shape === 'circular') {
136
+ styles['border-radius'] = '50%';
137
+ }
138
+ else if (icon.shape === 'rounded-square') {
139
+ styles['border-radius'] = '6px';
140
+ }
141
+ return styles;
142
+ }
143
+ getIconPosition(option) {
144
+ const src = option?.iconStyle ||
145
+ option?.iconImageStyle ||
146
+ option?.icon ||
147
+ this.formField.icon;
148
+ if (this.isIconStyle(src) && src.position) {
149
+ return src.position;
150
+ }
151
+ if (this.isIconImageStyle(src) && src.position) {
152
+ return src.position;
153
+ }
154
+ return 'left';
155
+ }
46
156
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
47
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTDropdownComponent, selector: "pt-dropdown", inputs: { formGroup: "formGroup", formField: "formField" }, ngImport: i0, template: "<div\n [formGroup]=\"formGroup\"\n class=\"form-field\"\n [ngStyle]=\"{ width: formField.width || '100%' }\"\n *ngIf=\"!formField.hidden\"\n>\n <label *ngIf=\"formField.label\">{{ formField.label }}</label>\n <p-dropdown\n [formControlName]=\"formField.name\"\n [options]=\"formField.options\"\n [placeholder]=\"formField.placeholder || 'Select an option'\"\n optionLabel=\"label\"\n ></p-dropdown>\n <div\n *ngIf=\"\n formGroup.get(formField.name)?.invalid &&\n formGroup.get(formField.name)?.touched\n \"\n >\n <small class=\"p-error\">{{ getErrorMessage() }}</small>\n </div>\n</div>\n", styles: [".form-field{margin-bottom:1rem}.form-field label{display:block;margin-bottom:.5rem;font-weight:700}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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: i3.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }] }); }
157
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTDropdownComponent, selector: "pt-dropdown", inputs: { formGroup: "formGroup", formField: "formField" }, ngImport: i0, template: "<!-- ng-prime-tools/projects/ng-prime-tools/src/lib/pt-dropdown/pt-dropdown.component.html -->\n<div\n [formGroup]=\"formGroup\"\n class=\"form-field\"\n [ngStyle]=\"{ width: formField.width || '100%' }\"\n *ngIf=\"!formField.hidden\"\n>\n <label *ngIf=\"formField.label\">{{ formField.label }}</label>\n\n <p-dropdown\n [formControlName]=\"formField.name\"\n [options]=\"formField.options\"\n [placeholder]=\"formField.placeholder || 'Select an option'\"\n optionLabel=\"label\"\n >\n <!-- Selected value template -->\n <ng-template pTemplate=\"selectedItem\" let-option>\n <ng-container *ngIf=\"option; else placeholderTpl\">\n <div class=\"pt-dropdown-item\">\n <ng-container *ngIf=\"getResolvedIcon(option) as iconMeta\">\n <!-- IMAGE ICON -->\n <img\n *ngIf=\"iconMeta.type === 'image'\"\n [src]=\"iconMeta.imageUrl\"\n [ngStyle]=\"iconMeta.imageStyle\"\n class=\"pt-dropdown-icon-image\"\n />\n\n <!-- FONT ICON (PrimeNG / FontAwesome) -->\n <i\n *ngIf=\"iconMeta.type === 'font'\"\n [ngClass]=\"iconMeta.fontIconClass\"\n [ngStyle]=\"iconMeta.fontIconStyle\"\n class=\"pt-dropdown-icon-font\"\n ></i>\n </ng-container>\n\n <span class=\"pt-dropdown-label\">{{ option.label }}</span>\n </div>\n </ng-container>\n </ng-template>\n\n <!-- Placeholder when no value selected -->\n <ng-template #placeholderTpl>\n <span>{{ formField.placeholder || \"Select an option\" }}</span>\n </ng-template>\n\n <!-- Items template -->\n <ng-template pTemplate=\"item\" let-option>\n <div class=\"pt-dropdown-item\">\n <ng-container *ngIf=\"getResolvedIcon(option) as iconMeta\">\n <img\n *ngIf=\"iconMeta.type === 'image'\"\n [src]=\"iconMeta.imageUrl\"\n [ngStyle]=\"iconMeta.imageStyle\"\n class=\"pt-dropdown-icon-image\"\n />\n\n <i\n *ngIf=\"iconMeta.type === 'font'\"\n [ngClass]=\"iconMeta.fontIconClass\"\n [ngStyle]=\"iconMeta.fontIconStyle\"\n class=\"pt-dropdown-icon-font\"\n ></i>\n </ng-container>\n\n <span class=\"pt-dropdown-label\">{{ option.label }}</span>\n </div>\n </ng-template>\n </p-dropdown>\n\n <div\n *ngIf=\"\n formGroup.get(formField.name)?.invalid &&\n formGroup.get(formField.name)?.touched\n \"\n >\n <small class=\"p-error\">{{ getErrorMessage() }}</small>\n </div>\n</div>\n", styles: [".form-field{display:flex;flex-direction:column;gap:.25rem}.pt-dropdown-item{display:flex;align-items:center;gap:.5rem}.pt-dropdown-icon-image{object-fit:cover}.pt-dropdown-icon-font{display:inline-flex;align-items:center;justify-content:center}.pt-dropdown-label{display:inline-block}\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: "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: i3.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }] }); }
48
158
  }
49
159
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTDropdownComponent, decorators: [{
50
160
  type: Component,
51
- args: [{ selector: 'pt-dropdown', template: "<div\n [formGroup]=\"formGroup\"\n class=\"form-field\"\n [ngStyle]=\"{ width: formField.width || '100%' }\"\n *ngIf=\"!formField.hidden\"\n>\n <label *ngIf=\"formField.label\">{{ formField.label }}</label>\n <p-dropdown\n [formControlName]=\"formField.name\"\n [options]=\"formField.options\"\n [placeholder]=\"formField.placeholder || 'Select an option'\"\n optionLabel=\"label\"\n ></p-dropdown>\n <div\n *ngIf=\"\n formGroup.get(formField.name)?.invalid &&\n formGroup.get(formField.name)?.touched\n \"\n >\n <small class=\"p-error\">{{ getErrorMessage() }}</small>\n </div>\n</div>\n", styles: [".form-field{margin-bottom:1rem}.form-field label{display:block;margin-bottom:.5rem;font-weight:700}\n"] }]
161
+ args: [{ selector: 'pt-dropdown', template: "<!-- ng-prime-tools/projects/ng-prime-tools/src/lib/pt-dropdown/pt-dropdown.component.html -->\n<div\n [formGroup]=\"formGroup\"\n class=\"form-field\"\n [ngStyle]=\"{ width: formField.width || '100%' }\"\n *ngIf=\"!formField.hidden\"\n>\n <label *ngIf=\"formField.label\">{{ formField.label }}</label>\n\n <p-dropdown\n [formControlName]=\"formField.name\"\n [options]=\"formField.options\"\n [placeholder]=\"formField.placeholder || 'Select an option'\"\n optionLabel=\"label\"\n >\n <!-- Selected value template -->\n <ng-template pTemplate=\"selectedItem\" let-option>\n <ng-container *ngIf=\"option; else placeholderTpl\">\n <div class=\"pt-dropdown-item\">\n <ng-container *ngIf=\"getResolvedIcon(option) as iconMeta\">\n <!-- IMAGE ICON -->\n <img\n *ngIf=\"iconMeta.type === 'image'\"\n [src]=\"iconMeta.imageUrl\"\n [ngStyle]=\"iconMeta.imageStyle\"\n class=\"pt-dropdown-icon-image\"\n />\n\n <!-- FONT ICON (PrimeNG / FontAwesome) -->\n <i\n *ngIf=\"iconMeta.type === 'font'\"\n [ngClass]=\"iconMeta.fontIconClass\"\n [ngStyle]=\"iconMeta.fontIconStyle\"\n class=\"pt-dropdown-icon-font\"\n ></i>\n </ng-container>\n\n <span class=\"pt-dropdown-label\">{{ option.label }}</span>\n </div>\n </ng-container>\n </ng-template>\n\n <!-- Placeholder when no value selected -->\n <ng-template #placeholderTpl>\n <span>{{ formField.placeholder || \"Select an option\" }}</span>\n </ng-template>\n\n <!-- Items template -->\n <ng-template pTemplate=\"item\" let-option>\n <div class=\"pt-dropdown-item\">\n <ng-container *ngIf=\"getResolvedIcon(option) as iconMeta\">\n <img\n *ngIf=\"iconMeta.type === 'image'\"\n [src]=\"iconMeta.imageUrl\"\n [ngStyle]=\"iconMeta.imageStyle\"\n class=\"pt-dropdown-icon-image\"\n />\n\n <i\n *ngIf=\"iconMeta.type === 'font'\"\n [ngClass]=\"iconMeta.fontIconClass\"\n [ngStyle]=\"iconMeta.fontIconStyle\"\n class=\"pt-dropdown-icon-font\"\n ></i>\n </ng-container>\n\n <span class=\"pt-dropdown-label\">{{ option.label }}</span>\n </div>\n </ng-template>\n </p-dropdown>\n\n <div\n *ngIf=\"\n formGroup.get(formField.name)?.invalid &&\n formGroup.get(formField.name)?.touched\n \"\n >\n <small class=\"p-error\">{{ getErrorMessage() }}</small>\n </div>\n</div>\n", styles: [".form-field{display:flex;flex-direction:column;gap:.25rem}.pt-dropdown-item{display:flex;align-items:center;gap:.5rem}.pt-dropdown-icon-image{object-fit:cover}.pt-dropdown-icon-font{display:inline-flex;align-items:center;justify-content:center}.pt-dropdown-label{display:inline-block}\n"] }]
52
162
  }], propDecorators: { formGroup: [{
53
163
  type: Input
54
164
  }], formField: [{
55
165
  type: Input
56
166
  }] } });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9wdC1kcm9wZG93bi9wdC1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWRyb3Bkb3duL3B0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBYSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBUXBFLE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFnQixDQUFDO1FBRXJFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbEMsK0NBQStDO1FBQy9DLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQzVCLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDeEMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhO1FBQ25CLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUFJLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLGNBQWMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDOytHQS9DVSxtQkFBbUI7bUdBQW5CLG1CQUFtQiwrR0NUaEMsdW5CQXNCQTs7NEZEYmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGFBQWE7OEJBS2QsU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybURyb3Bkb3duRmllbGQgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1kcm9wLWRvd24tZmllbGQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwdC1kcm9wZG93bicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wdC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3B0LWRyb3Bkb3duLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUFREcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgZm9ybUZpZWxkITogRm9ybURyb3Bkb3duRmllbGQ7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXR1cENvbnRyb2woKTtcbiAgfVxuXG4gIHNldHVwQ29udHJvbCgpIHtcbiAgICBsZXQgY29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLmZvcm1GaWVsZC5uYW1lKSBhcyBGb3JtQ29udHJvbDtcblxuICAgIGlmICghY29udHJvbCkge1xuICAgICAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCh0aGlzLmZvcm1GaWVsZC52YWx1ZSB8fCBudWxsKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2wodGhpcy5mb3JtRmllbGQubmFtZSwgY29udHJvbCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMuZ2V0VmFsaWRhdG9ycygpO1xuICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcblxuICAgIC8vIE1hbmFnZSB0aGUgZGlzYWJsZWQgc3RhdGUgdXNpbmcgZm9ybSBjb250cm9sXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5mb3JtRmllbGQuZGlzYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodGhpcy5mb3JtRmllbGQuZGlzYWJsZWQpIHtcbiAgICAgICAgICBjb250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWxpZGF0b3JzKCkge1xuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbXTtcbiAgICBpZiAodGhpcy5mb3JtRmllbGQucmVxdWlyZWQpIHtcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcnM7XG4gIH1cblxuICBnZXRFcnJvck1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZm9ybUZpZWxkLm5hbWUpO1xuICAgIGlmIChjb250cm9sPy5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybUZpZWxkLmVycm9yVGV4dCB8fCBgJHt0aGlzLmZvcm1GaWVsZC5sYWJlbH0gaXMgcmVxdWlyZWRgO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cbiIsIjxkaXZcbiAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICBjbGFzcz1cImZvcm0tZmllbGRcIlxuICBbbmdTdHlsZV09XCJ7IHdpZHRoOiBmb3JtRmllbGQud2lkdGggfHwgJzEwMCUnIH1cIlxuICAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCJcbj5cbiAgPGxhYmVsICpuZ0lmPVwiZm9ybUZpZWxkLmxhYmVsXCI+e3sgZm9ybUZpZWxkLmxhYmVsIH19PC9sYWJlbD5cbiAgPHAtZHJvcGRvd25cbiAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZvcm1GaWVsZC5uYW1lXCJcbiAgICBbb3B0aW9uc109XCJmb3JtRmllbGQub3B0aW9uc1wiXG4gICAgW3BsYWNlaG9sZGVyXT1cImZvcm1GaWVsZC5wbGFjZWhvbGRlciB8fCAnU2VsZWN0IGFuIG9wdGlvbidcIlxuICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICA+PC9wLWRyb3Bkb3duPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJcbiAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUZpZWxkLm5hbWUpPy5pbnZhbGlkICYmXG4gICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1GaWVsZC5uYW1lKT8udG91Y2hlZFxuICAgIFwiXG4gID5cbiAgICA8c21hbGwgY2xhc3M9XCJwLWVycm9yXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCkgfX08L3NtYWxsPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9wdC1kcm9wZG93bi9wdC1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWRyb3Bkb3duL3B0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNGQUFzRjtBQUN0RixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQWEsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFVcEUsTUFBTSxPQUFPLG1CQUFtQjtJQUk5QixRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsMEJBQTBCO0lBQzFCLHNFQUFzRTtJQUM5RCxZQUFZO1FBQ2xCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFnQixDQUFDO1FBRXJFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbEMsVUFBVSxD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QWdCLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQy9DLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUN0QixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzsrR0E5S1UsbUJBQW1CO21HQUFuQixtQkFBbUIsK0dDWmhDLDRsRkFnRkE7OzRGRHBFYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsYUFBYTs4QkFLZCxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBuZy1wcmltZS10b29scy9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWRyb3Bkb3duL3B0LWRyb3Bkb3duLmNvbXBvbmVudC50c1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybURyb3Bkb3duRmllbGQgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1kcm9wLWRvd24tZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgSWNvblN0eWxlIH0gZnJvbSAnLi4vbW9kZWxzL2ljb24tc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgSWNvbkltYWdlU3R5bGUgfSBmcm9tICcuLi9tb2RlbHMvaWNvbi1pbWFnZS1zdHlsZS5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3B0LWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3B0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHQtZHJvcGRvd24uY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQVERyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgZm9ybUdyb3VwITogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBmb3JtRmllbGQhOiBGb3JtRHJvcGRvd25GaWVsZDtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldHVwQ29udHJvbCgpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyDwn5SnIENvbnRyb2wgJiB2YWxpZGF0aW9uXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgcHJpdmF0ZSBzZXR1cENvbnRyb2woKTogdm9pZCB7XG4gICAgbGV0IGNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5mb3JtRmllbGQubmFtZSkgYXMgRm9ybUNvbnRyb2w7XG5cbiAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgIGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wodGhpcy5mb3JtRmllbGQudmFsdWUgPz8gbnVsbCk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKHRoaXMuZm9ybUZpZWxkLm5hbWUsIGNvbnRyb2wpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnMoKTtcbiAgICBjb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmZvcm1GaWVsZC5kaXNhYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1GaWVsZC5kaXNhYmxlZCkge1xuICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbGlkYXRvcnMoKSB7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IFtdO1xuICAgIGlmICh0aGlzLmZvcm1GaWVsZC5yZXF1aXJlZCkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdG9ycztcbiAgfVxuXG4gIGdldEVycm9yTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5mb3JtRmllbGQubmFtZSk7XG4gICAgaWYgKGNvbnRyb2w/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtRmllbGQuZXJyb3JUZXh0IHx8IGAke3RoaXMuZm9ybUZpZWxkLmxhYmVsfSBpcyByZXF1aXJlZGA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8g8J+OqCBJY29uIGhlbHBlcnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBSw6lzb3V0IGzigJlpY8O0bmUgw6AgdXRpbGlzZXIgcG91ciB1bmUgb3B0aW9uIDpcbiAgICogMSkgb3B0aW9uLmljb25TdHlsZSB8IG9wdGlvbi5pY29uSW1hZ2VTdHlsZVxuICAgKiAyKSBvcHRpb24uaWNvblxuICAgKiAzKSBmb3JtRmllbGQuaWNvbiAoZmFsbGJhY2sgZ2xvYmFsKVxuICAgKi9cbiAgZ2V0UmVzb2x2ZWRJY29uKG9wdGlvbjogYW55KToge1xuICAgIHR5cGU6ICdub25lJyB8ICdmb250JyB8ICdpbWFnZSc7XG4gICAgZm9udEljb25DbGFzcz86IHN0cmluZztcbiAgICBmb250SWNvblN0eWxlPzogeyBbazogc3RyaW5nXTogYW55IH07XG4gICAgaW1hZ2VVcmw/OiBzdHJpbmc7XG4gICAgaW1hZ2VTdHlsZT86IHsgW2s6IHN0cmluZ106IGFueSB9O1xuICB9IHtcbiAgICBjb25zdCBzb3VyY2UgPVxuICAgICAgb3B0aW9uPy5pY29uU3R5bGUgfHxcbiAgICAgIG9wdGlvbj8uaWNvbkltYWdlU3R5bGUgfHxcbiAgICAgIG9wdGlvbj8uaWNvbiB8fFxuICAgICAgdGhpcy5mb3JtRmllbGQuaWNvbjtcblxuICAgIGlmICghc291cmNlKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiAnbm9uZScgfTtcbiAgICB9XG5cbiAgICAvLyAxKSBJbWFnZSBpY29uIChJY29uSW1hZ2VTdHlsZSlcbiAgICBpZiAodGhpcy5pc0ljb25JbWFnZVN0eWxlKHNvdXJjZSkpIHtcbiAgICAgIGNvbnN0IGltZyA9IHNvdXJjZSBhcyBJY29uSW1hZ2VTdHlsZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdpbWFnZScsXG4gICAgICAgIGltYWdlVXJsOiBpbWcudXJsLFxuICAgICAgICBpbWFnZVN0eWxlOiB0aGlzLmJ1aWxkSW1hZ2VTdHlsZShpbWcpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyAyKSBGb250IGljb24gZnVsbCBzdHlsZSAoSWNvblN0eWxlKVxuICAgIGlmICh0aGlzLmlzSWNvblN0eWxlKHNvdXJjZSkpIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gc291cmNlIGFzIEljb25TdHlsZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdmb250JyxcbiAgICAgICAgZm9udEljb25DbGFzczogc3R5bGUuY29kZSwgLy8gZXg6ICdwaSBwaS1mbGFnJyBvciAnZmEgZmEtZmxhZydcbiAgICAgICAgZm9udEljb25TdHlsZTogdGhpcy5idWlsZEZvbnRJY29uU3R5bGUoc3R5bGUpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyAzKSBTaW1wbGUgc3RyaW5nIG9mIGNsYXNzZXMgKFByaW1lTkcgLyBGb250IEF3ZXNvbWUpXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZm9udCcsXG4gICAgICAgIGZvbnRJY29uQ2xhc3M6IHNvdXJjZSxcbiAgICAgICAgZm9udEljb25TdHlsZToge30sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHR5cGU6ICdub25lJyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ljb25TdHlsZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgSWNvblN0eWxlIHtcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICdjb2RlJyBpbiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJY29uSW1hZ2VTdHlsZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgSWNvbkltYWdlU3R5bGUge1xuICAgIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3VybCcgaW4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9udEljb25TdHlsZShpY29uOiBJY29uU3R5bGUpOiB7IFtrOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3Qgc3R5bGVzOiB7IFtrOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gICAgaWYgKGljb24uY29sb3IpIHtcbiAgICAgIHN0eWxlcy5jb2xvciA9IGljb24uY29sb3I7XG4gICAgfVxuICAgIGlmIChpY29uLmZvbnRTaXplKSB7XG4gICAgICBzdHlsZXNbJ2ZvbnQtc2l6ZSddID0gaWNvbi5mb250U2l6ZTtcbiAgICB9XG4gICAgaWYgKGljb24uYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICBzdHlsZXNbJ2JhY2tncm91bmQtY29sb3InXSA9IGljb24uYmFja2dyb3VuZENvbG9yO1xuICAgICAgc3R5bGVzLnBhZGRpbmcgPSBzdHlsZXMucGFkZGluZyA/PyAnMC4xNXJlbSAwLjNyZW0nO1xuICAgIH1cblxuICAgIGlmIChpY29uLnNoYXBlID09PSAnY2lyY3VsYXInKSB7XG4gICAgICBzdHlsZXNbJ2JvcmRlci1yYWRpdXMnXSA9ICc1MCUnO1xuICAgIH0gZWxzZSBpZiAoaWNvbi5zaGFwZSA9PT0gJ3JvdW5kZWQtc3F1YXJlJykge1xuICAgICAgc3R5bGVzWydib3JkZXItcmFkaXVzJ10gPSAnNnB4JztcbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEltYWdlU3R5bGUoaWNvbjogSWNvbkltYWdlU3R5bGUpOiB7IFtrOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3Qgc3R5bGVzOiB7IFtrOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gICAgaWYgKGljb24ud2lkdGgpIHN0eWxlcy53aWR0aCA9IGljb24ud2lkdGg7XG4gICAgaWYgKGljb24uaGVpZ2h0KSBzdHlsZXMuaGVpZ2h0ID0gaWNvbi5oZWlnaHQ7XG4gICAgaWYgKGljb24ubWFyZ2luTGVmdCkgc3R5bGVzWydtYXJnaW4tbGVmdCddID0gaWNvbi5tYXJnaW5MZWZ0O1xuICAgIGlmIChpY29uLm1hcmdpblJpZ2h0KSBzdHlsZXNbJ21hcmdpbi1yaWdodCddID0gaWNvbi5tYXJnaW5SaWdodDtcbiAgICBpZiAoaWNvbi5tYXJnaW5Ub3ApIHN0eWxlc1snbWFyZ2luLXRvcCddID0gaWNvbi5tYXJnaW5Ub3A7XG4gICAgaWYgKGljb24ubWFyZ2luQm90dG9tKSBzdHlsZXNbJ21hcmdpbi1ib3R0b20nXSA9IGljb24ubWFyZ2luQm90dG9tO1xuXG4gICAgaWYgKGljb24uc2hhcGUgPT09ICdjaXJjdWxhcicpIHtcbiAgICAgIHN0eWxlc1snYm9yZGVyLXJhZGl1cyddID0gJzUwJSc7XG4gICAgfSBlbHNlIGlmIChpY29uLnNoYXBlID09PSAncm91bmRlZC1zcXVhcmUnKSB7XG4gICAgICBzdHlsZXNbJ2JvcmRlci1yYWRpdXMnXSA9ICc2cHgnO1xuICAgIH1cblxuICAgIHJldHVybiBzdHlsZXM7XG4gIH1cblxuICBnZXRJY29uUG9zaXRpb24ob3B0aW9uOiBhbnkpOiAnbGVmdCcgfCAncmlnaHQnIHtcbiAgICBjb25zdCBzcmMgPVxuICAgICAgb3B0aW9uPy5pY29uU3R5bGUgfHxcbiAgICAgIG9wdGlvbj8uaWNvbkltYWdlU3R5bGUgfHxcbiAgICAgIG9wdGlvbj8uaWNvbiB8fFxuICAgICAgdGhpcy5mb3JtRmllbGQuaWNvbjtcblxuICAgIGlmICh0aGlzLmlzSWNvblN0eWxlKHNyYykgJiYgc3JjLnBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gc3JjLnBvc2l0aW9uO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0ljb25JbWFnZVN0eWxlKHNyYykgJiYgc3JjLnBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gc3JjLnBvc2l0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gJ2xlZnQnO1xuICB9XG59XG4iLCI8IS0tIG5nLXByaW1lLXRvb2xzL3Byb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9saWIvcHQtZHJvcGRvd24vcHQtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwgLS0+XG48ZGl2XG4gIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgY2xhc3M9XCJmb3JtLWZpZWxkXCJcbiAgW25nU3R5bGVdPVwieyB3aWR0aDogZm9ybUZpZWxkLndpZHRoIHx8ICcxMDAlJyB9XCJcbiAgKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiXG4+XG4gIDxsYWJlbCAqbmdJZj1cImZvcm1GaWVsZC5sYWJlbFwiPnt7IGZvcm1GaWVsZC5sYWJlbCB9fTwvbGFiZWw+XG5cbiAgPHAtZHJvcGRvd25cbiAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZvcm1GaWVsZC5uYW1lXCJcbiAgICBbb3B0aW9uc109XCJmb3JtRmllbGQub3B0aW9uc1wiXG4gICAgW3BsYWNlaG9sZGVyXT1cImZvcm1GaWVsZC5wbGFjZWhvbGRlciB8fCAnU2VsZWN0IGFuIG9wdGlvbidcIlxuICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICA+XG4gICAgPCEtLSBTZWxlY3RlZCB2YWx1ZSB0ZW1wbGF0ZSAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwic2VsZWN0ZWRJdGVtXCIgbGV0LW9wdGlvbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb247IGVsc2UgcGxhY2Vob2xkZXJUcGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB0LWRyb3Bkb3duLWl0ZW1cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0UmVzb2x2ZWRJY29uKG9wdGlvbikgYXMgaWNvbk1ldGFcIj5cbiAgICAgICAgICAgIDwhLS0gSU1BR0UgSUNPTiAtLT5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgKm5nSWY9XCJpY29uTWV0YS50eXBlID09PSAnaW1hZ2UnXCJcbiAgICAgICAgICAgICAgW3NyY109XCJpY29uTWV0YS5pbWFnZVVybFwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImljb25NZXRhLmltYWdlU3R5bGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cInB0LWRyb3Bkb3duLWljb24taW1hZ2VcIlxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgPCEtLSBGT05UIElDT04gKFByaW1lTkcgLyBGb250QXdlc29tZSkgLS0+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAqbmdJZj1cImljb25NZXRhLnR5cGUgPT09ICdmb250J1wiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImljb25NZXRhLmZvbnRJY29uQ2xhc3NcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJpY29uTWV0YS5mb250SWNvblN0eWxlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwdC1kcm9wZG93bi1pY29uLWZvbnRcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHQtZHJvcGRvd24tbGFiZWxcIj57eyBvcHRpb24ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gUGxhY2Vob2xkZXIgd2hlbiBubyB2YWx1ZSBzZWxlY3RlZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyVHBsPlxuICAgICAgPHNwYW4+e3sgZm9ybUZpZWxkLnBsYWNlaG9sZGVyIHx8IFwiU2VsZWN0IGFuIG9wdGlvblwiIH19PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIEl0ZW1zIHRlbXBsYXRlIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpdGVtXCIgbGV0LW9wdGlvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwdC1kcm9wZG93bi1pdGVtXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRSZXNvbHZlZEljb24ob3B0aW9uKSBhcyBpY29uTWV0YVwiPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICpuZ0lmPVwiaWNvbk1ldGEudHlwZSA9PT0gJ2ltYWdlJ1wiXG4gICAgICAgICAgICBbc3JjXT1cImljb25NZXRhLmltYWdlVXJsXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cImljb25NZXRhLmltYWdlU3R5bGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJwdC1kcm9wZG93bi1pY29uLWltYWdlXCJcbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgPGlcbiAgICAgICAgICAgICpuZ0lmPVwiaWNvbk1ldGEudHlwZSA9PT0gJ2ZvbnQnXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImljb25NZXRhLmZvbnRJY29uQ2xhc3NcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwiaWNvbk1ldGEuZm9udEljb25TdHlsZVwiXG4gICAgICAgICAgICBjbGFzcz1cInB0LWRyb3Bkb3duLWljb24tZm9udFwiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwdC1kcm9wZG93bi1sYWJlbFwiPnt7IG9wdGlvbi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC1kcm9wZG93bj5cblxuICA8ZGl2XG4gICAgKm5nSWY9XCJcbiAgICAgIGZvcm1Hcm91cC5nZXQoZm9ybUZpZWxkLm5hbWUpPy5pbnZhbGlkICYmXG4gICAgICBmb3JtR3JvdXAuZ2V0KGZvcm1GaWVsZC5uYW1lKT8udG91Y2hlZFxuICAgIFwiXG4gID5cbiAgICA8c21hbGwgY2xhc3M9XCJwLWVycm9yXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCkgfX08L3NtYWxsPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -35,7 +35,6 @@ export class PTLoginPageComponent {
35
35
  };
36
36
  }
37
37
  onLoginSubmit(loginModel) {
38
- console.log('Login Submitted:', loginModel);
39
38
  this.loginSubmit.emit(loginModel);
40
39
  }
41
40
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTLoginPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -51,4 +50,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
51
50
  }], loginSubmit: [{
52
51
  type: Output
53
52
  }] } });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtbG9naW4tcGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWxvZ2luLXBhZ2UvcHQtbG9naW4tcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWxvZ2luLXBhZ2UvcHQtbG9naW4tcGFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQVEvRSxNQUFNLE9BQU8sb0JBQW9CO0lBTGpDO1FBT1csc0JBQWlCLEdBQWtCLElBQUksQ0FBQztRQUN2QyxnQkFBVyxHQUNuQixJQUFJLFlBQVksRUFBYyxDQUFDO1FBRXpCLHNCQUFpQixHQUFlO1lBQ3RDLFlBQVksRUFBRSxHQUFHO1lBQ2pCLE1BQU0sRUFBRSxHQUFHO1lBQ1gsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLFFBQVEsRUFBRSxJQUFJO1lBQ2QsWUFBWSxFQUFFLFFBQVE7WUFDdEIsZ0JBQWdCLEVBQUUsUUFBUTtTQUMzQixDQUFDO0tBa0NIO0lBaENDLFFBQVE7UUFDTixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQ3RDLENBQUM7UUFFRixtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQ3BDLENBQUM7UUFFRixvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FDdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQ3JDLENBQUM7SUFDSixDQUFDO0lBRU8sYUFBYSxDQUFDLE1BQW1CO1FBQ3ZDLE9BQU87WUFDTCxHQUFHLElBQUksQ0FBQyxpQkFBaUI7WUFDekIsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsVUFBc0I7UUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQyxDQUFDOytHQS9DVSxvQkFBb0I7bUdBQXBCLG9CQUFvQixzTENSakMsaS9DQWlEQTs7NEZEekNhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxlQUFlOzhCQUtoQixlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9naW5Nb2RlbCwgTG9naW5QYWdlQ29uZmlnLCBDYXJkQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHQtbG9naW4tcGFnZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wdC1sb2dpbi1wYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHQtbG9naW4tcGFnZS5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFBUTG9naW5QYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgbG9naW5QYWdlQ29uZmlnITogTG9naW5QYWdlQ29uZmlnO1xuICBASW5wdXQoKSBsb2dpbkVycm9yTWVzc2FnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBPdXRwdXQoKSBsb2dpblN1Ym1pdDogRXZlbnRFbWl0dGVyPExvZ2luTW9kZWw+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPExvZ2luTW9kZWw+KCk7XG5cbiAgcHJpdmF0ZSBkZWZhdWx0Q2FyZENvbmZpZzogQ2FyZENvbmZpZyA9IHtcbiAgICBib3JkZXJSYWRpdXM6ICcwJyxcbiAgICBtYXJnaW46ICcwJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICAgIG5vQm9yZGVyOiB0cnVlLFxuICAgIGFsaWduQ29udGVudDogJ2NlbnRlcicsXG4gICAgYWxpZ25Cb2R5Q29udGVudDogJ2NlbnRlcicsXG4gIH07XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hcHBseURlZmF1bHRDb25maWdzKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RGVmYXVsdENvbmZpZ3MoKTogdm9pZCB7XG4gICAgLy8gQXBwbHkgZGVmYXVsdHMgdG8gY2VudGVyQ2FyZENvbmZpZ1xuICAgIHRoaXMubG9naW5QYWdlQ29uZmlnLmNlbnRlckNhcmRDb25maWcgPSB0aGlzLmFwcGx5RGVmYXVsdHMoXG4gICAgICB0aGlzLmxvZ2luUGFnZUNvbmZpZy5jZW50ZXJDYXJkQ29uZmlnXG4gICAgKTtcblxuICAgIC8vIEFwcGx5IGRlZmF1bHRzIHRvIGxlZnRDYXJkQ29uZmlnXG4gICAgdGhpcy5sb2dpblBhZ2VDb25maWcubGVmdENhcmRDb25maWcgPSB0aGlzLmFwcGx5RGVmYXVsdHMoXG4gICAgICB0aGlzLmxvZ2luUGFnZUNvbmZpZy5sZWZ0Q2FyZENvbmZpZ1xuICAgICk7XG5cbiAgICAvLyBBcHBseSBkZWZhdWx0cyB0byByaWdodENhcmRDb25maWdcbiAgICB0aGlzLmxvZ2luUGFnZUNvbmZpZy5yaWdodENhcmRDb25maWcgPSB0aGlzLmFwcGx5RGVmYXVsdHMoXG4gICAgICB0aGlzLmxvZ2luUGFnZUNvbmZpZy5yaWdodENhcmRDb25maWdcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseURlZmF1bHRzKGNvbmZpZz86IENhcmRDb25maWcpOiBDYXJkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5kZWZhdWx0Q2FyZENvbmZpZyxcbiAgICAgIC4uLihjb25maWcgfHwge30pLFxuICAgIH07XG4gIH1cblxuICBvbkxvZ2luU3VibWl0KGxvZ2luTW9kZWw6IExvZ2luTW9kZWwpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnTG9naW4gU3VibWl0dGVkOicsIGxvZ2luTW9kZWwpO1xuICAgIHRoaXMubG9naW5TdWJtaXQuZW1pdChsb2dpbk1vZGVsKTtcbiAgfVxufVxuIiwiPCEtLSBDZW50ZXIgUG9zaXRpb24gLS0+XG48bmctY29udGFpbmVyPlxuICA8ZGl2ICpuZ0lmPVwibG9naW5QYWdlQ29uZmlnLnBvc2l0aW9uID09PSAnY2VudGVyJ1wiIGNsYXNzPVwiY2VudGVyLWNvbnRhaW5lclwiPlxuICAgIDxwdC1jYXJkXG4gICAgICAqbmdJZj1cImxvZ2luUGFnZUNvbmZpZy5jZW50ZXJDYXJkQ29uZmlnXCJcbiAgICAgIFtjb25maWddPVwibG9naW5QYWdlQ29uZmlnLmNlbnRlckNhcmRDb25maWdcIlxuICAgID5cbiAgICAgIDxwdC1sb2dpbi1jYXJkXG4gICAgICAgIFtsb2dpbkVycm9yTWVzc2FnZV09XCJsb2dpbkVycm9yTWVzc2FnZVwiXG4gICAgICAgIFtsb2dpblBhZ2VDb25maWddPVwibG9naW5QYWdlQ29uZmlnXCJcbiAgICAgICAgKGxvZ2luU3VibWl0KT1cIm9uTG9naW5TdWJtaXQoJGV2ZW50KVwiXG4gICAgICA+PC9wdC1sb2dpbi1jYXJkPlxuICAgIDwvcHQtY2FyZD5cbiAgPC9kaXY+XG4gIDwhLS0gTGVmdCBhbmQgUmlnaHQgUG9zaXRpb25zIC0tPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJcbiAgICAgIGxvZ2luUGFnZUNvbmZpZy5wb3NpdGlvbiA9PT0gJ2xlZnQnIHx8XG4gICAgICBsb2dpblBhZ2VDb25maWcucG9zaXRpb24gPT09ICdyaWdodCdcbiAgICBcIlxuICAgIGNsYXNzPVwibGVmdC1yaWdodC1jb250YWluZXJcIlxuICA+XG4gICAgPCEtLSBMZWZ0IENhcmQgLS0+XG4gICAgPHB0LWNhcmRcbiAgICAgICpuZ0lmPVwibG9naW5QYWdlQ29uZmlnLmxlZnRDYXJkQ29uZmlnXCJcbiAgICAgIFtjb25maWddPVwibG9naW5QYWdlQ29uZmlnLmxlZnRDYXJkQ29uZmlnXCJcbiAgICA+XG4gICAgICA8cHQtbG9naW4tY2FyZFxuICAgICAgICAqbmdJZj1cImxvZ2luUGFnZUNvbmZpZy5wb3NpdGlvbiA9PT0gJ2xlZnQnXCJcbiAgICAgICAgW2xvZ2luRXJyb3JNZXNzYWdlXT1cImxvZ2luRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgW2xvZ2luUGFnZUNvbmZpZ109XCJsb2dpblBhZ2VDb25maWdcIlxuICAgICAgICAobG9naW5TdWJtaXQpPVwib25Mb2dpblN1Ym1pdCgkZXZlbnQpXCJcbiAgICAgID48L3B0LWxvZ2luLWNhcmQ+XG4gICAgPC9wdC1jYXJkPlxuXG4gICAgPCEtLSBSaWdodCBDYXJkIC0tPlxuICAgIDxwdC1jYXJkXG4gICAgICAqbmdJZj1cImxvZ2luUGFnZUNvbmZpZy5yaWdodENhcmRDb25maWdcIlxuICAgICAgW2NvbmZpZ109XCJsb2dpblBhZ2VDb25maWcucmlnaHRDYXJkQ29uZmlnXCJcbiAgICA+XG4gICAgICA8cHQtbG9naW4tY2FyZFxuICAgICAgICAqbmdJZj1cImxvZ2luUGFnZUNvbmZpZy5wb3NpdGlvbiA9PT0gJ3JpZ2h0J1wiXG4gICAgICAgIFtsb2dpbkVycm9yTWVzc2FnZV09XCJsb2dpbkVycm9yTWVzc2FnZVwiXG4gICAgICAgIFtsb2dpblBhZ2VDb25maWddPVwibG9naW5QYWdlQ29uZmlnXCJcbiAgICAgICAgKGxvZ2luU3VibWl0KT1cIm9uTG9naW5TdWJtaXQoJGV2ZW50KVwiXG4gICAgICA+PC9wdC1sb2dpbi1jYXJkPlxuICAgIDwvcHQtY2FyZD5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtbG9naW4tcGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWxvZ2luLXBhZ2UvcHQtbG9naW4tcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWxvZ2luLXBhZ2UvcHQtbG9naW4tcGFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQVEvRSxNQUFNLE9BQU8sb0JBQW9CO0lBTGpDO1FBT1csc0JBQWlCLEdBQWtCLElBQUksQ0FBQztRQUN2QyxnQkFBVyxHQUNuQixJQUFJLFlBQVksRUFBYyxDQUFDO1FBRXpCLHNCQUFpQixHQUFlO1lBQ3RDLFlBQVksRUFBRSxHQUFHO1lBQ2pCLE1BQU0sRUFBRSxHQUFHO1lBQ1gsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLFFBQVEsRUFBRSxJQUFJO1lBQ2QsWUFBWSxFQUFFLFFBQVE7WUFDdEIsZ0JBQWdCLEVBQUUsUUFBUTtTQUMzQixDQUFDO0tBaUNIO0lBL0JDLFFBQVE7UUFDTixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQ3RDLENBQUM7UUFFRixtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQ3BDLENBQUM7UUFFRixvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FDdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQ3JDLENBQUM7SUFDSixDQUFDO0lBRU8sYUFBYSxDQUFDLE1BQW1CO1FBQ3ZDLE9BQU87WUFDTCxHQUFHLElBQUksQ0FBQyxpQkFBaUI7WUFDekIsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsVUFBc0I7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsQ0FBQzsrR0E5Q1Usb0JBQW9CO21HQUFwQixvQkFBb0Isc0xDUmpDLGkvQ0FpREE7OzRGRHpDYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsZUFBZTs4QkFLaEIsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvZ2luTW9kZWwsIExvZ2luUGFnZUNvbmZpZywgQ2FyZENvbmZpZyB9IGZyb20gJy4uL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3B0LWxvZ2luLXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHQtbG9naW4tcGFnZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3B0LWxvZ2luLXBhZ2UuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQVExvZ2luUGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGxvZ2luUGFnZUNvbmZpZyE6IExvZ2luUGFnZUNvbmZpZztcbiAgQElucHV0KCkgbG9naW5FcnJvck1lc3NhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBAT3V0cHV0KCkgbG9naW5TdWJtaXQ6IEV2ZW50RW1pdHRlcjxMb2dpbk1vZGVsPiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxMb2dpbk1vZGVsPigpO1xuXG4gIHByaXZhdGUgZGVmYXVsdENhcmRDb25maWc6IENhcmRDb25maWcgPSB7XG4gICAgYm9yZGVyUmFkaXVzOiAnMCcsXG4gICAgbWFyZ2luOiAnMCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICBub0JvcmRlcjogdHJ1ZSxcbiAgICBhbGlnbkNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGFsaWduQm9keUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYXBwbHlEZWZhdWx0Q29uZmlncygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseURlZmF1bHRDb25maWdzKCk6IHZvaWQge1xuICAgIC8vIEFwcGx5IGRlZmF1bHRzIHRvIGNlbnRlckNhcmRDb25maWdcbiAgICB0aGlzLmxvZ2luUGFnZUNvbmZpZy5jZW50ZXJDYXJkQ29uZmlnID0gdGhpcy5hcHBseURlZmF1bHRzKFxuICAgICAgdGhpcy5sb2dpblBhZ2VDb25maWcuY2VudGVyQ2FyZENvbmZpZ1xuICAgICk7XG5cbiAgICAvLyBBcHBseSBkZWZhdWx0cyB0byBsZWZ0Q2FyZENvbmZpZ1xuICAgIHRoaXMubG9naW5QYWdlQ29uZmlnLmxlZnRDYXJkQ29uZmlnID0gdGhpcy5hcHBseURlZmF1bHRzKFxuICAgICAgdGhpcy5sb2dpblBhZ2VDb25maWcubGVmdENhcmRDb25maWdcbiAgICApO1xuXG4gICAgLy8gQXBwbHkgZGVmYXVsdHMgdG8gcmlnaHRDYXJkQ29uZmlnXG4gICAgdGhpcy5sb2dpblBhZ2VDb25maWcucmlnaHRDYXJkQ29uZmlnID0gdGhpcy5hcHBseURlZmF1bHRzKFxuICAgICAgdGhpcy5sb2dpblBhZ2VDb25maWcucmlnaHRDYXJkQ29uZmlnXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlEZWZhdWx0cyhjb25maWc/OiBDYXJkQ29uZmlnKTogQ2FyZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZGVmYXVsdENhcmRDb25maWcsXG4gICAgICAuLi4oY29uZmlnIHx8IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgb25Mb2dpblN1Ym1pdChsb2dpbk1vZGVsOiBMb2dpbk1vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5sb2dpblN1Ym1pdC5lbWl0KGxvZ2luTW9kZWwpO1xuICB9XG59XG4iLCI8IS0tIENlbnRlciBQb3NpdGlvbiAtLT5cbjxuZy1jb250YWluZXI+XG4gIDxkaXYgKm5nSWY9XCJsb2dpblBhZ2VDb25maWcucG9zaXRpb24gPT09ICdjZW50ZXInXCIgY2xhc3M9XCJjZW50ZXItY29udGFpbmVyXCI+XG4gICAgPHB0LWNhcmRcbiAgICAgICpuZ0lmPVwibG9naW5QYWdlQ29uZmlnLmNlbnRlckNhcmRDb25maWdcIlxuICAgICAgW2NvbmZpZ109XCJsb2dpblBhZ2VDb25maWcuY2VudGVyQ2FyZENvbmZpZ1wiXG4gICAgPlxuICAgICAgPHB0LWxvZ2luLWNhcmRcbiAgICAgICAgW2xvZ2luRXJyb3JNZXNzYWdlXT1cImxvZ2luRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgW2xvZ2luUGFnZUNvbmZpZ109XCJsb2dpblBhZ2VDb25maWdcIlxuICAgICAgICAobG9naW5TdWJtaXQpPVwib25Mb2dpblN1Ym1pdCgkZXZlbnQpXCJcbiAgICAgID48L3B0LWxvZ2luLWNhcmQ+XG4gICAgPC9wdC1jYXJkPlxuICA8L2Rpdj5cbiAgPCEtLSBMZWZ0IGFuZCBSaWdodCBQb3NpdGlvbnMgLS0+XG4gIDxkaXZcbiAgICAqbmdJZj1cIlxuICAgICAgbG9naW5QYWdlQ29uZmlnLnBvc2l0aW9uID09PSAnbGVmdCcgfHxcbiAgICAgIGxvZ2luUGFnZUNvbmZpZy5wb3NpdGlvbiA9PT0gJ3JpZ2h0J1xuICAgIFwiXG4gICAgY2xhc3M9XCJsZWZ0LXJpZ2h0LWNvbnRhaW5lclwiXG4gID5cbiAgICA8IS0tIExlZnQgQ2FyZCAtLT5cbiAgICA8cHQtY2FyZFxuICAgICAgKm5nSWY9XCJsb2dpblBhZ2VDb25maWcubGVmdENhcmRDb25maWdcIlxuICAgICAgW2NvbmZpZ109XCJsb2dpblBhZ2VDb25maWcubGVmdENhcmRDb25maWdcIlxuICAgID5cbiAgICAgIDxwdC1sb2dpbi1jYXJkXG4gICAgICAgICpuZ0lmPVwibG9naW5QYWdlQ29uZmlnLnBvc2l0aW9uID09PSAnbGVmdCdcIlxuICAgICAgICBbbG9naW5FcnJvck1lc3NhZ2VdPVwibG9naW5FcnJvck1lc3NhZ2VcIlxuICAgICAgICBbbG9naW5QYWdlQ29uZmlnXT1cImxvZ2luUGFnZUNvbmZpZ1wiXG4gICAgICAgIChsb2dpblN1Ym1pdCk9XCJvbkxvZ2luU3VibWl0KCRldmVudClcIlxuICAgICAgPjwvcHQtbG9naW4tY2FyZD5cbiAgICA8L3B0LWNhcmQ+XG5cbiAgICA8IS0tIFJpZ2h0IENhcmQgLS0+XG4gICAgPHB0LWNhcmRcbiAgICAgICpuZ0lmPVwibG9naW5QYWdlQ29uZmlnLnJpZ2h0Q2FyZENvbmZpZ1wiXG4gICAgICBbY29uZmlnXT1cImxvZ2luUGFnZUNvbmZpZy5yaWdodENhcmRDb25maWdcIlxuICAgID5cbiAgICAgIDxwdC1sb2dpbi1jYXJkXG4gICAgICAgICpuZ0lmPVwibG9naW5QYWdlQ29uZmlnLnBvc2l0aW9uID09PSAncmlnaHQnXCJcbiAgICAgICAgW2xvZ2luRXJyb3JNZXNzYWdlXT1cImxvZ2luRXJyb3JNZXNzYWdlXCJcbiAgICAgICAgW2xvZ2luUGFnZUNvbmZpZ109XCJsb2dpblBhZ2VDb25maWdcIlxuICAgICAgICAobG9naW5TdWJtaXQpPVwib25Mb2dpblN1Ym1pdCgkZXZlbnQpXCJcbiAgICAgID48L3B0LWxvZ2luLWNhcmQ+XG4gICAgPC9wdC1jYXJkPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -213,8 +213,6 @@ class PTAdvancedPrimeTableComponent {
213
213
  this.globalFilterFields = [];
214
214
  }
215
215
  ngOnInit() {
216
- console.log('PTAdvancedPrimeTable columns:', this.columns);
217
- console.log('PTAdvancedPrimeTable totalRecords input:', this.totalRecords);
218
216
  this.hasGroupedColumns = this.columns.some((col) => col.children && col.children.length > 0);
219
217
  this.globalFilterFields = this.columns
220
218
  .filter((col) => col.code !== undefined && col.isFilter !== false)
@@ -2038,19 +2036,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
2038
2036
  type: Input
2039
2037
  }] } });
2040
2038
 
2039
+ // ng-prime-tools/projects/ng-prime-tools/src/lib/pt-dropdown/pt-dropdown.component.ts
2041
2040
  class PTDropdownComponent {
2042
2041
  ngOnInit() {
2043
2042
  this.setupControl();
2044
2043
  }
2044
+ // -------------------------------------------------------------------
2045
+ // 🔧 Control & validation
2046
+ // -------------------------------------------------------------------
2045
2047
  setupControl() {
2046
2048
  let control = this.formGroup.get(this.formField.name);
2047
2049
  if (!control) {
2048
- control = new FormControl(this.formField.value || null);
2050
+ control = new FormControl(this.formField.value ?? null);
2049
2051
  this.formGroup.addControl(this.formField.name, control);
2050
2052
  }
2051
2053
  const validators = this.getValidators();
2052
2054
  control.setValidators(validators);
2053
- // Manage the disabled state using form control
2054
2055
  setTimeout(() => {
2055
2056
  if (this.formField.disabled !== undefined) {
2056
2057
  if (this.formField.disabled) {
@@ -2077,12 +2078,118 @@ class PTDropdownComponent {
2077
2078
  }
2078
2079
  return '';
2079
2080
  }
2081
+ // -------------------------------------------------------------------
2082
+ // 🎨 Icon helpers
2083
+ // -------------------------------------------------------------------
2084
+ /**
2085
+ * Résout l’icône à utiliser pour une option :
2086
+ * 1) option.iconStyle | option.iconImageStyle
2087
+ * 2) option.icon
2088
+ * 3) formField.icon (fallback global)
2089
+ */
2090
+ getResolvedIcon(option) {
2091
+ const source = option?.iconStyle ||
2092
+ option?.iconImageStyle ||
2093
+ option?.icon ||
2094
+ this.formField.icon;
2095
+ if (!source) {
2096
+ return { type: 'none' };
2097
+ }
2098
+ // 1) Image icon (IconImageStyle)
2099
+ if (this.isIconImageStyle(source)) {
2100
+ const img = source;
2101
+ return {
2102
+ type: 'image',
2103
+ imageUrl: img.url,
2104
+ imageStyle: this.buildImageStyle(img),
2105
+ };
2106
+ }
2107
+ // 2) Font icon full style (IconStyle)
2108
+ if (this.isIconStyle(source)) {
2109
+ const style = source;
2110
+ return {
2111
+ type: 'font',
2112
+ fontIconClass: style.code, // ex: 'pi pi-flag' or 'fa fa-flag'
2113
+ fontIconStyle: this.buildFontIconStyle(style),
2114
+ };
2115
+ }
2116
+ // 3) Simple string of classes (PrimeNG / Font Awesome)
2117
+ if (typeof source === 'string') {
2118
+ return {
2119
+ type: 'font',
2120
+ fontIconClass: source,
2121
+ fontIconStyle: {},
2122
+ };
2123
+ }
2124
+ return { type: 'none' };
2125
+ }
2126
+ isIconStyle(value) {
2127
+ return !!value && typeof value === 'object' && 'code' in value;
2128
+ }
2129
+ isIconImageStyle(value) {
2130
+ return !!value && typeof value === 'object' && 'url' in value;
2131
+ }
2132
+ buildFontIconStyle(icon) {
2133
+ const styles = {};
2134
+ if (icon.color) {
2135
+ styles.color = icon.color;
2136
+ }
2137
+ if (icon.fontSize) {
2138
+ styles['font-size'] = icon.fontSize;
2139
+ }
2140
+ if (icon.backgroundColor) {
2141
+ styles['background-color'] = icon.backgroundColor;
2142
+ styles.padding = styles.padding ?? '0.15rem 0.3rem';
2143
+ }
2144
+ if (icon.shape === 'circular') {
2145
+ styles['border-radius'] = '50%';
2146
+ }
2147
+ else if (icon.shape === 'rounded-square') {
2148
+ styles['border-radius'] = '6px';
2149
+ }
2150
+ return styles;
2151
+ }
2152
+ buildImageStyle(icon) {
2153
+ const styles = {};
2154
+ if (icon.width)
2155
+ styles.width = icon.width;
2156
+ if (icon.height)
2157
+ styles.height = icon.height;
2158
+ if (icon.marginLeft)
2159
+ styles['margin-left'] = icon.marginLeft;
2160
+ if (icon.marginRight)
2161
+ styles['margin-right'] = icon.marginRight;
2162
+ if (icon.marginTop)
2163
+ styles['margin-top'] = icon.marginTop;
2164
+ if (icon.marginBottom)
2165
+ styles['margin-bottom'] = icon.marginBottom;
2166
+ if (icon.shape === 'circular') {
2167
+ styles['border-radius'] = '50%';
2168
+ }
2169
+ else if (icon.shape === 'rounded-square') {
2170
+ styles['border-radius'] = '6px';
2171
+ }
2172
+ return styles;
2173
+ }
2174
+ getIconPosition(option) {
2175
+ const src = option?.iconStyle ||
2176
+ option?.iconImageStyle ||
2177
+ option?.icon ||
2178
+ this.formField.icon;
2179
+ if (this.isIconStyle(src) && src.position) {
2180
+ return src.position;
2181
+ }
2182
+ if (this.isIconImageStyle(src) && src.position) {
2183
+ return src.position;
2184
+ }
2185
+ return 'left';
2186
+ }
2080
2187
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2081
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTDropdownComponent, selector: "pt-dropdown", inputs: { formGroup: "formGroup", formField: "formField" }, ngImport: i0, template: "<div\n [formGroup]=\"formGroup\"\n class=\"form-field\"\n [ngStyle]=\"{ width: formField.width || '100%' }\"\n *ngIf=\"!formField.hidden\"\n>\n <label *ngIf=\"formField.label\">{{ formField.label }}</label>\n <p-dropdown\n [formControlName]=\"formField.name\"\n [options]=\"formField.options\"\n [placeholder]=\"formField.placeholder || 'Select an option'\"\n optionLabel=\"label\"\n ></p-dropdown>\n <div\n *ngIf=\"\n formGroup.get(formField.name)?.invalid &&\n formGroup.get(formField.name)?.touched\n \"\n >\n <small class=\"p-error\">{{ getErrorMessage() }}</small>\n </div>\n</div>\n", styles: [".form-field{margin-bottom:1rem}.form-field label{display:block;margin-bottom:.5rem;font-weight:700}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3$5.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }] }); }
2188
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTDropdownComponent, selector: "pt-dropdown", inputs: { formGroup: "formGroup", formField: "formField" }, ngImport: i0, template: "<!-- ng-prime-tools/projects/ng-prime-tools/src/lib/pt-dropdown/pt-dropdown.component.html -->\n<div\n [formGroup]=\"formGroup\"\n class=\"form-field\"\n [ngStyle]=\"{ width: formField.width || '100%' }\"\n *ngIf=\"!formField.hidden\"\n>\n <label *ngIf=\"formField.label\">{{ formField.label }}</label>\n\n <p-dropdown\n [formControlName]=\"formField.name\"\n [options]=\"formField.options\"\n [placeholder]=\"formField.placeholder || 'Select an option'\"\n optionLabel=\"label\"\n >\n <!-- Selected value template -->\n <ng-template pTemplate=\"selectedItem\" let-option>\n <ng-container *ngIf=\"option; else placeholderTpl\">\n <div class=\"pt-dropdown-item\">\n <ng-container *ngIf=\"getResolvedIcon(option) as iconMeta\">\n <!-- IMAGE ICON -->\n <img\n *ngIf=\"iconMeta.type === 'image'\"\n [src]=\"iconMeta.imageUrl\"\n [ngStyle]=\"iconMeta.imageStyle\"\n class=\"pt-dropdown-icon-image\"\n />\n\n <!-- FONT ICON (PrimeNG / FontAwesome) -->\n <i\n *ngIf=\"iconMeta.type === 'font'\"\n [ngClass]=\"iconMeta.fontIconClass\"\n [ngStyle]=\"iconMeta.fontIconStyle\"\n class=\"pt-dropdown-icon-font\"\n ></i>\n </ng-container>\n\n <span class=\"pt-dropdown-label\">{{ option.label }}</span>\n </div>\n </ng-container>\n </ng-template>\n\n <!-- Placeholder when no value selected -->\n <ng-template #placeholderTpl>\n <span>{{ formField.placeholder || \"Select an option\" }}</span>\n </ng-template>\n\n <!-- Items template -->\n <ng-template pTemplate=\"item\" let-option>\n <div class=\"pt-dropdown-item\">\n <ng-container *ngIf=\"getResolvedIcon(option) as iconMeta\">\n <img\n *ngIf=\"iconMeta.type === 'image'\"\n [src]=\"iconMeta.imageUrl\"\n [ngStyle]=\"iconMeta.imageStyle\"\n class=\"pt-dropdown-icon-image\"\n />\n\n <i\n *ngIf=\"iconMeta.type === 'font'\"\n [ngClass]=\"iconMeta.fontIconClass\"\n [ngStyle]=\"iconMeta.fontIconStyle\"\n class=\"pt-dropdown-icon-font\"\n ></i>\n </ng-container>\n\n <span class=\"pt-dropdown-label\">{{ option.label }}</span>\n </div>\n </ng-template>\n </p-dropdown>\n\n <div\n *ngIf=\"\n formGroup.get(formField.name)?.invalid &&\n formGroup.get(formField.name)?.touched\n \"\n >\n <small class=\"p-error\">{{ getErrorMessage() }}</small>\n </div>\n</div>\n", styles: [".form-field{display:flex;flex-direction:column;gap:.25rem}.pt-dropdown-item{display:flex;align-items:center;gap:.5rem}.pt-dropdown-icon-image{object-fit:cover}.pt-dropdown-icon-font{display:inline-flex;align-items:center;justify-content:center}.pt-dropdown-label{display:inline-block}\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: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3$5.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i1$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }] }); }
2082
2189
  }
2083
2190
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTDropdownComponent, decorators: [{
2084
2191
  type: Component,
2085
- args: [{ selector: 'pt-dropdown', template: "<div\n [formGroup]=\"formGroup\"\n class=\"form-field\"\n [ngStyle]=\"{ width: formField.width || '100%' }\"\n *ngIf=\"!formField.hidden\"\n>\n <label *ngIf=\"formField.label\">{{ formField.label }}</label>\n <p-dropdown\n [formControlName]=\"formField.name\"\n [options]=\"formField.options\"\n [placeholder]=\"formField.placeholder || 'Select an option'\"\n optionLabel=\"label\"\n ></p-dropdown>\n <div\n *ngIf=\"\n formGroup.get(formField.name)?.invalid &&\n formGroup.get(formField.name)?.touched\n \"\n >\n <small class=\"p-error\">{{ getErrorMessage() }}</small>\n </div>\n</div>\n", styles: [".form-field{margin-bottom:1rem}.form-field label{display:block;margin-bottom:.5rem;font-weight:700}\n"] }]
2192
+ args: [{ selector: 'pt-dropdown', template: "<!-- ng-prime-tools/projects/ng-prime-tools/src/lib/pt-dropdown/pt-dropdown.component.html -->\n<div\n [formGroup]=\"formGroup\"\n class=\"form-field\"\n [ngStyle]=\"{ width: formField.width || '100%' }\"\n *ngIf=\"!formField.hidden\"\n>\n <label *ngIf=\"formField.label\">{{ formField.label }}</label>\n\n <p-dropdown\n [formControlName]=\"formField.name\"\n [options]=\"formField.options\"\n [placeholder]=\"formField.placeholder || 'Select an option'\"\n optionLabel=\"label\"\n >\n <!-- Selected value template -->\n <ng-template pTemplate=\"selectedItem\" let-option>\n <ng-container *ngIf=\"option; else placeholderTpl\">\n <div class=\"pt-dropdown-item\">\n <ng-container *ngIf=\"getResolvedIcon(option) as iconMeta\">\n <!-- IMAGE ICON -->\n <img\n *ngIf=\"iconMeta.type === 'image'\"\n [src]=\"iconMeta.imageUrl\"\n [ngStyle]=\"iconMeta.imageStyle\"\n class=\"pt-dropdown-icon-image\"\n />\n\n <!-- FONT ICON (PrimeNG / FontAwesome) -->\n <i\n *ngIf=\"iconMeta.type === 'font'\"\n [ngClass]=\"iconMeta.fontIconClass\"\n [ngStyle]=\"iconMeta.fontIconStyle\"\n class=\"pt-dropdown-icon-font\"\n ></i>\n </ng-container>\n\n <span class=\"pt-dropdown-label\">{{ option.label }}</span>\n </div>\n </ng-container>\n </ng-template>\n\n <!-- Placeholder when no value selected -->\n <ng-template #placeholderTpl>\n <span>{{ formField.placeholder || \"Select an option\" }}</span>\n </ng-template>\n\n <!-- Items template -->\n <ng-template pTemplate=\"item\" let-option>\n <div class=\"pt-dropdown-item\">\n <ng-container *ngIf=\"getResolvedIcon(option) as iconMeta\">\n <img\n *ngIf=\"iconMeta.type === 'image'\"\n [src]=\"iconMeta.imageUrl\"\n [ngStyle]=\"iconMeta.imageStyle\"\n class=\"pt-dropdown-icon-image\"\n />\n\n <i\n *ngIf=\"iconMeta.type === 'font'\"\n [ngClass]=\"iconMeta.fontIconClass\"\n [ngStyle]=\"iconMeta.fontIconStyle\"\n class=\"pt-dropdown-icon-font\"\n ></i>\n </ng-container>\n\n <span class=\"pt-dropdown-label\">{{ option.label }}</span>\n </div>\n </ng-template>\n </p-dropdown>\n\n <div\n *ngIf=\"\n formGroup.get(formField.name)?.invalid &&\n formGroup.get(formField.name)?.touched\n \"\n >\n <small class=\"p-error\">{{ getErrorMessage() }}</small>\n </div>\n</div>\n", styles: [".form-field{display:flex;flex-direction:column;gap:.25rem}.pt-dropdown-item{display:flex;align-items:center;gap:.5rem}.pt-dropdown-icon-image{object-fit:cover}.pt-dropdown-icon-font{display:inline-flex;align-items:center;justify-content:center}.pt-dropdown-label{display:inline-block}\n"] }]
2086
2193
  }], propDecorators: { formGroup: [{
2087
2194
  type: Input
2088
2195
  }], formField: [{
@@ -3999,7 +4106,6 @@ class PTLoginPageComponent {
3999
4106
  };
4000
4107
  }
4001
4108
  onLoginSubmit(loginModel) {
4002
- console.log('Login Submitted:', loginModel);
4003
4109
  this.loginSubmit.emit(loginModel);
4004
4110
  }
4005
4111
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTLoginPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -4450,11 +4556,11 @@ class PTDialogComponent {
4450
4556
  this.visibleChange.emit(v);
4451
4557
  }
4452
4558
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4453
- 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$3.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: i1$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }] }); }
4559
+ 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 class=\"pt-dialog-header-inner\">\n <div class=\"pt-dialog-header-left\">\n <i\n *ngIf=\"config.headerIconClass\"\n class=\"pt-dialog-header-icon\"\n [ngClass]=\"config.headerIconClass\"\n ></i>\n\n <ng-content select=\"[ptDialogHeader]\"></ng-content>\n\n <span *ngIf=\"config.header\" class=\"pt-dialog-header-title\">\n {{ config.header }}\n </span>\n </div>\n </div>\n </ng-template>\n\n <!-- BODY -->\n <div class=\"pt-dialog-body\" [ngStyle]=\"bodyStyle\">\n <div class=\"pt-dialog-body-inner\">\n <ng-content select=\"[ptDialogContent]\"></ng-content>\n <ng-content></ng-content>\n </div>\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}.pt-dialog-header-inner{width:100%;padding:1rem 1rem .75rem;display:flex;align-items:center;justify-content:space-between}.pt-dialog-header-left{display:flex;align-items:center}.pt-dialog-header-icon{margin-right:.5rem}.pt-dialog-header-title{font-weight:700;font-size:1.125rem}.pt-dialog-body{padding:1.25rem 1rem 1rem;display:flex;justify-content:center}.pt-dialog-body-inner{width:100%;max-width:100%;display:flex;flex-direction:column;gap:.75rem}\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$3.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: i1$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }] }); }
4454
4560
  }
4455
4561
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTDialogComponent, decorators: [{
4456
4562
  type: Component,
4457
- 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"] }]
4563
+ 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 class=\"pt-dialog-header-inner\">\n <div class=\"pt-dialog-header-left\">\n <i\n *ngIf=\"config.headerIconClass\"\n class=\"pt-dialog-header-icon\"\n [ngClass]=\"config.headerIconClass\"\n ></i>\n\n <ng-content select=\"[ptDialogHeader]\"></ng-content>\n\n <span *ngIf=\"config.header\" class=\"pt-dialog-header-title\">\n {{ config.header }}\n </span>\n </div>\n </div>\n </ng-template>\n\n <!-- BODY -->\n <div class=\"pt-dialog-body\" [ngStyle]=\"bodyStyle\">\n <div class=\"pt-dialog-body-inner\">\n <ng-content select=\"[ptDialogContent]\"></ng-content>\n <ng-content></ng-content>\n </div>\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}.pt-dialog-header-inner{width:100%;padding:1rem 1rem .75rem;display:flex;align-items:center;justify-content:space-between}.pt-dialog-header-left{display:flex;align-items:center}.pt-dialog-header-icon{margin-right:.5rem}.pt-dialog-header-title{font-weight:700;font-size:1.125rem}.pt-dialog-body{padding:1.25rem 1rem 1rem;display:flex;justify-content:center}.pt-dialog-body-inner{width:100%;max-width:100%;display:flex;flex-direction:column;gap:.75rem}\n"] }]
4458
4564
  }], propDecorators: { config: [{
4459
4565
  type: Input
4460
4566
  }], visible: [{