UNPKG

@taiga-ui/kit

Version:

Taiga UI Angular main components kit

97 lines 23.8 kB
import { ChangeDetectionStrategy, Component, Directive, inject, Input, NgZone, ViewEncapsulation, } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { WaMutationObserverService, WA_MUTATION_OBSERVER_INIT, } from '@ng-web-apis/mutation-observer'; import { WaResizeObserverService } from '@ng-web-apis/resize-observer'; import { tuiZonefree } from '@taiga-ui/cdk/observables'; import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom'; import { tuiWithStyles } from '@taiga-ui/cdk/utils/miscellaneous'; import { filter, fromEvent, merge } from 'rxjs'; import * as i0 from "@angular/core"; const BUFFER = 1; // buffer for rounding issues class TuiFadeStyles { static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiFadeStyles, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiFadeStyles, isStandalone: true, selector: "ng-component", host: { classAttribute: "tui-fade-styles" }, ngImport: i0, template: '', isInline: true, styles: ["[tuiFade]{scrollbar-width:none;-ms-overflow-style:none;transition-property:-webkit-mask-position;transition-property:mask-position;transition-property:mask-position,-webkit-mask-position;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;overflow:auto;text-overflow:unset!important;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}[tuiFade]::-webkit-scrollbar,[tuiFade]::-webkit-scrollbar-thumb{display:none}[tuiFade]:not([data-orientation=vertical]){overflow-y:hidden;-webkit-mask-image:linear-gradient(to right,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset))),linear-gradient(to left,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset))),linear-gradient(#000,#000);mask-image:linear-gradient(to right,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset))),linear-gradient(to left,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset))),linear-gradient(#000,#000);-webkit-mask-position:calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px) bottom,calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px) bottom,top;mask-position:calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px) bottom,calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px) bottom,top;-webkit-mask-size:calc(51% + var(--t-fade-size) + var(--t-fade-offset)) var(--t-line-height, 100%),calc(50% + var(--t-fade-size) + var(--t-fade-offset)) var(--t-line-height, 100%),100% calc(100% - var(--t-line-height, 100%));mask-size:calc(51% + var(--t-fade-size) + var(--t-fade-offset)) var(--t-line-height, 100%),calc(50% + var(--t-fade-size) + var(--t-fade-offset)) var(--t-line-height, 100%),100% calc(100% - var(--t-line-height, 100%))}[tuiFade]:not([data-orientation=vertical])._start{-webkit-mask-position:left bottom,calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px) bottom,top;mask-position:left bottom,calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px) bottom,top}[tuiFade]:not([data-orientation=vertical])._end{-webkit-mask-position:calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px) bottom,right bottom,top;mask-position:calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px) bottom,right bottom,top}[tuiFade]:not([data-orientation=vertical])._start._end{-webkit-mask-position:left bottom,right bottom,top;mask-position:left bottom,right bottom,top}[dir=rtl] [tuiFade]:not([data-orientation=vertical])._end{-webkit-mask-position:left bottom,calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px) bottom,top;mask-position:left bottom,calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px) bottom,top}[dir=rtl] [tuiFade]:not([data-orientation=vertical])._start{-webkit-mask-position:calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px) bottom,right bottom,top;mask-position:calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px) bottom,right bottom,top}[dir=rtl] [tuiFade]:not([data-orientation=vertical])._start._end{-webkit-mask-position:left bottom,right bottom,top;mask-position:left bottom,right bottom,top}[tuiFade][data-orientation=vertical]{overflow-x:hidden;-webkit-mask-image:linear-gradient(to bottom,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset))),linear-gradient(to top,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset)));mask-image:linear-gradient(to bottom,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset))),linear-gradient(to top,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset)));-webkit-mask-position:left calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px),left calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px);mask-position:left calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px),left calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px);-webkit-mask-size:100% calc(51% + var(--t-fade-size) + var(--t-fade-offset));mask-size:100% calc(51% + var(--t-fade-size) + var(--t-fade-offset))}[tuiFade][data-orientation=vertical]._start{-webkit-mask-position:left top,left calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px);mask-position:left top,left calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px)}[tuiFade][data-orientation=vertical]._end{-webkit-mask-position:left calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px),left bottom;mask-position:left calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px),left bottom}[tuiFade][data-orientation=vertical]._start._end{-webkit-mask-position:left top,left bottom;mask-position:left top,left bottom}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiFadeStyles, decorators: [{ type: Component, args: [{ standalone: true, template: '', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'tui-fade-styles', }, styles: ["[tuiFade]{scrollbar-width:none;-ms-overflow-style:none;transition-property:-webkit-mask-position;transition-property:mask-position;transition-property:mask-position,-webkit-mask-position;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;overflow:auto;text-overflow:unset!important;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}[tuiFade]::-webkit-scrollbar,[tuiFade]::-webkit-scrollbar-thumb{display:none}[tuiFade]:not([data-orientation=vertical]){overflow-y:hidden;-webkit-mask-image:linear-gradient(to right,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset))),linear-gradient(to left,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset))),linear-gradient(#000,#000);mask-image:linear-gradient(to right,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset))),linear-gradient(to left,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset))),linear-gradient(#000,#000);-webkit-mask-position:calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px) bottom,calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px) bottom,top;mask-position:calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px) bottom,calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px) bottom,top;-webkit-mask-size:calc(51% + var(--t-fade-size) + var(--t-fade-offset)) var(--t-line-height, 100%),calc(50% + var(--t-fade-size) + var(--t-fade-offset)) var(--t-line-height, 100%),100% calc(100% - var(--t-line-height, 100%));mask-size:calc(51% + var(--t-fade-size) + var(--t-fade-offset)) var(--t-line-height, 100%),calc(50% + var(--t-fade-size) + var(--t-fade-offset)) var(--t-line-height, 100%),100% calc(100% - var(--t-line-height, 100%))}[tuiFade]:not([data-orientation=vertical])._start{-webkit-mask-position:left bottom,calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px) bottom,top;mask-position:left bottom,calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px) bottom,top}[tuiFade]:not([data-orientation=vertical])._end{-webkit-mask-position:calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px) bottom,right bottom,top;mask-position:calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px) bottom,right bottom,top}[tuiFade]:not([data-orientation=vertical])._start._end{-webkit-mask-position:left bottom,right bottom,top;mask-position:left bottom,right bottom,top}[dir=rtl] [tuiFade]:not([data-orientation=vertical])._end{-webkit-mask-position:left bottom,calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px) bottom,top;mask-position:left bottom,calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px) bottom,top}[dir=rtl] [tuiFade]:not([data-orientation=vertical])._start{-webkit-mask-position:calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px) bottom,right bottom,top;mask-position:calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px) bottom,right bottom,top}[dir=rtl] [tuiFade]:not([data-orientation=vertical])._start._end{-webkit-mask-position:left bottom,right bottom,top;mask-position:left bottom,right bottom,top}[tuiFade][data-orientation=vertical]{overflow-x:hidden;-webkit-mask-image:linear-gradient(to bottom,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset))),linear-gradient(to top,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset)));mask-image:linear-gradient(to bottom,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset))),linear-gradient(to top,transparent var(--t-fade-offset),#000 calc(var(--t-fade-size) + var(--t-fade-offset)));-webkit-mask-position:left calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px),left calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px);mask-position:left calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px),left calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px);-webkit-mask-size:100% calc(51% + var(--t-fade-size) + var(--t-fade-offset));mask-size:100% calc(51% + var(--t-fade-size) + var(--t-fade-offset))}[tuiFade][data-orientation=vertical]._start{-webkit-mask-position:left top,left calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px);mask-position:left top,left calc(100% + var(--t-fade-size) + var(--t-fade-offset) - 1px)}[tuiFade][data-orientation=vertical]._end{-webkit-mask-position:left calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px),left bottom;mask-position:left calc(-1 * var(--t-fade-size) - var(--t-fade-offset) + 1px),left bottom}[tuiFade][data-orientation=vertical]._start._end{-webkit-mask-position:left top,left bottom;mask-position:left top,left bottom}\n"] }] }] }); class TuiFade { constructor() { // TODO: Remove when lh CSS units are supported: https://caniuse.com/mdn-css_types_length_lh this.lineHeight = null; this.size = '1.5em'; this.offset = '0em'; this.orientation = 'horizontal'; const el = tuiInjectElement(); // TODO: Replace with TuiTransitioned when fixed: // https://github.com/angular/angular/issues/57846 inject(NgZone).runOutsideAngular(() => { setTimeout(() => { el.style.transition = ''; }); }); tuiWithStyles(TuiFadeStyles); merge(inject(WaResizeObserverService, { self: true }), inject(WaMutationObserverService, { self: true }), fromEvent(el, 'scroll')) .pipe(filter(() => !!el.scrollWidth), tuiZonefree(), takeUntilDestroyed()) .subscribe(() => { el.classList.toggle('_end', this.isEnd(el)); el.classList.toggle('_start', !!Math.floor(el.scrollLeft) || !!Math.floor(el.scrollTop)); }); } isEnd({ scrollTop, scrollLeft, scrollHeight, scrollWidth, clientHeight, clientWidth, }) { return this.orientation === 'vertical' ? Math.round(scrollTop) < scrollHeight - clientHeight - BUFFER : Math.ceil(Math.abs(scrollLeft)) < scrollWidth - clientWidth - BUFFER || // horizontal multiline fade can kick in early due to hanging elements of fonts so using bigger buffer scrollHeight > clientHeight + 4 * BUFFER; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiFade, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiFade, isStandalone: true, selector: "[tuiFade]", inputs: { lineHeight: ["tuiFadeHeight", "lineHeight"], size: ["tuiFadeSize", "size"], offset: ["tuiFadeOffset", "offset"], orientation: ["tuiFade", "orientation"] }, host: { properties: { "style.line-height": "lineHeight", "style.--t-line-height": "lineHeight", "style.--t-fade-size": "size", "style.--t-fade-offset": "offset", "attr.data-orientation": "orientation", "style.transition": "\"none\"" } }, providers: [ WaResizeObserverService, WaMutationObserverService, { provide: WA_MUTATION_OBSERVER_INIT, useValue: { characterData: true, subtree: true }, }, ], ngImport: i0 }); } } export { TuiFade }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiFade, decorators: [{ type: Directive, args: [{ standalone: true, selector: '[tuiFade]', providers: [ WaResizeObserverService, WaMutationObserverService, { provide: WA_MUTATION_OBSERVER_INIT, useValue: { characterData: true, subtree: true }, }, ], host: { '[style.line-height]': 'lineHeight', '[style.--t-line-height]': 'lineHeight', '[style.--t-fade-size]': 'size', '[style.--t-fade-offset]': 'offset', '[attr.data-orientation]': 'orientation', '[style.transition]': '"none"', }, }] }], ctorParameters: function () { return []; }, propDecorators: { lineHeight: [{ type: Input, args: ['tuiFadeHeight'] }], size: [{ type: Input, args: ['tuiFadeSize'] }], offset: [{ type: Input, args: ['tuiFadeOffset'] }], orientation: [{ type: Input, args: ['tuiFade'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFkZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXQvZGlyZWN0aXZlcy9mYWRlL2ZhZGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUNILHlCQUF5QixFQUN6Qix5QkFBeUIsR0FDNUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRWhFLE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQzs7QUFFOUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO0FBRS9DLE1BVU0sYUFBYTsrR0FBYixhQUFhO21HQUFiLGFBQWEscUhBUkwsRUFBRTs7NEZBUVYsYUFBYTtrQkFWbEIsU0FBUztpQ0FDTSxJQUFJLFlBQ04sRUFBRSxpQkFFRyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNGLEtBQUssRUFBRSxpQkFBaUI7cUJBQzNCOztBQUlMLE1Bb0JhLE9BQU87SUFjaEI7UUFiQSw0RkFBNEY7UUFFckYsZUFBVSxHQUFrQixJQUFJLENBQUM7UUFHakMsU0FBSSxHQUFHLE9BQU8sQ0FBQztRQUdmLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFHZixnQkFBVyxHQUF3QixZQUFZLENBQUM7UUFHbkQsTUFBTSxFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUU5QixpREFBaUQ7UUFDakQsa0RBQWtEO1FBQ2xELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QixLQUFLLENBQ0QsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLEVBQzdDLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxFQUMvQyxTQUFTLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUMxQjthQUNJLElBQUksQ0FDRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFDOUIsV0FBVyxFQUFFLEVBQ2Isa0JBQWtCLEVBQUUsQ0FDdkI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1QyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FDZixRQUFRLEVBQ1IsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FDNUQsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLEtBQUssQ0FBQyxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osV0FBVyxHQUNEO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFVBQVU7WUFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsWUFBWSxHQUFHLFlBQVksR0FBRyxNQUFNO1lBQzlELENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsV0FBVyxHQUFHLE1BQU07Z0JBQ2hFLHNHQUFzRztnQkFDdEcsWUFBWSxHQUFHLFlBQVksR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3ZELENBQUM7K0dBMURRLE9BQU87bUdBQVAsT0FBTyw0Y0FqQkw7WUFDUCx1QkFBdUI7WUFDdkIseUJBQXlCO1lBQ3pCO2dCQUNJLE9BQU8sRUFBRSx5QkFBeUI7Z0JBQ2xDLFFBQVEsRUFBRSxFQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQzthQUNqRDtTQUNKOztTQVVRLE9BQU87NEZBQVAsT0FBTztrQkFwQm5CLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxXQUFXO29CQUNyQixTQUFTLEVBQUU7d0JBQ1AsdUJBQXVCO3dCQUN2Qix5QkFBeUI7d0JBQ3pCOzRCQUNJLE9BQU8sRUFBRSx5QkFBeUI7NEJBQ2xDLFFBQVEsRUFBRSxFQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQzt5QkFDakQ7cUJBQ0o7b0JBQ0QsSUFBSSxFQUFFO3dCQUNGLHFCQUFxQixFQUFFLFlBQVk7d0JBQ25DLHlCQUF5QixFQUFFLFlBQVk7d0JBQ3ZDLHVCQUF1QixFQUFFLE1BQU07d0JBQy9CLHlCQUF5QixFQUFFLFFBQVE7d0JBQ25DLHlCQUF5QixFQUFFLGFBQWE7d0JBQ3hDLG9CQUFvQixFQUFFLFFBQVE7cUJBQ2pDO2lCQUNKOzBFQUlVLFVBQVU7c0JBRGhCLEtBQUs7dUJBQUMsZUFBZTtnQkFJZixJQUFJO3NCQURWLEtBQUs7dUJBQUMsYUFBYTtnQkFJYixNQUFNO3NCQURaLEtBQUs7dUJBQUMsZUFBZTtnQkFJZixXQUFXO3NCQURqQixLQUFLO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBEaXJlY3RpdmUsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgICBXYU11dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlLFxuICAgIFdBX01VVEFUSU9OX09CU0VSVkVSX0lOSVQsXG59IGZyb20gJ0BuZy13ZWItYXBpcy9tdXRhdGlvbi1vYnNlcnZlcic7XG5pbXBvcnQge1dhUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlfSBmcm9tICdAbmctd2ViLWFwaXMvcmVzaXplLW9ic2VydmVyJztcbmltcG9ydCB7dHVpWm9uZWZyZWV9IGZyb20gJ0B0YWlnYS11aS9jZGsvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHt0dWlJbmplY3RFbGVtZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL2RvbSc7XG5pbXBvcnQge3R1aVdpdGhTdHlsZXN9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5pbXBvcnQge3R5cGUgVHVpT3JpZW50YXRpb259IGZyb20gJ0B0YWlnYS11aS9jb3JlL3R5cGVzJztcbmltcG9ydCB7ZmlsdGVyLCBmcm9tRXZlbnQsIG1lcmdlfSBmcm9tICdyeGpzJztcblxuY29uc3QgQlVGRkVSID0gMTsgLy8gYnVmZmVyIGZvciByb3VuZGluZyBpc3N1ZXNcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogJycsXG4gICAgc3R5bGVVcmxzOiBbJy4vZmFkZS5zdHlsZS5sZXNzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndHVpLWZhZGUtc3R5bGVzJyxcbiAgICB9LFxufSlcbmNsYXNzIFR1aUZhZGVTdHlsZXMge31cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1t0dWlGYWRlXScsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFdhUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLFxuICAgICAgICBXYU11dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBXQV9NVVRBVElPTl9PQlNFUlZFUl9JTklULFxuICAgICAgICAgICAgdXNlVmFsdWU6IHtjaGFyYWN0ZXJEYXRhOiB0cnVlLCBzdWJ0cmVlOiB0cnVlfSxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tzdHlsZS5saW5lLWhlaWdodF0nOiAnbGluZUhlaWdodCcsXG4gICAgICAgICdbc3R5bGUuLS10LWxpbmUtaGVpZ2h0XSc6ICdsaW5lSGVpZ2h0JyxcbiAgICAgICAgJ1tzdHlsZS4tLXQtZmFkZS1zaXplXSc6ICdzaXplJyxcbiAgICAgICAgJ1tzdHlsZS4tLXQtZmFkZS1vZmZzZXRdJzogJ29mZnNldCcsXG4gICAgICAgICdbYXR0ci5kYXRhLW9yaWVudGF0aW9uXSc6ICdvcmllbnRhdGlvbicsXG4gICAgICAgICdbc3R5bGUudHJhbnNpdGlvbl0nOiAnXCJub25lXCInLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aUZhZGUge1xuICAgIC8vIFRPRE86IFJlbW92ZSB3aGVuIGxoIENTUyB1bml0cyBhcmUgc3VwcG9ydGVkOiBodHRwczovL2Nhbml1c2UuY29tL21kbi1jc3NfdHlwZXNfbGVuZ3RoX2xoXG4gICAgQElucHV0KCd0dWlGYWRlSGVpZ2h0JylcbiAgICBwdWJsaWMgbGluZUhlaWdodDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoJ3R1aUZhZGVTaXplJylcbiAgICBwdWJsaWMgc2l6ZSA9ICcxLjVlbSc7XG5cbiAgICBASW5wdXQoJ3R1aUZhZGVPZmZzZXQnKVxuICAgIHB1YmxpYyBvZmZzZXQgPSAnMGVtJztcblxuICAgIEBJbnB1dCgndHVpRmFkZScpXG4gICAgcHVibGljIG9yaWVudGF0aW9uOiBUdWlPcmllbnRhdGlvbiB8ICcnID0gJ2hvcml6b250YWwnO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IGVsID0gdHVpSW5qZWN0RWxlbWVudCgpO1xuXG4gICAgICAgIC8vIFRPRE86IFJlcGxhY2Ugd2l0aCBUdWlUcmFuc2l0aW9uZWQgd2hlbiBmaXhlZDpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvNTc4NDZcbiAgICAgICAgaW5qZWN0KE5nWm9uZSkucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICcnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR1aVdpdGhTdHlsZXMoVHVpRmFkZVN0eWxlcyk7XG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgaW5qZWN0KFdhUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLCB7c2VsZjogdHJ1ZX0pLFxuICAgICAgICAgICAgaW5qZWN0KFdhTXV0YXRpb25PYnNlcnZlclNlcnZpY2UsIHtzZWxmOiB0cnVlfSksXG4gICAgICAgICAgICBmcm9tRXZlbnQoZWwsICdzY3JvbGwnKSxcbiAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+ICEhZWwuc2Nyb2xsV2lkdGgpLFxuICAgICAgICAgICAgICAgIHR1aVpvbmVmcmVlKCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKCdfZW5kJywgdGhpcy5pc0VuZChlbCkpO1xuICAgICAgICAgICAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoXG4gICAgICAgICAgICAgICAgICAgICdfc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICAhIU1hdGguZmxvb3IoZWwuc2Nyb2xsTGVmdCkgfHwgISFNYXRoLmZsb29yKGVsLnNjcm9sbFRvcCksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNFbmQoe1xuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgICAgc2Nyb2xsV2lkdGgsXG4gICAgICAgIGNsaWVudEhlaWdodCxcbiAgICAgICAgY2xpZW50V2lkdGgsXG4gICAgfTogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCdcbiAgICAgICAgICAgID8gTWF0aC5yb3VuZChzY3JvbGxUb3ApIDwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0IC0gQlVGRkVSXG4gICAgICAgICAgICA6IE1hdGguY2VpbChNYXRoLmFicyhzY3JvbGxMZWZ0KSkgPCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gQlVGRkVSIHx8XG4gICAgICAgICAgICAgICAgICAvLyBob3Jpem9udGFsIG11bHRpbGluZSBmYWRlIGNhbiBraWNrIGluIGVhcmx5IGR1ZSB0byBoYW5naW5nIGVsZW1lbnRzIG9mIGZvbnRzIHNvIHVzaW5nIGJpZ2dlciBidWZmZXJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbEhlaWdodCA+IGNsaWVudEhlaWdodCArIDQgKiBCVUZGRVI7XG4gICAgfVxufVxuIl19