UNPKG

@rangertechnologies/ngnxt

Version:

This library was used for creating dymanic UI based on the input JSON/data

168 lines 43.7 kB
import { CommonModule } from '@angular/common'; import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core'; import { CustomTranslatePipe } from '../../pipe/custom-translate.pipe'; import * as i0 from "@angular/core"; import * as i1 from "../../services/translation.service"; import * as i2 from "@angular/common"; export class NxtButtonComponent { cdRef; translationService; elementRef; buttonValue = ''; //SKS24JAN25 button text buttonType = 'primary'; //SKS24JAN25 If the button type is 'text-only', it should display only the text without a border or outline. For 'grey-text', the button should have a border and a background color, but the text color should be gray, similar to 'blue-text' type = 'button'; //SKS24JAN25 The button types are "button," "group," and "dropdown." buttonDisable = false; //SKS24JAN25 use this input to disable a button when needed. btnBgColor = ''; // Use this input to set a custom background color for the button. btnBorder = ''; // Use this input to set a custom border style for the button. btnTextColor = ''; // Use this input to set a custom text color for the button. btnHeight = ''; // Use this input to set a custom height for the button. btnWidth = ''; // Use this input to set a custom width for the button. btnIconLeftSrc = ''; // Use this input to set the source of the left-side icon for the button. btnIconRightSrc = ''; // Use this input to set the source of the right-side icon for the button. btnHoverBgColor = ''; // Use this input to set the background color of the button on hover. btnHoverTextColor = ''; // Use this input to set the text color of the button on hover. btnId = 'default'; // Use this input to set a custom ID for the button. Default is 'default'. dataDismiss = ''; // Use this input to specify the dismiss action for the button (e.g., 'modal' to close a modal). buttonBorder = '0px'; // Use this input to set the border size of the button. Default is '0px' for no border. modalToTrigger = ''; // Use this input to specify the ID or target of the modal to be triggered. isImageSvg = false; // Use this input to determine if the image is an SVG. Default is false (non-SVG). tabIndex = ''; // Use this input to set the tab index for the element, controlling the focus order. buttonConfig = ''; // Use this input to pass configuration settings for the group and dropdown buttons (e.g., styles, actions). mode = 'edit'; // New mode input languageCode = 'en'; buttonClickEmit = new EventEmitter(); iconSrc = ''; // Ensure it's always a string isDropdownOpen = false; // SKS24JAN25 dropdown button config // dropdownButton = { // btnBgColor: '#007bff', // btnBorder: '1px solid #0056b3', // btnTextColor: '#ffffff', // btnHeight: '40px', // btnWidth: '150px', // btnHoverBgColor: '#0056b3', // btnHoverTextColor: '#ffffff', // label: 'Dropdown', // iconSrc: '', // items: [ // { label: 'Action 1',iconSrc: '', hover: false }, // { label: 'Action 2',iconSrc: '', hover: false }, // { label: 'Action 3',iconSrc: '', hover: false } // ] // }; constructor(cdRef, translationService, elementRef) { this.cdRef = cdRef; this.translationService = translationService; this.elementRef = elementRef; } ngOnInit() { // SKS14JUL25 Initialize language settings on component load // SKS14JUL25 Get the saved language from localStorage (if any) let lang = localStorage.getItem('language'); // SKS14JUL25 If languageCode is already set (e.g., from input or config), apply it if (this.languageCode) { this.translationService.setLanguage(this.languageCode); } // SKS14JUL25 Else use the language from localStorage if available else if (lang && lang !== '') { this.languageCode = lang; } // SKS14JUL25 Subscribe to translation load event to trigger change detection, //SKS14JUL25 ensuring that translations using pipes get updated properly this.translationService.translationsLoaded$.subscribe(() => { this.cdRef.detectChanges(); //SKS14JUL25 Force pipe re-evaluation after language change }); } ngOnChanges(changes) { // SKS14JUL25 Check if there's a change in the input property 'languageCode' if (changes['languageCode']) { // SKS14JUL25 If new languageCode is set, update the translation service if (this.languageCode) { this.translationService.setLanguage(this.languageCode); } } } //SKS24JAN25 Function to get styles for dropdown and group buttons based on the provided configuration. getButtonStyles(config) { return { 'button-custom-bg': config.btnBgColor || '', 'button-custom-border': config.btnBorder || '', 'button-custom-color': config.btnTextColor || '', 'button-custom-height': config.btnHeight || '', 'button-custom-width': config.btnWidth || '', 'button-hover-bg': config.btnHoverBgColor || '', 'button-hover-text-color': config.btnHoverTextColor || '' }; } buttonClicked($event) { this.buttonClickEmit.emit($event); if (this.isDropdownOpen) { this.isDropdownOpen = false; } } toggleDropdown() { this.isDropdownOpen = !this.isDropdownOpen; } //SKS24JAN25 Listener for clicks outside the dropdown button to close or manage its state. onClickOutside(event) { if (this.isDropdownOpen && !this.elementRef.nativeElement.contains(event.target)) { this.isDropdownOpen = false; } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtButtonComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TranslationService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtButtonComponent, isStandalone: true, selector: "nxt-button", inputs: { buttonValue: "buttonValue", buttonType: "buttonType", type: "type", buttonDisable: "buttonDisable", btnBgColor: "btnBgColor", btnBorder: "btnBorder", btnTextColor: "btnTextColor", btnHeight: "btnHeight", btnWidth: "btnWidth", btnIconLeftSrc: "btnIconLeftSrc", btnIconRightSrc: "btnIconRightSrc", btnHoverBgColor: "btnHoverBgColor", btnHoverTextColor: "btnHoverTextColor", btnId: "btnId", dataDismiss: "dataDismiss", buttonBorder: "buttonBorder", modalToTrigger: "modalToTrigger", isImageSvg: "isImageSvg", tabIndex: "tabIndex", buttonConfig: "buttonConfig", mode: "mode", languageCode: "languageCode" }, outputs: { buttonClickEmit: "buttonClickEmit" }, host: { listeners: { "document:click": "onClickOutside($event)" } }, usesOnChanges: true, ngImport: i0, template: "<!-- SKS24JAN25 group button -->\n<div *ngIf=\"type === 'group'\" class=\"btn-group\" role=\"group\" aria-label=\"Button Group\">\n <button *ngFor=\"let btn of buttonConfig.buttons\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [attr.tabindex]=\"btn.tabIndex\"\n [attr.data-bs-toggle]=\"btn.modalToTrigger ? 'modal' : null\"\n [attr.data-bs-target]=\"btn.modalToTrigger ? '#' + btn.modalToTrigger : null\"\n [ngStyle]=\"getButtonStyles(btn)\"\n [disabled]=\"btn.buttonDisable\"\n [attr.data-bs-dismiss]=\"btn.dataDismiss\"\n (click)=\"buttonClicked(btn)\"\n [attr.id]=\"btn.btnId !== 'default' ? btn.btnId : null\">\n <img *ngIf=\"btn.isImageSvg\" [src]=\"btn.iconSrc\">\n <span class=\"custom-tooltip\" \n style=\"background-color:{{btn.tooltipBcColor}};\n color:{{btn.tooltipColor}};\n font-size:{{btn.tooltipFSize}}\">\n {{ btn.tooltipPath || btn.tooltip | customTranslate : btn.tooltip }}\n <div class=\"tooltip-pointer\" style=\"background-color:{{btn.tooltipBcColor}};\"></div>\n </span>\n </button>\n</div>\n \n<!-- SKS24JAN25 single button -->\n<button type=\"button\" *ngIf=\"type !== 'group' && type !== 'dropdown'\" class=\"btn btn-primary fc-button {{buttonType}}\" [tabindex]=\"tabIndex\"\n [attr.data-bs-toggle]=\"modalToTrigger != '' ? 'modal' : ''\"\n [attr.data-bs-target]=\"modalToTrigger != '' ? '#'+modalToTrigger : ''\"\n style=\"button-custom-bg: {{btnBgColor}};button-custom-border: {{btnBorder}};button-custom-color: {{btnTextColor}};button-custom-height: {{btnHeight}};button-custom-width: {{btnWidth}};button-hover-bg: {{btnHoverBgColor}};button-hover-text-color: {{btnHoverTextColor}};\"\n [disabled]=\"buttonDisable\" [attr.data-bs-dismiss]='dataDismiss' (click)=\"buttonClicked($event)\"\n [attr.id]=\"btnId != 'default' ? btnId : null\">\n <img *ngIf=\"btnIconLeftSrc != '' && isImageSvg\" src=\"{{btnIconLeftSrc}}\"\n class=\"fc-btn-icon left-icon\">\n <img *ngIf=\"btnIconLeftSrc != '' && !isImageSvg\" src=\"{{btnIconLeftSrc}}\" class=\"fc-btn-icon left-icon\">\n <span class=\"fc-btn-text\">{{buttonValue}}</span>\n <img *ngIf=\"btnIconRightSrc != '' && isImageSvg\" src=\"{{btnIconRightSrc}}\"\n class=\"fc-btn-icon right-icon\">\n <img *ngIf=\"btnIconRightSrc != '' && !isImageSvg\" src=\"{{btnIconRightSrc}}\" class=\"fc-btn-icon right-icon\">\n</button>\n\n<!-- SKS24JAN25 dropdown button -->\n<div *ngIf=\"type === 'dropdown'\" class=\"dropdown\">\n <svg class=\"clickable-img\" (click)=\"toggleDropdown()\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.3\" y=\"0.3\" width=\"39.4\" height=\"39.4\" rx=\"11.7\" fill=\"#FAFBFD\" stroke=\"#D5D5D5\" stroke-width=\"0.6\"/>\n <path d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\" fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n <div class=\"dropdown-menu\" *ngIf=\"isDropdownOpen\">\n <button *ngFor=\"let btn of buttonConfig.buttons\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [attr.tabindex]=\"btn.tabIndex\"\n [attr.data-bs-toggle]=\"btn.modalToTrigger ? 'modal' : null\"\n [attr.data-bs-target]=\"btn.modalToTrigger ? '#' + btn.modalToTrigger : null\"\n [ngStyle]=\"getButtonStyles(btn)\"\n [disabled]=\"btn.buttonDisable\"\n [attr.data-bs-dismiss]=\"btn.dataDismiss\"\n (click)=\"buttonClicked(btn)\"\n [attr.id]=\"btn.btnId !== 'default' ? btn.btnId : null\">\n <img *ngIf=\"btn.isImageSvg\" [src]=\"btn.iconSrc\">\n <span class=\"fc-btn-text\" style=\"padding-left: 12px;\">{{btn.name}}</span>\n </button>\n </div>\n</div>\n", styles: [".fc-button,.fc-button:hover,.fc-button:active,.fc-button:focus{outline:none;border:none;box-shadow:none}.fc-button{padding:6.5px}.fc-button:active{transform:scale(1.02)}.text-only{background:transparent;color:var(--fc-primary-color);border:none;outline:none}.grey-text{color:var(--fc-text-color)}.blue-text{color:var(--fc-primary-color)}.grey-border{color:#272525;background:transparent;border:2px solid #dddddd}.grey-border:hover{color:#272525;background:#6a2aff0a;border:2px solid #6a2aff59}.grey-border:active,.grey-border:focus{background-color:#386bf6;border:2px solid #3268ff;color:#fff}.blue-border,.blue-border:hover,.blue-border:active,.blue-border:focus{border:1px solid var(--fc-primary-color)}.bg-transparent{background-color:transparent}.custom-btn{background-color:var(button-custom-bg);border-color:var(button-custom-border);color:var(button-custom-color);height:var(button-custom-height);width:var(button-custom-width)}.custom-btn:hover,.custom-btn:active,.custom-btn:focus{border-color:var(button-custom-border);background-color:var(button-hover-bg);color:var(button-hover-text-color)}.fc-btn-text{display:inline-flex;vertical-align:middle;font-size:14px;font-weight:400;padding-left:5px;padding-right:5px}.right-icon{margin-left:5px}.left-icon{margin-right:5px}.fc-button.side-save-component,.fc-button.side-cancel-component{border:1px solid transparent}.fc-button.side-save-component:focus,.fc-button.side-cancel-component:focus{box-shadow:0 0 0 .25rem #0d6efd40;border:1px solid #86b7fe}.btn-group{background-color:#fdfeff;border:1px solid #dddddd;border-radius:7px}.btn-icon{background-color:#fdfeff;border:1px solid #dddddd}.custom-tooltip{visibility:visible;position:absolute;background-color:#0773ff;color:#fff;text-align:center;padding:5px 10px;border-radius:4px;font-size:12px;white-space:nowrap;bottom:100%;left:50%;transform:translate(-50%);opacity:0;transition:opacity .2s;z-index:10;margin-bottom:10px}.tooltip-pointer{position:absolute;width:0;height:0;bottom:-5px;left:50%;transform:translate(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #0773ff}.tooltip-container:hover .custom-tooltip{visibility:visible;opacity:1}.clickable-img{position:relative;cursor:pointer;height:41px;transition:transform .3s ease,box-shadow .3s ease;border:2px solid #dddddd;border-radius:13px}.clickable-img:hover{transform:scale(.95);border:2px solid rgb(31,105,255);border-radius:14px}.dropdown{position:relative;display:inline-block}.dropdown-menu{right:0;top:45px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a;left:unset}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}.dropdown-menu .btn:hover{background-color:#f1f1f1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: CustomTranslatePipe, name: "customTranslate" }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtButtonComponent, decorators: [{ type: Component, args: [{ selector: 'nxt-button', standalone: true, imports: [CommonModule, CustomTranslatePipe], template: "<!-- SKS24JAN25 group button -->\n<div *ngIf=\"type === 'group'\" class=\"btn-group\" role=\"group\" aria-label=\"Button Group\">\n <button *ngFor=\"let btn of buttonConfig.buttons\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [attr.tabindex]=\"btn.tabIndex\"\n [attr.data-bs-toggle]=\"btn.modalToTrigger ? 'modal' : null\"\n [attr.data-bs-target]=\"btn.modalToTrigger ? '#' + btn.modalToTrigger : null\"\n [ngStyle]=\"getButtonStyles(btn)\"\n [disabled]=\"btn.buttonDisable\"\n [attr.data-bs-dismiss]=\"btn.dataDismiss\"\n (click)=\"buttonClicked(btn)\"\n [attr.id]=\"btn.btnId !== 'default' ? btn.btnId : null\">\n <img *ngIf=\"btn.isImageSvg\" [src]=\"btn.iconSrc\">\n <span class=\"custom-tooltip\" \n style=\"background-color:{{btn.tooltipBcColor}};\n color:{{btn.tooltipColor}};\n font-size:{{btn.tooltipFSize}}\">\n {{ btn.tooltipPath || btn.tooltip | customTranslate : btn.tooltip }}\n <div class=\"tooltip-pointer\" style=\"background-color:{{btn.tooltipBcColor}};\"></div>\n </span>\n </button>\n</div>\n \n<!-- SKS24JAN25 single button -->\n<button type=\"button\" *ngIf=\"type !== 'group' && type !== 'dropdown'\" class=\"btn btn-primary fc-button {{buttonType}}\" [tabindex]=\"tabIndex\"\n [attr.data-bs-toggle]=\"modalToTrigger != '' ? 'modal' : ''\"\n [attr.data-bs-target]=\"modalToTrigger != '' ? '#'+modalToTrigger : ''\"\n style=\"button-custom-bg: {{btnBgColor}};button-custom-border: {{btnBorder}};button-custom-color: {{btnTextColor}};button-custom-height: {{btnHeight}};button-custom-width: {{btnWidth}};button-hover-bg: {{btnHoverBgColor}};button-hover-text-color: {{btnHoverTextColor}};\"\n [disabled]=\"buttonDisable\" [attr.data-bs-dismiss]='dataDismiss' (click)=\"buttonClicked($event)\"\n [attr.id]=\"btnId != 'default' ? btnId : null\">\n <img *ngIf=\"btnIconLeftSrc != '' && isImageSvg\" src=\"{{btnIconLeftSrc}}\"\n class=\"fc-btn-icon left-icon\">\n <img *ngIf=\"btnIconLeftSrc != '' && !isImageSvg\" src=\"{{btnIconLeftSrc}}\" class=\"fc-btn-icon left-icon\">\n <span class=\"fc-btn-text\">{{buttonValue}}</span>\n <img *ngIf=\"btnIconRightSrc != '' && isImageSvg\" src=\"{{btnIconRightSrc}}\"\n class=\"fc-btn-icon right-icon\">\n <img *ngIf=\"btnIconRightSrc != '' && !isImageSvg\" src=\"{{btnIconRightSrc}}\" class=\"fc-btn-icon right-icon\">\n</button>\n\n<!-- SKS24JAN25 dropdown button -->\n<div *ngIf=\"type === 'dropdown'\" class=\"dropdown\">\n <svg class=\"clickable-img\" (click)=\"toggleDropdown()\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.3\" y=\"0.3\" width=\"39.4\" height=\"39.4\" rx=\"11.7\" fill=\"#FAFBFD\" stroke=\"#D5D5D5\" stroke-width=\"0.6\"/>\n <path d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\" fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n <div class=\"dropdown-menu\" *ngIf=\"isDropdownOpen\">\n <button *ngFor=\"let btn of buttonConfig.buttons\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [attr.tabindex]=\"btn.tabIndex\"\n [attr.data-bs-toggle]=\"btn.modalToTrigger ? 'modal' : null\"\n [attr.data-bs-target]=\"btn.modalToTrigger ? '#' + btn.modalToTrigger : null\"\n [ngStyle]=\"getButtonStyles(btn)\"\n [disabled]=\"btn.buttonDisable\"\n [attr.data-bs-dismiss]=\"btn.dataDismiss\"\n (click)=\"buttonClicked(btn)\"\n [attr.id]=\"btn.btnId !== 'default' ? btn.btnId : null\">\n <img *ngIf=\"btn.isImageSvg\" [src]=\"btn.iconSrc\">\n <span class=\"fc-btn-text\" style=\"padding-left: 12px;\">{{btn.name}}</span>\n </button>\n </div>\n</div>\n", styles: [".fc-button,.fc-button:hover,.fc-button:active,.fc-button:focus{outline:none;border:none;box-shadow:none}.fc-button{padding:6.5px}.fc-button:active{transform:scale(1.02)}.text-only{background:transparent;color:var(--fc-primary-color);border:none;outline:none}.grey-text{color:var(--fc-text-color)}.blue-text{color:var(--fc-primary-color)}.grey-border{color:#272525;background:transparent;border:2px solid #dddddd}.grey-border:hover{color:#272525;background:#6a2aff0a;border:2px solid #6a2aff59}.grey-border:active,.grey-border:focus{background-color:#386bf6;border:2px solid #3268ff;color:#fff}.blue-border,.blue-border:hover,.blue-border:active,.blue-border:focus{border:1px solid var(--fc-primary-color)}.bg-transparent{background-color:transparent}.custom-btn{background-color:var(button-custom-bg);border-color:var(button-custom-border);color:var(button-custom-color);height:var(button-custom-height);width:var(button-custom-width)}.custom-btn:hover,.custom-btn:active,.custom-btn:focus{border-color:var(button-custom-border);background-color:var(button-hover-bg);color:var(button-hover-text-color)}.fc-btn-text{display:inline-flex;vertical-align:middle;font-size:14px;font-weight:400;padding-left:5px;padding-right:5px}.right-icon{margin-left:5px}.left-icon{margin-right:5px}.fc-button.side-save-component,.fc-button.side-cancel-component{border:1px solid transparent}.fc-button.side-save-component:focus,.fc-button.side-cancel-component:focus{box-shadow:0 0 0 .25rem #0d6efd40;border:1px solid #86b7fe}.btn-group{background-color:#fdfeff;border:1px solid #dddddd;border-radius:7px}.btn-icon{background-color:#fdfeff;border:1px solid #dddddd}.custom-tooltip{visibility:visible;position:absolute;background-color:#0773ff;color:#fff;text-align:center;padding:5px 10px;border-radius:4px;font-size:12px;white-space:nowrap;bottom:100%;left:50%;transform:translate(-50%);opacity:0;transition:opacity .2s;z-index:10;margin-bottom:10px}.tooltip-pointer{position:absolute;width:0;height:0;bottom:-5px;left:50%;transform:translate(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #0773ff}.tooltip-container:hover .custom-tooltip{visibility:visible;opacity:1}.clickable-img{position:relative;cursor:pointer;height:41px;transition:transform .3s ease,box-shadow .3s ease;border:2px solid #dddddd;border-radius:13px}.clickable-img:hover{transform:scale(.95);border:2px solid rgb(31,105,255);border-radius:14px}.dropdown{position:relative;display:inline-block}.dropdown-menu{right:0;top:45px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a;left:unset}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}.dropdown-menu .btn:hover{background-color:#f1f1f1}\n"] }] }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.TranslationService }, { type: i0.ElementRef }], propDecorators: { buttonValue: [{ type: Input }], buttonType: [{ type: Input }], type: [{ type: Input }], buttonDisable: [{ type: Input }], btnBgColor: [{ type: Input }], btnBorder: [{ type: Input }], btnTextColor: [{ type: Input }], btnHeight: [{ type: Input }], btnWidth: [{ type: Input }], btnIconLeftSrc: [{ type: Input }], btnIconRightSrc: [{ type: Input }], btnHoverBgColor: [{ type: Input }], btnHoverTextColor: [{ type: Input }], btnId: [{ type: Input }], dataDismiss: [{ type: Input }], buttonBorder: [{ type: Input }], modalToTrigger: [{ type: Input }], isImageSvg: [{ type: Input }], tabIndex: [{ type: Input }], buttonConfig: [{ type: Input }], mode: [{ type: Input }], languageCode: [{ type: Input }], buttonClickEmit: [{ type: Output }], onClickOutside: [{ type: HostListener, args: ['document:click', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnh0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9idXR0b24vbnh0LWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9idXR0b24vbnh0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFxQixTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUMzSSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7OztBQVN2RSxNQUFNLE9BQU8sa0JBQWtCO0lBaURUO0lBQWtDO0lBQWdEO0lBL0M3RixXQUFXLEdBQVcsRUFBRSxDQUFDLENBQUMseUJBQXlCO0lBQ25ELFVBQVUsR0FBVyxTQUFTLENBQUMsQ0FBQywrT0FBK087SUFDL1EsSUFBSSxHQUFXLFFBQVEsQ0FBQyxDQUFDLG9FQUFvRTtJQUM3RixhQUFhLEdBQVksS0FBSyxDQUFDLENBQUMsNERBQTREO0lBQzVGLFVBQVUsR0FBVyxFQUFFLENBQUMsQ0FBQyxrRUFBa0U7SUFDM0YsU0FBUyxHQUFXLEVBQUUsQ0FBQyxDQUFDLDhEQUE4RDtJQUN0RixZQUFZLEdBQVcsRUFBRSxDQUFDLENBQUMsNERBQTREO0lBQ3ZGLFNBQVMsR0FBVyxFQUFFLENBQUMsQ0FBQyx3REFBd0Q7SUFDaEYsUUFBUSxHQUFXLEVBQUUsQ0FBQyxDQUFDLHVEQUF1RDtJQUM5RSxjQUFjLEdBQVcsRUFBRSxDQUFDLENBQUMseUVBQXlFO0lBQ3RHLGVBQWUsR0FBVyxFQUFFLENBQUMsQ0FBQyww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QUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBZ0ZQLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDdXN0b21UcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9jdXN0b20tdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdueHQtYnV0dG9uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQ3VzdG9tVHJhbnNsYXRlUGlwZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9ueHQtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbnh0LWJ1dHRvbi5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTnh0QnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiBcbiAgQElucHV0KCkgYnV0dG9uVmFsdWU6IHN0cmluZyA9ICcnOyAvL1NLUzI0SkFOMjUgYnV0dG9uIHRleHQgXG4gIEBJbnB1dCgpIGJ1dHRvblR5cGU6IHN0cmluZyA9ICdwcmltYXJ5JzsgLy9TS1MyNEpBTjI1IElmIHRoZSBidXR0b24gdHlwZSBpcyAndGV4dC1vbmx5JywgaXQgc2hvdWxkIGRpc3BsYXkgb25seSB0aGUgdGV4dCB3aXRob3V0IGEgYm9yZGVyIG9yIG91dGxpbmUuIEZvciAnZ3JleS10ZXh0JywgdGhlIGJ1dHRvbiBzaG91bGQgaGF2ZSBhIGJvcmRlciBhbmQgYSBiYWNrZ3JvdW5kIGNvbG9yLCBidXQgdGhlIHRleHQgY29sb3Igc2hvdWxkIGJlIGdyYXksIHNpbWlsYXIgdG8gJ2JsdWUtdGV4dCdcbiAgQElucHV0KCkgdHlwZTogc3RyaW5nID0gJ2J1dHRvbic7IC8vU0tTMjRKQU4yNSBUaGUgYnV0dG9uIHR5cGVzIGFyZSBcImJ1dHRvbixcIiBcImdyb3VwLFwiIGFuZCBcImRyb3Bkb3duLlwiXG4gIEBJbnB1dCgpIGJ1dHRvbkRpc2FibGU6IGJvb2xlYW4gPSBmYWxzZTsgLy9TS1MyNEpBTjI1IHVzZSB0aGlzIGlucHV0IHRvIGRpc2FibGUgYSBidXR0b24gd2hlbiBuZWVkZWQuXG4gIEBJbnB1dCgpIGJ0bkJnQ29sb3I6IHN0cmluZyA9ICcnOyAvLyBVc2UgdGhpcyBpbnB1dCB0byBzZXQgYSBjdXN0b20gYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIGJ1dHRvbi5cbiAgQElucHV0KCkgYnRuQm9yZGVyOiBzdHJpbmcgPSAnJzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc2V0IGEgY3VzdG9tIGJvcmRlciBzdHlsZSBmb3IgdGhlIGJ1dHRvbi5cbiAgQElucHV0KCkgYnRuVGV4dENvbG9yOiBzdHJpbmcgPSAnJzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc2V0IGEgY3VzdG9tIHRleHQgY29sb3IgZm9yIHRoZSBidXR0b24uXG4gIEBJbnB1dCgpIGJ0bkhlaWdodDogc3RyaW5nID0gJyc7IC8vIFVzZSB0aGlzIGlucHV0IHRvIHNldCBhIGN1c3RvbSBoZWlnaHQgZm9yIHRoZSBidXR0b24uXG4gIEBJbnB1dCgpIGJ0bldpZHRoOiBzdHJpbmcgPSAnJzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc2V0IGEgY3VzdG9tIHdpZHRoIGZvciB0aGUgYnV0dG9uLlxuICBASW5wdXQoKSBidG5JY29uTGVmdFNyYzogc3RyaW5nID0gJyc7IC8vIFVzZSB0aGlzIGlucHV0IHRvIHNldCB0aGUgc291cmNlIG9mIHRoZSBsZWZ0LXNpZGUgaWNvbiBmb3IgdGhlIGJ1dHRvbi5cbiAgQElucHV0KCkgYnRuSWNvblJpZ2h0U3JjOiBzdHJpbmcgPSAnJzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc2V0IHRoZSBzb3VyY2Ugb2YgdGhlIHJpZ2h0LXNpZGUgaWNvbiBmb3IgdGhlIGJ1dHRvbi5cbiAgQElucHV0KCkgYnRuSG92ZXJCZ0NvbG9yOiBzdHJpbmcgPSAnJzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc2V0IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBidXR0b24gb24gaG92ZXIuXG4gIEBJbnB1dCgpIGJ0bkhvdmVyVGV4dENvbG9yOiBzdHJpbmcgPSAnJzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc2V0IHRoZSB0ZXh0IGNvbG9yIG9mIHRoZSBidXR0b24gb24gaG92ZXIuXG4gIEBJbnB1dCgpIGJ0bklkOiBzdHJpbmcgPSAnZGVmYXVsdCc7IC8vIFVzZSB0aGlzIGlucHV0IHRvIHNldCBhIGN1c3RvbSBJRCBmb3IgdGhlIGJ1dHRvbi4gRGVmYXVsdCBpcyAnZGVmYXVsdCcuXG4gIEBJbnB1dCgpIGRhdGFEaXNtaXNzOiBzdHJpbmcgPSAnJzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc3BlY2lmeSB0aGUgZGlzbWlzcyBhY3Rpb24gZm9yIHRoZSBidXR0b24gKGUuZy4sICdtb2RhbCcgdG8gY2xvc2UgYSBtb2RhbCkuXG4gIEBJbnB1dCgpIGJ1dHRvbkJvcmRlcjogc3RyaW5nID0gJzBweCc7IC8vIFVzZSB0aGlzIGlucHV0IHRvIHNldCB0aGUgYm9yZGVyIHNpemUgb2YgdGhlIGJ1dHRvbi4gRGVmYXVsdCBpcyAnMHB4JyBmb3Igbm8gYm9yZGVyLlxuICBASW5wdXQoKSBtb2RhbFRvVHJpZ2dlcjogc3RyaW5nID0gJyc7IC8vIFVzZSB0aGlzIGlucHV0IHRvIHNwZWNpZnkgdGhlIElEIG9yIHRhcmdldCBvZiB0aGUgbW9kYWwgdG8gYmUgdHJpZ2dlcmVkLlxuICBASW5wdXQoKSBpc0ltYWdlU3ZnOiBib29sZWFuID0gZmFsc2U7IC8vIFVzZSB0aGlzIGlucHV0IHRvIGRldGVybWluZSBpZiB0aGUgaW1hZ2UgaXMgYW4gU1ZHLiBEZWZhdWx0IGlzIGZhbHNlIChub24tU1ZHKS5cbiAgQElucHV0KCkgdGFiSW5kZXg6IGFueSA9ICcnOy8vIFVzZSB0aGlzIGlucHV0IHRvIHNldCB0aGUgdGFiIGluZGV4IGZvciB0aGUgZWxlbWVudCwgY29udHJvbGxpbmcgdGhlIGZvY3VzIG9yZGVyLlxuICBASW5wdXQoKSBidXR0b25Db25maWc6IGFueSA9ICcnOyAvLyBVc2UgdGhpcyBpbnB1dCB0byBwYXNzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBncm91cCBhbmQgZHJvcGRvd24gYnV0dG9ucyAoZS5nLiwgc3R5bGVzLCBhY3Rpb25zKS5cbiAgQElucHV0KCkgbW9kZTogJ3ZpZXcnIHwgJ2VkaXQnIHwgJ3ByaW50JyA9ICdlZGl0JzsgLy8gTmV3IG1vZGUgaW5wdXRcbiAgQElucHV0KCkgbGFuZ3VhZ2VDb2RlOiBhbnkgPSAnZW4nXG4gIFxuICBAT3V0cHV0KCkgYnV0dG9uQ2xpY2tFbWl0OkV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIGljb25TcmM6IGFueSA9ICcnOyAvLyBFbnN1cmUgaXQncyBhbHdheXMgYSBzdHJpbmdcbiAgaXNEcm9wZG93bk9wZW4gPSBmYWxzZTtcblxuICBcblxuICAvLyBTS1MyNEpBTjI1IGRyb3Bkb3duIGJ1dHRvbiBjb25maWdcblxuICAvLyBkcm9wZG93bkJ1dHRvbiA9IHtcbiAgLy8gICBidG5CZ0NvbG9yOiAnIzAwN2JmZicsXG4gIC8vICAgYnRuQm9yZGVyOiAnMXB4IHNvbGlkICMwMDU2YjMnLFxuICAvLyAgIGJ0blRleHRDb2xvcjogJyNmZmZmZmYnLFxuICAvLyAgIGJ0bkhlaWdodDogJzQwcHgnLFxuICAvLyAgIGJ0bldpZHRoOiAnMTUwcHgnLFxuICAvLyAgIGJ0bkhvdmVyQmdDb2xvcjogJyMwMDU2YjMnLFxuICAvLyAgIGJ0bkhvdmVyVGV4dENvbG9yOiAnI2ZmZmZmZicsXG4gIC8vICAgbGFiZWw6ICdEcm9wZG93bicsXG4gIC8vICAgaWNvblNyYzogJycsXG4gIC8vICAgaXRlbXM6IFtcbiAgLy8gICAgIHsgbGFiZWw6ICdBY3Rpb24gMScsaWNvblNyYzogJycsIGhvdmVyOiBmYWxzZSB9LFxuICAvLyAgICAgeyBsYWJlbDogJ0FjdGlvbiAyJyxpY29uU3JjOiAnJywgaG92ZXI6IGZhbHNlIH0sXG4gIC8vICAgICB7IGxhYmVsOiAnQWN0aW9uIDMnLGljb25TcmM6ICcnLCBob3ZlcjogZmFsc2UgfVxuICAvLyAgIF1cbiAgLy8gfTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gU0tTMTRKVUwyNSBJbml0aWFsaXplIGxhbmd1YWdlIHNldHRpbmdzIG9uIGNvbXBvbmVudCBsb2FkXG4gICAgLy8gU0tTMTRKVUwyNSBHZXQgdGhlIHNhdmVkIGxhbmd1YWdlIGZyb20gbG9jYWxTdG9yYWdlIChpZiBhbnkpXG4gICAgbGV0IGxhbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKTtcbiAgICAvLyBTS1MxNEpVTDI1IElmIGxhbmd1YWdlQ29kZSBpcyBhbHJlYWR5IHNldCAoZS5nLiwgZnJvbSBpbnB1dCBvciBjb25maWcpLCBhcHBseSBpdFxuICAgIGlmICh0aGlzLmxhbmd1YWdlQ29kZSkge1xuICAgICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2Uuc2V0TGFuZ3VhZ2UodGhpcy5sYW5ndWFnZUNvZGUpO1xuICAgIH0gXG4gICAgLy8gU0tTMTRKVUwyNSBFbHNlIHVzZSB0aGUgbGFuZ3VhZ2UgZnJvbSBsb2NhbFN0b3JhZ2UgaWYgYXZhaWxhYmxlXG4gICAgZWxzZSBpZiAobGFuZyAmJiBsYW5nICE9PSAnJykge1xuICAgICAgdGhpcy5sYW5ndWFnZUNvZGUgPSBsYW5nO1xuICAgIH1cbiAgICAvLyBTS1MxNEpVTDI1IFN1YnNjcmliZSB0byB0cmFuc2xhdGlvbiBsb2FkIGV2ZW50IHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbixcbiAgICAvL1NLUzE0SlVMMjUgZW5zdXJpbmcgdGhhdCB0cmFuc2xhdGlvbnMgdXNpbmcgcGlwZXMgZ2V0IHVwZGF0ZWQgcHJvcGVybHlcbiAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGlvbnNMb2FkZWQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTsgLy9TS1MxNEpVTDI1IEZvcmNlIHBpcGUgcmUtZXZhbHVhdGlvbiBhZnRlciBsYW5ndWFnZSBjaGFuZ2VcbiAgICB9KTtcbiAgfVxuICBcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIC8vIFNLUzE0SlVMMjUgQ2hlY2sgaWYgdGhlcmUncyBhIGNoYW5nZSBpbiB0aGUgaW5wdXQgcHJvcGVydHkgJ2xhbmd1YWdlQ29kZSdcbiAgICBpZiAoY2hhbmdlc1snbGFuZ3VhZ2VDb2RlJ10pIHtcbiAgICAgIC8vIFNLUzE0SlVMMjUgSWYgbmV3IGxhbmd1YWdlQ29kZSBpcyBzZXQsIHVwZGF0ZSB0aGUgdHJhbnNsYXRpb24gc2VydmljZVxuICAgICAgaWYgKHRoaXMubGFuZ3VhZ2VDb2RlKSB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnNldExhbmd1YWdlKHRoaXMubGFuZ3VhZ2VDb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gIFxuICAvL1NLUzI0SkFOMjUgRnVuY3Rpb24gdG8gZ2V0IHN0eWxlcyBmb3IgZHJvcGRvd24gYW5kIGdyb3VwIGJ1dHRvbnMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24uXG4gIGdldEJ1dHRvblN0eWxlcyhjb25maWc6IGFueSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAnYnV0dG9uLWN1c3RvbS1iZyc6IGNvbmZpZy5idG5CZ0NvbG9yIHx8ICcnLFxuICAgICAgJ2J1dHRvbi1jdXN0b20tYm9yZGVyJzogY29uZmlnLmJ0bkJvcmRlciB8fCAnJyxcbiAgICAgICdidXR0b24tY3VzdG9tLWNvbG9yJzogY29uZmlnLmJ0blRleHRDb2xvciB8fCAnJyxcbiAgICAgICdidXR0b24tY3VzdG9tLWhlaWdodCc6IGNvbmZpZy5idG5IZWlnaHQgfHwgJycsXG4gICAgICAnYnV0dG9uLWN1c3RvbS13aWR0aCc6IGNvbmZpZy5idG5XaWR0aCB8fCAnJyxcbiAgICAgICdidXR0b24taG92ZXItYmcnOiBjb25maWcuYnRuSG92ZXJCZ0NvbG9yIHx8ICcnLFxuICAgICAgJ2J1dHRvbi1ob3Zlci10ZXh0LWNvbG9yJzogY29uZmlnLmJ0bkhvdmVyVGV4dENvbG9yIHx8ICcnXG4gICAgfTtcbiAgfVxuICBcblxuICBidXR0b25DbGlja2VkKCRldmVudDphbnkpe1xuICAgIHRoaXMuYnV0dG9uQ2xpY2tFbWl0LmVtaXQoJGV2ZW50KTtcbiAgICBpZih0aGlzLmlzRHJvcGRvd25PcGVuKXtcbiAgICAgIHRoaXMuaXNEcm9wZG93bk9wZW49ZmFsc2VcbiAgICB9XG4gIH1cblxuICB0b2dnbGVEcm9wZG93bigpIHtcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gIXRoaXMuaXNEcm9wZG93bk9wZW47XG4gIH1cbi8vU0tTMjRKQU4yNSBMaXN0ZW5lciBmb3IgY2xpY2tzIG91dHNpZGUgdGhlIGRyb3Bkb3duIGJ1dHRvbiB0byBjbG9zZSBvciBtYW5hZ2UgaXRzIHN0YXRlLlxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uQ2xpY2tPdXRzaWRlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNEcm9wZG93bk9wZW4gJiYgIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcbiAgICApIHtcbiAgICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS0gU0tTMjRKQU4yNSBncm91cCBidXR0b24gLS0+XG48ZGl2ICpuZ0lmPVwidHlwZSA9PT0gJ2dyb3VwJ1wiIGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkJ1dHRvbiBHcm91cFwiPlxuICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGJ0biBvZiBidXR0b25Db25maWcuYnV0dG9uc1wiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1pY29uIHt7YnRuLmJ1dHRvblR5cGV9fSB0b29sdGlwLWNvbnRhaW5lclwiXG4gICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJidG4udGFiSW5kZXhcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1icy10b2dnbGVdPVwiYnRuLm1vZGFsVG9UcmlnZ2VyID8gJ21vZGFsJyA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1icy10YXJnZXRdPVwiYnRuLm1vZGFsVG9UcmlnZ2VyID8gJyMnICsgYnRuLm1vZGFsVG9UcmlnZ2VyIDogbnVsbFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRCdXR0b25TdHlsZXMoYnRuKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnRuLmJ1dHRvbkRpc2FibGVcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1icy1kaXNtaXNzXT1cImJ0bi5kYXRhRGlzbWlzc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uQ2xpY2tlZChidG4pXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImJ0bi5idG5JZCAhPT0gJ2RlZmF1bHQnID8gYnRuLmJ0bklkIDogbnVsbFwiPlxuICAgICAgICA8aW1nICpuZ0lmPVwiYnRuLmlzSW1hZ2VTdmdcIiBbc3JjXT1cImJ0bi5pY29uU3JjXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIiBcbiAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjp7e2J0bi50b29sdGlwQmNDb2xvcn19O1xuICAgICAgICAgICAgY29sb3I6e3tidG4udG9vbHRpcENvbG9yfX07XG4gICAgICAgICAgICBmb250LXNpemU6e3tidG4udG9vbHRpcEZTaXplfX1cIj5cbiAgICAgICAgICAgIHt7IGJ0bi50b29sdGlwUGF0aCB8fCBidG4udG9vbHRpcCB8IGN1c3RvbVRyYW5zbGF0ZSA6IGJ0bi50b29sdGlwIH19XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbHRpcC1wb2ludGVyXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOnt7YnRuLnRvb2x0aXBCY0NvbG9yfX07XCI+PC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbjwvZGl2PlxuICBcbjwhLS0gU0tTMjRKQU4yNSBzaW5nbGUgYnV0dG9uIC0tPlxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgICpuZ0lmPVwidHlwZSAhPT0gJ2dyb3VwJyAmJiB0eXBlICE9PSAnZHJvcGRvd24nXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgZmMtYnV0dG9uIHt7YnV0dG9uVHlwZX19XCIgW3RhYmluZGV4XT1cInRhYkluZGV4XCJcbiAgICBbYXR0ci5kYXRhLWJzLXRvZ2dsZV09XCJtb2RhbFRvVHJpZ2dlciAhPSAnJyA/ICdtb2RhbCcgOiAnJ1wiXG4gICAgW2F0dHIuZGF0YS1icy10YXJnZXRdPVwibW9kYWxUb1RyaWdnZXIgIT0gJycgPyAnIycrbW9kYWxUb1RyaWdnZXIgOiAnJ1wiXG4gICAgc3R5bGU9XCJidXR0b24tY3VzdG9tLWJnOiB7e2J0bkJnQ29sb3J9fTtidXR0b24tY3VzdG9tLWJvcmRlcjoge3tidG5Cb3JkZXJ9fTtidXR0b24tY3VzdG9tLWNvbG9yOiB7e2J0blRleHRDb2xvcn19O2J1dHRvbi1jdXN0b20taGVpZ2h0OiB7e2J0bkhlaWdodH19O2J1dHRvbi1jdXN0b20td2lkdGg6IHt7YnRuV2lkdGh9fTtidXR0b24taG92ZXItYmc6IHt7YnRuSG92ZXJCZ0NvbG9yfX07YnV0dG9uLWhvdmVyLXRleHQtY29sb3I6IHt7YnRuSG92ZXJUZXh0Q29sb3J9fTtcIlxuICAgIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlXCIgW2F0dHIuZGF0YS1icy1kaXNtaXNzXT0nZGF0YURpc21pc3MnIChjbGljayk9XCJidXR0b25DbGlja2VkKCRldmVudClcIlxuICAgIFthdHRyLmlkXT1cImJ0bklkICE9ICdkZWZhdWx0JyA/IGJ0bklkIDogbnVsbFwiPlxuICAgIDxpbWcgKm5nSWY9XCJidG5JY29uTGVmdFNyYyAhPSAnJyAmJiBpc0ltYWdlU3ZnXCIgc3JjPVwie3tidG5JY29uTGVmdFNyY319XCJcbiAgICAgICAgY2xhc3M9XCJmYy1idG4taWNvbiBsZWZ0LWljb25cIj5cbiAgICA8aW1nICpuZ0lmPVwiYnRuSWNvbkxlZnRTcmMgIT0gJycgJiYgIWlzSW1hZ2VTdmdcIiBzcmM9XCJ7e2J0bkljb25MZWZ0U3JjfX1cIiBjbGFzcz1cImZjLWJ0bi1pY29uIGxlZnQtaWNvblwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZmMtYnRuLXRleHRcIj57e2J1dHRvblZhbHVlfX08L3NwYW4+XG4gICAgPGltZyAqbmdJZj1cImJ0bkljb25SaWdodFNyYyAhPSAnJyAmJiBpc0ltYWdlU3ZnXCIgc3JjPVwie3tidG5JY29uUmlnaHRTcmN9fVwiXG4gICAgICAgIGNsYXNzPVwiZmMtYnRuLWljb24gcmlnaHQtaWNvblwiPlxuICAgIDxpbWcgKm5nSWY9XCJidG5JY29uUmlnaHRTcmMgIT0gJycgJiYgIWlzSW1hZ2VTdmdcIiBzcmM9XCJ7e2J0bkljb25SaWdodFNyY319XCIgY2xhc3M9XCJmYy1idG4taWNvbiByaWdodC1pY29uXCI+XG48L2J1dHRvbj5cblxuPCEtLSBTS1MyNEpBTjI1IGRyb3Bkb3duIGJ1dHRvbiAtLT5cbjxkaXYgKm5nSWY9XCJ0eXBlID09PSAnZHJvcGRvd24nXCIgY2xhc3M9XCJkcm9wZG93blwiPlxuICAgIDxzdmcgY2xhc3M9XCJjbGlja2FibGUtaW1nXCIgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIiAgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cmVjdCB4PVwiMC4zXCIgeT1cIjAuM1wiIHdpZHRoPVwiMzkuNFwiIGhlaWdodD1cIjM5LjRcIiByeD1cIjExLjdcIiBmaWxsPVwiI0ZBRkJGRFwiIHN0cm9rZT1cIiNENUQ1RDVcIiBzdHJva2Utd2lkdGg9XCIwLjZcIi8+XG4gICAgICAgIDxwYXRoIGQ9XCJNMTkuOTk5OSAyNS42NjY3QzIzLjY4MTggMjUuNjY2NyAyNi42NjY2IDIyLjY4MTkgMjYuNjY2NiAxOUMyNi42NjY2IDE1LjMxODEgMjMuNjgxOCAxMi4zMzM0IDE5Ljk5OTkgMTIuMzMzNEMxNi4zMTggMTIuMzMzNCAxMy4zMzMzIDE1LjMxODEgMTMuMzMzMyAxOUMxMy4zMzMzIDIyLjY4MTkgMTYuMzE4IDI1LjY2NjcgMTkuOTk5OSAyNS42NjY3WlwiIGZpbGw9XCIjMjkyRDMyXCIgc3Ryb2tlPVwiIzI5MkQzMlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1taXRlcmxpbWl0PVwiMTBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgIDxwYXRoIGQ9XCJNMTcuNjQ2NyAxOC4xNkwyMC4wMDAxIDIwLjUwNjdMMjIuMzUzNCAxOC4xNlwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgIDwvc3ZnPiAgXG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiAgKm5nSWY9XCJpc0Ryb3Bkb3duT3BlblwiPlxuICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBidG4gb2YgYnV0dG9uQ29uZmlnLmJ1dHRvbnNcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4taWNvbiB7e2J0bi5idXR0b25UeXBlfX0gdG9vbHRpcC1jb250YWluZXJcIlxuICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiYnRuLnRhYkluZGV4XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtYnMtdG9nZ2xlXT1cImJ0bi5tb2RhbFRvVHJpZ2dlciA/ICdtb2RhbCcgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtYnMtdGFyZ2V0XT1cImJ0bi5tb2RhbFRvVHJpZ2dlciA/ICcjJyArIGJ0bi5tb2RhbFRvVHJpZ2dlciA6IG51bGxcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0QnV0dG9uU3R5bGVzKGJ0bilcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ0bi5idXR0b25EaXNhYmxlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtYnMtZGlzbWlzc109XCJidG4uZGF0YURpc21pc3NcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvbkNsaWNrZWQoYnRuKVwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJidG4uYnRuSWQgIT09ICdkZWZhdWx0JyA/IGJ0bi5idG5JZCA6IG51bGxcIj5cbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJidG4uaXNJbWFnZVN2Z1wiIFtzcmNdPVwiYnRuLmljb25TcmNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmMtYnRuLXRleHRcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTJweDtcIj57e2J0bi5uYW1lfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=