UNPKG

@taiga-ui/core

Version:

Core library for creating Angular components and applications using Taiga UI

112 lines 21 kB
import { __decorate } from "tslib"; import { Directive, EventEmitter, inject, Input, Output } from '@angular/core'; import { EMPTY_CLIENT_RECT } from '@taiga-ui/cdk/constants'; import { TUI_IS_MOBILE } from '@taiga-ui/cdk/tokens'; import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom'; import { tuiPure } from '@taiga-ui/cdk/utils/miscellaneous'; import { tuiFallbackAccessor, TuiPositionAccessor, TuiRectAccessor, } from '@taiga-ui/core/classes'; import { TUI_VIEWPORT } from '@taiga-ui/core/tokens'; import { TuiHintDirective } from './hint.directive'; import { TUI_HINT_DIRECTIONS, TUI_HINT_OPTIONS, } from './hint-options.directive'; import * as i0 from "@angular/core"; const GAP = 8; const ARROW_OFFSET = 24; const TOP = 0; const LEFT = 1; class TuiHintPosition extends TuiPositionAccessor { constructor() { super(...arguments); this.el = tuiInjectElement(); this.offset = inject(TUI_IS_MOBILE) ? 16 : 8; this.viewport = inject(TUI_VIEWPORT); this.accessor = tuiFallbackAccessor('hint')(inject(TuiRectAccessor), inject(TuiHintDirective)); this.points = TUI_HINT_DIRECTIONS.reduce((acc, direction) => ({ ...acc, [direction]: [0, 0] }), {}); this.direction = inject(TUI_HINT_OPTIONS).direction; this.directionChange = new EventEmitter(); this.type = 'hint'; } emitDirection(direction) { this.directionChange.emit(direction); } getPosition(rect, el) { const width = el?.clientWidth ?? rect.width; const height = el?.clientHeight ?? rect.height; const hostRect = this.accessor.getClientRect() ?? EMPTY_CLIENT_RECT; const leftCenter = hostRect.left + hostRect.width / 2; const topCenter = hostRect.top + hostRect.height / 2; const rtl = this.el.matches('[dir="rtl"] :scope'); this.points['top-left'][TOP] = hostRect.top - height - this.offset; this.points['top-left'][LEFT] = leftCenter - width + ARROW_OFFSET; this.points.top[TOP] = this.points['top-left'][TOP]; this.points.top[LEFT] = leftCenter - width / 2; this.points['top-right'][TOP] = this.points['top-left'][TOP]; this.points['top-right'][LEFT] = leftCenter - ARROW_OFFSET; this.points['bottom-left'][TOP] = hostRect.bottom + this.offset; this.points['bottom-left'][LEFT] = this.points['top-left'][LEFT]; this.points.bottom[TOP] = this.points['bottom-left'][TOP]; this.points.bottom[LEFT] = this.points.top[LEFT]; this.points['bottom-right'][TOP] = this.points['bottom-left'][TOP]; this.points['bottom-right'][LEFT] = this.points['top-right'][LEFT]; this.points['left-top'][TOP] = topCenter - height + ARROW_OFFSET; this.points['left-top'][LEFT] = hostRect.left - width - this.offset; this.points.left[TOP] = topCenter - height / 2; this.points.left[LEFT] = this.points['left-top'][LEFT]; this.points['left-bottom'][TOP] = topCenter - ARROW_OFFSET; this.points['left-bottom'][LEFT] = this.points['left-top'][LEFT]; this.points['right-top'][TOP] = this.points['left-top'][TOP]; this.points['right-top'][LEFT] = hostRect.right + this.offset; this.points.right[TOP] = this.points.left[TOP]; this.points.right[LEFT] = this.points['right-top'][LEFT]; this.points['right-bottom'][TOP] = this.points['left-bottom'][TOP]; this.points['right-bottom'][LEFT] = this.points['right-top'][LEFT]; const array = Array.isArray(this.direction) ? this.direction : [this.direction]; const priority = array.map((direction) => adjust(direction, rtl)); const direction = priority .concat(TUI_HINT_DIRECTIONS) .find((dir) => this.checkPosition(this.points[dir], width, height)) || this.fallback; this.emitDirection(adjust(direction, rtl)); return this.points[direction]; } get fallback() { return this.points.top[TOP] > this.viewport.getClientRect().bottom - this.points.bottom[TOP] ? 'top' : 'bottom'; } checkPosition([top, left], width, height) { const viewport = this.viewport.getClientRect(); return (top > viewport.top + GAP && left > viewport.left + GAP && top + height < viewport.bottom - GAP && left + width < viewport.right - GAP); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiHintPosition, deps: null, target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiHintPosition, isStandalone: true, inputs: { direction: ["tuiHintDirection", "direction"] }, outputs: { directionChange: "tuiHintDirectionChange" }, usesInheritance: true, ngImport: i0 }); } } __decorate([ tuiPure ], TuiHintPosition.prototype, "emitDirection", null); export { TuiHintPosition }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiHintPosition, decorators: [{ type: Directive, args: [{ standalone: true, }] }], propDecorators: { direction: [{ type: Input, args: ['tuiHintDirection'] }], directionChange: [{ type: Output, args: ['tuiHintDirectionChange'] }], emitDirection: [] } }); function adjust(direction, rtl) { if (rtl && direction.includes('left')) { return direction.replace('left', 'right'); } if (rtl && direction.includes('right')) { return direction.replace('right', 'left'); } return direction; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGludC1wb3NpdGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2RpcmVjdGl2ZXMvaGludC9oaW50LXBvc2l0aW9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRCxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixlQUFlLEdBQ2xCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR25ELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEdBR25CLE1BQU0sMEJBQTBCLENBQUM7O0FBRWxDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNkLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDZCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUM7QUFFZixNQUdhLGVBQWdCLFNBQVEsbUJBQW1CO0lBSHhEOztRQUlxQixPQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixXQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMs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TUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLEdBQUcsTUFBTSxHQUFHLFlBQVksQ0FBQztRQUNqRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDcEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxZQUFZLENBQUM7UUFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxD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LFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7aUJBQ25COzhCQWlCVSxTQUFTO3NCQURmLEtBQUs7dUJBQUMsa0JBQWtCO2dCQUlULGVBQWU7c0JBRDlCLE1BQU07dUJBQUMsd0JBQXdCO2dCQU16QixhQUFhO0FBd0V4QixTQUFTLE1BQU0sQ0FBQyxTQUEyQixFQUFFLEdBQVk7SUFDckQsSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNuQyxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBcUIsQ0FBQztLQUNqRTtJQUVELElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDcEMsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQXFCLENBQUM7S0FDakU7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RU1QVFlfQ0xJRU5UX1JFQ1R9IGZyb20gJ0B0YWlnYS11aS9jZGsvY29uc3RhbnRzJztcbmltcG9ydCB7VFVJX0lTX01PQklMRX0gZnJvbSAnQHRhaWdhLXVpL2Nkay90b2tlbnMnO1xuaW1wb3J0IHt0dWlJbmplY3RFbGVtZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL2RvbSc7XG5pbXBvcnQge3R1aVB1cmV9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5pbXBvcnQge1xuICAgIHR1aUZhbGxiYWNrQWNjZXNzb3IsXG4gICAgVHVpUG9zaXRpb25BY2Nlc3NvcixcbiAgICBUdWlSZWN0QWNjZXNzb3IsXG59IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NsYXNzZXMnO1xuaW1wb3J0IHtUVUlfVklFV1BPUlR9IGZyb20gJ0B0YWlnYS11aS9jb3JlL3Rva2Vucyc7XG5pbXBvcnQge3R5cGUgVHVpUG9pbnR9IGZyb20gJ0B0YWlnYS11aS9jb3JlL3R5cGVzJztcblxuaW1wb3J0IHtUdWlIaW50RGlyZWN0aXZlfSBmcm9tICcuL2hpbnQuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gICAgVFVJX0hJTlRfRElSRUNUSU9OUyxcbiAgICBUVUlfSElOVF9PUFRJT05TLFxuICAgIHR5cGUgVHVpSGludERpcmVjdGlvbixcbiAgICB0eXBlIFR1aUhpbnRPcHRpb25zLFxufSBmcm9tICcuL2hpbnQtb3B0aW9ucy5kaXJlY3RpdmUnO1xuXG5jb25zdCBHQVAgPSA4O1xuY29uc3QgQVJST1dfT0ZGU0VUID0gMjQ7XG5jb25zdCBUT1AgPSAwO1xuY29uc3QgTEVGVCA9IDE7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFR1aUhpbnRQb3NpdGlvbiBleHRlbmRzIFR1aVBvc2l0aW9uQWNjZXNzb3Ige1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWwgPSB0dWlJbmplY3RFbGVtZW50KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBvZmZzZXQgPSBpbmplY3QoVFVJX0lTX01PQklMRSkgPyAxNiA6IDg7XG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3cG9ydCA9IGluamVjdChUVUlfVklFV1BPUlQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWNjZXNzb3IgPSB0dWlGYWxsYmFja0FjY2Vzc29yPFR1aVJlY3RBY2Nlc3Nvcj4oJ2hpbnQnKShcbiAgICAgICAgaW5qZWN0PGFueT4oVHVpUmVjdEFjY2Vzc29yKSxcbiAgICAgICAgaW5qZWN0KFR1aUhpbnREaXJlY3RpdmUpLFxuICAgICk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvaW50czogUmVjb3JkPFR1aUhpbnREaXJlY3Rpb24sIFtudW1iZXIsIG51bWJlcl0+ID1cbiAgICAgICAgVFVJX0hJTlRfRElSRUNUSU9OUy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBkaXJlY3Rpb24pID0+ICh7Li4uYWNjLCBbZGlyZWN0aW9uXTogWzAsIDBdfSksXG4gICAgICAgICAgICB7fSBhcyBSZWNvcmQ8VHVpSGludERpcmVjdGlvbiwgW251bWJlciwgbnVtYmVyXT4sXG4gICAgICAgICk7XG5cbiAgICBASW5wdXQoJ3R1aUhpbnREaXJlY3Rpb24nKVxuICAgIHB1YmxpYyBkaXJlY3Rpb246IFR1aUhpbnRPcHRpb25zWydkaXJlY3Rpb24nXSA9IGluamVjdChUVUlfSElOVF9PUFRJT05TKS5kaXJlY3Rpb247XG5cbiAgICBAT3V0cHV0KCd0dWlIaW50RGlyZWN0aW9uQ2hhbmdlJylcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGlyZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUdWlIaW50RGlyZWN0aW9uPigpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSAnaGludCc7XG5cbiAgICBAdHVpUHVyZVxuICAgIHB1YmxpYyBlbWl0RGlyZWN0aW9uKGRpcmVjdGlvbjogVHVpSGludERpcmVjdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpcmVjdGlvbkNoYW5nZS5lbWl0KGRpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBvc2l0aW9uKHJlY3Q6IERPTVJlY3QsIGVsPzogSFRNTEVsZW1lbnQpOiBUdWlQb2ludCB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZWw/LmNsaWVudFdpZHRoID8/IHJlY3Qud2lkdGg7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGVsPy5jbGllbnRIZWlnaHQgPz8gcmVjdC5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IGhvc3RSZWN0ID0gdGhpcy5hY2Nlc3Nvci5nZXRDbGllbnRSZWN0KCkgPz8gRU1QVFlfQ0xJRU5UX1JFQ1Q7XG4gICAgICAgIGNvbnN0IGxlZnRDZW50ZXIgPSBob3N0UmVjdC5sZWZ0ICsgaG9zdFJlY3Qud2lkdGggLyAyO1xuICAgICAgICBjb25zdCB0b3BDZW50ZXIgPSBob3N0UmVjdC50b3AgKyBob3N0UmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBydGwgPSB0aGlzLmVsLm1hdGNoZXMoJ1tkaXI9XCJydGxcIl0gOnNjb3BlJyk7XG5cbiAgICAgICAgdGhpcy5wb2ludHNbJ3RvcC1sZWZ0J11bVE9QXSA9IGhvc3RSZWN0LnRvcCAtIGhlaWdodCAtIHRoaXMub2Zmc2V0O1xuICAgICAgICB0aGlzLnBvaW50c1sndG9wLWxlZnQnXVtMRUZUXSA9IGxlZnRDZW50ZXIgLSB3aWR0aCArIEFSUk9XX09GRlNFVDtcbiAgICAgICAgdGhpcy5wb2ludHMudG9wW1RPUF0gPSB0aGlzLnBvaW50c1sndG9wLWxlZnQnXVtUT1BdO1xuICAgICAgICB0aGlzLnBvaW50cy50b3BbTEVGVF0gPSBsZWZ0Q2VudGVyIC0gd2lkdGggLyAyO1xuICAgICAgICB0aGlzLnBvaW50c1sndG9wLXJpZ2h0J11bVE9QXSA9IHRoaXMucG9pbnRzWyd0b3AtbGVmdCddW1RPUF07XG4gICAgICAgIHRoaXMucG9pbnRzWyd0b3AtcmlnaHQnXVtMRUZUXSA9IGxlZnRDZW50ZXIgLSBBUlJPV19PRkZTRVQ7XG5cbiAgICAgICAgdGhpcy5wb2ludHNbJ2JvdHRvbS1sZWZ0J11bVE9QXSA9IGhvc3RSZWN0LmJvdHRvbSArIHRoaXMub2Zmc2V0O1xuICAgICAgICB0aGlzLnBvaW50c1snYm90dG9tLWxlZnQnXVtMRUZUXSA9IHRoaXMucG9pbnRzWyd0b3AtbGVmdCddW0xFRlRdO1xuICAgICAgICB0aGlzLnBvaW50cy5ib3R0b21bVE9QXSA9IHRoaXMucG9pbnRzWydib3R0b20tbGVmdCddW1RPUF07XG4gICAgICAgIHRoaXMucG9pbnRzLmJvdHRvbVtMRUZUXSA9IHRoaXMucG9pbnRzLnRvcFtMRUZUXTtcbiAgICAgICAgdGhpcy5wb2ludHNbJ2JvdHRvbS1yaWdodCddW1RPUF0gPSB0aGlzLnBvaW50c1snYm90dG9tLWxlZnQnXVtUT1BdO1xuICAgICAgICB0aGlzLnBvaW50c1snYm90dG9tLXJpZ2h0J11bTEVGVF0gPSB0aGlzLnBvaW50c1sndG9wLXJpZ2h0J11bTEVGVF07XG5cbiAgICAgICAgdGhpcy5wb2ludHNbJ2xlZnQtdG9wJ11bVE9QXSA9IHRvcENlbnRlciAtIGhlaWdodCArIEFSUk9XX09GRlNFVDtcbiAgICAgICAgdGhpcy5wb2ludHNbJ2xlZnQtdG9wJ11bTEVGVF0gPSBob3N0UmVjdC5sZWZ0IC0gd2lkdGggLSB0aGlzLm9mZnNldDtcbiAgICAgICAgdGhpcy5wb2ludHMubGVmdFtUT1BdID0gdG9wQ2VudGVyIC0gaGVpZ2h0IC8gMjtcbiAgICAgICAgdGhpcy5wb2ludHMubGVmdFtMRUZUXSA9IHRoaXMucG9pbnRzWydsZWZ0LXRvcCddW0xFRlRdO1xuICAgICAgICB0aGlzLnBvaW50c1snbGVmdC1ib3R0b20nXVtUT1BdID0gdG9wQ2VudGVyIC0gQVJST1dfT0ZGU0VUO1xuICAgICAgICB0aGlzLnBvaW50c1snbGVmdC1ib3R0b20nXVtMRUZUXSA9IHRoaXMucG9pbnRzWydsZWZ0LXRvcCddW0xFRlRdO1xuXG4gICAgICAgIHRoaXMucG9pbnRzWydyaWdodC10b3AnXVtUT1BdID0gdGhpcy5wb2ludHNbJ2xlZnQtdG9wJ11bVE9QXTtcbiAgICAgICAgdGhpcy5wb2ludHNbJ3JpZ2h0LXRvcCddW0xFRlRdID0gaG9zdFJlY3QucmlnaHQgKyB0aGlzLm9mZnNldDtcbiAgICAgICAgdGhpcy5wb2ludHMucmlnaHRbVE9QXSA9IHRoaXMucG9pbnRzLmxlZnRbVE9QXTtcbiAgICAgICAgdGhpcy5wb2ludHMucmlnaHRbTEVGVF0gPSB0aGlzLnBvaW50c1sncmlnaHQtdG9wJ11bTEVGVF07XG4gICAgICAgIHRoaXMucG9pbnRzWydyaWdodC1ib3R0b20nXVtUT1BdID0gdGhpcy5wb2ludHNbJ2xlZnQtYm90dG9tJ11bVE9QXTtcbiAgICAgICAgdGhpcy5wb2ludHNbJ3JpZ2h0LWJvdHRvbSddW0xFRlRdID0gdGhpcy5wb2ludHNbJ3JpZ2h0LXRvcCddW0xFRlRdO1xuXG4gICAgICAgIGNvbnN0IGFycmF5ID0gQXJyYXkuaXNBcnJheSh0aGlzLmRpcmVjdGlvbikgPyB0aGlzLmRpcmVjdGlvbiA6IFt0aGlzLmRpcmVjdGlvbl07XG4gICAgICAgIGNvbnN0IHByaW9yaXR5ID0gYXJyYXkubWFwKChkaXJlY3Rpb24pID0+IGFkanVzdChkaXJlY3Rpb24sIHJ0bCkpO1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPVxuICAgICAgICAgICAgcHJpb3JpdHlcbiAgICAgICAgICAgICAgICAuY29uY2F0KFRVSV9ISU5UX0RJUkVDVElPTlMpXG4gICAgICAgICAgICAgICAgLmZpbmQoKGRpcikgPT4gdGhpcy5jaGVja1Bvc2l0aW9uKHRoaXMucG9pbnRzW2Rpcl0sIHdpZHRoLCBoZWlnaHQpKSB8fFxuICAgICAgICAgICAgdGhpcy5mYWxsYmFjaztcblxuICAgICAgICB0aGlzLmVtaXREaXJlY3Rpb24oYWRqdXN0KGRpcmVjdGlvbiwgcnRsKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucG9pbnRzW2RpcmVjdGlvbl07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgZmFsbGJhY2soKTogVHVpSGludERpcmVjdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvaW50cy50b3BbVE9QXSA+XG4gICAgICAgICAgICB0aGlzLnZpZXdwb3J0LmdldENsaWVudFJlY3QoKS5ib3R0b20gLSB0aGlzLnBvaW50cy5ib3R0b21bVE9QXVxuICAgICAgICAgICAgPyAndG9wJ1xuICAgICAgICAgICAgOiAnYm90dG9tJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrUG9zaXRpb24oW3RvcCwgbGVmdF06IFR1aVBvaW50LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQuZ2V0Q2xpZW50UmVjdCgpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3AgPiB2aWV3cG9ydC50b3AgKyBHQVAgJiZcbiAgICAgICAgICAgIGxlZnQgPiB2aWV3cG9ydC5sZWZ0ICsgR0FQICYmXG4gICAgICAgICAgICB0b3AgKyBoZWlnaHQgPCB2aWV3cG9ydC5ib3R0b20gLSBHQVAgJiZcbiAgICAgICAgICAgIGxlZnQgKyB3aWR0aCA8IHZpZXdwb3J0LnJpZ2h0IC0gR0FQXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGp1c3QoZGlyZWN0aW9uOiBUdWlIaW50RGlyZWN0aW9uLCBydGw6IGJvb2xlYW4pOiBUdWlIaW50RGlyZWN0aW9uIHtcbiAgICBpZiAocnRsICYmIGRpcmVjdGlvbi5pbmNsdWRlcygnbGVmdCcpKSB7XG4gICAgICAgIHJldHVybiBkaXJlY3Rpb24ucmVwbGFjZSgnbGVmdCcsICdyaWdodCcpIGFzIFR1aUhpbnREaXJlY3Rpb247XG4gICAgfVxuXG4gICAgaWYgKHJ0bCAmJiBkaXJlY3Rpb24uaW5jbHVkZXMoJ3JpZ2h0JykpIHtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGlvbi5yZXBsYWNlKCdyaWdodCcsICdsZWZ0JykgYXMgVHVpSGludERpcmVjdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyZWN0aW9uO1xufVxuIl19