UNPKG

@versatiledatakit/data-pipelines

Version:

Data Pipelines help Data Engineers develop, deploy, run, and manage data processing workloads (called 'Data Job')

254 lines 32.2 kB
/* * Copyright 2023-2025 Broadcom * SPDX-License-Identifier: Apache-2.0 */ import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core'; import { CollectionsUtil } from '@versatiledatakit/shared'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "../../quick-filters/quick-filters.component"; import * as i3 from "@versatiledatakit/shared"; function GridActionComponent_div_3_button_1_Template(rf, ctx) { if (rf & 1) { const _r6 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 10); i0.ɵɵlistener("click", function GridActionComponent_div_3_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r5 = i0.ɵɵnextContext(2); return ctx_r5.add.next(true); }); i0.ɵɵelementStart(1, "span"); i0.ɵɵtext(2); i0.ɵɵelementEnd()(); } if (rf & 2) { const ctx_r3 = i0.ɵɵnextContext(2); i0.ɵɵproperty("disabled", ctx_r3.addDisabled || ctx_r3.disableActionableElements); i0.ɵɵattribute("id", ctx_r3.addId); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r3.addLabel); } } function GridActionComponent_div_3_span_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span", 11); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r4 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r4.addTooltip); } } function GridActionComponent_div_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 7); i0.ɵɵtemplate(1, GridActionComponent_div_3_button_1_Template, 3, 3, "button", 8); i0.ɵɵtemplate(2, GridActionComponent_div_3_span_2_Template, 2, 1, "span", 9); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.addLabel); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.addTooltip); } } function GridActionComponent_div_4_button_1_Template(rf, ctx) { if (rf & 1) { const _r10 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 13); i0.ɵɵlistener("click", function GridActionComponent_div_4_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(2); return ctx_r9.edit.next(ctx_r9.selectedValue); }); i0.ɵɵelementStart(1, "span"); i0.ɵɵtext(2); i0.ɵɵelementEnd()(); } if (rf & 2) { const ctx_r7 = i0.ɵɵnextContext(2); i0.ɵɵproperty("disabled", ctx_r7.editDisabled || ctx_r7.disableActionableElements); i0.ɵɵattribute("id", ctx_r7.editId); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r7.editLabel); } } function GridActionComponent_div_4_span_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span", 11); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r8 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r8.editTooltip); } } function GridActionComponent_div_4_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 7); i0.ɵɵtemplate(1, GridActionComponent_div_4_button_1_Template, 3, 3, "button", 12); i0.ɵɵtemplate(2, GridActionComponent_div_4_span_2_Template, 2, 1, "span", 9); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r1.editLabel); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r1.editTooltip); } } function GridActionComponent_div_5_button_1_Template(rf, ctx) { if (rf & 1) { const _r14 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 15); i0.ɵɵlistener("click", function GridActionComponent_div_5_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(2); return ctx_r13.remove.next(ctx_r13.selectedValue); }); i0.ɵɵelementStart(1, "span"); i0.ɵɵtext(2); i0.ɵɵelementEnd()(); } if (rf & 2) { const ctx_r11 = i0.ɵɵnextContext(2); i0.ɵɵproperty("disabled", ctx_r11.removeDisabled || ctx_r11.disableActionableElements); i0.ɵɵattribute("id", ctx_r11.removeId); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r11.removeLabel); } } function GridActionComponent_div_5_span_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span", 11); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r12 = i0.ɵɵnextContext(2); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r12.removeTooltip); } } function GridActionComponent_div_5_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 7); i0.ɵɵtemplate(1, GridActionComponent_div_5_button_1_Template, 3, 3, "button", 14); i0.ɵɵtemplate(2, GridActionComponent_div_5_span_2_Template, 2, 1, "span", 9); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r2.removeLabel); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r2.removeTooltip); } } const _c0 = [[["", 8, "custom-buttons-left"]], [["", 8, "custom-buttons"]], [["", 8, "custom-filters"]], [["", 8, "custom-buttons-search"]]]; const _c1 = [".custom-buttons-left", ".custom-buttons", ".custom-filters", ".custom-buttons-search"]; export class GridActionComponent { constructor() { this.id = 'lib-ga-search-id'; this.addId = 'lib-ga-add-id'; this.editId = 'lib-ga-edit-id'; this.removeId = 'lib-ga-remove-id'; this.searchQueryValue = ''; /** * ** Flag that indicates actionable elements should be disabled. */ this.disableActionableElements = false; /** * ** Proxy emitter from QuickFilters component. */ this.quickFilterChange = new EventEmitter(); this.search = new EventEmitter(); this.add = new EventEmitter(); /* eslint-disable @typescript-eslint/no-explicit-any */ this.edit = new EventEmitter(); this.remove = new EventEmitter(); } ngAfterViewInit() { this.setQueryValue(); } ngOnChanges(changes) { if (changes['searchQueryValue']) { this.setQueryValue(); } } get editDisabled() { return (CollectionsUtil.isNil(this.selectedValue) || (CollectionsUtil.isString(this.selectedValue) && this.selectedValue.length === 0) || this.disableEdit); } get addDisabled() { return this.disableAdd; } get removeDisabled() { return (CollectionsUtil.isNil(this.selectedValue) || (CollectionsUtil.isString(this.selectedValue) && this.selectedValue.length === 0) || this.disableRemove); } /** * vdk-search is being broken for one-way binding related to an input [searchQueryValue] * this fix is a workaround (adding a delay of 1 millisecond to set queryValue, looks like * needs to run in a separate thread) */ setQueryValue() { setTimeout(() => { this.queryValue = this.searchQueryValue; }, 1); } } GridActionComponent.ɵfac = function GridActionComponent_Factory(t) { return new (t || GridActionComponent)(); }; GridActionComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: GridActionComponent, selectors: [["lib-grid-action"]], inputs: { id: "id", addId: "addId", editId: "editId", removeId: "removeId", addLabel: "addLabel", editLabel: "editLabel", removeLabel: "removeLabel", addTooltip: "addTooltip", editTooltip: "editTooltip", removeTooltip: "removeTooltip", selectedValue: "selectedValue", searchQueryValue: "searchQueryValue", disableAdd: "disableAdd", disableEdit: "disableEdit", disableRemove: "disableRemove", quickFilters: "quickFilters", suppressQuickFilterChangeEvent: "suppressQuickFilterChangeEvent", disableActionableElements: "disableActionableElements" }, outputs: { quickFilterChange: "quickFilterChange", search: "search", add: "add", edit: "edit", remove: "remove" }, features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c1, decls: 13, vars: 9, consts: [[1, "grid-actions-container"], [1, "btn-actions-container", "btn-group"], ["class", "tooltip tooltip-sm tooltip-bottom-right", "role", "tooltip", "aria-haspopup", "true", 4, "ngIf"], [1, "btn-filters-container"], [3, "quickFilters", "suppressQuickFilterChangeEvent", "disableActionableElements", "quickFilterChange"], [1, "btn-search-container"], [3, "disabled", "searchQueryValue", "search"], ["role", "tooltip", "aria-haspopup", "true", 1, "tooltip", "tooltip-sm", "tooltip-bottom-right"], ["class", "btn btn-link btn-sm", "aria-label", "add", 3, "disabled", "click", 4, "ngIf"], ["class", "tooltip-content", 4, "ngIf"], ["aria-label", "add", 1, "btn", "btn-link", "btn-sm", 3, "disabled", "click"], [1, "tooltip-content"], ["class", "btn btn-link btn-sm", "aria-label", "edit", 3, "disabled", "click", 4, "ngIf"], ["aria-label", "edit", 1, "btn", "btn-link", "btn-sm", 3, "disabled", "click"], ["class", "btn btn-link btn-sm btn-link-red", "aria-label", "remove", 3, "disabled", "click", 4, "ngIf"], ["aria-label", "remove", 1, "btn", "btn-link", "btn-sm", "btn-link-red", 3, "disabled", "click"]], template: function GridActionComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵprojectionDef(_c0); i0.ɵɵelementStart(0, "div", 0)(1, "div", 1); i0.ɵɵprojection(2); i0.ɵɵtemplate(3, GridActionComponent_div_3_Template, 3, 2, "div", 2); i0.ɵɵtemplate(4, GridActionComponent_div_4_Template, 3, 2, "div", 2); i0.ɵɵtemplate(5, GridActionComponent_div_5_Template, 3, 2, "div", 2); i0.ɵɵprojection(6, 1); i0.ɵɵelementEnd(); i0.ɵɵelementStart(7, "div", 3)(8, "lib-quick-filters", 4); i0.ɵɵlistener("quickFilterChange", function GridActionComponent_Template_lib_quick_filters_quickFilterChange_8_listener($event) { return ctx.quickFilterChange.emit($event); }); i0.ɵɵelementEnd(); i0.ɵɵprojection(9, 2); i0.ɵɵelementEnd(); i0.ɵɵelementStart(10, "div", 5)(11, "vdk-search", 6); i0.ɵɵlistener("search", function GridActionComponent_Template_vdk_search_search_11_listener($event) { return ctx.search.next($event); }); i0.ɵɵelementEnd(); i0.ɵɵprojection(12, 3); i0.ɵɵelementEnd()(); } if (rf & 2) { i0.ɵɵadvance(3); i0.ɵɵproperty("ngIf", ctx.addLabel || ctx.addTooltip); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.editLabel || ctx.editTooltip); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.removeLabel || ctx.removeTooltip); i0.ɵɵadvance(3); i0.ɵɵproperty("quickFilters", ctx.quickFilters)("suppressQuickFilterChangeEvent", ctx.suppressQuickFilterChangeEvent)("disableActionableElements", ctx.disableActionableElements); i0.ɵɵadvance(3); i0.ɵɵproperty("disabled", ctx.disableActionableElements)("searchQueryValue", ctx.queryValue); i0.ɵɵattribute("id", ctx.id); } }, directives: [i1.NgIf, i2.QuickFiltersComponent, i3.VdkSearchComponent], styles: ["/*!\n * Copyright 2023-2025 Broadcom\n * SPDX-License-Identifier: Apache-2.0\n */.grid-actions-container{display:flex;justify-content:space-between;align-content:center;flex-direction:row;margin-top:20px;min-height:1.5rem}.grid-actions-container .btn-actions-container .btn{margin:.25rem 0;padding:0 .5rem}.grid-actions-container>.btn-actions-container button:first-child{padding-left:0}.grid-actions-container .btn-filters-container{display:flex;flex-grow:1;justify-content:flex-end}.grid-actions-container .btn-search-container{display:inline-flex}.grid-actions-container .btn-search-container .search-container{display:inline-flex;margin:0!important;transform:translateY(.15rem)}.grid-actions-container .btn-search-container .search-container input.clr-input{padding-top:2px}.grid-actions-container .tooltip-content{text-transform:initial;font-size:11px!important}.grid-actions-container>*{margin-right:1rem}.grid-actions-container>*:last-child{margin-right:0}.custom-buttons .btn:not(.custom-btn){margin:initial!important;padding:initial!important}.btn.btn-link.btn-link-red{color:#e62700}.btn.btn-link.btn-link-red:hover{color:#a32100}.btn.btn-link.btn-link-red:disabled{color:#565656}\n"], encapsulation: 2 }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GridActionComponent, [{ type: Component, args: [{ selector: 'lib-grid-action', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2023-2025 Broadcom\n ~ SPDX-License-Identifier: Apache-2.0\n -->\n\n<div class=\"grid-actions-container\">\n <div class=\"btn-actions-container btn-group\">\n <ng-content select=\".custom-buttons-left\"></ng-content>\n\n <div\n *ngIf=\"addLabel || addTooltip\"\n class=\"tooltip tooltip-sm tooltip-bottom-right\"\n role=\"tooltip\"\n aria-haspopup=\"true\"\n >\n <button\n *ngIf=\"addLabel\"\n class=\"btn btn-link btn-sm\"\n aria-label=\"add\"\n [attr.id]=\"addId\"\n [disabled]=\"addDisabled || disableActionableElements\"\n (click)=\"add.next(true)\"\n >\n <span>{{ addLabel }}</span>\n </button>\n\n <span *ngIf=\"addTooltip\" class=\"tooltip-content\"\n >{{ addTooltip }}</span\n >\n </div>\n\n <div\n *ngIf=\"editLabel || editTooltip\"\n class=\"tooltip tooltip-sm tooltip-bottom-right\"\n role=\"tooltip\"\n aria-haspopup=\"true\"\n >\n <button\n *ngIf=\"editLabel\"\n class=\"btn btn-link btn-sm\"\n aria-label=\"edit\"\n [attr.id]=\"editId\"\n [disabled]=\"editDisabled || disableActionableElements\"\n (click)=\"edit.next(selectedValue)\"\n >\n <span>{{ editLabel }}</span>\n </button>\n\n <span *ngIf=\"editTooltip\" class=\"tooltip-content\"\n >{{ editTooltip }}</span\n >\n </div>\n\n <div\n *ngIf=\"removeLabel || removeTooltip\"\n class=\"tooltip tooltip-sm tooltip-bottom-right\"\n role=\"tooltip\"\n aria-haspopup=\"true\"\n >\n <button\n *ngIf=\"removeLabel\"\n class=\"btn btn-link btn-sm btn-link-red\"\n aria-label=\"remove\"\n [attr.id]=\"removeId\"\n [disabled]=\"removeDisabled || disableActionableElements\"\n (click)=\"remove.next(selectedValue)\"\n >\n <span>{{ removeLabel }}</span>\n </button>\n\n <span *ngIf=\"removeTooltip\" class=\"tooltip-content\"\n >{{ removeTooltip }}</span\n >\n </div>\n\n <ng-content select=\".custom-buttons\"></ng-content>\n </div>\n\n <div class=\"btn-filters-container\">\n <lib-quick-filters\n [quickFilters]=\"quickFilters\"\n [suppressQuickFilterChangeEvent]=\"suppressQuickFilterChangeEvent\"\n [disableActionableElements]=\"disableActionableElements\"\n (quickFilterChange)=\"quickFilterChange.emit($event)\"\n ></lib-quick-filters>\n\n <ng-content select=\".custom-filters\"></ng-content>\n </div>\n\n <div class=\"btn-search-container\">\n <vdk-search\n [attr.id]=\"id\"\n [disabled]=\"disableActionableElements\"\n [searchQueryValue]=\"queryValue\"\n (search)=\"search.next($event)\"\n ></vdk-search>\n\n <ng-content select=\".custom-buttons-search\"></ng-content>\n </div>\n</div>\n", styles: ["/*!\n * Copyright 2023-2025 Broadcom\n * SPDX-License-Identifier: Apache-2.0\n */.grid-actions-container{display:flex;justify-content:space-between;align-content:center;flex-direction:row;margin-top:20px;min-height:1.5rem}.grid-actions-container .btn-actions-container .btn{margin:.25rem 0;padding:0 .5rem}.grid-actions-container>.btn-actions-container button:first-child{padding-left:0}.grid-actions-container .btn-filters-container{display:flex;flex-grow:1;justify-content:flex-end}.grid-actions-container .btn-search-container{display:inline-flex}.grid-actions-container .btn-search-container .search-container{display:inline-flex;margin:0!important;transform:translateY(.15rem)}.grid-actions-container .btn-search-container .search-container input.clr-input{padding-top:2px}.grid-actions-container .tooltip-content{text-transform:initial;font-size:11px!important}.grid-actions-container>*{margin-right:1rem}.grid-actions-container>*:last-child{margin-right:0}.custom-buttons .btn:not(.custom-btn){margin:initial!important;padding:initial!important}.btn.btn-link.btn-link-red{color:#e62700}.btn.btn-link.btn-link-red:hover{color:#a32100}.btn.btn-link.btn-link-red:disabled{color:#565656}\n"] }] }], null, { id: [{ type: Input }], addId: [{ type: Input }], editId: [{ type: Input }], removeId: [{ type: Input }], addLabel: [{ type: Input }], editLabel: [{ type: Input }], removeLabel: [{ type: Input }], addTooltip: [{ type: Input }], editTooltip: [{ type: Input }], removeTooltip: [{ type: Input }], selectedValue: [{ type: Input }], searchQueryValue: [{ type: Input }], disableAdd: [{ type: Input }], disableEdit: [{ type: Input }], disableRemove: [{ type: Input }], quickFilters: [{ type: Input }], suppressQuickFilterChangeEvent: [{ type: Input }], disableActionableElements: [{ type: Input }], quickFilterChange: [{ type: Output }], search: [{ type: Output }], add: [{ type: Output }], edit: [{ type: Output }], remove: [{ type: Output }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1hY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1waXBlbGluZXMvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9kYXRhLWdyaWQvZ3JpZC1hY3Rpb24vZ3JpZC1hY3Rpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1waXBlbGluZXMvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9kYXRhLWdyaWQvZ3JpZC1hY3Rpb24vZ3JpZC1hY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztJQ1EvQyxrQ0FPQztJQURHLDBLQUFTLGdCQUFTLElBQUksQ0FBQyxJQUFDO0lBRXhCLDRCQUFNO0lBQUEsWUFBYztJQUFBLGlCQUFPLEVBQUE7OztJQUgzQixpRkFBcUQ7SUFEckQsa0NBQWlCO0lBSVgsZUFBYztJQUFkLHFDQUFjOzs7SUFHeEIsZ0NBQ0s7SUFBQSxZQUFnQjtJQUFBLGlCQUNwQjs7O0lBREksZUFBZ0I7SUFBaEIsdUNBQWdCOzs7SUFsQnpCLDhCQUtDO0lBQ0csZ0ZBU1M7SUFFVCw0RUFFQztJQUNMLGlCQUFNOzs7SUFiRyxlQUFjO0lBQWQsc0NBQWM7SUFVWixlQUFnQjtJQUFoQix3Q0FBZ0I7Ozs7SUFXdkIsa0NBT0M7SUFERywyS0FBUyxzQ0FBd0IsSUFBQztJQUVsQyw0QkFBTTtJQUFBLFlBQWU7SUFBQSxpQkFBTyxFQUFBOzs7SUFINUIsa0ZBQXNEO0lBRHRELG1DQUFrQjtJQUlaLGVBQWU7SUFBZixz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MjAyMy0yMDI1IEJyb2FkY29tXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbGxlY3Rpb25zVXRpbCB9IGZyb20gJ0B2ZXJzYXRpbGVkYXRha2l0L3NoYXJlZCc7XG5cbmltcG9ydCB7IFF1aWNrRmlsdGVyQ2hhbmdlRXZlbnQsIFF1aWNrRmlsdGVycyB9IGZyb20gJy4uLy4uL3F1aWNrLWZpbHRlcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1ncmlkLWFjdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtYWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9ncmlkLWFjdGlvbi5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgR3JpZEFjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgaWQgPSAnbGliLWdhLXNlYXJjaC1pZCc7XG4gICAgQElucHV0KCkgYWRkSWQgPSAnbGliLWdhLWFkZC1pZCc7XG4gICAgQElucHV0KCkgZWRpdElkID0gJ2xpYi1nYS1lZGl0LWlkJztcbiAgICBASW5wdXQoKSByZW1vdmVJZCA9ICdsaWItZ2EtcmVtb3ZlLWlkJztcblxuICAgIEBJbnB1dCgpIGFkZExhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZWRpdExhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcmVtb3ZlTGFiZWw6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGFkZFRvb2x0aXA6IHN0cmluZztcbiAgICBASW5wdXQoKSBlZGl0VG9vbHRpcDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHJlbW92ZVRvb2x0aXA6IHN0cmluZztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgQElucHV0KCkgc2VsZWN0ZWRWYWx1ZTogYW55IHwgYW55W107XG4gICAgQElucHV0KCkgc2VhcmNoUXVlcnlWYWx1ZSA9ICcnO1xuXG4gICAgQElucHV0KCkgZGlzYWJsZUFkZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNhYmxlRWRpdDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNhYmxlUmVtb3ZlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogKiogUHJveHkgY29uZmlnIGZvciBRdWlja0ZpbHRlcnMgY29tcG9uZW50LlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHF1aWNrRmlsdGVyczogUXVpY2tGaWx0ZXJzO1xuICAgIEBJbnB1dCgpIHN1cHByZXNzUXVpY2tGaWx0ZXJDaGFuZ2VFdmVudDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqICoqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgYWN0aW9uYWJsZSBlbGVtZW50cyBzaG91bGQgYmUgZGlzYWJsZWQuXG4gICAgICovXG4gICAgQElucHV0KCkgZGlzYWJsZUFjdGlvbmFibGVFbGVtZW50cyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogKiogUHJveHkgZW1pdHRlciBmcm9tIFF1aWNrRmlsdGVycyBjb21wb25lbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHF1aWNrRmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxRdWlja0ZpbHRlckNoYW5nZUV2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIHNlYXJjaDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgICBAT3V0cHV0KCkgYWRkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuICAgIEBPdXRwdXQoKSBlZGl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSByZW1vdmU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5cbiAgICBxdWVyeVZhbHVlOiBzdHJpbmc7XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0UXVlcnlWYWx1ZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3NlYXJjaFF1ZXJ5VmFsdWUnXSkge1xuICAgICAgICAgICAgdGhpcy5zZXRRdWVyeVZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZWRpdERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgQ29sbGVjdGlvbnNVdGlsLmlzTmlsKHRoaXMuc2VsZWN0ZWRWYWx1ZSkgfHxcbiAgICAgICAgICAgIChDb2xsZWN0aW9uc1V0aWwuaXNTdHJpbmcodGhpcy5zZWxlY3RlZFZhbHVlKSAmJiB0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlRWRpdFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBhZGREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZUFkZDtcbiAgICB9XG5cbiAgICBnZXQgcmVtb3ZlRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBDb2xsZWN0aW9uc1V0aWwuaXNOaWwodGhpcy5zZWxlY3RlZFZhbHVlKSB8fFxuICAgICAgICAgICAgKENvbGxlY3Rpb25zVXRpbC5pc1N0cmluZyh0aGlzLnNlbGVjdGVkVmFsdWUpICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPT09IDApIHx8XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVSZW1vdmVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB2ZGstc2VhcmNoIGlzIGJlaW5nIGJyb2tlbiBmb3Igb25lLXdheSBiaW5kaW5nIHJlbGF0ZWQgdG8gYW4gaW5wdXQgW3NlYXJjaFF1ZXJ5VmFsdWVdXG4gICAgICogdGhpcyBmaXggaXMgYSB3b3JrYXJvdW5kIChhZGRpbmcgYSBkZWxheSBvZiAxIG1pbGxpc2Vjb25kIHRvIHNldCBxdWVyeVZhbHVlLCBsb29rcyBsaWtlXG4gICAgICogbmVlZHMgdG8gcnVuIGluIGEgc2VwYXJhdGUgdGhyZWFkKVxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0UXVlcnlWYWx1ZSgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5VmFsdWUgPSB0aGlzLnNlYXJjaFF1ZXJ5VmFsdWU7XG4gICAgICAgIH0sIDEpO1xuICAgIH1cbn1cbiIsIjwhLS1cbiAgIH4gQ29weXJpZ2h0IDIwMjMtMjAyNSBCcm9hZGNvbVxuICAgfiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICAtLT5cblxuPGRpdiBjbGFzcz1cImdyaWQtYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYnRuLWFjdGlvbnMtY29udGFpbmVyIGJ0bi1ncm91cFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIuY3VzdG9tLWJ1dHRvbnMtbGVmdFwiPjwvbmctY29udGVudD5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImFkZExhYmVsIHx8IGFkZFRvb2x0aXBcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0b29sdGlwIHRvb2x0aXAtc20gdG9vbHRpcC1ib3R0b20tcmlnaHRcIlxuICAgICAgICAgICAgcm9sZT1cInRvb2x0aXBcIlxuICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhZGRMYWJlbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiYWRkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJhZGRJZFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFkZERpc2FibGVkIHx8IGRpc2FibGVBY3Rpb25hYmxlRWxlbWVudHNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGQubmV4dCh0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgYWRkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJhZGRUb29sdGlwXCIgY2xhc3M9XCJ0b29sdGlwLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgID57eyBhZGRUb29sdGlwIH19PC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiZWRpdExhYmVsIHx8IGVkaXRUb29sdGlwXCJcbiAgICAgICAgICAgIGNsYXNzPVwidG9vbHRpcCB0b29sdGlwLXNtIHRvb2x0aXAtYm90dG9tLXJpZ2h0XCJcbiAgICAgICAgICAgIHJvbGU9XCJ0b29sdGlwXCJcbiAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZWRpdExhYmVsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc21cIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJlZGl0XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJlZGl0SWRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJlZGl0RGlzYWJsZWQgfHwgZGlzYWJsZUFjdGlvbmFibGVFbGVtZW50c1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXQubmV4dChzZWxlY3RlZFZhbHVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZWRpdExhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZWRpdFRvb2x0aXBcIiBjbGFzcz1cInRvb2x0aXAtY29udGVudFwiXG4gICAgICAgICAgICAgICAgPnt7IGVkaXRUb29sdGlwIH19PC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicmVtb3ZlTGFiZWwgfHwgcmVtb3ZlVG9vbHRpcFwiXG4gICAgICAgICAgICBjbGFzcz1cInRvb2x0aXAgdG9vbHRpcC1zbSB0b29sdGlwLWJvdHRvbS1yaWdodFwiXG4gICAgICAgICAgICByb2xlPVwidG9vbHRpcFwiXG4gICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cInJlbW92ZUxhYmVsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc20gYnRuLWxpbmstcmVkXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwicmVtb3ZlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJyZW1vdmVJZFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlbW92ZURpc2FibGVkIHx8IGRpc2FibGVBY3Rpb25hYmxlRWxlbWVudHNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUubmV4dChzZWxlY3RlZFZhbHVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgcmVtb3ZlTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZW1vdmVUb29sdGlwXCIgY2xhc3M9XCJ0b29sdGlwLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgID57eyByZW1vdmVUb29sdGlwIH19PC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIi5jdXN0b20tYnV0dG9uc1wiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJidG4tZmlsdGVycy1jb250YWluZXJcIj5cbiAgICAgICAgPGxpYi1xdWljay1maWx0ZXJzXG4gICAgICAgICAgICBbcXVpY2tGaWx0ZXJzXT1cInF1aWNrRmlsdGVyc1wiXG4gICAgICAgICAgICBbc3VwcHJlc3NRdWlja0ZpbHRlckNoYW5nZUV2ZW50XT1cInN1cHByZXNzUXVpY2tGaWx0ZXJDaGFuZ2VFdmVudFwiXG4gICAgICAgICAgICBbZGlzYWJsZUFjdGlvbmFibGVFbGVtZW50c109XCJkaXNhYmxlQWN0aW9uYWJsZUVsZW1lbnRzXCJcbiAgICAgICAgICAgIChxdWlja0ZpbHRlckNoYW5nZSk9XCJxdWlja0ZpbHRlckNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICA+PC9saWItcXVpY2stZmlsdGVycz5cblxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIuY3VzdG9tLWZpbHRlcnNcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYnRuLXNlYXJjaC1jb250YWluZXJcIj5cbiAgICAgICAgPHZkay1zZWFyY2hcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlQWN0aW9uYWJsZUVsZW1lbnRzXCJcbiAgICAgICAgICAgIFtzZWFyY2hRdWVyeVZhbHVlXT1cInF1ZXJ5VmFsdWVcIlxuICAgICAgICAgICAgKHNlYXJjaCk9XCJzZWFyY2gubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgPjwvdmRrLXNlYXJjaD5cblxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIuY3VzdG9tLWJ1dHRvbnMtc2VhcmNoXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=