UNPKG

@taiga-ui/core

Version:

Core library for creating Angular components and applications using Taiga UI

85 lines 21.4 kB
/// <reference types="@taiga-ui/tsconfig/ng-dev-mode" /> /// <reference types="@taiga-ui/tsconfig/ng-dev-mode" /> import { DOCUMENT, NgIf } from '@angular/common'; import { ChangeDetectionStrategy, Component, inject, RendererFactory2, signal, ViewEncapsulation, } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; import { EVENT_MANAGER_PLUGINS } from '@angular/platform-browser'; import { TUI_VERSION } from '@taiga-ui/cdk/constants'; import { TuiFontSize } from '@taiga-ui/cdk/directives/font-size'; import { TuiPlatform } from '@taiga-ui/cdk/directives/platform'; import { TuiVisualViewport } from '@taiga-ui/cdk/directives/visual-viewport'; import { tuiWatch } from '@taiga-ui/cdk/observables'; import { TUI_IS_MOBILE } from '@taiga-ui/cdk/tokens'; import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom'; import { TuiAlerts } from '@taiga-ui/core/components/alert'; import { TuiDialogs } from '@taiga-ui/core/components/dialog'; import { TUI_SCROLLBAR_OPTIONS, TuiScrollControls, } from '@taiga-ui/core/components/scrollbar'; import { TuiDropdowns } from '@taiga-ui/core/directives/dropdown'; import { TuiHints } from '@taiga-ui/core/directives/hint'; import { TuiPopups } from '@taiga-ui/core/directives/popup'; import { TuiBreakpointService } from '@taiga-ui/core/services'; import { TUI_ANIMATIONS_SPEED, TUI_REDUCED_MOTION, TUI_THEME } from '@taiga-ui/core/tokens'; import { tuiGetDuration } from '@taiga-ui/core/utils'; import { PreventEventPlugin } from '@taiga-ui/event-plugins'; import { map } from 'rxjs'; import * as i0 from "@angular/core"; import * as i1 from "@taiga-ui/cdk/directives/platform"; import * as i2 from "@taiga-ui/cdk/directives/visual-viewport"; import * as i3 from "@taiga-ui/cdk/directives/font-size"; class TuiRoot { constructor() { this.doc = inject(DOCUMENT); this.el = tuiInjectElement(); this.reducedMotion = inject(TUI_REDUCED_MOTION); this.duration = tuiGetDuration(inject(TUI_ANIMATIONS_SPEED)); this.isChildRoot = !!inject(TuiRoot, { optional: true, skipSelf: true }); this.top = signal(!this.isChildRoot); this.isMobileRes = toSignal(inject(TuiBreakpointService).pipe(map((breakpoint) => breakpoint === 'mobile'), tuiWatch()), { initialValue: false }); this.nativeScrollbar = inject(TUI_SCROLLBAR_OPTIONS).mode === 'native'; this.scrollbars = !this.nativeScrollbar && !inject(TUI_IS_MOBILE) && !this.isChildRoot; // TODO move to provideTaiga in v5 const factory = inject(RendererFactory2); factory.removeStylesOnCompDestroy = false; if (factory.delegate) { factory.delegate.removeStylesOnCompDestroy = false; } if (!this.top()) { return; } this.doc.documentElement.setAttribute('data-tui-theme', inject(TUI_THEME).toLowerCase()); if (!this.nativeScrollbar) { this.doc.defaultView?.document.documentElement.classList.add('tui-zero-scrollbar'); } ngDevMode && console.assert(!!inject(EVENT_MANAGER_PLUGINS).find((plugin) => plugin instanceof PreventEventPlugin), 'NG_EVENT_PLUGINS is missing from global providers'); } get isTopLayer() { return this.doc.fullscreenElement?.matches('tui-root') ? this.doc.fullscreenElement === this.el : !this.isChildRoot; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRoot, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiRoot, isStandalone: true, selector: "tui-root", host: { attributes: { "data-tui-version": "4.49.0" }, listeners: { "touchstart.passive.zoneless": "0", "document:fullscreenchange": "top.set(isTopLayer)" }, properties: { "style.--tui-duration.ms": "duration", "style.--tui-scroll-behavior": "reducedMotion ? \"auto\" : \"smooth\"", "class._mobile": "isMobileRes()" } }, hostDirectives: [{ directive: i1.TuiPlatform }, { directive: i2.TuiVisualViewport }, { directive: i3.TuiFontSize }], ngImport: i0, template: "<div class=\"t-root-content\">\n <ng-content />\n</div>\n<ng-container *ngIf=\"top()\">\n <tui-scroll-controls\n *ngIf=\"scrollbars\"\n class=\"t-root-scrollbar\"\n />\n <tui-popups />\n <ng-content select=\"tuiOverContent\" />\n <tui-dialogs />\n <ng-content select=\"tuiOverDialogs\" />\n <tui-alerts />\n <ng-content select=\"tuiOverAlerts\" />\n <tui-dropdowns />\n <ng-content select=\"tuiOverDropdowns\" />\n <tui-hints />\n <ng-content select=\"tuiOverHints\" />\n</ng-container>\n", styles: ["@keyframes tuiSkeletonVibe{to{opacity:.5}}@keyframes tuiPresent{to{content:\"\"}}@keyframes tuiFade{0%{opacity:0}}@keyframes tuiSlide{0%{transform:var(--tui-from, translateY(100%))}}@keyframes tuiScale{0%{transform:scale(0)}}@keyframes tuiCollapse{0%{grid-template-rows:0fr}to{grid-template-rows:1fr}}.tui-enter,.tui-leave{animation-duration:var(--tui-duration);animation-timing-function:ease-in-out;pointer-events:none}.tui-leave{animation-direction:reverse}\n", ".tui-zero-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.tui-zero-scrollbar::-webkit-scrollbar,.tui-zero-scrollbar::-webkit-scrollbar-thumb{display:none}body,input{margin:0}tui-root{position:relative;display:block;font:var(--tui-font-text-s);color:var(--tui-text-primary);flex:1;border-image:conic-gradient(var(--tui-background-base) 0 0) fill 0/0/0 0 100vh 0;-webkit-tap-highlight-color:transparent}:root{--tui-inline-start: left;--tui-inline-end: right;--tui-inline: 1}[dir=rtl]{--tui-inline-start: right;--tui-inline-end: left;--tui-inline: -1}tui-root>.t-root-scrollbar{position:fixed;top:0;left:0;bottom:0;right:0;z-index:0;display:none;margin:0}[data-tui-theme] tui-root>.t-root-scrollbar{display:block}.t-root-content{position:relative;top:var(--t-root-top);block-size:100%;isolation:isolate}.t-root-content>*{--t-root-top: 0}[tuiDropdownButton][tuiDropdownButton]{display:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TuiAlerts, selector: "tui-alerts" }, { kind: "component", type: TuiDialogs, selector: "tui-dialogs" }, { kind: "component", type: TuiDropdowns, selector: "tui-dropdowns" }, { kind: "component", type: TuiHints, selector: "tui-hints" }, { kind: "component", type: TuiPopups, selector: "tui-popups" }, { kind: "component", type: TuiScrollControls, selector: "tui-scroll-controls" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); } } export { TuiRoot }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRoot, decorators: [{ type: Component, args: [{ standalone: true, selector: 'tui-root', imports: [ NgIf, TuiAlerts, TuiDialogs, TuiDropdowns, TuiHints, TuiPopups, TuiScrollControls, ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, hostDirectives: [TuiPlatform, TuiVisualViewport, TuiFontSize], host: { 'data-tui-version': TUI_VERSION, '[style.--tui-duration.ms]': 'duration', '[style.--tui-scroll-behavior]': 'reducedMotion ? "auto" : "smooth"', '[class._mobile]': 'isMobileRes()', // Required for the :active state to work in Safari. https://stackoverflow.com/a/33681490 '(touchstart.passive.zoneless)': '0', '(document:fullscreenchange)': 'top.set(isTopLayer)', }, template: "<div class=\"t-root-content\">\n <ng-content />\n</div>\n<ng-container *ngIf=\"top()\">\n <tui-scroll-controls\n *ngIf=\"scrollbars\"\n class=\"t-root-scrollbar\"\n />\n <tui-popups />\n <ng-content select=\"tuiOverContent\" />\n <tui-dialogs />\n <ng-content select=\"tuiOverDialogs\" />\n <tui-alerts />\n <ng-content select=\"tuiOverAlerts\" />\n <tui-dropdowns />\n <ng-content select=\"tuiOverDropdowns\" />\n <tui-hints />\n <ng-content select=\"tuiOverHints\" />\n</ng-container>\n", styles: ["@keyframes tuiSkeletonVibe{to{opacity:.5}}@keyframes tuiPresent{to{content:\"\"}}@keyframes tuiFade{0%{opacity:0}}@keyframes tuiSlide{0%{transform:var(--tui-from, translateY(100%))}}@keyframes tuiScale{0%{transform:scale(0)}}@keyframes tuiCollapse{0%{grid-template-rows:0fr}to{grid-template-rows:1fr}}.tui-enter,.tui-leave{animation-duration:var(--tui-duration);animation-timing-function:ease-in-out;pointer-events:none}.tui-leave{animation-direction:reverse}\n", ".tui-zero-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.tui-zero-scrollbar::-webkit-scrollbar,.tui-zero-scrollbar::-webkit-scrollbar-thumb{display:none}body,input{margin:0}tui-root{position:relative;display:block;font:var(--tui-font-text-s);color:var(--tui-text-primary);flex:1;border-image:conic-gradient(var(--tui-background-base) 0 0) fill 0/0/0 0 100vh 0;-webkit-tap-highlight-color:transparent}:root{--tui-inline-start: left;--tui-inline-end: right;--tui-inline: 1}[dir=rtl]{--tui-inline-start: right;--tui-inline-end: left;--tui-inline: -1}tui-root>.t-root-scrollbar{position:fixed;top:0;left:0;bottom:0;right:0;z-index:0;display:none;margin:0}[data-tui-theme] tui-root>.t-root-scrollbar{display:block}.t-root-content{position:relative;top:var(--t-root-top);block-size:100%;isolation:isolate}.t-root-content>*{--t-root-top: 0}[tuiDropdownButton][tuiDropdownButton]{display:none}\n"] }] }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvcm9vdC9yb290LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy9yb290L3Jvb3QudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3REFBd0Q7QUFBeEQsd0RBQXdEO0FBQ3hELE9BQU8sRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsTUFBTSxFQUNOLGdCQUFnQixFQUNoQixNQUFNLEVBQ04saUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQy9ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUNILHFCQUFx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QUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDbEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDeEMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDOytHQTFEUSxPQUFPO21HQUFQLE9BQU8seWZDOURwQiwraEJBbUJBLDI0Q0RtQlEsSUFBSSw2RkFDSixTQUFTLHVEQUNULFVBQVUsd0RBQ1YsWUFBWSwwREFDWixRQUFRLHNEQUNSLFNBQVMsdURBQ1QsaUJBQWlCOztTQWtCWixPQUFPOzRGQUFQLE9BQU87a0JBNUJuQixTQUFTO2lDQUNNLElBQUksWUFDTixVQUFVLFdBQ1g7d0JBQ0wsSUFBSTt3QkFDSixTQUFTO3dCQUNULFVBQVU7d0JBQ1YsWUFBWTt3QkFDWixRQUFRO3dCQUNSLFNBQVM7d0JBQ1QsaUJBQWlCO3FCQUNwQixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUVwQix1QkFBdUIsQ0FBQyxPQUFPLGtCQUNoQyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLENBQUMsUUFDdkQ7d0JBQ0Ysa0JBQWtCLEVBQUUsV0FBVzt3QkFDL0IsMkJBQTJCLEVBQUUsVUFBVTt3QkFDdkMsK0JBQStCLEVBQUUsbUNBQW1DO3dCQUNwRSxpQkFBaUIsRUFBRSxlQUFlO3dCQUNsQyx5RkFBeUY7d0JBQ3pGLCtCQUErQixFQUFFLEdBQUc7d0JBQ3BDLDZCQUE2QixFQUFFLHFCQUFxQjtxQkFDdkQiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIkB0YWlnYS11aS90c2NvbmZpZy9uZy1kZXYtbW9kZVwiIC8+XG5pbXBvcnQge0RPQ1VNRU5ULCBOZ0lmfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgaW5qZWN0LFxuICAgIFJlbmRlcmVyRmFjdG9yeTIsXG4gICAgc2lnbmFsLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dG9TaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7RVZFTlRfTUFOQUdFUl9QTFVHSU5TfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7VFVJX1ZFUlNJT059IGZyb20gJ0B0YWlnYS11aS9jZGsvY29uc3RhbnRzJztcbmltcG9ydCB7VHVpRm9udFNpemV9IGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9mb250LXNpemUnO1xuaW1wb3J0IHtUdWlQbGF0Zm9ybX0gZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL3BsYXRmb3JtJztcbmltcG9ydCB7VHVpVmlzdWFsVmlld3BvcnR9IGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy92aXN1YWwtdmlld3BvcnQnO1xuaW1wb3J0IHt0dWlXYXRjaH0gZnJvbSAnQHRhaWdhLXVpL2Nkay9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge1RVSV9JU19NT0JJTEV9IGZyb20gJ0B0YWlnYS11aS9jZGsvdG9rZW5zJztcbmltcG9ydCB7dHVpSW5qZWN0RWxlbWVudH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kb20nO1xuaW1wb3J0IHtUdWlBbGVydHN9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvYWxlcnQnO1xuaW1wb3J0IHtUdWlEaWFsb2dzfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL2RpYWxvZyc7XG5pbXBvcnQge1xuICAgIFRVSV9TQ1JPTExCQVJfT1BUSU9OUyxcbiAgICBUdWlTY3JvbGxDb250cm9scyxcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9zY3JvbGxiYXInO1xuaW1wb3J0IHtUdWlEcm9wZG93bnN9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2RpcmVjdGl2ZXMvZHJvcGRvd24nO1xuaW1wb3J0IHtUdWlIaW50c30gZnJvbSAnQHRhaWdhLXVpL2NvcmUvZGlyZWN0aXZlcy9oaW50JztcbmltcG9ydCB7VHVpUG9wdXBzfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL3BvcHVwJztcbmltcG9ydCB7VHVpQnJlYWtwb2ludFNlcnZpY2V9IGZyb20gJ0B0YWlnYS11aS9jb3JlL3NlcnZpY2VzJztcbmltcG9ydCB7VFVJX0FOSU1BVElPTlNfU1BFRUQsIFRVSV9SRURVQ0VEX01PVElPTiwgVFVJX1RIRU1FfSBmcm9tICdAdGFpZ2EtdWkvY29yZS90b2tlbnMnO1xuaW1wb3J0IHt0dWlHZXREdXJhdGlvbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHtQcmV2ZW50RXZlbnRQbHVnaW59IGZyb20gJ0B0YWlnYS11aS9ldmVudC1wbHVnaW5zJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3R1aS1yb290JyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIFR1aUFsZXJ0cyxcbiAgICAgICAgVHVpRGlhbG9ncyxcbiAgICAgICAgVHVpRHJvcGRvd25zLFxuICAgICAgICBUdWlIaW50cyxcbiAgICAgICAgVHVpUG9wdXBzLFxuICAgICAgICBUdWlTY3JvbGxDb250cm9scyxcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yb290LnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2FuaW1hdGlvbnMubGVzcycsICcuL3Jvb3Quc3R5bGUubGVzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9wcmVmZXItb24tcHVzaC1jb21wb25lbnQtY2hhbmdlLWRldGVjdGlvblxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbiAgICBob3N0RGlyZWN0aXZlczogW1R1aVBsYXRmb3JtLCBUdWlWaXN1YWxWaWV3cG9ydCwgVHVpRm9udFNpemVdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ2RhdGEtdHVpLXZlcnNpb24nOiBUVUlfVkVSU0lPTixcbiAgICAgICAgJ1tzdHlsZS4tLXR1aS1kdXJhdGlvbi5tc10nOiAnZHVyYXRpb24nLFxuICAgICAgICAnW3N0eWxlLi0tdHVpLXNjcm9sbC1iZWhhdmlvcl0nOiAncmVkdWNlZE1vdGlvbiA/IFwiYXV0b1wiIDogXCJzbW9vdGhcIicsXG4gICAgICAgICdbY2xhc3MuX21vYmlsZV0nOiAnaXNNb2JpbGVSZXMoKScsXG4gICAgICAgIC8vIFJlcXVpcmVkIGZvciB0aGUgOmFjdGl2ZSBzdGF0ZSB0byB3b3JrIGluIFNhZmFyaS4gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzMzNjgxNDkwXG4gICAgICAgICcodG91Y2hzdGFydC5wYXNzaXZlLnpvbmVsZXNzKSc6ICcwJyxcbiAgICAgICAgJyhkb2N1bWVudDpmdWxsc2NyZWVuY2hhbmdlKSc6ICd0b3Auc2V0KGlzVG9wTGF5ZXIpJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBUdWlSb290IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvYyA9IGluamVjdChET0NVTUVOVCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbCA9IHR1aUluamVjdEVsZW1lbnQoKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVkdWNlZE1vdGlvbiA9IGluamVjdChUVUlfUkVEVUNFRF9NT1RJT04pO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkdXJhdGlvbiA9IHR1aUdldER1cmF0aW9uKGluamVjdChUVUlfQU5JTUFUSU9OU19TUEVFRCkpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0NoaWxkUm9vdCA9ICEhaW5qZWN0KFR1aVJvb3QsIHtvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWV9KTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdG9wID0gc2lnbmFsKCF0aGlzLmlzQ2hpbGRSb290KTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNNb2JpbGVSZXMgPSB0b1NpZ25hbChcbiAgICAgICAgaW5qZWN0KFR1aUJyZWFrcG9pbnRTZXJ2aWNlKS5waXBlKFxuICAgICAgICAgICAgbWFwKChicmVha3BvaW50KSA9PiBicmVha3BvaW50ID09PSAnbW9iaWxlJyksXG4gICAgICAgICAgICB0dWlXYXRjaCgpLFxuICAgICAgICApLFxuICAgICAgICB7aW5pdGlhbFZhbHVlOiBmYWxzZX0sXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBuYXRpdmVTY3JvbGxiYXIgPSBpbmplY3QoVFVJX1NDUk9MTEJBUl9PUFRJT05TKS5tb2RlID09PSAnbmF0aXZlJztcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBzY3JvbGxiYXJzID1cbiAgICAgICAgIXRoaXMubmF0aXZlU2Nyb2xsYmFyICYmICFpbmplY3QoVFVJX0lTX01PQklMRSkgJiYgIXRoaXMuaXNDaGlsZFJvb3Q7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8gVE9ETyBtb3ZlIHRvIHByb3ZpZGVUYWlnYSBpbiB2NVxuICAgICAgICBjb25zdCBmYWN0b3J5ID0gaW5qZWN0PGFueT4oUmVuZGVyZXJGYWN0b3J5Mik7XG5cbiAgICAgICAgZmFjdG9yeS5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGZhY3RvcnkuZGVsZWdhdGUpIHtcbiAgICAgICAgICAgIGZhY3RvcnkuZGVsZWdhdGUucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRvcCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRvYy5kb2N1bWVudEVsZW1lbnQuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgJ2RhdGEtdHVpLXRoZW1lJyxcbiAgICAgICAgICAgIGluamVjdChUVUlfVEhFTUUpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCF0aGlzLm5hdGl2ZVNjcm9sbGJhcikge1xuICAgICAgICAgICAgdGhpcy5kb2MuZGVmYXVsdFZpZXc/LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKFxuICAgICAgICAgICAgICAgICd0dWktemVyby1zY3JvbGxiYXInLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5nRGV2TW9kZSAmJlxuICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoXG4gICAgICAgICAgICAgICAgISFpbmplY3Q8dW5rbm93bltdPihFVkVOVF9NQU5BR0VSX1BMVUdJTlMpLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChwbHVnaW4pID0+IHBsdWdpbiBpbnN0YW5jZW9mIFByZXZlbnRFdmVudFBsdWdpbixcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICdOR19FVkVOVF9QTFVHSU5TIGlzIG1pc3NpbmcgZnJvbSBnbG9iYWwgcHJvdmlkZXJzJyxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBpc1RvcExheWVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2MuZnVsbHNjcmVlbkVsZW1lbnQ/Lm1hdGNoZXMoJ3R1aS1yb290JylcbiAgICAgICAgICAgID8gdGhpcy5kb2MuZnVsbHNjcmVlbkVsZW1lbnQgPT09IHRoaXMuZWxcbiAgICAgICAgICAgIDogIXRoaXMuaXNDaGlsZFJvb3Q7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInQtcm9vdC1jb250ZW50XCI+XG4gICAgPG5nLWNvbnRlbnQgLz5cbjwvZGl2PlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvcCgpXCI+XG4gICAgPHR1aS1zY3JvbGwtY29udHJvbHNcbiAgICAgICAgKm5nSWY9XCJzY3JvbGxiYXJzXCJcbiAgICAgICAgY2xhc3M9XCJ0LXJvb3Qtc2Nyb2xsYmFyXCJcbiAgICAvPlxuICAgIDx0dWktcG9wdXBzIC8+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwidHVpT3ZlckNvbnRlbnRcIiAvPlxuICAgIDx0dWktZGlhbG9ncyAvPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInR1aU92ZXJEaWFsb2dzXCIgLz5cbiAgICA8dHVpLWFsZXJ0cyAvPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInR1aU92ZXJBbGVydHNcIiAvPlxuICAgIDx0dWktZHJvcGRvd25zIC8+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwidHVpT3ZlckRyb3Bkb3duc1wiIC8+XG4gICAgPHR1aS1oaW50cyAvPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInR1aU92ZXJIaW50c1wiIC8+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==