UNPKG

@taiga-ui/core

Version:

Core library for creating Angular components and applications using Taiga UI

110 lines 15.6 kB
import { coerceArray } from '@angular/cdk/coercion'; import { ChangeDetectorRef, Directive, inject, INJECTOR, Input, signal, TemplateRef, } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { tuiZonefreeScheduler } from '@taiga-ui/cdk/observables'; import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom'; import { tuiAsRectAccessor, tuiAsVehicle, } from '@taiga-ui/core/classes'; import { tuiCheckFixedPosition } from '@taiga-ui/core/utils'; import { PolymorpheusComponent, PolymorpheusTemplate, } from '@taiga-ui/polymorpheus'; import { Subject, throttleTime } from 'rxjs'; import { TuiDropdownDriver, TuiDropdownDriverDirective } from './dropdown.driver'; import { TUI_DROPDOWN_COMPONENT } from './dropdown.providers'; import { TuiDropdownService } from './dropdown.service'; import { TuiDropdownPosition } from './dropdown-position.directive'; import * as i0 from "@angular/core"; import * as i1 from "./dropdown.driver"; import * as i2 from "./dropdown-position.directive"; class TuiDropdownDirective { constructor() { this.refresh$ = new Subject(); this.service = inject(TuiDropdownService); this.cdr = inject(ChangeDetectorRef); // TODO: think of a better solution later this.drivers = coerceArray(inject(TuiDropdownDriver, { self: true, optional: true })); this.sub = this.refresh$ .pipe(throttleTime(0, tuiZonefreeScheduler()), takeUntilDestroyed()) .subscribe(() => { this.ref()?.changeDetectorRef.detectChanges(); this.ref()?.changeDetectorRef.markForCheck(); }); this.el = tuiInjectElement(); this.type = 'dropdown'; this.component = new PolymorpheusComponent(inject(TUI_DROPDOWN_COMPONENT), inject(INJECTOR)); this.ref = signal(null); // TODO(v5): rename to `content` // eslint-disable-next-line @typescript-eslint/naming-convention this._content = signal(null); } set tuiDropdown(content) { this._content.set(content instanceof TemplateRef ? new PolymorpheusTemplate(content, this.cdr) : content); if (!this._content()) { this.toggle(false); } } get position() { return tuiCheckFixedPosition(this.el) ? 'fixed' : 'absolute'; } // TODO(v5): delete get content() { return this._content(); } // TODO(v5): delete set content(x) { this._content.set(x); } ngAfterViewChecked() { this.refresh$.next(); } ngOnDestroy() { this.toggle(false); } getClientRect() { return this.el.getBoundingClientRect(); } toggle(show) { const ref = this.ref(); if (show && this._content() && !ref) { this.ref.set(this.service.add(this.component)); } else if (!show && ref) { this.ref.set(null); this.service.remove(ref); } this.drivers.forEach((driver) => driver?.next(show)); // TODO: Remove in v5, only needed in Angular 16 this.cdr.markForCheck(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDropdownDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiDropdownDirective, isStandalone: true, selector: "[tuiDropdown]:not(ng-container):not(ng-template)", inputs: { tuiDropdown: "tuiDropdown" }, host: { properties: { "class.tui-dropdown-open": "ref()" } }, providers: [ tuiAsRectAccessor(TuiDropdownDirective), tuiAsVehicle(TuiDropdownDirective), ], exportAs: ["tuiDropdown"], hostDirectives: [{ directive: i1.TuiDropdownDriverDirective }, { directive: i2.TuiDropdownPosition, outputs: ["tuiDropdownDirectionChange", "tuiDropdownDirectionChange"] }], ngImport: i0 }); } } export { TuiDropdownDirective }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDropdownDirective, decorators: [{ type: Directive, args: [{ standalone: true, selector: '[tuiDropdown]:not(ng-container):not(ng-template)', providers: [ tuiAsRectAccessor(TuiDropdownDirective), tuiAsVehicle(TuiDropdownDirective), ], exportAs: 'tuiDropdown', hostDirectives: [ TuiDropdownDriverDirective, { directive: TuiDropdownPosition, outputs: ['tuiDropdownDirectionChange'], }, ], host: { '[class.tui-dropdown-open]': 'ref()', }, }] }], propDecorators: { tuiDropdown: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9kaXJlY3RpdmVzL2Ryb3Bkb3duL2Ryb3Bkb3duLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUVILGlCQUFpQixFQUVqQixTQUFTLEVBQ1QsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBRUwsTUFBTSxFQUNOLFdBQVcsR0FDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUUvRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFlBQVksR0FHZixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFDSCxxQkFBcUIsRUFFckIsb0JBQW9CLEdBQ3ZCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFM0MsT0FBTyxFQUFDLGlCQUFpQixFQUFFLDBCQUEwQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDaEYsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sK0JBQStCLENBQUM7Ozs7QUFFbEUsTUFtQmEsb0JBQW9CO0lBbkJqQztRQXNCcUIsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDL0IsWUFBTyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3JDLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVqRCx5Q0FBeUM7UUFDeEIsWUFBTyxHQUFHLFdBQVcsQ0FDbEMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FDMUQsQ0FBQztRQUVpQixRQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVE7YUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLENBQUM7YUFDbkUsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFUyxPQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixTQUFJLEdBQUcsVUFBVSxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxJQUFJLHFCQUFxQixDQUNqRCxNQUFNLENBQUMsc0JBQXNCLENBQUMsRUFDOUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUNuQixDQUFDO1FBRUssUUFBRyxHQUFHLE1BQU0sQ0FBK0IsSUFBSSxDQUFDLENBQUM7UUFDeEQsZ0NBQWdDO1FBQ2hDLGdFQUFnRTtRQUNoRCxhQUFRLEdBQUcsTUFBTSxDQUE4QyxJQUFJLENBQUMsQ0FBQztLQXdEeEY7SUF0REcsSUFDVyxXQUFXLENBQUMsT0FBb0Q7UUFDdkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ2IsT0FBTyxZQUFZLFdBQVc7WUFDMUIsQ0FBQyxDQUFDLElBQUksb0JBQW9CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDN0MsQ0FBQyxDQUFDLE9BQU8sQ0FDaEIsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QjtJQUNMLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDZixPQUFPLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDakUsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLElBQVcsT0FBTyxDQUFDLENBQThDO1FBQzdELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTSxrQkFBa0I7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVNLGFBQWE7UUFDaEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVNLE1BQU0sQ0FBQyxJQUFhO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUV2QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDbEQ7YUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRTtZQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM1QjtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFckQsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUIsQ0FBQzsrR0FwRlEsb0JBQW9CO21HQUFwQixvQkFBb0IscU1BaEJsQjtZQUNQLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDO1lBQ3ZDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQztTQUNyQzs7U0FhUSxvQkFBb0I7NEZBQXBCLG9CQUFvQjtrQkFuQmhDLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxrREFBa0Q7b0JBQzVELFNBQVMsRUFBRTt3QkFDUCxpQkFBaUIsc0JBQXNCO3dCQUN2QyxZQUFZLHNCQUFzQjtxQkFDckM7b0JBQ0QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLGNBQWMsRUFBRTt3QkFDWiwwQkFBMEI7d0JBQzFCOzRCQUNJLFNBQVMsRUFBRSxtQkFBbUI7NEJBQzlCLE9BQU8sRUFBRSxDQUFDLDRCQUE0QixDQUFDO3lCQUMxQztxQkFDSjtvQkFDRCxJQUFJLEVBQUU7d0JBQ0YsMkJBQTJCLEVBQUUsT0FBTztxQkFDdkM7aUJBQ0o7OEJBaUNjLFdBQVc7c0JBRHJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NvZXJjZUFycmF5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICB0eXBlIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgdHlwZSBDb21wb25lbnRSZWYsXG4gICAgRGlyZWN0aXZlLFxuICAgIGluamVjdCxcbiAgICBJTkpFQ1RPUixcbiAgICBJbnB1dCxcbiAgICB0eXBlIE9uRGVzdHJveSxcbiAgICBzaWduYWwsXG4gICAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7dHVpWm9uZWZyZWVTY2hlZHVsZXJ9IGZyb20gJ0B0YWlnYS11aS9jZGsvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHt0eXBlIFR1aUNvbnRleHR9IGZyb20gJ0B0YWlnYS11aS9jZGsvdHlwZXMnO1xuaW1wb3J0IHt0dWlJbmplY3RFbGVtZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL2RvbSc7XG5pbXBvcnQge1xuICAgIHR1aUFzUmVjdEFjY2Vzc29yLFxuICAgIHR1aUFzVmVoaWNsZSxcbiAgICB0eXBlIFR1aVJlY3RBY2Nlc3NvcixcbiAgICB0eXBlIFR1aVZlaGljbGUsXG59IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NsYXNzZXMnO1xuaW1wb3J0IHt0eXBlIFR1aVBvcnRhbEl0ZW19IGZyb20gJ0B0YWlnYS11aS9jb3JlL3R5cGVzJztcbmltcG9ydCB7dHVpQ2hlY2tGaXhlZFBvc2l0aW9ufSBmcm9tICdAdGFpZ2EtdWkvY29yZS91dGlscyc7XG5pbXBvcnQge1xuICAgIFBvbHltb3JwaGV1c0NvbXBvbmVudCxcbiAgICB0eXBlIFBvbHltb3JwaGV1c0NvbnRlbnQsXG4gICAgUG9seW1vcnBoZXVzVGVtcGxhdGUsXG59IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHtTdWJqZWN0LCB0aHJvdHRsZVRpbWV9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1R1aURyb3Bkb3duRHJpdmVyLCBUdWlEcm9wZG93bkRyaXZlckRpcmVjdGl2ZX0gZnJvbSAnLi9kcm9wZG93bi5kcml2ZXInO1xuaW1wb3J0IHtUVUlfRFJPUERPV05fQ09NUE9ORU5UfSBmcm9tICcuL2Ryb3Bkb3duLnByb3ZpZGVycyc7XG5pbXBvcnQge1R1aURyb3Bkb3duU2VydmljZX0gZnJvbSAnLi9kcm9wZG93bi5zZXJ2aWNlJztcbmltcG9ydCB7VHVpRHJvcGRvd25Qb3NpdGlvbn0gZnJvbSAnLi9kcm9wZG93bi1wb3NpdGlvbi5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3R1aURyb3Bkb3duXTpub3QobmctY29udGFpbmVyKTpub3QobmctdGVtcGxhdGUpJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgdHVpQXNSZWN0QWNjZXNzb3IoVHVpRHJvcGRvd25EaXJlY3RpdmUpLFxuICAgICAgICB0dWlBc1ZlaGljbGUoVHVpRHJvcGRvd25EaXJlY3RpdmUpLFxuICAgIF0sXG4gICAgZXhwb3J0QXM6ICd0dWlEcm9wZG93bicsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAgVHVpRHJvcGRvd25Ecml2ZXJEaXJlY3RpdmUsXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogVHVpRHJvcGRvd25Qb3NpdGlvbixcbiAgICAgICAgICAgIG91dHB1dHM6IFsndHVpRHJvcGRvd25EaXJlY3Rpb25DaGFuZ2UnXSxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy50dWktZHJvcGRvd24tb3Blbl0nOiAncmVmKCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aURyb3Bkb3duRGlyZWN0aXZlXG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3ksIFR1aVBvcnRhbEl0ZW0sIFR1aVJlY3RBY2Nlc3NvciwgVHVpVmVoaWNsZVxue1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVmcmVzaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZSA9IGluamVjdChUdWlEcm9wZG93blNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgIC8vIFRPRE86IHRoaW5rIG9mIGEgYmV0dGVyIHNvbHV0aW9uIGxhdGVyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkcml2ZXJzID0gY29lcmNlQXJyYXkoXG4gICAgICAgIGluamVjdChUdWlEcm9wZG93bkRyaXZlciwge3NlbGY6IHRydWUsIG9wdGlvbmFsOiB0cnVlfSksXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdWIgPSB0aGlzLnJlZnJlc2gkXG4gICAgICAgIC5waXBlKHRocm90dGxlVGltZSgwLCB0dWlab25lZnJlZVNjaGVkdWxlcigpKSwgdGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWYoKT8uY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5yZWYoKT8uY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGVsID0gdHVpSW5qZWN0RWxlbWVudCgpO1xuICAgIHB1YmxpYyByZWFkb25seSB0eXBlID0gJ2Ryb3Bkb3duJztcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50ID0gbmV3IFBvbHltb3JwaGV1c0NvbXBvbmVudChcbiAgICAgICAgaW5qZWN0KFRVSV9EUk9QRE9XTl9DT01QT05FTlQpLFxuICAgICAgICBpbmplY3QoSU5KRUNUT1IpLFxuICAgICk7XG5cbiAgICBwdWJsaWMgcmVmID0gc2lnbmFsPENvbXBvbmVudFJlZjx1bmtub3duPiB8IG51bGw+KG51bGwpO1xuICAgIC8vIFRPRE8odjUpOiByZW5hbWUgdG8gYGNvbnRlbnRgXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgIHB1YmxpYyByZWFkb25seSBfY29udGVudCA9IHNpZ25hbDxQb2x5bW9ycGhldXNDb250ZW50PFR1aUNvbnRleHQ8KCkgPT4gdm9pZD4+PihudWxsKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB0dWlEcm9wZG93bihjb250ZW50OiBQb2x5bW9ycGhldXNDb250ZW50PFR1aUNvbnRleHQ8KCkgPT4gdm9pZD4+KSB7XG4gICAgICAgIHRoaXMuX2NvbnRlbnQuc2V0KFxuICAgICAgICAgICAgY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgPyBuZXcgUG9seW1vcnBoZXVzVGVtcGxhdGUoY29udGVudCwgdGhpcy5jZHIpXG4gICAgICAgICAgICAgICAgOiBjb250ZW50LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghdGhpcy5fY29udGVudCgpKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBvc2l0aW9uKCk6ICdhYnNvbHV0ZScgfCAnZml4ZWQnIHtcbiAgICAgICAgcmV0dXJuIHR1aUNoZWNrRml4ZWRQb3NpdGlvbih0aGlzLmVsKSA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnO1xuICAgIH1cblxuICAgIC8vIFRPRE8odjUpOiBkZWxldGVcbiAgICBwdWJsaWMgZ2V0IGNvbnRlbnQoKTogUG9seW1vcnBoZXVzQ29udGVudDxUdWlDb250ZXh0PCgpID0+IHZvaWQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50KCk7XG4gICAgfVxuXG4gICAgLy8gVE9ETyh2NSk6IGRlbGV0ZVxuICAgIHB1YmxpYyBzZXQgY29udGVudCh4OiBQb2x5bW9ycGhldXNDb250ZW50PFR1aUNvbnRleHQ8KCkgPT4gdm9pZD4+KSB7XG4gICAgICAgIHRoaXMuX2NvbnRlbnQuc2V0KHgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVmcmVzaCQubmV4dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b2dnbGUoZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDbGllbnRSZWN0KCk6IERPTVJlY3Qge1xuICAgICAgICByZXR1cm4gdGhpcy5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlKHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy5yZWYoKTtcblxuICAgICAgICBpZiAoc2hvdyAmJiB0aGlzLl9jb250ZW50KCkgJiYgIXJlZikge1xuICAgICAgICAgICAgdGhpcy5yZWYuc2V0KHRoaXMuc2VydmljZS5hZGQodGhpcy5jb21wb25lbnQpKTtcbiAgICAgICAgfSBlbHNlIGlmICghc2hvdyAmJiByZWYpIHtcbiAgICAgICAgICAgIHRoaXMucmVmLnNldChudWxsKTtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5yZW1vdmUocmVmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZHJpdmVycy5mb3JFYWNoKChkcml2ZXIpID0+IGRyaXZlcj8ubmV4dChzaG93KSk7XG5cbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIGluIHY1LCBvbmx5IG5lZWRlZCBpbiBBbmd1bGFyIDE2XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbn1cbiJdfQ==