ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
122 lines • 14.7 kB
JavaScript
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
import { CdkTree, CdkTreeNodeOutletContext } from '@angular/cdk/tree';
import { ChangeDetectionStrategy, Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';
import { NzTreeNodeOutletDirective } from './outlet';
import { NzTreeView } from './tree';
import * as i0 from "@angular/core";
import * as i1 from "@angular/cdk/scrolling";
import * as i2 from "./node";
import * as i3 from "./outlet";
const DEFAULT_SIZE = 28;
export class NzTreeVirtualScrollViewComponent extends NzTreeView {
constructor() {
super(...arguments);
this.nzItemSize = DEFAULT_SIZE;
this.nzMinBufferPx = DEFAULT_SIZE * 5;
this.nzMaxBufferPx = DEFAULT_SIZE * 10;
this.nodes = [];
this.innerTrackBy = i => i;
}
ngOnChanges(changes) {
if (changes.trackBy) {
if (typeof changes.trackBy.currentValue === 'function') {
this.innerTrackBy = (index, n) => this.trackBy(index, n.data);
}
else {
this.innerTrackBy = i => i;
}
}
}
renderNodeChanges(data) {
this.nodes = new Array(...data).map((n, i) => this.createNode(n, i));
this._dataSourceChanged.next();
this.changeDetectorRef.markForCheck();
}
createNode(nodeData, index) {
const node = this._getNodeDef(nodeData, index);
const context = new CdkTreeNodeOutletContext(nodeData);
if (this.treeControl.getLevel) {
context.level = this.treeControl.getLevel(nodeData);
}
else {
context.level = 0;
}
return {
data: nodeData,
context,
nodeDef: node
};
}
}
NzTreeVirtualScrollViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NzTreeVirtualScrollViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
NzTreeVirtualScrollViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NzTreeVirtualScrollViewComponent, selector: "nz-tree-virtual-scroll-view", inputs: { nzItemSize: "nzItemSize", nzMinBufferPx: "nzMinBufferPx", nzMaxBufferPx: "nzMaxBufferPx", trackBy: "trackBy" }, host: { properties: { "class.ant-tree-block-node": "nzDirectoryTree || nzBlockNode", "class.ant-tree-directory": "nzDirectoryTree", "class.ant-tree-rtl": "dir === 'rtl'" }, classAttribute: "ant-tree" }, providers: [
{ provide: NzTreeView, useExisting: NzTreeVirtualScrollViewComponent },
{ provide: CdkTree, useExisting: NzTreeVirtualScrollViewComponent }
], viewQueries: [{ propertyName: "nodeOutlet", first: true, predicate: NzTreeNodeOutletDirective, descendants: true, static: true }, { propertyName: "virtualScrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true, static: true }], exportAs: ["nzTreeVirtualScrollView"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
<div class="ant-tree-list">
<cdk-virtual-scroll-viewport
class="ant-tree-list-holder"
[itemSize]="nzItemSize"
[minBufferPx]="nzMinBufferPx"
[maxBufferPx]="nzMaxBufferPx"
>
<ng-container *cdkVirtualFor="let item of nodes; let i = index; trackBy: innerTrackBy">
<ng-template nzTreeVirtualScrollNodeOutlet [data]="item"></ng-template>
</ng-container>
</cdk-virtual-scroll-viewport>
</div>
<ng-container nzTreeNodeOutlet></ng-container>
`, isInline: true, components: [{ type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], directives: [{ type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { type: i2.NzTreeVirtualScrollNodeOutletDirective, selector: "[nzTreeVirtualScrollNodeOutlet]", inputs: ["data"] }, { type: i3.NzTreeNodeOutletDirective, selector: "[nzTreeNodeOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NzTreeVirtualScrollViewComponent, decorators: [{
type: Component,
args: [{
selector: 'nz-tree-virtual-scroll-view',
exportAs: 'nzTreeVirtualScrollView',
template: `
<div class="ant-tree-list">
<cdk-virtual-scroll-viewport
class="ant-tree-list-holder"
[itemSize]="nzItemSize"
[minBufferPx]="nzMinBufferPx"
[maxBufferPx]="nzMaxBufferPx"
>
<ng-container *cdkVirtualFor="let item of nodes; let i = index; trackBy: innerTrackBy">
<ng-template nzTreeVirtualScrollNodeOutlet [data]="item"></ng-template>
</ng-container>
</cdk-virtual-scroll-viewport>
</div>
<ng-container nzTreeNodeOutlet></ng-container>
`,
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [
{ provide: NzTreeView, useExisting: NzTreeVirtualScrollViewComponent },
{ provide: CdkTree, useExisting: NzTreeVirtualScrollViewComponent }
],
host: {
class: 'ant-tree',
'[class.ant-tree-block-node]': 'nzDirectoryTree || nzBlockNode',
'[class.ant-tree-directory]': 'nzDirectoryTree',
'[class.ant-tree-rtl]': `dir === 'rtl'`
}
}]
}], propDecorators: { nodeOutlet: [{
type: ViewChild,
args: [NzTreeNodeOutletDirective, { static: true }]
}], virtualScrollViewport: [{
type: ViewChild,
args: [CdkVirtualScrollViewport, { static: true }]
}], nzItemSize: [{
type: Input
}], nzMinBufferPx: [{
type: Input
}], nzMaxBufferPx: [{
type: Input
}], trackBy: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aXJ0dWFsLXNjcm9sbC12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50cy90cmVlLXZpZXcvdHJlZS12aXJ0dWFsLXNjcm9sbC12aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxLQUFLLEVBSUwsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7Ozs7QUFFcEMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBaUN4QixNQUFNLE9BQU8sZ0NBQW9DLFNBQVEsVUFBYTtJQS9CdEU7O1FBbUNXLGVBQVUsR0FBRyxZQUFZLENBQUM7UUFDMUIsa0JBQWEsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLGtCQUFhLEdBQUcsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUUzQyxVQUFLLEdBQW9DLEVBQUUsQ0FBQztRQUM1QyxpQkFBWSxHQUE4QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQWdDbEU7SUE5QkMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUNuQixJQUFJLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEtBQUssVUFBVSxFQUFFO2dCQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsS0FBYSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3ZFO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDNUI7U0FDRjtJQUNILENBQUM7SUFFUSxpQkFBaUIsQ0FBQyxJQUF3QjtRQUNqRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFTyxVQUFVLENBQUMsUUFBVyxFQUFFLEtBQWE7UUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSx3QkFBd0IsQ0FBSSxRQUFRLENBQUMsQ0FBQztRQUMxRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ25CO1FBQ0QsT0FBTztZQUNMLElBQUksRUFBRSxRQUFRO1lBQ2QsT0FBTztZQUNQLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztJQUNKLENBQUM7OzhIQXhDVSxnQ0FBZ0M7a0hBQWhDLGdDQUFnQywyWEFYaEM7UUFDVCxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdDQUFnQyxFQUFFO1FBQ3RFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0NBQWdDLEVBQUU7S0FDcEUsc0VBU1UseUJBQXlCLHNHQUN6Qix3QkFBd0IsaUpBOUJ6Qjs7Ozs7Ozs7Ozs7Ozs7R0FjVDs0RkFjVSxnQ0FBZ0M7a0JBL0I1QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7R0FjVDtvQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFNBQVMsRUFBRTt3QkFDVCxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxrQ0FBa0MsRUFBRTt3QkFDdEUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsa0NBQWtDLEVBQUU7cUJBQ3BFO29CQUNELElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsVUFBVTt3QkFDakIsNkJBQTZCLEVBQUUsZ0NBQWdDO3dCQUMvRCw0QkFBNEIsRUFBRSxpQkFBaUI7d0JBQy9DLHNCQUFzQixFQUFFLGVBQWU7cUJBQ3hDO2lCQUNGOzhCQUVrRSxVQUFVO3NCQUExRSxTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDVSxxQkFBcUI7c0JBQXBGLFNBQVM7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUU1QyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDWSxPQUFPO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBDZGtUcmVlLCBDZGtUcmVlTm9kZU91dGxldENvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUcmFja0J5RnVuY3Rpb24sXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE56VHJlZVZpcnR1YWxOb2RlRGF0YSB9IGZyb20gJy4vbm9kZSc7XG5pbXBvcnQgeyBOelRyZWVOb2RlT3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi9vdXRsZXQnO1xuaW1wb3J0IHsgTnpUcmVlVmlldyB9IGZyb20gJy4vdHJlZSc7XG5cbmNvbnN0IERFRkFVTFRfU0laRSA9IDI4O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduei10cmVlLXZpcnR1YWwtc2Nyb2xsLXZpZXcnLFxuICBleHBvcnRBczogJ256VHJlZVZpcnR1YWxTY3JvbGxWaWV3JyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiYW50LXRyZWUtbGlzdFwiPlxuICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICBjbGFzcz1cImFudC10cmVlLWxpc3QtaG9sZGVyXCJcbiAgICAgICAgW2l0ZW1TaXplXT1cIm56SXRlbVNpemVcIlxuICAgICAgICBbbWluQnVmZmVyUHhdPVwibnpNaW5CdWZmZXJQeFwiXG4gICAgICAgIFttYXhCdWZmZXJQeF09XCJuek1heEJ1ZmZlclB4XCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIG5vZGVzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiBpbm5lclRyYWNrQnlcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgbnpUcmVlVmlydHVhbFNjcm9sbE5vZGVPdXRsZXQgW2RhdGFdPVwiaXRlbVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciBuelRyZWVOb2RlT3V0bGV0PjwvbmctY29udGFpbmVyPlxuICBgLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBOelRyZWVWaWV3LCB1c2VFeGlzdGluZzogTnpUcmVlVmlydHVhbFNjcm9sbFZpZXdDb21wb25lbnQgfSxcbiAgICB7IHByb3ZpZGU6IENka1RyZWUsIHVzZUV4aXN0aW5nOiBOelRyZWVWaXJ0dWFsU2Nyb2xsVmlld0NvbXBvbmVudCB9XG4gIF0sXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2FudC10cmVlJyxcbiAgICAnW2NsYXNzLmFudC10cmVlLWJsb2NrLW5vZGVdJzogJ256RGlyZWN0b3J5VHJlZSB8fCBuekJsb2NrTm9kZScsXG4gICAgJ1tjbGFzcy5hbnQtdHJlZS1kaXJlY3RvcnldJzogJ256RGlyZWN0b3J5VHJlZScsXG4gICAgJ1tjbGFzcy5hbnQtdHJlZS1ydGxdJzogYGRpciA9PT0gJ3J0bCdgXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgTnpUcmVlVmlydHVhbFNjcm9sbFZpZXdDb21wb25lbnQ8VD4gZXh0ZW5kcyBOelRyZWVWaWV3PFQ+IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQFZpZXdDaGlsZChOelRyZWVOb2RlT3V0bGV0RGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSByZWFkb25seSBub2RlT3V0bGV0ITogTnpUcmVlTm9kZU91dGxldERpcmVjdGl2ZTtcbiAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIHsgc3RhdGljOiB0cnVlIH0pIHJlYWRvbmx5IHZpcnR1YWxTY3JvbGxWaWV3cG9ydCE6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICBASW5wdXQoKSBuekl0ZW1TaXplID0gREVGQVVMVF9TSVpFO1xuICBASW5wdXQoKSBuek1pbkJ1ZmZlclB4ID0gREVGQVVMVF9TSVpFICogNTtcbiAgQElucHV0KCkgbnpNYXhCdWZmZXJQeCA9IERFRkFVTFRfU0laRSAqIDEwO1xuICBASW5wdXQoKSBvdmVycmlkZSB0cmFja0J5ITogVHJhY2tCeUZ1bmN0aW9uPFQ+O1xuICBub2RlczogQXJyYXk8TnpUcmVlVmlydHVhbE5vZGVEYXRhPFQ+PiA9IFtdO1xuICBpbm5lclRyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxOelRyZWVWaXJ0dWFsTm9kZURhdGE8VD4+ID0gaSA9PiBpO1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy50cmFja0J5KSB7XG4gICAgICBpZiAodHlwZW9mIGNoYW5nZXMudHJhY2tCeS5jdXJyZW50VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5pbm5lclRyYWNrQnkgPSAoaW5kZXg6IG51bWJlciwgbikgPT4gdGhpcy50cmFja0J5KGluZGV4LCBuLmRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbm5lclRyYWNrQnkgPSBpID0+IGk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyTm9kZUNoYW5nZXMoZGF0YTogVFtdIHwgcmVhZG9ubHkgVFtdKTogdm9pZCB7XG4gICAgdGhpcy5ub2RlcyA9IG5ldyBBcnJheSguLi5kYXRhKS5tYXAoKG4sIGkpID0+IHRoaXMuY3JlYXRlTm9kZShuLCBpKSk7XG4gICAgdGhpcy5fZGF0YVNvdXJjZUNoYW5nZWQubmV4dCgpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5vZGUobm9kZURhdGE6IFQsIGluZGV4OiBudW1iZXIpOiBOelRyZWVWaXJ0dWFsTm9kZURhdGE8VD4ge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9nZXROb2RlRGVmKG5vZGVEYXRhLCBpbmRleCk7XG4gICAgY29uc3QgY29udGV4dCA9IG5ldyBDZGtUcmVlTm9kZU91dGxldENvbnRleHQ8VD4obm9kZURhdGEpO1xuICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmdldExldmVsKSB7XG4gICAgICBjb250ZXh0LmxldmVsID0gdGhpcy50cmVlQ29udHJvbC5nZXRMZXZlbChub2RlRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQubGV2ZWwgPSAwO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogbm9kZURhdGEsXG4gICAgICBjb250ZXh0LFxuICAgICAgbm9kZURlZjogbm9kZVxuICAgIH07XG4gIH1cbn1cbiJdfQ==