keevo-components 1.8.408 → 1.8.410

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.
@@ -5,26 +5,66 @@ export class KvTreeViewComponent {
5
5
  constructor() {
6
6
  this.selectedFiles = [];
7
7
  this.selectionMode = 'checkbox';
8
+ this.filter = false;
9
+ this.filterPlaceholder = 'Pesquisar...';
10
+ this.scrollheight = '';
8
11
  this.selectedItems = new EventEmitter();
12
+ this.initialSelectionVerified = false;
9
13
  }
10
14
  ngOnInit() {
11
15
  }
16
+ ngOnChanges() {
17
+ if (!this.initialSelectionVerified && this.selectedFiles && this.selectedFiles.length > 2) {
18
+ this.verifyParentSelection(this.treeViewData);
19
+ this.initialSelectionVerified = true;
20
+ }
21
+ }
22
+ verifyParentSelection(nodes) {
23
+ nodes.forEach((node) => {
24
+ if (node.children && node.children.length > 0) {
25
+ const allChildrenSelected = this.areAllDescendantsSelected(node);
26
+ if (allChildrenSelected) {
27
+ // Se todos os filhos forem selecionados, seleciona o nó pai
28
+ this.selectedFiles.push({
29
+ label: node.label,
30
+ data: node.data,
31
+ key: node.key,
32
+ });
33
+ }
34
+ // Verifica recursivamente para os filhos
35
+ this.verifyParentSelection(node.children);
36
+ }
37
+ });
38
+ }
39
+ // Função auxiliar para verificar se todos os descendentes de um nó estão selecionados
40
+ areAllDescendantsSelected(node) {
41
+ if (!node.children || node.children.length === 0) {
42
+ return this.selectedFiles.some((selected) => selected.key === node.key);
43
+ }
44
+ return node.children.every(child => this.areAllDescendantsSelected(child));
45
+ }
12
46
  onSelectionChange() {
13
47
  this.selectedItems.emit(this.selectedFiles);
14
48
  }
15
49
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTreeViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
16
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: KvTreeViewComponent, selector: "kv-tree-view", inputs: { selectedFiles: "selectedFiles", selectionMode: "selectionMode", treeViewData: "treeViewData" }, outputs: { selectedItems: "selectedItems" }, ngImport: i0, template: "<div class=\"card flex flex-column align-items-center justify-content-center\">\r\n <p-tree\r\n [value]=\"treeViewData\"\r\n [selectionMode]=\"selectionMode\"\r\n class=\"w-full\"\r\n [(selection)]=\"selectedFiles\"\r\n (selectionChange)=\"onSelectionChange()\"\r\n ></p-tree>\r\n</div>", styles: [""], dependencies: [{ kind: "component", type: i1.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "loadingMode", "selection", "style", "styleClass", "contextMenu", "layout", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterBy", "filterMode", "filterPlaceholder", "filteredNodes", "filterLocale", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "indentation", "_templateMap", "trackBy", "virtualNodeHeight"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDrop", "onLazyLoad", "onScroll", "onScrollIndexChange", "onFilter"] }] }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: KvTreeViewComponent, selector: "kv-tree-view", inputs: { selectedFiles: "selectedFiles", selectionMode: "selectionMode", treeViewData: "treeViewData", filter: "filter", filterPlaceholder: "filterPlaceholder", scrollheight: "scrollheight" }, outputs: { selectedItems: "selectedItems" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"card flex flex-column align-items-center justify-content-center\">\r\n <p-tree\r\n [value]=\"treeViewData\"\r\n [selectionMode]=\"selectionMode\"\r\n class=\"w-full\"\r\n [(selection)]=\"selectedFiles\"\r\n (selectionChange)=\"onSelectionChange()\"\r\n [filter]=\"filter\" \r\n [filterPlaceholder]=\"filterPlaceholder\"\r\n [scrollHeight]=\"scrollheight\" \r\n emptyMessage=\"Nenhum registro encontrado\"\r\n >\r\n </p-tree>\r\n</div>\r\n\r\n\r\n", styles: [":host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{color:#fff;border-color:#004172;background:#004172}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}\n"], dependencies: [{ kind: "component", type: i1.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "loadingMode", "selection", "style", "styleClass", "contextMenu", "layout", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterBy", "filterMode", "filterPlaceholder", "filteredNodes", "filterLocale", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "indentation", "_templateMap", "trackBy", "virtualNodeHeight"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDrop", "onLazyLoad", "onScroll", "onScrollIndexChange", "onFilter"] }] }); }
17
51
  }
18
52
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTreeViewComponent, decorators: [{
19
53
  type: Component,
20
- args: [{ selector: 'kv-tree-view', template: "<div class=\"card flex flex-column align-items-center justify-content-center\">\r\n <p-tree\r\n [value]=\"treeViewData\"\r\n [selectionMode]=\"selectionMode\"\r\n class=\"w-full\"\r\n [(selection)]=\"selectedFiles\"\r\n (selectionChange)=\"onSelectionChange()\"\r\n ></p-tree>\r\n</div>" }]
54
+ args: [{ selector: 'kv-tree-view', template: "<div class=\"card flex flex-column align-items-center justify-content-center\">\r\n <p-tree\r\n [value]=\"treeViewData\"\r\n [selectionMode]=\"selectionMode\"\r\n class=\"w-full\"\r\n [(selection)]=\"selectedFiles\"\r\n (selectionChange)=\"onSelectionChange()\"\r\n [filter]=\"filter\" \r\n [filterPlaceholder]=\"filterPlaceholder\"\r\n [scrollHeight]=\"scrollheight\" \r\n emptyMessage=\"Nenhum registro encontrado\"\r\n >\r\n </p-tree>\r\n</div>\r\n\r\n\r\n", styles: [":host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{color:#fff;border-color:#004172;background:#004172}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}\n"] }]
21
55
  }], ctorParameters: () => [], propDecorators: { selectedFiles: [{
22
56
  type: Input
23
57
  }], selectionMode: [{
24
58
  type: Input
25
59
  }], treeViewData: [{
26
60
  type: Input
61
+ }], filter: [{
62
+ type: Input
63
+ }], filterPlaceholder: [{
64
+ type: Input
65
+ }], scrollheight: [{
66
+ type: Input
27
67
  }], selectedItems: [{
28
68
  type: Output
29
69
  }] } });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LXRyZWUtdmlldy9rdi10cmVlLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdHJlZS12aWV3L2t2LXRyZWUtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDOzs7QUFTdkIsTUFBTSxPQUFPLG1CQUFtQjtJQU85QjtRQU5TLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLGtCQUFhLEdBQVEsVUFBVSxDQUFDO1FBRy9CLGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFFaEQsQ0FBQztJQUVqQixRQUFRO0lBQ1IsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUM3QyxDQUFDOzhHQWRVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDJNQ2ZoQyx5VUFRTTs7MkZET08sbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGNBQWM7d0RBS2YsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3YtdHJlZS12aWV3JyxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtdHJlZS12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9rdi10cmVlLXZpZXcuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZUcmVlVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRGaWxlczogYW55ID0gW107XHJcbiAgQElucHV0KCkgc2VsZWN0aW9uTW9kZTogYW55ID0gJ2NoZWNrYm94JztcclxuICBASW5wdXQoKSB0cmVlVmlld0RhdGEhOiBUcmVlTm9kZVtdO1xyXG5cclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkRmlsZXMpXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkIGZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgIDxwLXRyZWVcclxuICAgICAgICBbdmFsdWVdPVwidHJlZVZpZXdEYXRhXCJcclxuICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcclxuICAgICAgICBjbGFzcz1cInctZnVsbFwiXHJcbiAgICAgICAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkRmlsZXNcIlxyXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoKVwiXHJcbiAgICA+PC9wLXRyZWU+XHJcbjwvZGl2PiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LXRyZWUtdmlldy9rdi10cmVlLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdHJlZS12aWV3L2t2LXRyZWUtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDOzs7QUFTdkIsTUFBTSxPQUFPLG1CQUFtQjtJQVk5QjtRQVhTLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLGtCQUFhLEdBQVEsVUFBVSxDQUFDO1FBRWhDLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsc0JBQWlCLEdBQVcsY0FBYyxDQUFDO1FBQzNDLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBRXpCLGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFaEUsNkJBQXdCLEdBQUcsS0FBSyxDQUFDO0lBRWpCLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQWlCO1FBQ3JDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUVqRSxJQUFJLG1CQUFtQixFQUFFLENBQUM7b0JBQ3hCLDREQUE0RDtvQkFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7d0JBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzt3QkFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO3dCQUNmLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztxQkFDZCxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCx5Q0FBeUM7Z0JBQ3pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFNUMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHNGQUFzRjtJQUN0Rix5QkFBeUIsQ0FBQyxJQUFjO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUM3QyxDQUFDOzhHQXhEVSxtQkFBbUI7a0dBQW5CLG1CQUFtQix3VENmaEMscWhCQWdCQTs7MkZERGEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGNBQWM7d0RBS2YsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2t2LXRyZWUtdmlldycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LXRyZWUtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4va3YtdHJlZS12aWV3LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEt2VHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkRmlsZXM6IGFueSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGU6IGFueSA9ICdjaGVja2JveCc7XHJcbiAgQElucHV0KCkgdHJlZVZpZXdEYXRhITogVHJlZU5vZGVbXTtcclxuICBASW5wdXQoKSBmaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBmaWx0ZXJQbGFjZWhvbGRlcjogc3RyaW5nID0gJ1Blc3F1aXNhci4uLic7XHJcbiAgQElucHV0KCkgc2Nyb2xsaGVpZ2h0OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBpbml0aWFsU2VsZWN0aW9uVmVyaWZpZWQgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pbml0aWFsU2VsZWN0aW9uVmVyaWZpZWQgJiYgdGhpcy5zZWxlY3RlZEZpbGVzICYmIHRoaXMuc2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgIHRoaXMudmVyaWZ5UGFyZW50U2VsZWN0aW9uKHRoaXMudHJlZVZpZXdEYXRhKTtcclxuICAgICAgdGhpcy5pbml0aWFsU2VsZWN0aW9uVmVyaWZpZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmVyaWZ5UGFyZW50U2VsZWN0aW9uKG5vZGVzOiBUcmVlTm9kZVtdKSB7XHJcbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IGFsbENoaWxkcmVuU2VsZWN0ZWQgPSB0aGlzLmFyZUFsbERlc2NlbmRhbnRzU2VsZWN0ZWQobm9kZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGFsbENoaWxkcmVuU2VsZWN0ZWQpIHtcclxuICAgICAgICAgIC8vIFNlIHRvZG9zIG9zIGZpbGhvcyBmb3JlbSBzZWxlY2lvbmFkb3MsIHNlbGVjaW9uYSBvIG7DsyBwYWlcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcy5wdXNoKHtcclxuICAgICAgICAgICAgbGFiZWw6IG5vZGUubGFiZWwsXHJcbiAgICAgICAgICAgIGRhdGE6IG5vZGUuZGF0YSxcclxuICAgICAgICAgICAga2V5OiBub2RlLmtleSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVmVyaWZpY2EgcmVjdXJzaXZhbWVudGUgcGFyYSBvcyBmaWxob3NcclxuICAgICAgICB0aGlzLnZlcmlmeVBhcmVudFNlbGVjdGlvbihub2RlLmNoaWxkcmVuKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gRnVuw6fDo28gYXV4aWxpYXIgcGFyYSB2ZXJpZmljYXIgc2UgdG9kb3Mgb3MgZGVzY2VuZGVudGVzIGRlIHVtIG7DsyBlc3TDo28gc2VsZWNpb25hZG9zXHJcbiAgYXJlQWxsRGVzY2VuZGFudHNTZWxlY3RlZChub2RlOiBUcmVlTm9kZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFub2RlLmNoaWxkcmVuIHx8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmlsZXMuc29tZSgoc2VsZWN0ZWQ6IGFueSkgPT4gc2VsZWN0ZWQua2V5ID09PSBub2RlLmtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uZXZlcnkoY2hpbGQgPT4gdGhpcy5hcmVBbGxEZXNjZW5kYW50c1NlbGVjdGVkKGNoaWxkKSk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZSgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWRGaWxlcylcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNhcmQgZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgPHAtdHJlZVxyXG4gICAgICAgIFt2YWx1ZV09XCJ0cmVlVmlld0RhdGFcIlxyXG4gICAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvbk1vZGVcIlxyXG4gICAgICAgIGNsYXNzPVwidy1mdWxsXCJcclxuICAgICAgICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRGaWxlc1wiXHJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgpXCJcclxuICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiIFxyXG4gICAgICAgIFtmaWx0ZXJQbGFjZWhvbGRlcl09XCJmaWx0ZXJQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxoZWlnaHRcIiBcclxuICAgICAgICBlbXB0eU1lc3NhZ2U9XCJOZW5odW0gcmVnaXN0cm8gZW5jb250cmFkb1wiXHJcbiAgICA+XHJcbiAgICA8L3AtdHJlZT5cclxuPC9kaXY+XHJcblxyXG5cclxuIl19