UNPKG

@taiga-ui/core

Version:

Core library for creating Angular components and applications using Taiga UI

87 lines 21.8 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 { TuiActiveZone } from '@taiga-ui/cdk/directives/active-zone'; 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"; import * as i4 from "@taiga-ui/cdk/directives/active-zone"; 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.66.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 }, { directive: i4.TuiActiveZone }], 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{opacity:.99999}}@keyframes tuiFade{0%{opacity:0}}@keyframes tuiSlide{0%{transform:var(--tui-from, translateY(100%))}}@keyframes tuiScale{0%{transform:scale(var(--tui-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, TuiActiveZone], 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{opacity:.99999}}@keyframes tuiFade{0%{opacity:0}}@keyframes tuiSlide{0%{transform:var(--tui-from, translateY(100%))}}@keyframes tuiScale{0%{transform:scale(var(--tui-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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvcm9vdC9yb290LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy9yb290L3Jvb3QudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3REFBd0Q7QUFBeEQsd0RBQXdEO0FBQ3hELE9BQU8sRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsTUFBTSxFQUNOLGdCQUFnQixFQUNoQixNQUFNLEVBQ04saUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDOUQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFDLFVBQVUs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QztJQUVELElBQWMsVUFBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUNsRCxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLENBQUMsRUFBRTtZQUN4QyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7K0dBMURRLE9BQU87bUdBQVAsT0FBTywwaEJDL0RwQiwraEJBbUJBLCs1Q0RvQlEsSUFBSSw2RkFDSixTQUFTLHVEQUNULFVBQVUsd0RBQ1YsWUFBWSwwREFDWixRQUFRLHNEQUNSLFNBQVMsdURBQ1QsaUJBQWlCOztTQWtCWixPQUFPOzRGQUFQLE9BQU87a0JBNUJuQixTQUFTO2lDQUNNLElBQUksWUFDTixVQUFVLFdBQ1g7d0JBQ0wsSUFBSTt3QkFDSixTQUFTO3dCQUNULFVBQVU7d0JBQ1YsWUFBWTt3QkFDWixRQUFRO3dCQUNSLFNBQVM7d0JBQ1QsaUJBQWlCO3FCQUNwQixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUVwQix1QkFBdUIsQ0FBQyxPQUFPLGtCQUNoQyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLFFBQ3RFO3dCQUNGLGtCQUFrQixFQUFFLFdBQVc7d0JBQy9CLDJCQUEyQixFQUFFLFVBQVU7d0JBQ3ZDLCtCQUErQixFQUFFLG1DQUFtQzt3QkFDcEUsaUJBQWlCLEVBQUUsZUFBZTt3QkFDbEMseUZBQXlGO3dCQUN6RiwrQkFBK0IsRUFBRSxHQUFHO3dCQUNwQyw2QkFBNkIsRUFBRSxxQkFBcUI7cUJBQ3ZEIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJAdGFpZ2EtdWkvdHNjb25maWcvbmctZGV2LW1vZGVcIiAvPlxuaW1wb3J0IHtET0NVTUVOVCwgTmdJZn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGluamVjdCxcbiAgICBSZW5kZXJlckZhY3RvcnkyLFxuICAgIHNpZ25hbCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3RvU2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge0VWRU5UX01BTkFHRVJfUExVR0lOU30gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge1RVSV9WRVJTSU9OfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NvbnN0YW50cyc7XG5pbXBvcnQge1R1aUFjdGl2ZVpvbmV9IGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9hY3RpdmUtem9uZSc7XG5pbXBvcnQge1R1aUZvbnRTaXplfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvZm9udC1zaXplJztcbmltcG9ydCB7VHVpUGxhdGZvcm19IGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9wbGF0Zm9ybSc7XG5pbXBvcnQge1R1aVZpc3VhbFZpZXdwb3J0fSBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvdmlzdWFsLXZpZXdwb3J0JztcbmltcG9ydCB7dHVpV2F0Y2h9IGZyb20gJ0B0YWlnYS11aS9jZGsvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtUVUlfSVNfTU9CSUxFfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3Rva2Vucyc7XG5pbXBvcnQge3R1aUluamVjdEVsZW1lbnR9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvZG9tJztcbmltcG9ydCB7VHVpQWxlcnRzfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL2FsZXJ0JztcbmltcG9ydCB7VHVpRGlhbG9nc30gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9kaWFsb2cnO1xuaW1wb3J0IHtcbiAgICBUVUlfU0NST0xMQkFSX09QVElPTlMsXG4gICAgVHVpU2Nyb2xsQ29udHJvbHMsXG59IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvc2Nyb2xsYmFyJztcbmltcG9ydCB7VHVpRHJvcGRvd25zfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL2Ryb3Bkb3duJztcbmltcG9ydCB7VHVpSGludHN9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2RpcmVjdGl2ZXMvaGludCc7XG5pbXBvcnQge1R1aVBvcHVwc30gZnJvbSAnQHRhaWdhLXVpL2NvcmUvZGlyZWN0aXZlcy9wb3B1cCc7XG5pbXBvcnQge1R1aUJyZWFrcG9pbnRTZXJ2aWNlfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9zZXJ2aWNlcyc7XG5pbXBvcnQge1RVSV9BTklNQVRJT05TX1NQRUVELCBUVUlfUkVEVUNFRF9NT1RJT04sIFRVSV9USEVNRX0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvdG9rZW5zJztcbmltcG9ydCB7dHVpR2V0RHVyYXRpb259IGZyb20gJ0B0YWlnYS11aS9jb3JlL3V0aWxzJztcbmltcG9ydCB7UHJldmVudEV2ZW50UGx1Z2lufSBmcm9tICdAdGFpZ2EtdWkvZXZlbnQtcGx1Z2lucyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICd0dWktcm9vdCcsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBUdWlBbGVydHMsXG4gICAgICAgIFR1aURpYWxvZ3MsXG4gICAgICAgIFR1aURyb3Bkb3ducyxcbiAgICAgICAgVHVpSGludHMsXG4gICAgICAgIFR1aVBvcHVwcyxcbiAgICAgICAgVHVpU2Nyb2xsQ29udHJvbHMsXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcm9vdC50ZW1wbGF0ZS5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hbmltYXRpb25zLmxlc3MnLCAnLi9yb290LnN0eWxlLmxlc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvcHJlZmVyLW9uLXB1c2gtY29tcG9uZW50LWNoYW5nZS1kZXRlY3Rpb25cbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtUdWlQbGF0Zm9ybSwgVHVpVmlzdWFsVmlld3BvcnQsIFR1aUZvbnRTaXplLCBUdWlBY3RpdmVab25lXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdkYXRhLXR1aS12ZXJzaW9uJzogVFVJX1ZFUlNJT04sXG4gICAgICAgICdbc3R5bGUuLS10dWktZHVyYXRpb24ubXNdJzogJ2R1cmF0aW9uJyxcbiAgICAgICAgJ1tzdHlsZS4tLXR1aS1zY3JvbGwtYmVoYXZpb3JdJzogJ3JlZHVjZWRNb3Rpb24gPyBcImF1dG9cIiA6IFwic21vb3RoXCInLFxuICAgICAgICAnW2NsYXNzLl9tb2JpbGVdJzogJ2lzTW9iaWxlUmVzKCknLFxuICAgICAgICAvLyBSZXF1aXJlZCBmb3IgdGhlIDphY3RpdmUgc3RhdGUgdG8gd29yayBpbiBTYWZhcmkuIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zMzY4MTQ5MFxuICAgICAgICAnKHRvdWNoc3RhcnQucGFzc2l2ZS56b25lbGVzcyknOiAnMCcsXG4gICAgICAgICcoZG9jdW1lbnQ6ZnVsbHNjcmVlbmNoYW5nZSknOiAndG9wLnNldChpc1RvcExheWVyKScsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpUm9vdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2MgPSBpbmplY3QoRE9DVU1FTlQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWwgPSB0dWlJbmplY3RFbGVtZW50KCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlZHVjZWRNb3Rpb24gPSBpbmplY3QoVFVJX1JFRFVDRURfTU9USU9OKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZHVyYXRpb24gPSB0dWlHZXREdXJhdGlvbihpbmplY3QoVFVJX0FOSU1BVElPTlNfU1BFRUQpKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNDaGlsZFJvb3QgPSAhIWluamVjdChUdWlSb290LCB7b3B0aW9uYWw6IHRydWUsIHNraXBTZWxmOiB0cnVlfSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRvcCA9IHNpZ25hbCghdGhpcy5pc0NoaWxkUm9vdCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzTW9iaWxlUmVzID0gdG9TaWduYWwoXG4gICAgICAgIGluamVjdChUdWlCcmVha3BvaW50U2VydmljZSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoYnJlYWtwb2ludCkgPT4gYnJlYWtwb2ludCA9PT0gJ21vYmlsZScpLFxuICAgICAgICAgICAgdHVpV2F0Y2goKSxcbiAgICAgICAgKSxcbiAgICAgICAge2luaXRpYWxWYWx1ZTogZmFsc2V9LFxuICAgICk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmF0aXZlU2Nyb2xsYmFyID0gaW5qZWN0KFRVSV9TQ1JPTExCQVJfT1BUSU9OUykubW9kZSA9PT0gJ25hdGl2ZSc7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2Nyb2xsYmFycyA9XG4gICAgICAgICF0aGlzLm5hdGl2ZVNjcm9sbGJhciAmJiAhaW5qZWN0KFRVSV9JU19NT0JJTEUpICYmICF0aGlzLmlzQ2hpbGRSb290O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8vIFRPRE8gbW92ZSB0byBwcm92aWRlVGFpZ2EgaW4gdjVcbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IGluamVjdDxhbnk+KFJlbmRlcmVyRmFjdG9yeTIpO1xuXG4gICAgICAgIGZhY3RvcnkucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChmYWN0b3J5LmRlbGVnYXRlKSB7XG4gICAgICAgICAgICBmYWN0b3J5LmRlbGVnYXRlLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3kgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy50b3AoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kb2MuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICdkYXRhLXR1aS10aGVtZScsXG4gICAgICAgICAgICBpbmplY3QoVFVJX1RIRU1FKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghdGhpcy5uYXRpdmVTY3JvbGxiYXIpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRlZmF1bHRWaWV3Py5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcbiAgICAgICAgICAgICAgICAndHVpLXplcm8tc2Nyb2xsYmFyJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBuZ0Rldk1vZGUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICEhaW5qZWN0PHVua25vd25bXT4oRVZFTlRfTUFOQUdFUl9QTFVHSU5TKS5maW5kKFxuICAgICAgICAgICAgICAgICAgICAocGx1Z2luKSA9PiBwbHVnaW4gaW5zdGFuY2VvZiBQcmV2ZW50RXZlbnRQbHVnaW4sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAnTkdfRVZFTlRfUExVR0lOUyBpcyBtaXNzaW5nIGZyb20gZ2xvYmFsIHByb3ZpZGVycycsXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgaXNUb3BMYXllcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmZ1bGxzY3JlZW5FbGVtZW50Py5tYXRjaGVzKCd0dWktcm9vdCcpXG4gICAgICAgICAgICA/IHRoaXMuZG9jLmZ1bGxzY3JlZW5FbGVtZW50ID09PSB0aGlzLmVsXG4gICAgICAgICAgICA6ICF0aGlzLmlzQ2hpbGRSb290O1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0LXJvb3QtY29udGVudFwiPlxuICAgIDxuZy1jb250ZW50IC8+XG48L2Rpdj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ0b3AoKVwiPlxuICAgIDx0dWktc2Nyb2xsLWNvbnRyb2xzXG4gICAgICAgICpuZ0lmPVwic2Nyb2xsYmFyc1wiXG4gICAgICAgIGNsYXNzPVwidC1yb290LXNjcm9sbGJhclwiXG4gICAgLz5cbiAgICA8dHVpLXBvcHVwcyAvPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInR1aU92ZXJDb250ZW50XCIgLz5cbiAgICA8dHVpLWRpYWxvZ3MgLz5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJ0dWlPdmVyRGlhbG9nc1wiIC8+XG4gICAgPHR1aS1hbGVydHMgLz5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJ0dWlPdmVyQWxlcnRzXCIgLz5cbiAgICA8dHVpLWRyb3Bkb3ducyAvPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInR1aU92ZXJEcm9wZG93bnNcIiAvPlxuICAgIDx0dWktaGludHMgLz5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJ0dWlPdmVySGludHNcIiAvPlxuPC9uZy1jb250YWluZXI+XG4iXX0=