UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

126 lines 15.3 kB
/** * 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 { Directionality } from '@angular/cdk/bidi'; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentFactoryResolver, Directive, ElementRef, EventEmitter, Host, Input, Optional, Output, Renderer2, ViewContainerRef, ViewEncapsulation } from '@angular/core'; import { zoomBigMotion } from 'ng-zorro-antd/core/animation'; import { isPresetColor } from 'ng-zorro-antd/core/color'; import { NzNoAnimationDirective } from 'ng-zorro-antd/core/no-animation'; import { isTooltipEmpty, NzTooltipBaseComponent, NzTooltipBaseDirective } from './base'; export class NzTooltipDirective extends NzTooltipBaseDirective { constructor(elementRef, hostView, resolver, renderer, noAnimation) { super(elementRef, hostView, resolver, renderer, noAnimation); this.trigger = 'hover'; this.placement = 'top'; // eslint-disable-next-line @angular-eslint/no-output-rename this.visibleChange = new EventEmitter(); this.componentFactory = this.resolver.resolveComponentFactory(NzToolTipComponent); } getProxyPropertyMap() { return { nzTooltipColor: ['nzColor', () => this.nzTooltipColor] }; } } NzTooltipDirective.decorators = [ { type: Directive, args: [{ selector: '[nz-tooltip]', exportAs: 'nzTooltip', host: { '[class.ant-tooltip-open]': 'visible' } },] } ]; NzTooltipDirective.ctorParameters = () => [ { type: ElementRef }, { type: ViewContainerRef }, { type: ComponentFactoryResolver }, { type: Renderer2 }, { type: NzNoAnimationDirective, decorators: [{ type: Host }, { type: Optional }] } ]; NzTooltipDirective.propDecorators = { title: [{ type: Input, args: ['nzTooltipTitle',] }], directiveTitle: [{ type: Input, args: ['nz-tooltip',] }], trigger: [{ type: Input, args: ['nzTooltipTrigger',] }], placement: [{ type: Input, args: ['nzTooltipPlacement',] }], origin: [{ type: Input, args: ['nzTooltipOrigin',] }], visible: [{ type: Input, args: ['nzTooltipVisible',] }], mouseEnterDelay: [{ type: Input, args: ['nzTooltipMouseEnterDelay',] }], mouseLeaveDelay: [{ type: Input, args: ['nzTooltipMouseLeaveDelay',] }], overlayClassName: [{ type: Input, args: ['nzTooltipOverlayClassName',] }], overlayStyle: [{ type: Input, args: ['nzTooltipOverlayStyle',] }], nzTooltipColor: [{ type: Input }], visibleChange: [{ type: Output, args: ['nzTooltipVisibleChange',] }] }; export class NzToolTipComponent extends NzTooltipBaseComponent { constructor(cdr, directionality, noAnimation) { super(cdr, directionality, noAnimation); this.noAnimation = noAnimation; this.nzTitle = null; this._contentStyleMap = {}; } isEmpty() { return isTooltipEmpty(this.nzTitle); } updateStyles() { const isColorPreset = this.nzColor && isPresetColor(this.nzColor); this._classMap = { [this.nzOverlayClassName]: true, [`${this._prefix}-placement-${this.preferredPlacement}`]: true, [`${this._prefix}-${this.nzColor}`]: isColorPreset }; this._contentStyleMap = { backgroundColor: !!this.nzColor && !isColorPreset ? this.nzColor : null }; } } NzToolTipComponent.decorators = [ { type: Component, args: [{ selector: 'nz-tooltip', exportAs: 'nzTooltipComponent', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, animations: [zoomBigMotion], template: ` <ng-template #overlay="cdkConnectedOverlay" cdkConnectedOverlay nzConnectedOverlay [cdkConnectedOverlayOrigin]="origin" [cdkConnectedOverlayOpen]="_visible" [cdkConnectedOverlayPositions]="_positions" [cdkConnectedOverlayPush]="true" (overlayOutsideClick)="onClickOutside($event)" (detach)="hide()" (positionChange)="onPositionChange($event)" > <div class="ant-tooltip" [class.ant-tooltip-rtl]="dir === 'rtl'" [ngClass]="_classMap" [ngStyle]="nzOverlayStyle" [@.disabled]="noAnimation?.nzNoAnimation" [nzNoAnimation]="noAnimation?.nzNoAnimation" [@zoomBigMotion]="'active'" > <div class="ant-tooltip-content"> <div class="ant-tooltip-arrow"> <span class="ant-tooltip-arrow-content" [ngStyle]="_contentStyleMap"></span> </div> <div class="ant-tooltip-inner" [ngStyle]="_contentStyleMap"> <ng-container *nzStringTemplateOutlet="nzTitle">{{ nzTitle }}</ng-container> </div> </div> </div> </ng-template> `, preserveWhitespaces: false },] } ]; NzToolTipComponent.ctorParameters = () => [ { type: ChangeDetectorRef }, { type: Directionality, decorators: [{ type: Optional }] }, { type: NzNoAnimationDirective, decorators: [{ type: Host }, { type: Optional }] } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvdG9vbHRpcC90b29sdGlwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsd0JBQXdCLEVBQ3hCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLElBQUksRUFDSixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBaUIsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUd6RSxPQUFPLEVBQ0wsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixzQkFBc0IsRUFHdkIsTUFBTSxRQUFRLENBQUM7QUFTaEIsTUFBTSxPQUFPLGtCQUFtQixTQUFRLHNCQUFzQjtJQWtCNUQsWUFDRSxVQUFzQixFQUN0QixRQUEwQixFQUMxQixRQUFrQyxFQUNsQyxRQUFtQixFQUNDLFdBQW9DO1FBRXhELEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUF0QnBDLFlBQU8sR0FBc0IsT0FBTyxDQUFDO1FBQ25DLGNBQVMsR0FBdUIsS0FBSyxDQUFDO1FBU25FLDREQUE0RDtRQUNqQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFdkYscUJBQWdCLEdBQXlDLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQVVuSCxDQUFDO0lBRVMsbUJBQW1CO1FBQzNCLE9BQU87WUFDTCxjQUFjLEVBQUUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUN2RCxDQUFDO0lBQ0osQ0FBQzs7O1lBdkNGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsY0FBYztnQkFDeEIsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLElBQUksRUFBRTtvQkFDSiwwQkFBMEIsRUFBRSxTQUFTO2lCQUN0QzthQUNGOzs7WUE5QkMsVUFBVTtZQU9WLGdCQUFnQjtZQVRoQix3QkFBd0I7WUFReEIsU0FBUztZQU9GLHNCQUFzQix1QkF5QzFCLElBQUksWUFBSSxRQUFROzs7b0JBdEJsQixLQUFLLFNBQUMsZ0JBQWdCOzZCQUN0QixLQUFLLFNBQUMsWUFBWTtzQkFDbEIsS0FBSyxTQUFDLGtCQUFrQjt3QkFDeEIsS0FBSyxTQUFDLG9CQUFvQjtxQkFDMUIsS0FBSyxTQUFDLGlCQUFpQjtzQkFDdkIsS0FBSyxTQUFDLGtCQUFrQjs4QkFDeEIsS0FBSyxTQUFDLDBCQUEwQjs4QkFDaEMsS0FBSyxTQUFDLDBCQUEwQjsrQkFDaEMsS0FBSyxTQUFDLDJCQUEyQjsyQkFDakMsS0FBSyxTQUFDLHVCQUF1Qjs2QkFDN0IsS0FBSzs0QkFHTCxNQUFNLFNBQUMsd0JBQXdCOztBQThEbEMsTUFBTSxPQUFPLGtCQUFtQixTQUFRLHNCQUFzQjtJQU81RCxZQUNFLEdBQXNCLEVBQ1YsY0FBOEIsRUFDZixXQUFvQztRQUUvRCxLQUFLLENBQUMsR0FBRyxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUZiLGdCQUFXLEdBQVgsV0FBVyxDQUF5QjtRQVRqRSxZQUFPLEdBQW9CLElBQUksQ0FBQztRQUloQyxxQkFBZ0IsR0FBcUIsRUFBRSxDQUFDO0lBUXhDLENBQUM7SUFFUyxPQUFPO1FBQ2YsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxZQUFZO1FBQ1YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLElBQUk7WUFDL0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLGNBQWMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxJQUFJO1lBQzlELENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLGFBQWE7U0FDbkQsQ0FBQztRQUVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRztZQUN0QixlQUFlLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDeEUsQ0FBQztJQUNKLENBQUM7OztZQXhFRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtnQkFDckMsVUFBVSxFQUFFLENBQUMsYUFBYSxDQUFDO2dCQUMzQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NUO2dCQUNELG1CQUFtQixFQUFFLEtBQUs7YUFDM0I7OztZQS9HQyxpQkFBaUI7WUFIVixjQUFjLHVCQTRIbEIsUUFBUTtZQXZHSixzQkFBc0IsdUJBd0cxQixJQUFJLFlBQUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3QsXG4gIElucHV0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyB6b29tQmlnTW90aW9uIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL2FuaW1hdGlvbic7XG5pbXBvcnQgeyBpc1ByZXNldENvbG9yLCBOelByZXNldENvbG9yIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL2NvbG9yJztcbmltcG9ydCB7IE56Tm9BbmltYXRpb25EaXJlY3RpdmUgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvbm8tYW5pbWF0aW9uJztcbmltcG9ydCB7IE5nU3R5bGVJbnRlcmZhY2UsIE56VFNUeXBlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcblxuaW1wb3J0IHtcbiAgaXNUb29sdGlwRW1wdHksXG4gIE56VG9vbHRpcEJhc2VDb21wb25lbnQsXG4gIE56VG9vbHRpcEJhc2VEaXJlY3RpdmUsXG4gIE56VG9vbHRpcFRyaWdnZXIsXG4gIFByb3BlcnR5TWFwcGluZ1xufSBmcm9tICcuL2Jhc2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbnotdG9vbHRpcF0nLFxuICBleHBvcnRBczogJ256VG9vbHRpcCcsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLmFudC10b29sdGlwLW9wZW5dJzogJ3Zpc2libGUnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgTnpUb29sdGlwRGlyZWN0aXZlIGV4dGVuZHMgTnpUb29sdGlwQmFzZURpcmVjdGl2ZSB7XG4gIEBJbnB1dCgnbnpUb29sdGlwVGl0bGUnKSB0aXRsZT86IE56VFNUeXBlIHwgbnVsbDtcbiAgQElucHV0KCduei10b29sdGlwJykgZGlyZWN0aXZlVGl0bGU/OiBOelRTVHlwZSB8IG51bGw7XG4gIEBJbnB1dCgnbnpUb29sdGlwVHJpZ2dlcicpIHRyaWdnZXI/OiBOelRvb2x0aXBUcmlnZ2VyID0gJ2hvdmVyJztcbiAgQElucHV0KCduelRvb2x0aXBQbGFjZW1lbnQnKSBwbGFjZW1lbnQ/OiBzdHJpbmcgfCBzdHJpbmdbXSA9ICd0b3AnO1xuICBASW5wdXQoJ256VG9vbHRpcE9yaWdpbicpIG9yaWdpbj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBASW5wdXQoJ256VG9vbHRpcFZpc2libGUnKSB2aXNpYmxlPzogYm9vbGVhbjtcbiAgQElucHV0KCduelRvb2x0aXBNb3VzZUVudGVyRGVsYXknKSBtb3VzZUVudGVyRGVsYXk/OiBudW1iZXI7XG4gIEBJbnB1dCgnbnpUb29sdGlwTW91c2VMZWF2ZURlbGF5JykgbW91c2VMZWF2ZURlbGF5PzogbnVtYmVyO1xuICBASW5wdXQoJ256VG9vbHRpcE92ZXJsYXlDbGFzc05hbWUnKSBvdmVybGF5Q2xhc3NOYW1lPzogc3RyaW5nO1xuICBASW5wdXQoJ256VG9vbHRpcE92ZXJsYXlTdHlsZScpIG92ZXJsYXlTdHlsZT86IE5nU3R5bGVJbnRlcmZhY2U7XG4gIEBJbnB1dCgpIG56VG9vbHRpcENvbG9yPzogc3RyaW5nO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LXJlbmFtZVxuICBAT3V0cHV0KCduelRvb2x0aXBWaXNpYmxlQ2hhbmdlJykgcmVhZG9ubHkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBjb21wb25lbnRGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PE56VG9vbFRpcENvbXBvbmVudD4gPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE56VG9vbFRpcENvbXBvbmVudCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBob3N0VmlldzogVmlld0NvbnRhaW5lclJlZixcbiAgICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgQEhvc3QoKSBAT3B0aW9uYWwoKSBub0FuaW1hdGlvbj86IE56Tm9BbmltYXRpb25EaXJlY3RpdmVcbiAgKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZiwgaG9zdFZpZXcsIHJlc29sdmVyLCByZW5kZXJlciwgbm9BbmltYXRpb24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFByb3h5UHJvcGVydHlNYXAoKTogUHJvcGVydHlNYXBwaW5nIHtcbiAgICByZXR1cm4ge1xuICAgICAgbnpUb29sdGlwQ29sb3I6IFsnbnpDb2xvcicsICgpID0+IHRoaXMubnpUb29sdGlwQ29sb3JdXG4gICAgfTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduei10b29sdGlwJyxcbiAgZXhwb3J0QXM6ICduelRvb2x0aXBDb21wb25lbnQnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgYW5pbWF0aW9uczogW3pvb21CaWdNb3Rpb25dLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgI292ZXJsYXk9XCJjZGtDb25uZWN0ZWRPdmVybGF5XCJcbiAgICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgICAgIG56Q29ubmVjdGVkT3ZlcmxheVxuICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwib3JpZ2luXCJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJfdmlzaWJsZVwiXG4gICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJfcG9zaXRpb25zXCJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5UHVzaF09XCJ0cnVlXCJcbiAgICAgIChvdmVybGF5T3V0c2lkZUNsaWNrKT1cIm9uQ2xpY2tPdXRzaWRlKCRldmVudClcIlxuICAgICAgKGRldGFjaCk9XCJoaWRlKClcIlxuICAgICAgKHBvc2l0aW9uQ2hhbmdlKT1cIm9uUG9zaXRpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImFudC10b29sdGlwXCJcbiAgICAgICAgW2NsYXNzLmFudC10b29sdGlwLXJ0bF09XCJkaXIgPT09ICdydGwnXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiX2NsYXNzTWFwXCJcbiAgICAgICAgW25nU3R5bGVdPVwibnpPdmVybGF5U3R5bGVcIlxuICAgICAgICBbQC5kaXNhYmxlZF09XCJub0FuaW1hdGlvbj8ubnpOb0FuaW1hdGlvblwiXG4gICAgICAgIFtuek5vQW5pbWF0aW9uXT1cIm5vQW5pbWF0aW9uPy5uek5vQW5pbWF0aW9uXCJcbiAgICAgICAgW0B6b29tQmlnTW90aW9uXT1cIidhY3RpdmUnXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFudC10b29sdGlwLWNvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYW50LXRvb2x0aXAtYXJyb3dcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYW50LXRvb2x0aXAtYXJyb3ctY29udGVudFwiIFtuZ1N0eWxlXT1cIl9jb250ZW50U3R5bGVNYXBcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFudC10b29sdGlwLWlubmVyXCIgW25nU3R5bGVdPVwiX2NvbnRlbnRTdHlsZU1hcFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbnpTdHJpbmdUZW1wbGF0ZU91dGxldD1cIm56VGl0bGVcIj57eyBuelRpdGxlIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgYCxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2Vcbn0pXG5leHBvcnQgY2xhc3MgTnpUb29sVGlwQ29tcG9uZW50IGV4dGVuZHMgTnpUb29sdGlwQmFzZUNvbXBvbmVudCB7XG4gIG56VGl0bGU6IE56VFNUeXBlIHwgbnVsbCA9IG51bGw7XG5cbiAgbnpDb2xvcj86IHN0cmluZyB8IE56UHJlc2V0Q29sb3I7XG5cbiAgX2NvbnRlbnRTdHlsZU1hcDogTmdTdHlsZUludGVyZmFjZSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgZGlyZWN0aW9uYWxpdHk6IERpcmVjdGlvbmFsaXR5LFxuICAgIEBIb3N0KCkgQE9wdGlvbmFsKCkgcHVibGljIG5vQW5pbWF0aW9uPzogTnpOb0FuaW1hdGlvbkRpcmVjdGl2ZVxuICApIHtcbiAgICBzdXBlcihjZHIsIGRpcmVjdGlvbmFsaXR5LCBub0FuaW1hdGlvbik7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNUb29sdGlwRW1wdHkodGhpcy5uelRpdGxlKTtcbiAgfVxuXG4gIHVwZGF0ZVN0eWxlcygpOiB2b2lkIHtcbiAgICBjb25zdCBpc0NvbG9yUHJlc2V0ID0gdGhpcy5uekNvbG9yICYmIGlzUHJlc2V0Q29sb3IodGhpcy5uekNvbG9yKTtcblxuICAgIHRoaXMuX2NsYXNzTWFwID0ge1xuICAgICAgW3RoaXMubnpPdmVybGF5Q2xhc3NOYW1lXTogdHJ1ZSxcbiAgICAgIFtgJHt0aGlzLl9wcmVmaXh9LXBsYWNlbWVudC0ke3RoaXMucHJlZmVycmVkUGxhY2VtZW50fWBdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMuX3ByZWZpeH0tJHt0aGlzLm56Q29sb3J9YF06IGlzQ29sb3JQcmVzZXRcbiAgICB9O1xuXG4gICAgdGhpcy5fY29udGVudFN0eWxlTWFwID0ge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAhIXRoaXMubnpDb2xvciAmJiAhaXNDb2xvclByZXNldCA/IHRoaXMubnpDb2xvciA6IG51bGxcbiAgICB9O1xuICB9XG59XG4iXX0=