verben-ng-ui 0.7.0 → 0.7.1
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.
|
@@ -175,11 +175,11 @@ export class TableFilterComponent {
|
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
177
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: TableFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
178
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: TableFilterComponent, selector: "verben-table-filter", inputs: { filterOptions: "filterOptions", pd: "pd", mg: "mg", height: "height", width: "width", bgColor: "bgColor", boxShadow: "boxShadow", textColor: "textColor", primaryColor: "primaryColor", secondaryColor: "secondaryColor", tertiaryColor: "tertiaryColor", border: "border", borderRadius: "borderRadius", selectWidth: "selectWidth", maxFilterLength: "maxFilterLength", tooltip: "tooltip" }, outputs: { filtersApplied: "filtersApplied", resetSortData: "resetSortData" }, ngImport: i0, template: "<section\n [style.background-color]=\"bgColor\"\n [style.box-shadow]=\"boxShadow\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.padding]=\"pd\"\n>\n <div class=\"top\">\n <h3 [style.color]=\"tertiaryColor\" [style.font-size]=\"'14px'\">\n Filters\n <span [style.color]=\"secondaryColor\"\n ><sup>({{ filterCount }})</sup></span\n >\n </h3>\n <button\n [style.color]=\"secondaryColor\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetFilters()\"\n >\n Reset\n </button>\n </div>\n <hr />\n\n <!-- Saved Filters Section -->\n <div class=\"center\">\n <div class=\"savedWrapper\">\n <h3 [style.font-size]=\"'13px'\">Saved Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <div class=\"selectAllWrapper\" *ngIf=\"savedFilters.length\">\n <input\n type=\"checkbox\"\n [checked]=\"checkAll\"\n (change)=\"toggleSelectAll()\"\n />\n <p [style.font-size]=\"'13px'\" [style.font-weight]=\"'500'\">Select All</p>\n </div>\n <div\n *ngFor=\"let filter of visibleFilters; let i = index\"\n class=\"centerInnerWrapper\"\n >\n <div class=\"checkboxWrapper\">\n <span\n ><input\n type=\"checkbox\"\n [checked]=\"filter.checked\"\n (click)=\"toggleCheckbox(i)\"\n /></span>\n <p\n [style.font-size]=\"'13px'\"\n [style.font-weight]=\"'500'\"\n [style.color]=\"tertiaryColor\"\n >\n {{ filter.name }} {{ filter.condition }} {{ filter.value}}\n </p>\n </div>\n <div class=\"iconWrapper\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editFilter(i)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"deleteFilter(i)\"\n ></verben-svg>\n </div>\n </div>\n\n <div\n class=\"moreWrapper\"\n *ngIf=\"savedFilters.length > maxFilterLength\"\n (click)=\"toggleShowMore()\"\n >\n <p\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'500'\"\n [style.color]=\"tertiaryColor\"\n >\n {{ showAllFilters ? \"Show less\" : \"Show more\" }}\n </p>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </div>\n </div>\n <hr />\n\n <!-- Operation Section -->\n <div class=\"bottom\">\n <div class=\"savedWrapper\">\n <h3 [style.font-size]=\"'13px'\">Operation</h3>\n <div [ngStyle]=\"{'position':'relative'}\"> \n \n <verben-tooltip \n [tooltipContent]=\"tooltipTemplate\"\n [backgroundColor]=\"'grey'\"\n width=\"200px\" \n [top]=\"'20px'\" \n [right]=\"'0px'\" \n >\n <verben-svg \n icon=\"info\" \n [width]=\"15\" \n [height]=\"15\" \n *ngIf=\"isDuplicateFilter\"\n fill=\"red\"\n >\n </verben-svg>\n </verben-tooltip>\n \n <ng-template #tooltipTemplate>\n {{duplicateMessage}}\n </ng-template>\n <!-- <verben-tooltip\n [backgroundColor]=\"'grey'\"\n [textColor]=\"'white'\"\n [padding]=\"'10px'\"\n [borderRadius]=\"'8px'\"\n [top]=\"'20px'\" \n [right]=\"'0px'\" \n width=\"250px\" \n #tooltip \n *ngIf=\"tooltip\"\n >\n <h3>{{duplicateMessage}}</h3>\n </verben-tooltip> -->\n </div>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n *ngIf=\"!isDuplicateFilter\"\n ></verben-svg>\n </div>\n\n <div class=\"inputsWrapper\">\n <verben-drop-down\n width=\"7rem\"\n placeholder=\"Select value\"\n [options]=\"filterArray\"\n [(ngModel)]=\"selectedFilterValue\"\n (ngModelChange)=\"onFilterNameChange(selectedFilterValue)\"\n >\n </verben-drop-down>\n <verben-drop-down\n width=\"7rem\"\n placeholder=\"Select value\"\n placeholder=\"Select value\"\n [options]=\"conditionOptions\"\n (onChange)=\"checkDuplicateFilter()\"\n [(ngModel)]=\"selectedCondition\"\n >\n </verben-drop-down>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Date'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"80px\"\n height=\"25px\"\n pd=\"6px\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n [type]=\"'date'\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Credit' || selectedFilterType === 'Integer'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n placeHolder=\"input integer\"\n [showBorder]=\"true\"\n\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n\n appValidate=\"integer\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Decimal'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n placeHolder=\"input a decimal\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"false\"\n [errorPosition]=\"'bottom'\"\n appValidate=\"decimal\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType !== 'Credit' && selectedFilterType !== 'Date' && selectedFilterType !== 'Integer' && selectedFilterType !== 'Decimal'\"\n border=\"1px solid #ccc\"\n placeHolder=\"input value\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n [showBorder]=\"true\"\n\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n </div>\n\n <div class=\"btnWrapper\">\n <button\n [style.margin-top]=\"'0.5rem'\"\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.border-radius]=\"borderRadius\"\n [style.background-color]=\"'transparent'\"\n [style.color]=\"secondaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'500'\"\n [disabled]=\"disableAddFilterBtn\"\n [ngClass]=\"{\n disablebtn: disableAddFilterBtn,\n enableBtn: !disableAddFilterBtn\n }\"\n (click)=\"addFilter()\"\n >\n + Add\n </button>\n </div>\n <hr />\n\n <div class=\"btnWrapper\">\n <button\n [style.margin-top]=\"'0.5rem'\"\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.padding]=\"'0.2rem 1.6rem'\"\n [style.background-color]=\"primaryColor\"\n [style.color]=\"tertiaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'600'\"\n (click)=\"applyFilters()\"\n [disabled]=\"disableApplyFilterBtn\"\n [ngClass]=\"{\n disablebtn: disableApplyFilterBtn,\n enableBtn: !disableApplyFilterBtn\n }\"\n >\n Filter\n </button>\n </div>\n\n\n </div>\n\n</section>\n", styles: ["h3,p{margin-top:0!important;margin-bottom:0!important}.top{display:flex;align-items:end;justify-content:space-between}hr{border:1px solid rgba(232,234,241,1);margin:.8rem 0rem}.centerInnerWrapper{display:flex;align-items:center;justify-content:space-between}.savedWrapper{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem}.checkboxWrapper{display:flex;align-items:center;gap:.3rem}.iconWrapper{display:flex;align-items:center;gap:.7rem;cursor:pointer}.moreWrapper{display:flex;align-items:center;gap:.4rem;cursor:pointer}.inputsWrapper{margin-top:.5rem;display:flex;align-items:center;gap:.5rem}.btnWrapper{display:flex;justify-content:end}.inputsWrapper select:nth-of-type(1){width:120px}.inputsWrapper select:nth-of-type(2){width:70px}input[type=checkbox].checked{accent-color:#3479E9}.selectAllWrapper{display:flex;align-items:center;gap:.25rem;margin-bottom:.5rem}.selectAllWrapper>input{cursor:pointer}.disablebtn{cursor:not-allowed}.enableBtn{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i4.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "fontSize", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "directive", type: i5.ValidateDirective, selector: "[appValidate]", inputs: ["appValidate", "required", "showBorder", "showErrorMessage", "errorBorderColor", "errorMessageColor", "errorIconTooltipPosition", "showErrorIcon"] }, { kind: "component", type: i6.TooltipComponent, selector: "verben-tooltip", inputs: ["tooltipContent", "customClass", "backgroundColor", "textColor", "padding", "borderRadius", "zIndex", "border", "width", "top", "bottom", "left", "right"] }, { kind: "component", type: i7.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }] });
|
|
178
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: TableFilterComponent, selector: "verben-table-filter", inputs: { filterOptions: "filterOptions", pd: "pd", mg: "mg", height: "height", width: "width", bgColor: "bgColor", boxShadow: "boxShadow", textColor: "textColor", primaryColor: "primaryColor", secondaryColor: "secondaryColor", tertiaryColor: "tertiaryColor", border: "border", borderRadius: "borderRadius", selectWidth: "selectWidth", maxFilterLength: "maxFilterLength", tooltip: "tooltip" }, outputs: { filtersApplied: "filtersApplied", resetSortData: "resetSortData" }, ngImport: i0, template: "<section\n [style.background-color]=\"bgColor\"\n [style.box-shadow]=\"boxShadow\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.padding]=\"pd\"\n>\n <div class=\"top\">\n <h3 [style.color]=\"tertiaryColor\" [style.font-size]=\"'14px'\">\n Filters\n <span [style.color]=\"secondaryColor\"\n ><sup>({{ filterCount }})</sup></span\n >\n </h3>\n <button\n [style.color]=\"secondaryColor\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetFilters()\"\n >\n Reset\n </button>\n </div>\n <hr />\n\n <!-- Saved Filters Section -->\n <div class=\"center\">\n <div class=\"savedWrapper\">\n <h3 [style.font-size]=\"'13px'\">Saved Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <div class=\"selectAllWrapper\" *ngIf=\"savedFilters.length\">\n <input\n type=\"checkbox\"\n [checked]=\"checkAll\"\n (change)=\"toggleSelectAll()\"\n />\n <p [style.font-size]=\"'13px'\" [style.font-weight]=\"'500'\">Select All</p>\n </div>\n <div\n *ngFor=\"let filter of visibleFilters; let i = index\"\n class=\"centerInnerWrapper\"\n >\n <div class=\"checkboxWrapper\">\n <span\n ><input\n type=\"checkbox\"\n [checked]=\"filter.checked\"\n (click)=\"toggleCheckbox(i)\"\n /></span>\n <p\n [style.font-size]=\"'13px'\"\n [style.font-weight]=\"'500'\"\n [style.color]=\"tertiaryColor\"\n >\n {{ filter.name }} {{ filter.condition }} {{ filter.value}}\n </p>\n </div>\n <div class=\"iconWrapper\">\n <verben-svg\n icon=\"pencil\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editFilter(i)\"\n ></verben-svg>\n <verben-svg\n icon=\"trash\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"deleteFilter(i)\"\n ></verben-svg>\n </div>\n </div>\n\n <div\n class=\"moreWrapper\"\n *ngIf=\"savedFilters.length > maxFilterLength\"\n (click)=\"toggleShowMore()\"\n >\n <p\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'500'\"\n [style.color]=\"tertiaryColor\"\n >\n {{ showAllFilters ? \"Show less\" : \"Show more\" }}\n </p>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </div>\n </div>\n <hr />\n\n <!-- Operation Section -->\n <div class=\"bottom\">\n <div class=\"savedWrapper\">\n <h3 [style.font-size]=\"'13px'\">Operation</h3>\n <div [ngStyle]=\"{'position':'relative'}\"> \n \n <verben-tooltip \n [tooltipContent]=\"tooltipTemplate\"\n [backgroundColor]=\"'grey'\"\n width=\"200px\" \n [top]=\"'20px'\" \n [right]=\"'0px'\" \n >\n <verben-svg \n icon=\"info\" \n [width]=\"15\" \n [height]=\"15\" \n *ngIf=\"isDuplicateFilter\"\n fill=\"red\"\n >\n </verben-svg>\n </verben-tooltip>\n \n <ng-template #tooltipTemplate>\n {{duplicateMessage}}\n </ng-template>\n <!-- <verben-tooltip\n [backgroundColor]=\"'grey'\"\n [textColor]=\"'white'\"\n [padding]=\"'10px'\"\n [borderRadius]=\"'8px'\"\n [top]=\"'20px'\" \n [right]=\"'0px'\" \n width=\"250px\" \n #tooltip \n *ngIf=\"tooltip\"\n >\n <h3>{{duplicateMessage}}</h3>\n </verben-tooltip> -->\n </div>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n *ngIf=\"!isDuplicateFilter\"\n ></verben-svg>\n </div>\n\n <div class=\"inputsWrapper\">\n <verben-drop-down\n width=\"7rem\"\n placeholder=\"Select value\"\n [options]=\"filterArray\"\n [(ngModel)]=\"selectedFilterValue\"\n (ngModelChange)=\"onFilterNameChange(selectedFilterValue)\"\n >\n </verben-drop-down>\n <verben-drop-down\n width=\"7rem\"\n placeholder=\"Select value\"\n placeholder=\"Select value\"\n [options]=\"conditionOptions\"\n (onChange)=\"checkDuplicateFilter()\"\n [(ngModel)]=\"selectedCondition\"\n >\n </verben-drop-down>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Date'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"80px\"\n height=\"25px\"\n pd=\"6px\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n [type]=\"'date'\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Credit' || selectedFilterType === 'Integer'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n placeHolder=\"input integer\"\n [showBorder]=\"true\"\n\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n\n appValidate=\"integer\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Decimal'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n placeHolder=\"input a decimal\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"false\"\n [errorPosition]=\"'bottom'\"\n appValidate=\"decimal\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType !== 'Credit' && selectedFilterType !== 'Date' && selectedFilterType !== 'Integer' && selectedFilterType !== 'Decimal'\"\n border=\"1px solid #ccc\"\n placeHolder=\"input value\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n [showBorder]=\"true\"\n\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n </div>\n\n <div class=\"btnWrapper\">\n <button\n [style.margin-top]=\"'0.5rem'\"\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.border-radius]=\"borderRadius\"\n [style.background-color]=\"'transparent'\"\n [style.color]=\"secondaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'500'\"\n [disabled]=\"disableAddFilterBtn\"\n [ngClass]=\"{\n disablebtn: disableAddFilterBtn,\n enableBtn: !disableAddFilterBtn\n }\"\n (click)=\"addFilter()\"\n >\n + Add\n </button>\n </div>\n <hr />\n\n <div class=\"btnWrapper\">\n <button\n [style.margin-top]=\"'0.5rem'\"\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.padding]=\"'0.2rem 1.6rem'\"\n [style.background-color]=\"primaryColor\"\n [style.color]=\"tertiaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'600'\"\n (click)=\"applyFilters()\"\n [disabled]=\"disableApplyFilterBtn\"\n [ngClass]=\"{\n disablebtn: disableApplyFilterBtn,\n enableBtn: !disableApplyFilterBtn\n }\"\n >\n Filter\n </button>\n </div>\n\n\n </div>\n\n</section>\n", styles: ["h3,p{margin-top:0!important;margin-bottom:0!important}.top{display:flex;align-items:end;justify-content:space-between}hr{border:1px solid rgba(232,234,241,1);margin:.8rem 0rem}.centerInnerWrapper{display:flex;align-items:center;justify-content:space-between}.savedWrapper{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem}.checkboxWrapper{display:flex;align-items:center;gap:.3rem}.iconWrapper{display:flex;align-items:center;gap:.7rem;cursor:pointer}.moreWrapper{display:flex;align-items:center;gap:.4rem;cursor:pointer}.inputsWrapper{margin-top:.5rem;display:flex;align-items:center;gap:.5rem}.btnWrapper{display:flex;justify-content:end}.inputsWrapper select:nth-of-type(1){width:120px}.inputsWrapper select:nth-of-type(2){width:70px}input[type=checkbox].checked{accent-color:#3479E9}.selectAllWrapper{display:flex;align-items:center;gap:.25rem;margin-bottom:.5rem}.selectAllWrapper>input{cursor:pointer}.disablebtn{cursor:not-allowed}.enableBtn{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i4.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "fontSize", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "directive", type: i5.ValidateDirective, selector: "[appValidate]", inputs: ["appValidate", "required", "showBorder", "showErrorMessage", "errorBorderColor", "errorMessageColor", "errorIconTooltipPosition", "showErrorIcon"] }, { kind: "component", type: i6.TooltipComponent, selector: "verben-tooltip", inputs: ["tooltipContent", "customClass", "backgroundColor", "textColor", "padding", "borderRadius", "zIndex", "border", "width", "top", "bottom", "left", "right"] }, { kind: "component", type: i7.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }] });
|
|
179
179
|
}
|
|
180
180
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: TableFilterComponent, decorators: [{
|
|
181
181
|
type: Component,
|
|
182
|
-
args: [{ selector: 'verben-table-filter', template: "<section\n [style.background-color]=\"bgColor\"\n [style.box-shadow]=\"boxShadow\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.padding]=\"pd\"\n>\n <div class=\"top\">\n <h3 [style.color]=\"tertiaryColor\" [style.font-size]=\"'14px'\">\n Filters\n <span [style.color]=\"secondaryColor\"\n ><sup>({{ filterCount }})</sup></span\n >\n </h3>\n <button\n [style.color]=\"secondaryColor\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetFilters()\"\n >\n Reset\n </button>\n </div>\n <hr />\n\n <!-- Saved Filters Section -->\n <div class=\"center\">\n <div class=\"savedWrapper\">\n <h3 [style.font-size]=\"'13px'\">Saved Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <div class=\"selectAllWrapper\" *ngIf=\"savedFilters.length\">\n <input\n type=\"checkbox\"\n [checked]=\"checkAll\"\n (change)=\"toggleSelectAll()\"\n />\n <p [style.font-size]=\"'13px'\" [style.font-weight]=\"'500'\">Select All</p>\n </div>\n <div\n *ngFor=\"let filter of visibleFilters; let i = index\"\n class=\"centerInnerWrapper\"\n >\n <div class=\"checkboxWrapper\">\n <span\n ><input\n type=\"checkbox\"\n [checked]=\"filter.checked\"\n (click)=\"toggleCheckbox(i)\"\n /></span>\n <p\n [style.font-size]=\"'13px'\"\n [style.font-weight]=\"'500'\"\n [style.color]=\"tertiaryColor\"\n >\n {{ filter.name }} {{ filter.condition }} {{ filter.value}}\n </p>\n </div>\n <div class=\"iconWrapper\">\n <verben-svg\n icon=\"
|
|
182
|
+
args: [{ selector: 'verben-table-filter', template: "<section\n [style.background-color]=\"bgColor\"\n [style.box-shadow]=\"boxShadow\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.padding]=\"pd\"\n>\n <div class=\"top\">\n <h3 [style.color]=\"tertiaryColor\" [style.font-size]=\"'14px'\">\n Filters\n <span [style.color]=\"secondaryColor\"\n ><sup>({{ filterCount }})</sup></span\n >\n </h3>\n <button\n [style.color]=\"secondaryColor\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetFilters()\"\n >\n Reset\n </button>\n </div>\n <hr />\n\n <!-- Saved Filters Section -->\n <div class=\"center\">\n <div class=\"savedWrapper\">\n <h3 [style.font-size]=\"'13px'\">Saved Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <div class=\"selectAllWrapper\" *ngIf=\"savedFilters.length\">\n <input\n type=\"checkbox\"\n [checked]=\"checkAll\"\n (change)=\"toggleSelectAll()\"\n />\n <p [style.font-size]=\"'13px'\" [style.font-weight]=\"'500'\">Select All</p>\n </div>\n <div\n *ngFor=\"let filter of visibleFilters; let i = index\"\n class=\"centerInnerWrapper\"\n >\n <div class=\"checkboxWrapper\">\n <span\n ><input\n type=\"checkbox\"\n [checked]=\"filter.checked\"\n (click)=\"toggleCheckbox(i)\"\n /></span>\n <p\n [style.font-size]=\"'13px'\"\n [style.font-weight]=\"'500'\"\n [style.color]=\"tertiaryColor\"\n >\n {{ filter.name }} {{ filter.condition }} {{ filter.value}}\n </p>\n </div>\n <div class=\"iconWrapper\">\n <verben-svg\n icon=\"pencil\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editFilter(i)\"\n ></verben-svg>\n <verben-svg\n icon=\"trash\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"deleteFilter(i)\"\n ></verben-svg>\n </div>\n </div>\n\n <div\n class=\"moreWrapper\"\n *ngIf=\"savedFilters.length > maxFilterLength\"\n (click)=\"toggleShowMore()\"\n >\n <p\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'500'\"\n [style.color]=\"tertiaryColor\"\n >\n {{ showAllFilters ? \"Show less\" : \"Show more\" }}\n </p>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </div>\n </div>\n <hr />\n\n <!-- Operation Section -->\n <div class=\"bottom\">\n <div class=\"savedWrapper\">\n <h3 [style.font-size]=\"'13px'\">Operation</h3>\n <div [ngStyle]=\"{'position':'relative'}\"> \n \n <verben-tooltip \n [tooltipContent]=\"tooltipTemplate\"\n [backgroundColor]=\"'grey'\"\n width=\"200px\" \n [top]=\"'20px'\" \n [right]=\"'0px'\" \n >\n <verben-svg \n icon=\"info\" \n [width]=\"15\" \n [height]=\"15\" \n *ngIf=\"isDuplicateFilter\"\n fill=\"red\"\n >\n </verben-svg>\n </verben-tooltip>\n \n <ng-template #tooltipTemplate>\n {{duplicateMessage}}\n </ng-template>\n <!-- <verben-tooltip\n [backgroundColor]=\"'grey'\"\n [textColor]=\"'white'\"\n [padding]=\"'10px'\"\n [borderRadius]=\"'8px'\"\n [top]=\"'20px'\" \n [right]=\"'0px'\" \n width=\"250px\" \n #tooltip \n *ngIf=\"tooltip\"\n >\n <h3>{{duplicateMessage}}</h3>\n </verben-tooltip> -->\n </div>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n *ngIf=\"!isDuplicateFilter\"\n ></verben-svg>\n </div>\n\n <div class=\"inputsWrapper\">\n <verben-drop-down\n width=\"7rem\"\n placeholder=\"Select value\"\n [options]=\"filterArray\"\n [(ngModel)]=\"selectedFilterValue\"\n (ngModelChange)=\"onFilterNameChange(selectedFilterValue)\"\n >\n </verben-drop-down>\n <verben-drop-down\n width=\"7rem\"\n placeholder=\"Select value\"\n placeholder=\"Select value\"\n [options]=\"conditionOptions\"\n (onChange)=\"checkDuplicateFilter()\"\n [(ngModel)]=\"selectedCondition\"\n >\n </verben-drop-down>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Date'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"80px\"\n height=\"25px\"\n pd=\"6px\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n [type]=\"'date'\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Credit' || selectedFilterType === 'Integer'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n placeHolder=\"input integer\"\n [showBorder]=\"true\"\n\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n\n appValidate=\"integer\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Decimal'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n placeHolder=\"input a decimal\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"false\"\n [errorPosition]=\"'bottom'\"\n appValidate=\"decimal\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType !== 'Credit' && selectedFilterType !== 'Date' && selectedFilterType !== 'Integer' && selectedFilterType !== 'Decimal'\"\n border=\"1px solid #ccc\"\n placeHolder=\"input value\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n [showBorder]=\"true\"\n\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n </div>\n\n <div class=\"btnWrapper\">\n <button\n [style.margin-top]=\"'0.5rem'\"\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.border-radius]=\"borderRadius\"\n [style.background-color]=\"'transparent'\"\n [style.color]=\"secondaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'500'\"\n [disabled]=\"disableAddFilterBtn\"\n [ngClass]=\"{\n disablebtn: disableAddFilterBtn,\n enableBtn: !disableAddFilterBtn\n }\"\n (click)=\"addFilter()\"\n >\n + Add\n </button>\n </div>\n <hr />\n\n <div class=\"btnWrapper\">\n <button\n [style.margin-top]=\"'0.5rem'\"\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.padding]=\"'0.2rem 1.6rem'\"\n [style.background-color]=\"primaryColor\"\n [style.color]=\"tertiaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'600'\"\n (click)=\"applyFilters()\"\n [disabled]=\"disableApplyFilterBtn\"\n [ngClass]=\"{\n disablebtn: disableApplyFilterBtn,\n enableBtn: !disableApplyFilterBtn\n }\"\n >\n Filter\n </button>\n </div>\n\n\n </div>\n\n</section>\n", styles: ["h3,p{margin-top:0!important;margin-bottom:0!important}.top{display:flex;align-items:end;justify-content:space-between}hr{border:1px solid rgba(232,234,241,1);margin:.8rem 0rem}.centerInnerWrapper{display:flex;align-items:center;justify-content:space-between}.savedWrapper{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem}.checkboxWrapper{display:flex;align-items:center;gap:.3rem}.iconWrapper{display:flex;align-items:center;gap:.7rem;cursor:pointer}.moreWrapper{display:flex;align-items:center;gap:.4rem;cursor:pointer}.inputsWrapper{margin-top:.5rem;display:flex;align-items:center;gap:.5rem}.btnWrapper{display:flex;justify-content:end}.inputsWrapper select:nth-of-type(1){width:120px}.inputsWrapper select:nth-of-type(2){width:70px}input[type=checkbox].checked{accent-color:#3479E9}.selectAllWrapper{display:flex;align-items:center;gap:.25rem;margin-bottom:.5rem}.selectAllWrapper>input{cursor:pointer}.disablebtn{cursor:not-allowed}.enableBtn{cursor:pointer}\n"] }]
|
|
183
183
|
}], ctorParameters: () => [], propDecorators: { filterOptions: [{
|
|
184
184
|
type: Input
|
|
185
185
|
}], pd: [{
|
|
@@ -217,4 +217,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
|
|
|
217
217
|
}], resetSortData: [{
|
|
218
218
|
type: Output
|
|
219
219
|
}] } });
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUtZmlsdGVyL3RhYmxlLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLWZpbHRlci90YWJsZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7QUFRdEMsTUFBTSxPQUFPLG9CQUFvQjtJQUN0QixhQUFhLEdBQWtCLEVBQUUsQ0FBQztJQUNsQyxFQUFFLENBQVU7SUFDWixFQUFFLENBQVU7SUFDWixNQUFNLENBQVU7SUFDaEIsS0FBSyxDQUFVO0lBQ2YsT0FBTyxDQUFVO0lBQ2pCLFNBQVMsQ0FBVTtJQUNuQixTQUFTLENBQVU7SUFDbkIsWUFBWSxDQUFVO0lBQ3RCLGNBQWMsQ0FBVTtJQUN4QixhQUFhLENBQVU7SUFDdkIsTUFBTSxDQUFVO0lBQ2hCLFlBQVksQ0FBVTtJQUN0QixXQUFXLENBQVU7SUFDckIsZUFBZSxHQUFVLENBQUMsQ0FBQTtJQUMxQixPQUFPLEdBQVcsS0FBSyxDQUFBO0lBQ3RCLGNBQWMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3pDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ2xELFdBQVcsR0FBWSxFQUFFLENBQUM7SUFDMUIsbUJBQW1CLEdBQVcsRUFBRSxDQUFDO0lBQ2pDLGtCQUFrQixDQUFNO0lBQ3hCLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztJ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QUksQ0FBQyxpQkFBaUIsQ0FDbEQsQ0FBQztZQUNGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUM7WUFDbEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNGLENBQUM7SUFDRixDQUFDO3dHQW5NUyxvQkFBb0I7NEZBQXBCLG9CQUFvQixvaEJDVmpDLGc3UEFxU0E7OzRGRDNSYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UscUJBQXFCO3dEQUt0QixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSURhdGFGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtZmlsdGVyJztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmVyYmVuLXRhYmxlLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1maWx0ZXIuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgZmlsdGVyT3B0aW9uczogSURhdGFGaWx0ZXJbXSA9IFtdO1xuICBASW5wdXQoKSBwZD86IHN0cmluZztcbiAgQElucHV0KCkgbWc/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGhlaWdodD86IHN0cmluZztcbiAgQElucHV0KCkgd2lkdGg/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnQ29sb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJveFNoYWRvdz86IHN0cmluZztcbiAgQElucHV0KCkgdGV4dENvbG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBwcmltYXJ5Q29sb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlY29uZGFyeUNvbG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXJ0aWFyeUNvbG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBib3JkZXI/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJvcmRlclJhZGl1cz86IHN0cmluZztcbiAgQElucHV0KCkgc2VsZWN0V2lkdGg/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1heEZpbHRlckxlbmd0aDpudW1iZXIgPSAzXG4gIEBJbnB1dCgpIHRvb2x0aXA6Ym9vbGVhbiA9IGZhbHNlXG4gIEBPdXRwdXQoKSBmaWx0ZXJzQXBwbGllZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcmVzZXRTb3J0RGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBmaWx0ZXJBcnJheTpzdHJpbmdbXSA9IFtdO1xuICBzZWxlY3RlZEZpbHRlclZhbHVlOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRGaWx0ZXJUeXBlPzphbnk7XG4gIGNvbmRpdGlvbk9wdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIHNlbGVjdGVkQ29uZGl0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJztcbiAgaW5wdXRWYWx1ZT86IHN0cmluZyB8IG51bWJlclxuICBzYXZlZEZpbHRlcnM6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgc2VsZWN0ZWRGaWx0ZXJzOiBJRGF0YUZpbHRlcltdID0gW107XG4gIHNob3dBbGxGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XG4gIGVkaXRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGNoZWNrQWxsOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRHVwbGljYXRlRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG4gIGRpc2FibGVBZGRGaWx0ZXJCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGlzYWJsZUFwcGx5RmlsdGVyQnRuOiBib29sZWFuID0gdHJ1ZTtcbiAgZHVwbGljYXRlTWVzc2FnZT86c3RyaW5nID0gJyc7XG4gIGNvbmZpZ0luc3RhbmNlOiBDb25maWc7XG4gIHN0b3JhZ2VLZXk6IHN0cmluZyA9ICdzYXZlZEZpbHRlcnMnO1xuICBmaWx0ZXJDb3VudDpudW1iZXIgPSAwXG5cbiAgY29uc3RydWN0b3IoKXsgXG4gICAgdGhpcy5jb25maWdJbnN0YW5jZSA9IG5ldyBDb25maWcoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyQXJyYXkgPSB0aGlzLmZpbHRlck9wdGlvbnMubWFwKGl0ZW0gPT4gaXRlbS5uYW1lKTsgIFxuICB9XG4gIFxuXG4gIG9uRmlsdGVyTmFtZUNoYW5nZShzZWxlY3RlZEZpbHRlclZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWxlY3RlZEZpbHRlciA9IHRoaXMuZmlsdGVyT3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24ubmFtZSA9PT0gc2VsZWN0ZWRGaWx0ZXJWYWx1ZSk7XG4gIFxuICAgIGlmIChzZWxlY3RlZEZpbHRlcikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyVHlwZSA9IHNlbGVjdGVkRmlsdGVyLnR5cGU7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uT3B0aW9ucyA9IHRoaXMuY29uZmlnSW5zdGFuY2UuZ2V0Q29uZGl0aW9uT3B0aW9ucyh0aGlzLnNlbGVjdGVkRmlsdGVyVHlwZSkgfHwgW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb25kaXRpb24gPSAnJzsgXG4gICAgfVxufVxuXG4gIHJlc2V0RmlsdGVycygpIHtcbiAgICB0aGlzLnNlbGVjdGVkRmlsdGVyVHlwZSA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZENvbmRpdGlvbiA9ICcnO1xuICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICcnO1xuICAgIHRoaXMuc2F2ZWRGaWx0ZXJzID0gW107XG4gICAgdGhpcy5lZGl0SW5kZXggPSBudWxsO1xuICAgIHRoaXMuY2hlY2tBbGwgPSBmYWxzZTtcbiAgICB0aGlzLmlzRHVwbGljYXRlRmlsdGVyID0gZmFsc2U7XG4gICAgdGhpcy5kaXNhYmxlQXBwbHlGaWx0ZXJCdG4gPSB0cnVlO1xuICAgIHRoaXMuZHVwbGljYXRlTWVzc2FnZSA9ICcnXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5zdG9yYWdlS2V5KTtcbiAgICB0aGlzLmZpbHRlckNvdW50ID0gdGhpcy5zYXZlZEZpbHRlcnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5jaGVja2VkID09PSB0cnVlKS5sZW5ndGg7XG4gICAgdGhpcy5yZXNldFNvcnREYXRhLmVtaXQoKVxuICB9XG5cbiAgYWRkRmlsdGVyKCkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbHRlclZhbHVlIHx8ICF0aGlzLnNlbGVjdGVkQ29uZGl0aW9uIHx8ICF0aGlzLmlucHV0VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVkaXRJbmRleCA9PT0gbnVsbCAmJiB0aGlzLmlzRHVwbGljYXRlRmlsdGVyKSB7XG4gICAgICAgIHJldHVybjsgXG4gICAgfVxuXG4gICAgY29uc3QgbmV3RmlsdGVyOiBJRGF0YUZpbHRlciA9IHtcbiAgICAgICAgbmFtZTogdGhpcy5zZWxlY3RlZEZpbHRlclZhbHVlLFxuICAgICAgICB0eXBlOiB0aGlzLnNlbGVjdGVkRmlsdGVyVHlwZSxcbiAgICAgICAgY29uZGl0aW9uOiB0aGlzLnNlbGVjdGVkQ29uZGl0aW9uLFxuICAgICAgICB2YWx1ZTogdGhpcy5pbnB1dFZhbHVlLFxuICAgICAgICBjaGVja2VkOiB0cnVlXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmVkaXRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IHRoaXMuc2F2ZWRGaWx0ZXJzLnNvbWUoXG4gICAgICAgICAgICAoZmlsdGVyLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICBmaWx0ZXIubmFtZSA9PT0gbmV3RmlsdGVyLm5hbWUgJiZcbiAgICAgICAgICAgICAgICBmaWx0ZXIuY29uZGl0aW9uID09PSBuZXdGaWx0ZXIuY29uZGl0aW9uICYmXG4gICAgICAgICAgICAgICAgaW5kZXggIT09IHRoaXMuZWRpdEluZGV4XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zYXZlZEZpbHRlcnNbdGhpcy5lZGl0SW5kZXhdID0gbmV3RmlsdGVyO1xuICAgICAgICB0aGlzLmVkaXRJbmRleCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuc2F2ZWRGaWx0ZXJzLnNvbWUoZmlsdGVyID0+IFxuICAgICAgICAgICAgZmlsdGVyLm5hbWUgPT09IG5ld0ZpbHRlci5uYW1lICYmIFxuICAgICAgICAgICAgZmlsdGVyLmNvbmRpdGlvbiA9PT0gbmV3RmlsdGVyLmNvbmRpdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNhdmVkRmlsdGVycy5wdXNoKG5ld0ZpbHRlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyQ291bnQgPSB0aGlzLnNhdmVkRmlsdGVycy5maWx0ZXIoaXRlbSA9PiBpdGVtLmNoZWNrZWQgPT09IHRydWUpLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5jbGVhck9wZXJhdGlvblNlY3Rpb24oKTtcbiAgICB0aGlzLmNoZWNrRmlsdGVyQnV0dG9uKCk7IFxuICB9XG5cbiAgdG9nZ2xlQ2hlY2tib3goaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2F2ZWRGaWx0ZXJzW2luZGV4XS5jaGVja2VkID0gIXRoaXMuc2F2ZWRGaWx0ZXJzW2luZGV4XS5jaGVja2VkO1xuICAgIHRoaXMuY2hlY2tBbGwgPSB0aGlzLnNhdmVkRmlsdGVycy5ldmVyeShpdGVtID0+IGl0ZW0uY2hlY2tlZCk7XG4gICAgdGhpcy5maWx0ZXJDb3VudCA9IHRoaXMuc2F2ZWRGaWx0ZXJzLmZpbHRlcihpdGVtID0+IGl0ZW0uY2hlY2tlZCA9PT0gdHJ1ZSkubGVuZ3RoO1xuICB9XG5cbiAgZGVsZXRlRmlsdGVyKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnNhdmVkRmlsdGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMuY2hlY2tEdXBsaWNhdGVGaWx0ZXIoKTtcbiAgICB0aGlzLmNoZWNrRmlsdGVyQnV0dG9uKCk7XG4gICAgdGhpcy5maWx0ZXJDb3VudCA9IHRoaXMuc2F2ZWRGaWx0ZXJzLmZpbHRlcihpdGVtID0+IGl0ZW0uY2hlY2tlZCA9PT0gdHJ1ZSkubGVuZ3RoO1xuICAgIGlmICh0aGlzLnNhdmVkRmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY2hlY2tBbGwgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBlZGl0RmlsdGVyKGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnNhdmVkRmlsdGVyc1tpbmRleF07XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlclR5cGUgPSBmaWx0ZXIudHlwZTtcbiAgICB0aGlzLnNlbGVjdGVkRmlsdGVyVmFsdWUgPSBmaWx0ZXIubmFtZTtcbiAgICB0aGlzLm9uRmlsdGVyTmFtZUNoYW5nZSh0aGlzLnNlbGVjdGVkRmlsdGVyVmFsdWUpIFxuICAgIHRoaXMuc2VsZWN0ZWRDb25kaXRpb24gPSBmaWx0ZXIuY29uZGl0aW9uO1xuICAgIHRoaXMuaW5wdXRWYWx1ZSA9IGZpbHRlci52YWx1ZTtcbiAgICB0aGlzLmVkaXRJbmRleCA9IGluZGV4O1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJzKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzID0gdGhpcy5zYXZlZEZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiBmaWx0ZXIuY2hlY2tlZCk7XG4gICAgdGhpcy5maWx0ZXJzQXBwbGllZC5lbWl0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcbiAgICB0aGlzLmZpbHRlcnNBcHBsaWVkLmVtaXQodGhpcy5zdG9yYWdlS2V5KTtcbiAgfVxuXG4gIHRvZ2dsZVNob3dNb3JlKCkge1xuICAgIHRoaXMuc2hvd0FsbEZpbHRlcnMgPSAhdGhpcy5zaG93QWxsRmlsdGVycztcbiAgfVxuXG4gIGdldCB2aXNpYmxlRmlsdGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93QWxsRmlsdGVyc1xuICAgICAgPyB0aGlzLnNhdmVkRmlsdGVyc1xuICAgICAgOiB0aGlzLnNhdmVkRmlsdGVycy5zbGljZSgwLCB0aGlzLm1heEZpbHRlckxlbmd0aCk7XG4gIH1cblxuICBjbGVhck9wZXJhdGlvblNlY3Rpb24oKSB7XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlclZhbHVlID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZENvbmRpdGlvbiA9ICcnO1xuICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICcnO1xuICB9XG5cbiAgY2hlY2tGaWx0ZXJCdXR0b24oKSB7XG4gICAgdGhpcy5kaXNhYmxlQXBwbHlGaWx0ZXJCdG4gPSB0aGlzLnNhdmVkRmlsdGVycy5sZW5ndGggPT09IDA7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja0FsbCA9ICF0aGlzLmNoZWNrQWxsO1xuICAgIHRoaXMuc2F2ZWRGaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IGZpbHRlci5jaGVja2VkID0gdGhpcy5jaGVja0FsbCk7XG4gICAgdGhpcy5maWx0ZXJDb3VudCA9IHRoaXMuc2F2ZWRGaWx0ZXJzLmZpbHRlcihpdGVtID0+IGl0ZW0uY2hlY2tlZCA9PT0gdHJ1ZSkubGVuZ3RoO1xuICB9XG5cbiAgY2hlY2tEdXBsaWNhdGVGaWx0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdEluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuc2F2ZWRGaWx0ZXJzLnNvbWUoXG4gICAgICAgICAgICAoZmlsdGVyLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICBmaWx0ZXIubmFtZSA9PT0gdGhpcy5zZWxlY3RlZEZpbHRlclZhbHVlICYmXG4gICAgICAgICAgICAgICAgZmlsdGVyLmNvbmRpdGlvbiA9PT0gdGhpcy5zZWxlY3RlZENvbmRpdGlvbiAmJlxuICAgICAgICAgICAgICAgIGluZGV4ICE9PSB0aGlzLmVkaXRJbmRleCBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlQWRkRmlsdGVyQnRuID0gZXhpc3RzO1xuICAgICAgICB0aGlzLmlzRHVwbGljYXRlRmlsdGVyID0gZXhpc3RzO1xuICAgICAgICB0aGlzLmR1cGxpY2F0ZU1lc3NhZ2UgPSBleGlzdHMgPyAnVGhpcyBlbnRyeSBpcyBhIGR1cGxpY2F0ZSBhbmQgY2Fubm90IGJlIGFkZGVkLicgOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5zYXZlZEZpbHRlcnMuc29tZShcbiAgICAgICAgICAgIChmaWx0ZXIpID0+XG4gICAgICAgICAgICAgICAgZmlsdGVyLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRGaWx0ZXJWYWx1ZSAmJlxuICAgICAgICAgICAgICAgIGZpbHRlci5jb25kaXRpb24gPT09IHRoaXMuc2VsZWN0ZWRDb25kaXRpb25cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlQWRkRmlsdGVyQnRuID0gZXhpc3RzO1xuICAgICAgICB0aGlzLmlzRHVwbGljYXRlRmlsdGVyID0gZXhpc3RzO1xuICAgICAgICB0aGlzLmR1cGxpY2F0ZU1lc3NhZ2UgPSBleGlzdHMgPyAnVGhpcyBlbnRyeSBpcyBhIGR1cGxpY2F0ZSBhbmQgY2Fubm90IGJlIGFkZGVkLicgOiAnJztcbiAgICB9XG4gICB9XG59XG5cbiIsIjxzZWN0aW9uXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJnQ29sb3JcIlxuICBbc3R5bGUuYm94LXNoYWRvd109XCJib3hTaGFkb3dcIlxuICBbc3R5bGUuYm9yZGVyXT1cImJvcmRlclwiXG4gIFtzdHlsZS5ib3JkZXItcmFkaXVzXT1cImJvcmRlclJhZGl1c1wiXG4gIFtzdHlsZS5jb2xvcl09XCJ0ZXh0Q29sb3JcIlxuICBbc3R5bGUud2lkdGhdPVwid2lkdGhcIlxuICBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiXG4gIFtzdHlsZS5wYWRkaW5nXT1cInBkXCJcbj5cbiAgPGRpdiBjbGFzcz1cInRvcFwiPlxuICAgIDxoMyBbc3R5bGUuY29sb3JdPVwidGVydGlhcnlDb2xvclwiIFtzdHlsZS5mb250LXNpemVdPVwiJzE0cHgnXCI+XG4gICAgICBGaWx0ZXJzXG4gICAgICA8c3BhbiBbc3R5bGUuY29sb3JdPVwic2Vjb25kYXJ5Q29sb3JcIlxuICAgICAgICA+PHN1cD4oe3sgZmlsdGVyQ291bnQgfX0pPC9zdXA+PC9zcGFuXG4gICAgICA+XG4gICAgPC9oMz5cbiAgICA8YnV0dG9uXG4gICAgICBbc3R5bGUuY29sb3JdPVwic2Vjb25kYXJ5Q29sb3JcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYmdDb2xvclwiXG4gICAgICBbc3R5bGUuYm9yZGVyXT1cIidub25lJ1wiXG4gICAgICBbc3R5bGUuY3Vyc29yXT1cIidwb2ludGVyJ1wiXG4gICAgICBbc3R5bGUuZm9udC1zaXplXT1cIicxMnB4J1wiXG4gICAgICAoY2xpY2spPVwicmVzZXRGaWx0ZXJzKClcIlxuICAgID5cbiAgICAgIFJlc2V0XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8aHIgLz5cblxuICA8IS0tIFNhdmVkIEZpbHRlcnMgU2VjdGlvbiAtLT5cbiAgPGRpdiBjbGFzcz1cImNlbnRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJzYXZlZFdyYXBwZXJcIj5cbiAgICAgIDxoMyBbc3R5bGUuZm9udC1zaXplXT1cIicxM3B4J1wiPlNhdmVkIEZpbHRlcnM8L2gzPlxuICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgZmlsbD1cImdyZXlcIlxuICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0QWxsV3JhcHBlclwiICpuZ0lmPVwic2F2ZWRGaWx0ZXJzLmxlbmd0aFwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIFtjaGVja2VkXT1cImNoZWNrQWxsXCJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoKVwiXG4gICAgICAvPlxuICAgICAgPHAgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTNweCdcIiBbc3R5bGUuZm9udC13ZWlnaHRdPVwiJzUwMCdcIj5TZWxlY3QgQWxsPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgdmlzaWJsZUZpbHRlcnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgY2xhc3M9XCJjZW50ZXJJbm5lcldyYXBwZXJcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFdyYXBwZXJcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICA+PGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwiZmlsdGVyLmNoZWNrZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNoZWNrYm94KGkpXCJcbiAgICAgICAgLz48L3NwYW4+XG4gICAgICAgIDxwXG4gICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTNweCdcIlxuICAgICAgICAgIFtzdHlsZS5mb250LXdlaWdodF09XCInNTAwJ1wiXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRlcnRpYXJ5Q29sb3JcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZmlsdGVyLm5hbWUgfX0ge3sgZmlsdGVyLmNvbmRpdGlvbiB9fSB7eyBmaWx0ZXIudmFsdWV9fVxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpY29uV3JhcHBlclwiPlxuICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgIGljb249XCJlZGl0XCJcbiAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgIHN0cm9rZT1cIiMzNDc5RTlcIlxuICAgICAgICAgIGZpbGw9XCJ3aGl0ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cImVkaXRGaWx0ZXIoaSlcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgIGljb249XCJkZWxldGVcIlxuICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgc3Ryb2tlPVwiI0UyMDAwMFwiXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUZpbHRlcihpKVwiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibW9yZVdyYXBwZXJcIlxuICAgICAgKm5nSWY9XCJzYXZlZEZpbHRlcnMubGVuZ3RoID4gbWF4RmlsdGVyTGVuZ3RoXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93TW9yZSgpXCJcbiAgICA+XG4gICAgICA8cFxuICAgICAgICBbc3R5bGUuZm9udC1zaXplXT1cIicxMnB4J1wiXG4gICAgICAgIFtzdHlsZS5mb250LXdlaWdodF09XCInNTAwJ1wiXG4gICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0ZXJ0aWFyeUNvbG9yXCJcbiAgICAgID5cbiAgICAgICAge3sgc2hvd0FsbEZpbHRlcnMgPyBcIlNob3cgbGVzc1wiIDogXCJTaG93IG1vcmVcIiB9fVxuICAgICAgPC9wPlxuICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICBpY29uPVwiY2hldnJvblwiXG4gICAgICAgIFt3aWR0aF09XCI4XCJcbiAgICAgICAgW2hlaWdodF09XCI2XCJcbiAgICAgICAgZmlsbD1cImJsYWNrXCJcbiAgICAgICAgc3Ryb2tlPVwiYmxhY2tcIlxuICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxociAvPlxuXG4gIDwhLS0gT3BlcmF0aW9uIFNlY3Rpb24gLS0+XG4gIDxkaXYgY2xhc3M9XCJib3R0b21cIj5cbiAgICA8ZGl2IGNsYXNzPVwic2F2ZWRXcmFwcGVyXCI+XG4gICAgICA8aDMgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTNweCdcIj5PcGVyYXRpb248L2gzPlxuICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7J3Bvc2l0aW9uJzoncmVsYXRpdmUnfVwiPiBcbiAgICAgICAgXG4gICAgICAgIDx2ZXJiZW4tdG9vbHRpcCBcbiAgICAgICAgW3Rvb2x0aXBDb250ZW50XT1cInRvb2x0aXBUZW1wbGF0ZVwiXG4gICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJ2dyZXknXCJcbiAgICAgICAgd2lkdGg9XCIyMDBweFwiIFxuICAgICAgICBbdG9wXT1cIicyMHB4J1wiICAgICAgICAgICAgICAgICBcbiAgICAgICAgW3JpZ2h0XT1cIicwcHgnXCIgIFxuICAgICAgICA+XG4gICAgICAgIDx2ZXJiZW4tc3ZnIFxuICAgICAgICBpY29uPVwiaW5mb1wiIFxuICAgICAgICBbd2lkdGhdPVwiMTVcIiBcbiAgICAgICAgW2hlaWdodF09XCIxNVwiICAgXG4gICAgICAgICpuZ0lmPVwiaXNEdXBsaWNhdGVGaWx0ZXJcIlxuICAgICAgICBmaWxsPVwicmVkXCJcbiAgICAgICAgPlxuICAgICAgICA8L3ZlcmJlbi1zdmc+XG4gICAgICAgIDwvdmVyYmVuLXRvb2x0aXA+XG4gICAgICBcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdG9vbHRpcFRlbXBsYXRlPlxuICAgICAgIHt7ZHVwbGljYXRlTWVzc2FnZX19XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8IS0tIDx2ZXJiZW4tdG9vbHRpcFxuICAgICAgICAgW2JhY2tncm91bmRDb2xvcl09XCInZ3JleSdcIlxuICAgICAgICAgW3RleHRDb2xvcl09XCInd2hpdGUnXCJcbiAgICAgICAgIFtwYWRkaW5nXT1cIicxMHB4J1wiXG4gICAgICAgICBbYm9yZGVyUmFkaXVzXT1cIic4cHgnXCJcbiAgICAgICAgIFt0b3BdPVwiJzIwcHgnXCIgICAgICAgICAgICAgICAgIFxuICAgICAgICAgW3JpZ2h0XT1cIicwcHgnXCIgICBcbiAgICAgICAgIHdpZHRoPVwiMjUwcHhcIiBcbiAgICAgICAgICN0b29sdGlwIFxuICAgICAgICAgKm5nSWY9XCJ0b29sdGlwXCJcbiAgICAgICAgID5cbiAgICAgICAgIDxoMz57e2R1cGxpY2F0ZU1lc3NhZ2V9fTwvaDM+XG4gICAgICAgIDwvdmVyYmVuLXRvb2x0aXA+IC0tPlxuICAgICAgPC9kaXY+XG4gICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICBpY29uPVwiaW5mb1wiXG4gICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICBmaWxsPVwiZ3JleVwiXG4gICAgICAgICpuZ0lmPVwiIWlzRHVwbGljYXRlRmlsdGVyXCJcbiAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXRzV3JhcHBlclwiPlxuICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgd2lkdGg9XCI3cmVtXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdmFsdWVcIlxuICAgICAgICBbb3B0aW9uc109XCJmaWx0ZXJBcnJheVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRGaWx0ZXJWYWx1ZVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmlsdGVyTmFtZUNoYW5nZShzZWxlY3RlZEZpbHRlclZhbHVlKVwiXG4gICAgICA+XG4gICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICB3aWR0aD1cIjdyZW1cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCB2YWx1ZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHZhbHVlXCJcbiAgICAgICAgW29wdGlvbnNdPVwiY29uZGl0aW9uT3B0aW9uc1wiXG4gICAgICAgIChvbkNoYW5nZSk9XCJjaGVja0R1cGxpY2F0ZUZpbHRlcigpXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZENvbmRpdGlvblwiXG4gICAgICA+XG4gICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAqbmdJZj1cInNlbGVjdGVkRmlsdGVyVHlwZSA9PT0gJ0RhdGUnXCJcbiAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCAjY2NjXCJcbiAgICAgIGJvcmRlclJhZGl1cz1cIjVweFwiXG4gICAgICB0ZXh0Q29sb3I9XCJibGFja1wiXG4gICAgICB3aWR0aD1cIjgwcHhcIlxuICAgICAgaGVpZ2h0PVwiMjVweFwiXG4gICAgICBwZD1cIjZweFwiXG4gICAgICBbc2hvd0JvcmRlcl09XCJ0cnVlXCJcbiAgICAgIFtzaG93RXJyb3JNZXNzYWdlXT1cInRydWVcIlxuICAgICAgW2Vycm9yUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxuICAgICAgW3R5cGVdPVwiJ2RhdGUnXCJcbiAgICAgIFsobmdNb2RlbCldPVwiaW5wdXRWYWx1ZVwiXG4gICAgPjwvdmVyYmVuYS1pbnB1dD5cblxuICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICpuZ0lmPVwic2VsZWN0ZWRGaWx0ZXJUeXBlID09PSAnQ3JlZGl0JyB8fCBzZWxlY3RlZEZpbHRlclR5cGUgPT09ICdJbnRlZ2VyJ1wiXG4gICAgICBib3JkZXI9XCIxcHggc29saWQgI2NjY1wiXG4gICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgd2lkdGg9XCIxMDBweFwiXG4gICAgICBoZWlnaHQ9XCIyNXB4XCJcbiAgICAgIHBkPVwiNnB4XCJcbiAgICAgIHBsYWNlSG9sZGVyPVwiaW5wdXQgaW50ZWdlclwiXG4gICAgICBbc2hvd0JvcmRlcl09XCJ0cnVlXCJcblxuICAgICAgW3Nob3dFcnJvck1lc3NhZ2VdPVwidHJ1ZVwiXG4gICAgICBbZXJyb3JQb3NpdGlvbl09XCInYm90dG9tJ1wiXG5cbiAgICAgIGFwcFZhbGlkYXRlPVwiaW50ZWdlclwiXG4gICAgICBbKG5nTW9kZWwpXT1cImlucHV0VmFsdWVcIlxuICAgID48L3ZlcmJlbmEtaW5wdXQ+XG5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAqbmdJZj1cInNlbGVjdGVkRmlsdGVyVHlwZSA9PT0gJ0RlY2ltYWwnXCJcbiAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCAjY2NjXCJcbiAgICAgIGJvcmRlclJhZGl1cz1cIjVweFwiXG4gICAgICB0ZXh0Q29sb3I9XCJibGFja1wiXG4gICAgICB3aWR0aD1cIjEwMHB4XCJcbiAgICAgIGhlaWdodD1cIjI1cHhcIlxuICAgICAgcGQ9XCI2cHhcIlxuICAgICAgcGxhY2VIb2xkZXI9XCJpbnB1dCBhIGRlY2ltYWxcIlxuICAgICAgW3Nob3dCb3JkZXJdPVwidHJ1ZVwiXG4gICAgICBbc2hvd0Vycm9yTWVzc2FnZV09XCJmYWxzZVwiXG4gICAgICBbZXJyb3JQb3NpdGlvbl09XCInYm90dG9tJ1wiXG4gICAgICBhcHBWYWxpZGF0ZT1cImRlY2ltYWxcIlxuICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dFZhbHVlXCJcbiAgICA+PC92ZXJiZW5hLWlucHV0PlxuXG4gICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgKm5nSWY9XCJzZWxlY3RlZEZpbHRlclR5cGUgIT09ICdDcmVkaXQnICYmIHNlbGVjdGVkRmlsdGVyVHlwZSAhPT0gJ0RhdGUnICAmJiBzZWxlY3RlZEZpbHRlclR5cGUgIT09ICdJbnRlZ2VyJyAgJiYgc2VsZWN0ZWRGaWx0ZXJUeXBlICE9PSAnRGVjaW1hbCdcIlxuICAgICAgYm9yZGVyPVwiMXB4IHNvbGlkICNjY2NcIlxuICAgICAgcGxhY2VIb2xkZXI9XCJpbnB1dCB2YWx1ZVwiXG4gICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgd2lkdGg9XCIxMDBweFwiXG4gICAgICBoZWlnaHQ9XCIyNXB4XCJcbiAgICAgIHBkPVwiNnB4XCJcbiAgICAgIFtzaG93Qm9yZGVyXT1cInRydWVcIlxuXG4gICAgICBbc2hvd0Vycm9yTWVzc2FnZV09XCJ0cnVlXCJcbiAgICAgIFtlcnJvclBvc2l0aW9uXT1cIidib3R0b20nXCJcblxuICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dFZhbHVlXCJcbiAgICA+PC92ZXJiZW5hLWlucHV0PlxuXG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYnRuV3JhcHBlclwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbc3R5bGUubWFyZ2luLXRvcF09XCInMC41cmVtJ1wiXG4gICAgICAgIFtzdHlsZS5vdXRsaW5lXT1cIidub25lJ1wiXG4gICAgICAgIFtzdHlsZS5ib3JkZXJdPVwiJ25vbmUnXCJcbiAgICAgICAgW3N0eWxlLmJvcmRlci1yYWRpdXNdPVwiYm9yZGVyUmFkaXVzXCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgIFtzdHlsZS5jb2xvcl09XCJzZWNvbmRhcnlDb2xvclwiXG4gICAgICAgIFtzdHlsZS5mb250LXNpemVdPVwiJzEycHgnXCJcbiAgICAgICAgW3N0eWxlLmZvbnQtd2VpZ2h0XT1cIic1MDAnXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVBZGRGaWx0ZXJCdG5cIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgZGlzYWJsZWJ0bjogZGlzYWJsZUFkZEZpbHRlckJ0bixcbiAgICAgICAgICBlbmFibGVCdG46ICFkaXNhYmxlQWRkRmlsdGVyQnRuXG4gICAgICAgIH1cIlxuICAgICAgICAoY2xpY2spPVwiYWRkRmlsdGVyKClcIlxuICAgICAgPlxuICAgICAgICArIEFkZFxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGhyIC8+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYnRuV3JhcHBlclwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbc3R5bGUubWFyZ2luLXRvcF09XCInMC41cmVtJ1wiXG4gICAgICAgIFtzdHlsZS5vdXRsaW5lXT1cIidub25lJ1wiXG4gICAgICAgIFtzdHlsZS5ib3JkZXJdPVwiJ25vbmUnXCJcbiAgICAgICAgW3N0eWxlLnBhZGRpbmddPVwiJzAuMnJlbSAxLjZyZW0nXCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwicHJpbWFyeUNvbG9yXCJcbiAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRlcnRpYXJ5Q29sb3JcIlxuICAgICAgICBbc3R5bGUuZm9udC1zaXplXT1cIicxMnB4J1wiXG4gICAgICAgIFtzdHlsZS5mb250LXdlaWdodF09XCInNjAwJ1wiXG4gICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlcnMoKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlQXBwbHlGaWx0ZXJCdG5cIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgZGlzYWJsZWJ0bjogZGlzYWJsZUFwcGx5RmlsdGVyQnRuLFxuICAgICAgICAgIGVuYWJsZUJ0bjogIWRpc2FibGVBcHBseUZpbHRlckJ0blxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgRmlsdGVyXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuXG4gIDwvZGl2PlxuXG48L3NlY3Rpb24+XG4iXX0=
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUtZmlsdGVyL3RhYmxlLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLWZpbHRlci90YWJsZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7QUFRdEMsTUFBTSxPQUFPLG9CQUFvQjtJQUN0QixhQUFhLEdBQWtCLEVBQUUsQ0FBQztJQUNsQyxFQUFFLENBQVU7SUFDWixFQUFFLENBQVU7SUFDWixNQUFNLENBQVU7SUFDaEIsS0FBSyxDQUFVO0lBQ2YsT0FBTyxDQUFVO0lBQ2pCLFNBQVMsQ0FBVTtJQUNuQixTQUFTLENBQVU7SUFDbkIsWUFBWSxDQUFVO0lBQ3RCLGNBQWMsQ0FBVTtJQUN4QixhQUFhLENBQVU7SUFDdkIsTUFBTSxDQUFVO0lBQ2hCLFlBQVksQ0FBVTtJQUN0QixXQUFXLENBQVU7SUFDckIsZUFBZSxHQUFVLENBQUMsQ0FBQTtJQUMxQixPQUFPLEdBQVcsS0FBSyxDQUFBO0lBQ3RCLGNBQWMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3pDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ2xELFdBQVcsR0FBWSxFQUFFLENBQUM7SUFDMUIsbUJBQW1CLEdBQVcsRUFBRSxDQUFDO0lBQ2pDLGtCQUFrQixDQUFNO0lBQ3hCLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztJ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QUksQ0FBQyxpQkFBaUIsQ0FDbEQsQ0FBQztZQUNGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUM7WUFDbEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNGLENBQUM7SUFDRixDQUFDO3dHQW5NUyxvQkFBb0I7NEZBQXBCLG9CQUFvQixvaEJDVmpDLGk3UEFxU0E7OzRGRDNSYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UscUJBQXFCO3dEQUt0QixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSURhdGFGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtZmlsdGVyJztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmVyYmVuLXRhYmxlLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1maWx0ZXIuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgZmlsdGVyT3B0aW9uczogSURhdGFGaWx0ZXJbXSA9IFtdO1xuICBASW5wdXQoKSBwZD86IHN0cmluZztcbiAgQElucHV0KCkgbWc/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGhlaWdodD86IHN0cmluZztcbiAgQElucHV0KCkgd2lkdGg/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnQ29sb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJveFNoYWRvdz86IHN0cmluZztcbiAgQElucHV0KCkgdGV4dENvbG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBwcmltYXJ5Q29sb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlY29uZGFyeUNvbG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXJ0aWFyeUNvbG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBib3JkZXI/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJvcmRlclJhZGl1cz86IHN0cmluZztcbiAgQElucHV0KCkgc2VsZWN0V2lkdGg/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1heEZpbHRlckxlbmd0aDpudW1iZXIgPSAzXG4gIEBJbnB1dCgpIHRvb2x0aXA6Ym9vbGVhbiA9IGZhbHNlXG4gIEBPdXRwdXQoKSBmaWx0ZXJzQXBwbGllZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcmVzZXRTb3J0RGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBmaWx0ZXJBcnJheTpzdHJpbmdbXSA9IFtdO1xuICBzZWxlY3RlZEZpbHRlclZhbHVlOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRGaWx0ZXJUeXBlPzphbnk7XG4gIGNvbmRpdGlvbk9wdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIHNlbGVjdGVkQ29uZGl0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJztcbiAgaW5wdXRWYWx1ZT86IHN0cmluZyB8IG51bWJlclxuICBzYXZlZEZpbHRlcnM6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgc2VsZWN0ZWRGaWx0ZXJzOiBJRGF0YUZpbHRlcltdID0gW107XG4gIHNob3dBbGxGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XG4gIGVkaXRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGNoZWNrQWxsOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRHVwbGljYXRlRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG4gIGRpc2FibGVBZGRGaWx0ZXJCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGlzYWJsZUFwcGx5RmlsdGVyQnRuOiBib29sZWFuID0gdHJ1ZTtcbiAgZHVwbGljYXRlTWVzc2FnZT86c3RyaW5nID0gJyc7XG4gIGNvbmZpZ0luc3RhbmNlOiBDb25maWc7XG4gIHN0b3JhZ2VLZXk6IHN0cmluZyA9ICdzYXZlZEZpbHRlcnMnO1xuICBmaWx0ZXJDb3VudDpudW1iZXIgPSAwXG5cbiAgY29uc3RydWN0b3IoKXsgXG4gICAgdGhpcy5jb25maWdJbnN0YW5jZSA9IG5ldyBDb25maWcoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyQXJyYXkgPSB0aGlzLmZpbHRlck9wdGlvbnMubWFwKGl0ZW0gPT4gaXRlbS5uYW1lKTsgIFxuICB9XG4gIFxuXG4gIG9uRmlsdGVyTmFtZUNoYW5nZShzZWxlY3RlZEZpbHRlclZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWxlY3RlZEZpbHRlciA9IHRoaXMuZmlsdGVyT3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24ubmFtZSA9PT0gc2VsZWN0ZWRGaWx0ZXJWYWx1ZSk7XG4gIFxuICAgIGlmIChzZWxlY3RlZEZpbHRlcikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyVHlwZSA9IHNlbGVjdGVkRmlsdGVyLnR5cGU7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uT3B0aW9ucyA9IHRoaXMuY29uZmlnSW5zdGFuY2UuZ2V0Q29uZGl0aW9uT3B0aW9ucyh0aGlzLnNlbGVjdGVkRmlsdGVyVHlwZSkgfHwgW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb25kaXRpb24gPSAnJzsgXG4gICAgfVxufVxuXG4gIHJlc2V0RmlsdGVycygpIHtcbiAgICB0aGlzLnNlbGVjdGVkRmlsdGVyVHlwZSA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZENvbmRpdGlvbiA9ICcnO1xuICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICcnO1xuICAgIHRoaXMuc2F2ZWRGaWx0ZXJzID0gW107XG4gICAgdGhpcy5lZGl0SW5kZXggPSBudWxsO1xuICAgIHRoaXMuY2hlY2tBbGwgPSBmYWxzZTtcbiAgICB0aGlzLmlzRHVwbGljYXRlRmlsdGVyID0gZmFsc2U7XG4gICAgdGhpcy5kaXNhYmxlQXBwbHlGaWx0ZXJCdG4gPSB0cnVlO1xuICAgIHRoaXMuZHVwbGljYXRlTWVzc2FnZSA9ICcnXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5zdG9yYWdlS2V5KTtcbiAgICB0aGlzLmZpbHRlckNvdW50ID0gdGhpcy5zYXZlZEZpbHRlcnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5jaGVja2VkID09PSB0cnVlKS5sZW5ndGg7XG4gICAgdGhpcy5yZXNldFNvcnREYXRhLmVtaXQoKVxuICB9XG5cbiAgYWRkRmlsdGVyKCkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbHRlclZhbHVlIHx8ICF0aGlzLnNlbGVjdGVkQ29uZGl0aW9uIHx8ICF0aGlzLmlucHV0VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVkaXRJbmRleCA9PT0gbnVsbCAmJiB0aGlzLmlzRHVwbGljYXRlRmlsdGVyKSB7XG4gICAgICAgIHJldHVybjsgXG4gICAgfVxuXG4gICAgY29uc3QgbmV3RmlsdGVyOiBJRGF0YUZpbHRlciA9IHtcbiAgICAgICAgbmFtZTogdGhpcy5zZWxlY3RlZEZpbHRlclZhbHVlLFxuICAgICAgICB0eXBlOiB0aGlzLnNlbGVjdGVkRmlsdGVyVHlwZSxcbiAgICAgICAgY29uZGl0aW9uOiB0aGlzLnNlbGVjdGVkQ29uZGl0aW9uLFxuICAgICAgICB2YWx1ZTogdGhpcy5pbnB1dFZhbHVlLFxuICAgICAgICBjaGVja2VkOiB0cnVlXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmVkaXRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IHRoaXMuc2F2ZWRGaWx0ZXJzLnNvbWUoXG4gICAgICAgICAgICAoZmlsdGVyLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICBmaWx0ZXIubmFtZSA9PT0gbmV3RmlsdGVyLm5hbWUgJiZcbiAgICAgICAgICAgICAgICBmaWx0ZXIuY29uZGl0aW9uID09PSBuZXdGaWx0ZXIuY29uZGl0aW9uICYmXG4gICAgICAgICAgICAgICAgaW5kZXggIT09IHRoaXMuZWRpdEluZGV4XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zYXZlZEZpbHRlcnNbdGhpcy5lZGl0SW5kZXhdID0gbmV3RmlsdGVyO1xuICAgICAgICB0aGlzLmVkaXRJbmRleCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuc2F2ZWRGaWx0ZXJzLnNvbWUoZmlsdGVyID0+IFxuICAgICAgICAgICAgZmlsdGVyLm5hbWUgPT09IG5ld0ZpbHRlci5uYW1lICYmIFxuICAgICAgICAgICAgZmlsdGVyLmNvbmRpdGlvbiA9PT0gbmV3RmlsdGVyLmNvbmRpdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNhdmVkRmlsdGVycy5wdXNoKG5ld0ZpbHRlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyQ291bnQgPSB0aGlzLnNhdmVkRmlsdGVycy5maWx0ZXIoaXRlbSA9PiBpdGVtLmNoZWNrZWQgPT09IHRydWUpLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5jbGVhck9wZXJhdGlvblNlY3Rpb24oKTtcbiAgICB0aGlzLmNoZWNrRmlsdGVyQnV0dG9uKCk7IFxuICB9XG5cbiAgdG9nZ2xlQ2hlY2tib3goaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2F2ZWRGaWx0ZXJzW2luZGV4XS5jaGVja2VkID0gIXRoaXMuc2F2ZWRGaWx0ZXJzW2luZGV4XS5jaGVja2VkO1xuICAgIHRoaXMuY2hlY2tBbGwgPSB0aGlzLnNhdmVkRmlsdGVycy5ldmVyeShpdGVtID0+IGl0ZW0uY2hlY2tlZCk7XG4gICAgdGhpcy5maWx0ZXJDb3VudCA9IHRoaXMuc2F2ZWRGaWx0ZXJzLmZpbHRlcihpdGVtID0+IGl0ZW0uY2hlY2tlZCA9PT0gdHJ1ZSkubGVuZ3RoO1xuICB9XG5cbiAgZGVsZXRlRmlsdGVyKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnNhdmVkRmlsdGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMuY2hlY2tEdXBsaWNhdGVGaWx0ZXIoKTtcbiAgICB0aGlzLmNoZWNrRmlsdGVyQnV0dG9uKCk7XG4gICAgdGhpcy5maWx0ZXJDb3VudCA9IHRoaXMuc2F2ZWRGaWx0ZXJzLmZpbHRlcihpdGVtID0+IGl0ZW0uY2hlY2tlZCA9PT0gdHJ1ZSkubGVuZ3RoO1xuICAgIGlmICh0aGlzLnNhdmVkRmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY2hlY2tBbGwgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBlZGl0RmlsdGVyKGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnNhdmVkRmlsdGVyc1tpbmRleF07XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlclR5cGUgPSBmaWx0ZXIudHlwZTtcbiAgICB0aGlzLnNlbGVjdGVkRmlsdGVyVmFsdWUgPSBmaWx0ZXIubmFtZTtcbiAgICB0aGlzLm9uRmlsdGVyTmFtZUNoYW5nZSh0aGlzLnNlbGVjdGVkRmlsdGVyVmFsdWUpIFxuICAgIHRoaXMuc2VsZWN0ZWRDb25kaXRpb24gPSBmaWx0ZXIuY29uZGl0aW9uO1xuICAgIHRoaXMuaW5wdXRWYWx1ZSA9IGZpbHRlci52YWx1ZTtcbiAgICB0aGlzLmVkaXRJbmRleCA9IGluZGV4O1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJzKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzID0gdGhpcy5zYXZlZEZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiBmaWx0ZXIuY2hlY2tlZCk7XG4gICAgdGhpcy5maWx0ZXJzQXBwbGllZC5lbWl0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKTtcbiAgICB0aGlzLmZpbHRlcnNBcHBsaWVkLmVtaXQodGhpcy5zdG9yYWdlS2V5KTtcbiAgfVxuXG4gIHRvZ2dsZVNob3dNb3JlKCkge1xuICAgIHRoaXMuc2hvd0FsbEZpbHRlcnMgPSAhdGhpcy5zaG93QWxsRmlsdGVycztcbiAgfVxuXG4gIGdldCB2aXNpYmxlRmlsdGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93QWxsRmlsdGVyc1xuICAgICAgPyB0aGlzLnNhdmVkRmlsdGVyc1xuICAgICAgOiB0aGlzLnNhdmVkRmlsdGVycy5zbGljZSgwLCB0aGlzLm1heEZpbHRlckxlbmd0aCk7XG4gIH1cblxuICBjbGVhck9wZXJhdGlvblNlY3Rpb24oKSB7XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlclZhbHVlID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZENvbmRpdGlvbiA9ICcnO1xuICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICcnO1xuICB9XG5cbiAgY2hlY2tGaWx0ZXJCdXR0b24oKSB7XG4gICAgdGhpcy5kaXNhYmxlQXBwbHlGaWx0ZXJCdG4gPSB0aGlzLnNhdmVkRmlsdGVycy5sZW5ndGggPT09IDA7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja0FsbCA9ICF0aGlzLmNoZWNrQWxsO1xuICAgIHRoaXMuc2F2ZWRGaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IGZpbHRlci5jaGVja2VkID0gdGhpcy5jaGVja0FsbCk7XG4gICAgdGhpcy5maWx0ZXJDb3VudCA9IHRoaXMuc2F2ZWRGaWx0ZXJzLmZpbHRlcihpdGVtID0+IGl0ZW0uY2hlY2tlZCA9PT0gdHJ1ZSkubGVuZ3RoO1xuICB9XG5cbiAgY2hlY2tEdXBsaWNhdGVGaWx0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdEluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuc2F2ZWRGaWx0ZXJzLnNvbWUoXG4gICAgICAgICAgICAoZmlsdGVyLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICBmaWx0ZXIubmFtZSA9PT0gdGhpcy5zZWxlY3RlZEZpbHRlclZhbHVlICYmXG4gICAgICAgICAgICAgICAgZmlsdGVyLmNvbmRpdGlvbiA9PT0gdGhpcy5zZWxlY3RlZENvbmRpdGlvbiAmJlxuICAgICAgICAgICAgICAgIGluZGV4ICE9PSB0aGlzLmVkaXRJbmRleCBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlQWRkRmlsdGVyQnRuID0gZXhpc3RzO1xuICAgICAgICB0aGlzLmlzRHVwbGljYXRlRmlsdGVyID0gZXhpc3RzO1xuICAgICAgICB0aGlzLmR1cGxpY2F0ZU1lc3NhZ2UgPSBleGlzdHMgPyAnVGhpcyBlbnRyeSBpcyBhIGR1cGxpY2F0ZSBhbmQgY2Fubm90IGJlIGFkZGVkLicgOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5zYXZlZEZpbHRlcnMuc29tZShcbiAgICAgICAgICAgIChmaWx0ZXIpID0+XG4gICAgICAgICAgICAgICAgZmlsdGVyLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRGaWx0ZXJWYWx1ZSAmJlxuICAgICAgICAgICAgICAgIGZpbHRlci5jb25kaXRpb24gPT09IHRoaXMuc2VsZWN0ZWRDb25kaXRpb25cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlQWRkRmlsdGVyQnRuID0gZXhpc3RzO1xuICAgICAgICB0aGlzLmlzRHVwbGljYXRlRmlsdGVyID0gZXhpc3RzO1xuICAgICAgICB0aGlzLmR1cGxpY2F0ZU1lc3NhZ2UgPSBleGlzdHMgPyAnVGhpcyBlbnRyeSBpcyBhIGR1cGxpY2F0ZSBhbmQgY2Fubm90IGJlIGFkZGVkLicgOiAnJztcbiAgICB9XG4gICB9XG59XG5cbiIsIjxzZWN0aW9uXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJnQ29sb3JcIlxuICBbc3R5bGUuYm94LXNoYWRvd109XCJib3hTaGFkb3dcIlxuICBbc3R5bGUuYm9yZGVyXT1cImJvcmRlclwiXG4gIFtzdHlsZS5ib3JkZXItcmFkaXVzXT1cImJvcmRlclJhZGl1c1wiXG4gIFtzdHlsZS5jb2xvcl09XCJ0ZXh0Q29sb3JcIlxuICBbc3R5bGUud2lkdGhdPVwid2lkdGhcIlxuICBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiXG4gIFtzdHlsZS5wYWRkaW5nXT1cInBkXCJcbj5cbiAgPGRpdiBjbGFzcz1cInRvcFwiPlxuICAgIDxoMyBbc3R5bGUuY29sb3JdPVwidGVydGlhcnlDb2xvclwiIFtzdHlsZS5mb250LXNpemVdPVwiJzE0cHgnXCI+XG4gICAgICBGaWx0ZXJzXG4gICAgICA8c3BhbiBbc3R5bGUuY29sb3JdPVwic2Vjb25kYXJ5Q29sb3JcIlxuICAgICAgICA+PHN1cD4oe3sgZmlsdGVyQ291bnQgfX0pPC9zdXA+PC9zcGFuXG4gICAgICA+XG4gICAgPC9oMz5cbiAgICA8YnV0dG9uXG4gICAgICBbc3R5bGUuY29sb3JdPVwic2Vjb25kYXJ5Q29sb3JcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYmdDb2xvclwiXG4gICAgICBbc3R5bGUuYm9yZGVyXT1cIidub25lJ1wiXG4gICAgICBbc3R5bGUuY3Vyc29yXT1cIidwb2ludGVyJ1wiXG4gICAgICBbc3R5bGUuZm9udC1zaXplXT1cIicxMnB4J1wiXG4gICAgICAoY2xpY2spPVwicmVzZXRGaWx0ZXJzKClcIlxuICAgID5cbiAgICAgIFJlc2V0XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8aHIgLz5cblxuICA8IS0tIFNhdmVkIEZpbHRlcnMgU2VjdGlvbiAtLT5cbiAgPGRpdiBjbGFzcz1cImNlbnRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJzYXZlZFdyYXBwZXJcIj5cbiAgICAgIDxoMyBbc3R5bGUuZm9udC1zaXplXT1cIicxM3B4J1wiPlNhdmVkIEZpbHRlcnM8L2gzPlxuICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgZmlsbD1cImdyZXlcIlxuICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0QWxsV3JhcHBlclwiICpuZ0lmPVwic2F2ZWRGaWx0ZXJzLmxlbmd0aFwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIFtjaGVja2VkXT1cImNoZWNrQWxsXCJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoKVwiXG4gICAgICAvPlxuICAgICAgPHAgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTNweCdcIiBbc3R5bGUuZm9udC13ZWlnaHRdPVwiJzUwMCdcIj5TZWxlY3QgQWxsPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgdmlzaWJsZUZpbHRlcnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgY2xhc3M9XCJjZW50ZXJJbm5lcldyYXBwZXJcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFdyYXBwZXJcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICA+PGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwiZmlsdGVyLmNoZWNrZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNoZWNrYm94KGkpXCJcbiAgICAgICAgLz48L3NwYW4+XG4gICAgICAgIDxwXG4gICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTNweCdcIlxuICAgICAgICAgIFtzdHlsZS5mb250LXdlaWdodF09XCInNTAwJ1wiXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInRlcnRpYXJ5Q29sb3JcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZmlsdGVyLm5hbWUgfX0ge3sgZmlsdGVyLmNvbmRpdGlvbiB9fSB7eyBmaWx0ZXIudmFsdWV9fVxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpY29uV3JhcHBlclwiPlxuICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgIGljb249XCJwZW5jaWxcIlxuICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgc3Ryb2tlPVwiIzM0NzlFOVwiXG4gICAgICAgICAgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAoY2xpY2spPVwiZWRpdEZpbHRlcihpKVwiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cInRyYXNoXCJcbiAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgIHN0cm9rZT1cIiNFMjAwMDBcIlxuICAgICAgICAgIChjbGljayk9XCJkZWxldGVGaWx0ZXIoaSlcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm1vcmVXcmFwcGVyXCJcbiAgICAgICpuZ0lmPVwic2F2ZWRGaWx0ZXJzLmxlbmd0aCA+IG1heEZpbHRlckxlbmd0aFwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd01vcmUoKVwiXG4gICAgPlxuICAgICAgPHBcbiAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTJweCdcIlxuICAgICAgICBbc3R5bGUuZm9udC13ZWlnaHRdPVwiJzUwMCdcIlxuICAgICAgICBbc3R5bGUuY29sb3JdPVwidGVydGlhcnlDb2xvclwiXG4gICAgICA+XG4gICAgICAgIHt7IHNob3dBbGxGaWx0ZXJzID8gXCJTaG93IGxlc3NcIiA6IFwiU2hvdyBtb3JlXCIgfX1cbiAgICAgIDwvcD5cbiAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgaWNvbj1cImNoZXZyb25cIlxuICAgICAgICBbd2lkdGhdPVwiOFwiXG4gICAgICAgIFtoZWlnaHRdPVwiNlwiXG4gICAgICAgIGZpbGw9XCJibGFja1wiXG4gICAgICAgIHN0cm9rZT1cImJsYWNrXCJcbiAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8aHIgLz5cblxuICA8IS0tIE9wZXJhdGlvbiBTZWN0aW9uIC0tPlxuICA8ZGl2IGNsYXNzPVwiYm90dG9tXCI+XG4gICAgPGRpdiBjbGFzcz1cInNhdmVkV3JhcHBlclwiPlxuICAgICAgPGgzIFtzdHlsZS5mb250LXNpemVdPVwiJzEzcHgnXCI+T3BlcmF0aW9uPC9oMz5cbiAgICAgIDxkaXYgW25nU3R5bGVdPVwieydwb3NpdGlvbic6J3JlbGF0aXZlJ31cIj4gXG4gICAgICAgIFxuICAgICAgICA8dmVyYmVuLXRvb2x0aXAgXG4gICAgICAgIFt0b29sdGlwQ29udGVudF09XCJ0b29sdGlwVGVtcGxhdGVcIlxuICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cIidncmV5J1wiXG4gICAgICAgIHdpZHRoPVwiMjAwcHhcIiBcbiAgICAgICAgW3RvcF09XCInMjBweCdcIiAgICAgICAgICAgICAgICAgXG4gICAgICAgIFtyaWdodF09XCInMHB4J1wiICBcbiAgICAgICAgPlxuICAgICAgICA8dmVyYmVuLXN2ZyBcbiAgICAgICAgaWNvbj1cImluZm9cIiBcbiAgICAgICAgW3dpZHRoXT1cIjE1XCIgXG4gICAgICAgIFtoZWlnaHRdPVwiMTVcIiAgIFxuICAgICAgICAqbmdJZj1cImlzRHVwbGljYXRlRmlsdGVyXCJcbiAgICAgICAgZmlsbD1cInJlZFwiXG4gICAgICAgID5cbiAgICAgICAgPC92ZXJiZW4tc3ZnPlxuICAgICAgICA8L3ZlcmJlbi10b29sdGlwPlxuICAgICAgXG4gICAgICA8bmctdGVtcGxhdGUgI3Rvb2x0aXBUZW1wbGF0ZT5cbiAgICAgICB7e2R1cGxpY2F0ZU1lc3NhZ2V9fVxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPCEtLSA8dmVyYmVuLXRvb2x0aXBcbiAgICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJ2dyZXknXCJcbiAgICAgICAgIFt0ZXh0Q29sb3JdPVwiJ3doaXRlJ1wiXG4gICAgICAgICBbcGFkZGluZ109XCInMTBweCdcIlxuICAgICAgICAgW2JvcmRlclJhZGl1c109XCInOHB4J1wiXG4gICAgICAgICBbdG9wXT1cIicyMHB4J1wiICAgICAgICAgICAgICAgICBcbiAgICAgICAgIFtyaWdodF09XCInMHB4J1wiICAgXG4gICAgICAgICB3aWR0aD1cIjI1MHB4XCIgXG4gICAgICAgICAjdG9vbHRpcCBcbiAgICAgICAgICpuZ0lmPVwidG9vbHRpcFwiXG4gICAgICAgICA+XG4gICAgICAgICA8aDM+e3tkdXBsaWNhdGVNZXNzYWdlfX08L2gzPlxuICAgICAgICA8L3ZlcmJlbi10b29sdGlwPiAtLT5cbiAgICAgIDwvZGl2PlxuICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgZmlsbD1cImdyZXlcIlxuICAgICAgICAqbmdJZj1cIiFpc0R1cGxpY2F0ZUZpbHRlclwiXG4gICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImlucHV0c1dyYXBwZXJcIj5cbiAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgIHdpZHRoPVwiN3JlbVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHZhbHVlXCJcbiAgICAgICAgW29wdGlvbnNdPVwiZmlsdGVyQXJyYXlcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRmlsdGVyVmFsdWVcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpbHRlck5hbWVDaGFuZ2Uoc2VsZWN0ZWRGaWx0ZXJWYWx1ZSlcIlxuICAgICAgPlxuICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgd2lkdGg9XCI3cmVtXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdmFsdWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCB2YWx1ZVwiXG4gICAgICAgIFtvcHRpb25zXT1cImNvbmRpdGlvbk9wdGlvbnNcIlxuICAgICAgICAob25DaGFuZ2UpPVwiY2hlY2tEdXBsaWNhdGVGaWx0ZXIoKVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDb25kaXRpb25cIlxuICAgICAgPlxuICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgKm5nSWY9XCJzZWxlY3RlZEZpbHRlclR5cGUgPT09ICdEYXRlJ1wiXG4gICAgICBib3JkZXI9XCIxcHggc29saWQgI2NjY1wiXG4gICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgd2lkdGg9XCI4MHB4XCJcbiAgICAgIGhlaWdodD1cIjI1cHhcIlxuICAgICAgcGQ9XCI2cHhcIlxuICAgICAgW3Nob3dCb3JkZXJdPVwidHJ1ZVwiXG4gICAgICBbc2hvd0Vycm9yTWVzc2FnZV09XCJ0cnVlXCJcbiAgICAgIFtlcnJvclBvc2l0aW9uXT1cIidib3R0b20nXCJcbiAgICAgIFt0eXBlXT1cIidkYXRlJ1wiXG4gICAgICBbKG5nTW9kZWwpXT1cImlucHV0VmFsdWVcIlxuICAgID48L3ZlcmJlbmEtaW5wdXQ+XG5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAqbmdJZj1cInNlbGVjdGVkRmlsdGVyVHlwZSA9PT0gJ0NyZWRpdCcgfHwgc2VsZWN0ZWRGaWx0ZXJUeXBlID09PSAnSW50ZWdlcidcIlxuICAgICAgYm9yZGVyPVwiMXB4IHNvbGlkICNjY2NcIlxuICAgICAgYm9yZGVyUmFkaXVzPVwiNXB4XCJcbiAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgIHdpZHRoPVwiMTAwcHhcIlxuICAgICAgaGVpZ2h0PVwiMjVweFwiXG4gICAgICBwZD1cIjZweFwiXG4gICAgICBwbGFjZUhvbGRlcj1cImlucHV0IGludGVnZXJcIlxuICAgICAgW3Nob3dCb3JkZXJdPVwidHJ1ZVwiXG5cbiAgICAgIFtzaG93RXJyb3JNZXNzYWdlXT1cInRydWVcIlxuICAgICAgW2Vycm9yUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxuXG4gICAgICBhcHBWYWxpZGF0ZT1cImludGVnZXJcIlxuICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dFZhbHVlXCJcbiAgICA+PC92ZXJiZW5hLWlucHV0PlxuXG4gICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgKm5nSWY9XCJzZWxlY3RlZEZpbHRlclR5cGUgPT09ICdEZWNpbWFsJ1wiXG4gICAgICBib3JkZXI9XCIxcHggc29saWQgI2NjY1wiXG4gICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgd2lkdGg9XCIxMDBweFwiXG4gICAgICBoZWlnaHQ9XCIyNXB4XCJcbiAgICAgIHBkPVwiNnB4XCJcbiAgICAgIHBsYWNlSG9sZGVyPVwiaW5wdXQgYSBkZWNpbWFsXCJcbiAgICAgIFtzaG93Qm9yZGVyXT1cInRydWVcIlxuICAgICAgW3Nob3dFcnJvck1lc3NhZ2VdPVwiZmFsc2VcIlxuICAgICAgW2Vycm9yUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxuICAgICAgYXBwVmFsaWRhdGU9XCJkZWNpbWFsXCJcbiAgICAgIFsobmdNb2RlbCldPVwiaW5wdXRWYWx1ZVwiXG4gICAgPjwvdmVyYmVuYS1pbnB1dD5cblxuICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICpuZ0lmPVwic2VsZWN0ZWRGaWx0ZXJUeXBlICE9PSAnQ3JlZGl0JyAmJiBzZWxlY3RlZEZpbHRlclR5cGUgIT09ICdEYXRlJyAgJiYgc2VsZWN0ZWRGaWx0ZXJUeXBlICE9PSAnSW50ZWdlcicgICYmIHNlbGVjdGVkRmlsdGVyVHlwZSAhPT0gJ0RlY2ltYWwnXCJcbiAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCAjY2NjXCJcbiAgICAgIHBsYWNlSG9sZGVyPVwiaW5wdXQgdmFsdWVcIlxuICAgICAgYm9yZGVyUmFkaXVzPVwiNXB4XCJcbiAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgIHdpZHRoPVwiMTAwcHhcIlxuICAgICAgaGVpZ2h0PVwiMjVweFwiXG4gICAgICBwZD1cIjZweFwiXG4gICAgICBbc2hvd0JvcmRlcl09XCJ0cnVlXCJcblxuICAgICAgW3Nob3dFcnJvck1lc3NhZ2VdPVwidHJ1ZVwiXG4gICAgICBbZXJyb3JQb3NpdGlvbl09XCInYm90dG9tJ1wiXG5cbiAgICAgIFsobmdNb2RlbCldPVwiaW5wdXRWYWx1ZVwiXG4gICAgPjwvdmVyYmVuYS1pbnB1dD5cblxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImJ0bldyYXBwZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW3N0eWxlLm1hcmdpbi10b3BdPVwiJzAuNXJlbSdcIlxuICAgICAgICBbc3R5bGUub3V0bGluZV09XCInbm9uZSdcIlxuICAgICAgICBbc3R5bGUuYm9yZGVyXT1cIidub25lJ1wiXG4gICAgICAgIFtzdHlsZS5ib3JkZXItcmFkaXVzXT1cImJvcmRlclJhZGl1c1wiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICBbc3R5bGUuY29sb3JdPVwic2Vjb25kYXJ5Q29sb3JcIlxuICAgICAgICBbc3R5bGUuZm9udC1zaXplXT1cIicxMnB4J1wiXG4gICAgICAgIFtzdHlsZS5mb250LXdlaWdodF09XCInNTAwJ1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlQWRkRmlsdGVyQnRuXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgIGRpc2FibGVidG46IGRpc2FibGVBZGRGaWx0ZXJCdG4sXG4gICAgICAgICAgZW5hYmxlQnRuOiAhZGlzYWJsZUFkZEZpbHRlckJ0blxuICAgICAgICB9XCJcbiAgICAgICAgKGNsaWNrKT1cImFkZEZpbHRlcigpXCJcbiAgICAgID5cbiAgICAgICAgKyBBZGRcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxociAvPlxuXG4gICAgPGRpdiBjbGFzcz1cImJ0bldyYXBwZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW3N0eWxlLm1hcmdpbi10b3BdPVwiJzAuNXJlbSdcIlxuICAgICAgICBbc3R5bGUub3V0bGluZV09XCInbm9uZSdcIlxuICAgICAgICBbc3R5bGUuYm9yZGVyXT1cIidub25lJ1wiXG4gICAgICAgIFtzdHlsZS5wYWRkaW5nXT1cIicwLjJyZW0gMS42cmVtJ1wiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInByaW1hcnlDb2xvclwiXG4gICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0ZXJ0aWFyeUNvbG9yXCJcbiAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTJweCdcIlxuICAgICAgICBbc3R5bGUuZm9udC13ZWlnaHRdPVwiJzYwMCdcIlxuICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJzKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUFwcGx5RmlsdGVyQnRuXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgIGRpc2FibGVidG46IGRpc2FibGVBcHBseUZpbHRlckJ0bixcbiAgICAgICAgICBlbmFibGVCdG46ICFkaXNhYmxlQXBwbHlGaWx0ZXJCdG5cbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIEZpbHRlclxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cblxuICA8L2Rpdj5cblxuPC9zZWN0aW9uPlxuIl19
|
|
@@ -2660,11 +2660,11 @@ class TableFilterComponent {
|
|
|
2660
2660
|
}
|
|
2661
2661
|
}
|
|
2662
2662
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: TableFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2663
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: TableFilterComponent, selector: "verben-table-filter", inputs: { filterOptions: "filterOptions", pd: "pd", mg: "mg", height: "height", width: "width", bgColor: "bgColor", boxShadow: "boxShadow", textColor: "textColor", primaryColor: "primaryColor", secondaryColor: "secondaryColor", tertiaryColor: "tertiaryColor", border: "border", borderRadius: "borderRadius", selectWidth: "selectWidth", maxFilterLength: "maxFilterLength", tooltip: "tooltip" }, outputs: { filtersApplied: "filtersApplied", resetSortData: "resetSortData" }, ngImport: i0, template: "<section\n [style.background-color]=\"bgColor\"\n [style.box-shadow]=\"boxShadow\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.padding]=\"pd\"\n>\n <div class=\"top\">\n <h3 [style.color]=\"tertiaryColor\" [style.font-size]=\"'14px'\">\n Filters\n <span [style.color]=\"secondaryColor\"\n ><sup>({{ filterCount }})</sup></span\n >\n </h3>\n <button\n [style.color]=\"secondaryColor\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetFilters()\"\n >\n Reset\n </button>\n </div>\n <hr />\n\n <!-- Saved Filters Section -->\n <div class=\"center\">\n <div class=\"savedWrapper\">\n <h3 [style.font-size]=\"'13px'\">Saved Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <div class=\"selectAllWrapper\" *ngIf=\"savedFilters.length\">\n <input\n type=\"checkbox\"\n [checked]=\"checkAll\"\n (change)=\"toggleSelectAll()\"\n />\n <p [style.font-size]=\"'13px'\" [style.font-weight]=\"'500'\">Select All</p>\n </div>\n <div\n *ngFor=\"let filter of visibleFilters; let i = index\"\n class=\"centerInnerWrapper\"\n >\n <div class=\"checkboxWrapper\">\n <span\n ><input\n type=\"checkbox\"\n [checked]=\"filter.checked\"\n (click)=\"toggleCheckbox(i)\"\n /></span>\n <p\n [style.font-size]=\"'13px'\"\n [style.font-weight]=\"'500'\"\n [style.color]=\"tertiaryColor\"\n >\n {{ filter.name }} {{ filter.condition }} {{ filter.value}}\n </p>\n </div>\n <div class=\"iconWrapper\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editFilter(i)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"deleteFilter(i)\"\n ></verben-svg>\n </div>\n </div>\n\n <div\n class=\"moreWrapper\"\n *ngIf=\"savedFilters.length > maxFilterLength\"\n (click)=\"toggleShowMore()\"\n >\n <p\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'500'\"\n [style.color]=\"tertiaryColor\"\n >\n {{ showAllFilters ? \"Show less\" : \"Show more\" }}\n </p>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </div>\n </div>\n <hr />\n\n <!-- Operation Section -->\n <div class=\"bottom\">\n <div class=\"savedWrapper\">\n <h3 [style.font-size]=\"'13px'\">Operation</h3>\n <div [ngStyle]=\"{'position':'relative'}\"> \n \n <verben-tooltip \n [tooltipContent]=\"tooltipTemplate\"\n [backgroundColor]=\"'grey'\"\n width=\"200px\" \n [top]=\"'20px'\" \n [right]=\"'0px'\" \n >\n <verben-svg \n icon=\"info\" \n [width]=\"15\" \n [height]=\"15\" \n *ngIf=\"isDuplicateFilter\"\n fill=\"red\"\n >\n </verben-svg>\n </verben-tooltip>\n \n <ng-template #tooltipTemplate>\n {{duplicateMessage}}\n </ng-template>\n <!-- <verben-tooltip\n [backgroundColor]=\"'grey'\"\n [textColor]=\"'white'\"\n [padding]=\"'10px'\"\n [borderRadius]=\"'8px'\"\n [top]=\"'20px'\" \n [right]=\"'0px'\" \n width=\"250px\" \n #tooltip \n *ngIf=\"tooltip\"\n >\n <h3>{{duplicateMessage}}</h3>\n </verben-tooltip> -->\n </div>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n *ngIf=\"!isDuplicateFilter\"\n ></verben-svg>\n </div>\n\n <div class=\"inputsWrapper\">\n <verben-drop-down\n width=\"7rem\"\n placeholder=\"Select value\"\n [options]=\"filterArray\"\n [(ngModel)]=\"selectedFilterValue\"\n (ngModelChange)=\"onFilterNameChange(selectedFilterValue)\"\n >\n </verben-drop-down>\n <verben-drop-down\n width=\"7rem\"\n placeholder=\"Select value\"\n placeholder=\"Select value\"\n [options]=\"conditionOptions\"\n (onChange)=\"checkDuplicateFilter()\"\n [(ngModel)]=\"selectedCondition\"\n >\n </verben-drop-down>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Date'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"80px\"\n height=\"25px\"\n pd=\"6px\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n [type]=\"'date'\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Credit' || selectedFilterType === 'Integer'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n placeHolder=\"input integer\"\n [showBorder]=\"true\"\n\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n\n appValidate=\"integer\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Decimal'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n placeHolder=\"input a decimal\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"false\"\n [errorPosition]=\"'bottom'\"\n appValidate=\"decimal\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType !== 'Credit' && selectedFilterType !== 'Date' && selectedFilterType !== 'Integer' && selectedFilterType !== 'Decimal'\"\n border=\"1px solid #ccc\"\n placeHolder=\"input value\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n [showBorder]=\"true\"\n\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n </div>\n\n <div class=\"btnWrapper\">\n <button\n [style.margin-top]=\"'0.5rem'\"\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.border-radius]=\"borderRadius\"\n [style.background-color]=\"'transparent'\"\n [style.color]=\"secondaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'500'\"\n [disabled]=\"disableAddFilterBtn\"\n [ngClass]=\"{\n disablebtn: disableAddFilterBtn,\n enableBtn: !disableAddFilterBtn\n }\"\n (click)=\"addFilter()\"\n >\n + Add\n </button>\n </div>\n <hr />\n\n <div class=\"btnWrapper\">\n <button\n [style.margin-top]=\"'0.5rem'\"\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.padding]=\"'0.2rem 1.6rem'\"\n [style.background-color]=\"primaryColor\"\n [style.color]=\"tertiaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'600'\"\n (click)=\"applyFilters()\"\n [disabled]=\"disableApplyFilterBtn\"\n [ngClass]=\"{\n disablebtn: disableApplyFilterBtn,\n enableBtn: !disableApplyFilterBtn\n }\"\n >\n Filter\n </button>\n </div>\n\n\n </div>\n\n</section>\n", styles: ["h3,p{margin-top:0!important;margin-bottom:0!important}.top{display:flex;align-items:end;justify-content:space-between}hr{border:1px solid rgba(232,234,241,1);margin:.8rem 0rem}.centerInnerWrapper{display:flex;align-items:center;justify-content:space-between}.savedWrapper{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem}.checkboxWrapper{display:flex;align-items:center;gap:.3rem}.iconWrapper{display:flex;align-items:center;gap:.7rem;cursor:pointer}.moreWrapper{display:flex;align-items:center;gap:.4rem;cursor:pointer}.inputsWrapper{margin-top:.5rem;display:flex;align-items:center;gap:.5rem}.btnWrapper{display:flex;justify-content:end}.inputsWrapper select:nth-of-type(1){width:120px}.inputsWrapper select:nth-of-type(2){width:70px}input[type=checkbox].checked{accent-color:#3479E9}.selectAllWrapper{display:flex;align-items:center;gap:.25rem;margin-bottom:.5rem}.selectAllWrapper>input{cursor:pointer}.disablebtn{cursor:not-allowed}.enableBtn{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "fontSize", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "directive", type: ValidateDirective, selector: "[appValidate]", inputs: ["appValidate", "required", "showBorder", "showErrorMessage", "errorBorderColor", "errorMessageColor", "errorIconTooltipPosition", "showErrorIcon"] }, { kind: "component", type: TooltipComponent, selector: "verben-tooltip", inputs: ["tooltipContent", "customClass", "backgroundColor", "textColor", "padding", "borderRadius", "zIndex", "border", "width", "top", "bottom", "left", "right"] }, { kind: "component", type: SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }] });
|
|
2663
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: TableFilterComponent, selector: "verben-table-filter", inputs: { filterOptions: "filterOptions", pd: "pd", mg: "mg", height: "height", width: "width", bgColor: "bgColor", boxShadow: "boxShadow", textColor: "textColor", primaryColor: "primaryColor", secondaryColor: "secondaryColor", tertiaryColor: "tertiaryColor", border: "border", borderRadius: "borderRadius", selectWidth: "selectWidth", maxFilterLength: "maxFilterLength", tooltip: "tooltip" }, outputs: { filtersApplied: "filtersApplied", resetSortData: "resetSortData" }, ngImport: i0, template: "<section\n [style.background-color]=\"bgColor\"\n [style.box-shadow]=\"boxShadow\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.padding]=\"pd\"\n>\n <div class=\"top\">\n <h3 [style.color]=\"tertiaryColor\" [style.font-size]=\"'14px'\">\n Filters\n <span [style.color]=\"secondaryColor\"\n ><sup>({{ filterCount }})</sup></span\n >\n </h3>\n <button\n [style.color]=\"secondaryColor\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetFilters()\"\n >\n Reset\n </button>\n </div>\n <hr />\n\n <!-- Saved Filters Section -->\n <div class=\"center\">\n <div class=\"savedWrapper\">\n <h3 [style.font-size]=\"'13px'\">Saved Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <div class=\"selectAllWrapper\" *ngIf=\"savedFilters.length\">\n <input\n type=\"checkbox\"\n [checked]=\"checkAll\"\n (change)=\"toggleSelectAll()\"\n />\n <p [style.font-size]=\"'13px'\" [style.font-weight]=\"'500'\">Select All</p>\n </div>\n <div\n *ngFor=\"let filter of visibleFilters; let i = index\"\n class=\"centerInnerWrapper\"\n >\n <div class=\"checkboxWrapper\">\n <span\n ><input\n type=\"checkbox\"\n [checked]=\"filter.checked\"\n (click)=\"toggleCheckbox(i)\"\n /></span>\n <p\n [style.font-size]=\"'13px'\"\n [style.font-weight]=\"'500'\"\n [style.color]=\"tertiaryColor\"\n >\n {{ filter.name }} {{ filter.condition }} {{ filter.value}}\n </p>\n </div>\n <div class=\"iconWrapper\">\n <verben-svg\n icon=\"pencil\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editFilter(i)\"\n ></verben-svg>\n <verben-svg\n icon=\"trash\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"deleteFilter(i)\"\n ></verben-svg>\n </div>\n </div>\n\n <div\n class=\"moreWrapper\"\n *ngIf=\"savedFilters.length > maxFilterLength\"\n (click)=\"toggleShowMore()\"\n >\n <p\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'500'\"\n [style.color]=\"tertiaryColor\"\n >\n {{ showAllFilters ? \"Show less\" : \"Show more\" }}\n </p>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </div>\n </div>\n <hr />\n\n <!-- Operation Section -->\n <div class=\"bottom\">\n <div class=\"savedWrapper\">\n <h3 [style.font-size]=\"'13px'\">Operation</h3>\n <div [ngStyle]=\"{'position':'relative'}\"> \n \n <verben-tooltip \n [tooltipContent]=\"tooltipTemplate\"\n [backgroundColor]=\"'grey'\"\n width=\"200px\" \n [top]=\"'20px'\" \n [right]=\"'0px'\" \n >\n <verben-svg \n icon=\"info\" \n [width]=\"15\" \n [height]=\"15\" \n *ngIf=\"isDuplicateFilter\"\n fill=\"red\"\n >\n </verben-svg>\n </verben-tooltip>\n \n <ng-template #tooltipTemplate>\n {{duplicateMessage}}\n </ng-template>\n <!-- <verben-tooltip\n [backgroundColor]=\"'grey'\"\n [textColor]=\"'white'\"\n [padding]=\"'10px'\"\n [borderRadius]=\"'8px'\"\n [top]=\"'20px'\" \n [right]=\"'0px'\" \n width=\"250px\" \n #tooltip \n *ngIf=\"tooltip\"\n >\n <h3>{{duplicateMessage}}</h3>\n </verben-tooltip> -->\n </div>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n *ngIf=\"!isDuplicateFilter\"\n ></verben-svg>\n </div>\n\n <div class=\"inputsWrapper\">\n <verben-drop-down\n width=\"7rem\"\n placeholder=\"Select value\"\n [options]=\"filterArray\"\n [(ngModel)]=\"selectedFilterValue\"\n (ngModelChange)=\"onFilterNameChange(selectedFilterValue)\"\n >\n </verben-drop-down>\n <verben-drop-down\n width=\"7rem\"\n placeholder=\"Select value\"\n placeholder=\"Select value\"\n [options]=\"conditionOptions\"\n (onChange)=\"checkDuplicateFilter()\"\n [(ngModel)]=\"selectedCondition\"\n >\n </verben-drop-down>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Date'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"80px\"\n height=\"25px\"\n pd=\"6px\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n [type]=\"'date'\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Credit' || selectedFilterType === 'Integer'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n placeHolder=\"input integer\"\n [showBorder]=\"true\"\n\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n\n appValidate=\"integer\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Decimal'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n placeHolder=\"input a decimal\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"false\"\n [errorPosition]=\"'bottom'\"\n appValidate=\"decimal\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType !== 'Credit' && selectedFilterType !== 'Date' && selectedFilterType !== 'Integer' && selectedFilterType !== 'Decimal'\"\n border=\"1px solid #ccc\"\n placeHolder=\"input value\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n [showBorder]=\"true\"\n\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n </div>\n\n <div class=\"btnWrapper\">\n <button\n [style.margin-top]=\"'0.5rem'\"\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.border-radius]=\"borderRadius\"\n [style.background-color]=\"'transparent'\"\n [style.color]=\"secondaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'500'\"\n [disabled]=\"disableAddFilterBtn\"\n [ngClass]=\"{\n disablebtn: disableAddFilterBtn,\n enableBtn: !disableAddFilterBtn\n }\"\n (click)=\"addFilter()\"\n >\n + Add\n </button>\n </div>\n <hr />\n\n <div class=\"btnWrapper\">\n <button\n [style.margin-top]=\"'0.5rem'\"\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.padding]=\"'0.2rem 1.6rem'\"\n [style.background-color]=\"primaryColor\"\n [style.color]=\"tertiaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'600'\"\n (click)=\"applyFilters()\"\n [disabled]=\"disableApplyFilterBtn\"\n [ngClass]=\"{\n disablebtn: disableApplyFilterBtn,\n enableBtn: !disableApplyFilterBtn\n }\"\n >\n Filter\n </button>\n </div>\n\n\n </div>\n\n</section>\n", styles: ["h3,p{margin-top:0!important;margin-bottom:0!important}.top{display:flex;align-items:end;justify-content:space-between}hr{border:1px solid rgba(232,234,241,1);margin:.8rem 0rem}.centerInnerWrapper{display:flex;align-items:center;justify-content:space-between}.savedWrapper{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem}.checkboxWrapper{display:flex;align-items:center;gap:.3rem}.iconWrapper{display:flex;align-items:center;gap:.7rem;cursor:pointer}.moreWrapper{display:flex;align-items:center;gap:.4rem;cursor:pointer}.inputsWrapper{margin-top:.5rem;display:flex;align-items:center;gap:.5rem}.btnWrapper{display:flex;justify-content:end}.inputsWrapper select:nth-of-type(1){width:120px}.inputsWrapper select:nth-of-type(2){width:70px}input[type=checkbox].checked{accent-color:#3479E9}.selectAllWrapper{display:flex;align-items:center;gap:.25rem;margin-bottom:.5rem}.selectAllWrapper>input{cursor:pointer}.disablebtn{cursor:not-allowed}.enableBtn{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "fontSize", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "directive", type: ValidateDirective, selector: "[appValidate]", inputs: ["appValidate", "required", "showBorder", "showErrorMessage", "errorBorderColor", "errorMessageColor", "errorIconTooltipPosition", "showErrorIcon"] }, { kind: "component", type: TooltipComponent, selector: "verben-tooltip", inputs: ["tooltipContent", "customClass", "backgroundColor", "textColor", "padding", "borderRadius", "zIndex", "border", "width", "top", "bottom", "left", "right"] }, { kind: "component", type: SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }] });
|
|
2664
2664
|
}
|
|
2665
2665
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: TableFilterComponent, decorators: [{
|
|
2666
2666
|
type: Component,
|
|
2667
|
-
args: [{ selector: 'verben-table-filter', template: "<section\n [style.background-color]=\"bgColor\"\n [style.box-shadow]=\"boxShadow\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.padding]=\"pd\"\n>\n <div class=\"top\">\n <h3 [style.color]=\"tertiaryColor\" [style.font-size]=\"'14px'\">\n Filters\n <span [style.color]=\"secondaryColor\"\n ><sup>({{ filterCount }})</sup></span\n >\n </h3>\n <button\n [style.color]=\"secondaryColor\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetFilters()\"\n >\n Reset\n </button>\n </div>\n <hr />\n\n <!-- Saved Filters Section -->\n <div class=\"center\">\n <div class=\"savedWrapper\">\n <h3 [style.font-size]=\"'13px'\">Saved Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <div class=\"selectAllWrapper\" *ngIf=\"savedFilters.length\">\n <input\n type=\"checkbox\"\n [checked]=\"checkAll\"\n (change)=\"toggleSelectAll()\"\n />\n <p [style.font-size]=\"'13px'\" [style.font-weight]=\"'500'\">Select All</p>\n </div>\n <div\n *ngFor=\"let filter of visibleFilters; let i = index\"\n class=\"centerInnerWrapper\"\n >\n <div class=\"checkboxWrapper\">\n <span\n ><input\n type=\"checkbox\"\n [checked]=\"filter.checked\"\n (click)=\"toggleCheckbox(i)\"\n /></span>\n <p\n [style.font-size]=\"'13px'\"\n [style.font-weight]=\"'500'\"\n [style.color]=\"tertiaryColor\"\n >\n {{ filter.name }} {{ filter.condition }} {{ filter.value}}\n </p>\n </div>\n <div class=\"iconWrapper\">\n <verben-svg\n icon=\"
|
|
2667
|
+
args: [{ selector: 'verben-table-filter', template: "<section\n [style.background-color]=\"bgColor\"\n [style.box-shadow]=\"boxShadow\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [style.padding]=\"pd\"\n>\n <div class=\"top\">\n <h3 [style.color]=\"tertiaryColor\" [style.font-size]=\"'14px'\">\n Filters\n <span [style.color]=\"secondaryColor\"\n ><sup>({{ filterCount }})</sup></span\n >\n </h3>\n <button\n [style.color]=\"secondaryColor\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetFilters()\"\n >\n Reset\n </button>\n </div>\n <hr />\n\n <!-- Saved Filters Section -->\n <div class=\"center\">\n <div class=\"savedWrapper\">\n <h3 [style.font-size]=\"'13px'\">Saved Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <div class=\"selectAllWrapper\" *ngIf=\"savedFilters.length\">\n <input\n type=\"checkbox\"\n [checked]=\"checkAll\"\n (change)=\"toggleSelectAll()\"\n />\n <p [style.font-size]=\"'13px'\" [style.font-weight]=\"'500'\">Select All</p>\n </div>\n <div\n *ngFor=\"let filter of visibleFilters; let i = index\"\n class=\"centerInnerWrapper\"\n >\n <div class=\"checkboxWrapper\">\n <span\n ><input\n type=\"checkbox\"\n [checked]=\"filter.checked\"\n (click)=\"toggleCheckbox(i)\"\n /></span>\n <p\n [style.font-size]=\"'13px'\"\n [style.font-weight]=\"'500'\"\n [style.color]=\"tertiaryColor\"\n >\n {{ filter.name }} {{ filter.condition }} {{ filter.value}}\n </p>\n </div>\n <div class=\"iconWrapper\">\n <verben-svg\n icon=\"pencil\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editFilter(i)\"\n ></verben-svg>\n <verben-svg\n icon=\"trash\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"deleteFilter(i)\"\n ></verben-svg>\n </div>\n </div>\n\n <div\n class=\"moreWrapper\"\n *ngIf=\"savedFilters.length > maxFilterLength\"\n (click)=\"toggleShowMore()\"\n >\n <p\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'500'\"\n [style.color]=\"tertiaryColor\"\n >\n {{ showAllFilters ? \"Show less\" : \"Show more\" }}\n </p>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </div>\n </div>\n <hr />\n\n <!-- Operation Section -->\n <div class=\"bottom\">\n <div class=\"savedWrapper\">\n <h3 [style.font-size]=\"'13px'\">Operation</h3>\n <div [ngStyle]=\"{'position':'relative'}\"> \n \n <verben-tooltip \n [tooltipContent]=\"tooltipTemplate\"\n [backgroundColor]=\"'grey'\"\n width=\"200px\" \n [top]=\"'20px'\" \n [right]=\"'0px'\" \n >\n <verben-svg \n icon=\"info\" \n [width]=\"15\" \n [height]=\"15\" \n *ngIf=\"isDuplicateFilter\"\n fill=\"red\"\n >\n </verben-svg>\n </verben-tooltip>\n \n <ng-template #tooltipTemplate>\n {{duplicateMessage}}\n </ng-template>\n <!-- <verben-tooltip\n [backgroundColor]=\"'grey'\"\n [textColor]=\"'white'\"\n [padding]=\"'10px'\"\n [borderRadius]=\"'8px'\"\n [top]=\"'20px'\" \n [right]=\"'0px'\" \n width=\"250px\" \n #tooltip \n *ngIf=\"tooltip\"\n >\n <h3>{{duplicateMessage}}</h3>\n </verben-tooltip> -->\n </div>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n *ngIf=\"!isDuplicateFilter\"\n ></verben-svg>\n </div>\n\n <div class=\"inputsWrapper\">\n <verben-drop-down\n width=\"7rem\"\n placeholder=\"Select value\"\n [options]=\"filterArray\"\n [(ngModel)]=\"selectedFilterValue\"\n (ngModelChange)=\"onFilterNameChange(selectedFilterValue)\"\n >\n </verben-drop-down>\n <verben-drop-down\n width=\"7rem\"\n placeholder=\"Select value\"\n placeholder=\"Select value\"\n [options]=\"conditionOptions\"\n (onChange)=\"checkDuplicateFilter()\"\n [(ngModel)]=\"selectedCondition\"\n >\n </verben-drop-down>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Date'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"80px\"\n height=\"25px\"\n pd=\"6px\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n [type]=\"'date'\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Credit' || selectedFilterType === 'Integer'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n placeHolder=\"input integer\"\n [showBorder]=\"true\"\n\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n\n appValidate=\"integer\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType === 'Decimal'\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n placeHolder=\"input a decimal\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"false\"\n [errorPosition]=\"'bottom'\"\n appValidate=\"decimal\"\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n <verbena-input\n *ngIf=\"selectedFilterType !== 'Credit' && selectedFilterType !== 'Date' && selectedFilterType !== 'Integer' && selectedFilterType !== 'Decimal'\"\n border=\"1px solid #ccc\"\n placeHolder=\"input value\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100px\"\n height=\"25px\"\n pd=\"6px\"\n [showBorder]=\"true\"\n\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n\n [(ngModel)]=\"inputValue\"\n ></verbena-input>\n\n </div>\n\n <div class=\"btnWrapper\">\n <button\n [style.margin-top]=\"'0.5rem'\"\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.border-radius]=\"borderRadius\"\n [style.background-color]=\"'transparent'\"\n [style.color]=\"secondaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'500'\"\n [disabled]=\"disableAddFilterBtn\"\n [ngClass]=\"{\n disablebtn: disableAddFilterBtn,\n enableBtn: !disableAddFilterBtn\n }\"\n (click)=\"addFilter()\"\n >\n + Add\n </button>\n </div>\n <hr />\n\n <div class=\"btnWrapper\">\n <button\n [style.margin-top]=\"'0.5rem'\"\n [style.outline]=\"'none'\"\n [style.border]=\"'none'\"\n [style.padding]=\"'0.2rem 1.6rem'\"\n [style.background-color]=\"primaryColor\"\n [style.color]=\"tertiaryColor\"\n [style.font-size]=\"'12px'\"\n [style.font-weight]=\"'600'\"\n (click)=\"applyFilters()\"\n [disabled]=\"disableApplyFilterBtn\"\n [ngClass]=\"{\n disablebtn: disableApplyFilterBtn,\n enableBtn: !disableApplyFilterBtn\n }\"\n >\n Filter\n </button>\n </div>\n\n\n </div>\n\n</section>\n", styles: ["h3,p{margin-top:0!important;margin-bottom:0!important}.top{display:flex;align-items:end;justify-content:space-between}hr{border:1px solid rgba(232,234,241,1);margin:.8rem 0rem}.centerInnerWrapper{display:flex;align-items:center;justify-content:space-between}.savedWrapper{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem}.checkboxWrapper{display:flex;align-items:center;gap:.3rem}.iconWrapper{display:flex;align-items:center;gap:.7rem;cursor:pointer}.moreWrapper{display:flex;align-items:center;gap:.4rem;cursor:pointer}.inputsWrapper{margin-top:.5rem;display:flex;align-items:center;gap:.5rem}.btnWrapper{display:flex;justify-content:end}.inputsWrapper select:nth-of-type(1){width:120px}.inputsWrapper select:nth-of-type(2){width:70px}input[type=checkbox].checked{accent-color:#3479E9}.selectAllWrapper{display:flex;align-items:center;gap:.25rem;margin-bottom:.5rem}.selectAllWrapper>input{cursor:pointer}.disablebtn{cursor:not-allowed}.enableBtn{cursor:pointer}\n"] }]
|
|
2668
2668
|
}], ctorParameters: () => [], propDecorators: { filterOptions: [{
|
|
2669
2669
|
type: Input
|
|
2670
2670
|
}], pd: [{
|