UNPKG

@taiga-ui/addon-doc

Version:

Taiga UI based library for developing documentation portals for Angular libraries.

41 lines 21.7 kB
import { DOCUMENT, NgIf } from '@angular/common'; import { ChangeDetectionStrategy, Component, computed, inject, ViewEncapsulation, } from '@angular/core'; import { RouterOutlet } from '@angular/router'; import { TUI_DOC_DIRECTION_ENABLED, TUI_DOC_ICONS } from '@taiga-ui/addon-doc/tokens'; import { TuiButton } from '@taiga-ui/core/components/button'; import { TuiIcon } from '@taiga-ui/core/components/icon'; import { TuiRoot } from '@taiga-ui/core/components/root'; import { TUI_DARK_MODE } from '@taiga-ui/core/tokens'; import { TuiDocHeader } from '../internal/header'; import { TuiDocNavigation } from '../navigation/navigation.component'; import * as i0 from "@angular/core"; class TuiDocMain { constructor() { this.doc = inject(DOCUMENT); this.icons = inject(TUI_DOC_ICONS); this.dir = inject(TUI_DOC_DIRECTION_ENABLED); this.darkMode = inject(TUI_DARK_MODE); this.theme = computed(() => (this.darkMode() ? 'dark' : null)); this.icon = computed(() => this.darkMode() ? this.icons.light : this.icons.dark); } changeTextDirection() { const dir = this.doc.documentElement.getAttribute('dir') ?? 'ltr'; this.doc.documentElement.setAttribute('dir', dir === 'ltr' ? 'rtl' : 'ltr'); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDocMain, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiDocMain, isStandalone: true, selector: "tui-doc-main", ngImport: i0, template: "<tui-root [attr.tuiTheme]=\"theme()\">\n <div class=\"tui-doc-page\">\n <tui-doc-navigation class=\"tui-doc-navigation\">\n <ng-content select=\"tuiDocNavigation\" />\n </tui-doc-navigation>\n <div class=\"tui-doc-content\">\n <router-outlet class=\"tui-doc-outlet\" />\n </div>\n </div>\n <header tuiDocHeader>\n <ng-content select=\"tuiDocHeader\" />\n\n <button\n *ngIf=\"dir && icons.ltr\"\n appearance=\"outline\"\n aria-label=\"Switch directionality of the element's text\"\n size=\"s\"\n tuiButton\n type=\"button\"\n class=\"tui-doc-switch-direction\"\n [iconEnd]=\"icons.ltr.preview\"\n (click)=\"changeTextDirection()\"\n >\n <tui-icon [icon]=\"icons.ltr.direction\" />\n </button>\n\n <button\n appearance=\"secondary\"\n aria-label=\"Switch between dark and light mode\"\n size=\"s\"\n tuiIconButton\n type=\"button\"\n class=\"tui-doc-dark-mode-switch\"\n [iconStart]=\"icon()\"\n [style.border-radius.%]=\"100\"\n (click)=\"darkMode.set(!darkMode())\"\n ></button>\n </header>\n <ng-container ngProjectAs=\"tuiOverContent\">\n <ng-content select=\"tuiOverContent\" />\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverDialogs\">\n <ng-content select=\"tuiOverDialogs\" />\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverAlerts\">\n <ng-content select=\"tuiOverAlerts\" />\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverDropdowns\">\n <ng-content select=\"tuiOverDropdowns\" />\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverHints\">\n <ng-content select=\"tuiOverHints\" />\n </ng-container>\n</tui-root>\n", styles: ["@keyframes tuiShaking{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(-.3125rem,0,0)}20%,40%,60%,80%{transform:translate3d(.3125rem,0,0)}}html,body{scroll-padding-top:4rem;background:var(--tui-background-base)}tui-root>tui-scroll-controls>.t-bar_vertical{top:4rem!important}tui-doc-main{display:block}code:not(pre code):not(.hljs):not([class*=language-]){transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;display:inline-flex;background:var(--tui-background-neutral-1);color:var(--tui-text-secondary);vertical-align:middle;align-items:center;border-radius:.25rem;font-weight:500;outline:1px solid var(--tui-border-hover);font-size:.75rem;padding:0 .3125rem;margin:.125rem .1875rem;text-wrap:wrap}a code:not(pre code):not(.hljs):not([class*=language-]){color:var(--tui-text-action)}button:focus code,a:focus code{background:var(--tui-background-base)}.tui-doc-page{isolation:isolate;padding-block-start:4rem}tui-doc-navigation.tui-doc-navigation{position:fixed;top:4rem;bottom:0;inline-size:16.25rem;border-inline-end:1px solid var(--tui-border-normal)}@media screen and (max-width: 47.9625em){tui-doc-navigation.tui-doc-navigation{display:none}}.tui-doc-content{margin-inline-start:16.25rem}@media screen and (max-width: 47.9625em){.tui-doc-content{margin-inline-start:0}}.tui-doc-outlet+*{display:block}.tui-doc-switch-direction,.tui-doc-dark-mode-switch{margin-inline-start:1rem}tui-doc-code .hljs-tag{background:none}tui-doc-code .hljs{display:block;overflow-x:auto;padding:.5em;color:var(--tui-text-primary);background-color:var(--tui-background-neutral-1)}tui-doc-code .hljs.hljs-line-numbers{background:transparent}tui-doc-code .hljs-subst,tui-doc-code .hljs-title{font-weight:400;color:var(--tui-text-primary)}tui-doc-code .hljs-property{color:#bd65a4}tui-doc-code .hljs-comment,tui-doc-code .hljs-quote{color:var(--tui-text-secondary);font-style:italic}tui-doc-code .hljs-meta{color:#e38162}tui-doc-code .hljs-section,tui-doc-code .hljs-name,tui-doc-code .hljs-literal,tui-doc-code .hljs-keyword,tui-doc-code .hljs-selector-tag,tui-doc-code .hljs-type,tui-doc-code .hljs-selector-id,tui-doc-code .hljs-selector-class{font-weight:700;color:var(--tui-text-action)}tui-doc-code .hljs-attr{color:var(--tui-text-action)}tui-doc-code .hljs-attribute,tui-doc-code .hljs-number,tui-doc-code .hljs-regexp,tui-doc-code .hljs-link,tui-doc-code .hljs-built_in{font-weight:700;color:#b8474e}tui-doc-code .hljs-number,tui-doc-code .hljs-regexp,tui-doc-code .hljs-link{font-weight:400}tui-doc-code .hljs-string{color:var(--tui-status-positive);font-weight:700}tui-doc-code .hljs-symbol,tui-doc-code .hljs-bullet,tui-doc-code .hljs-formula{color:var(--tui-text-primary);background:var(--tui-background-base-alt);font-style:italic}tui-doc-code .hljs-doctag{text-decoration:underline}tui-doc-code .hljs-variable,tui-doc-code .hljs-template-variable{color:var(--tui-text-action-hover)}tui-doc-code .hljs-addition{background:var(--tui-status-positive-pale)}tui-doc-code .hljs-deletion{background:var(--tui-status-negative-pale)}tui-doc-code .hljs-emphasis{font-style:italic}tui-doc-code .hljs-strong{font-weight:700}tui-doc-code .hljs .hljs-line-numbers{padding:0}tui-doc-code .hljs-ln-numbers{vertical-align:top;opacity:.3;text-align:end;padding-inline-end:1em!important}[tuiTheme=dark] tui-doc-code .hljs-variable,tui-doc-code[tuiTheme=dark] .hljs-variable,[tuiTheme=dark] tui-doc-code .hljs-template-variable,tui-doc-code[tuiTheme=dark] .hljs-template-variable{color:var(--tui-status-warning)}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiDocHeader, selector: "header[tuiDocHeader]" }, { kind: "component", type: TuiDocNavigation, selector: "tui-doc-navigation" }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "component", type: TuiRoot, selector: "tui-root" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); } } export { TuiDocMain }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDocMain, decorators: [{ type: Component, args: [{ standalone: true, selector: 'tui-doc-main', imports: [ NgIf, RouterOutlet, TuiButton, TuiDocHeader, TuiDocNavigation, TuiIcon, TuiRoot, ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, template: "<tui-root [attr.tuiTheme]=\"theme()\">\n <div class=\"tui-doc-page\">\n <tui-doc-navigation class=\"tui-doc-navigation\">\n <ng-content select=\"tuiDocNavigation\" />\n </tui-doc-navigation>\n <div class=\"tui-doc-content\">\n <router-outlet class=\"tui-doc-outlet\" />\n </div>\n </div>\n <header tuiDocHeader>\n <ng-content select=\"tuiDocHeader\" />\n\n <button\n *ngIf=\"dir && icons.ltr\"\n appearance=\"outline\"\n aria-label=\"Switch directionality of the element's text\"\n size=\"s\"\n tuiButton\n type=\"button\"\n class=\"tui-doc-switch-direction\"\n [iconEnd]=\"icons.ltr.preview\"\n (click)=\"changeTextDirection()\"\n >\n <tui-icon [icon]=\"icons.ltr.direction\" />\n </button>\n\n <button\n appearance=\"secondary\"\n aria-label=\"Switch between dark and light mode\"\n size=\"s\"\n tuiIconButton\n type=\"button\"\n class=\"tui-doc-dark-mode-switch\"\n [iconStart]=\"icon()\"\n [style.border-radius.%]=\"100\"\n (click)=\"darkMode.set(!darkMode())\"\n ></button>\n </header>\n <ng-container ngProjectAs=\"tuiOverContent\">\n <ng-content select=\"tuiOverContent\" />\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverDialogs\">\n <ng-content select=\"tuiOverDialogs\" />\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverAlerts\">\n <ng-content select=\"tuiOverAlerts\" />\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverDropdowns\">\n <ng-content select=\"tuiOverDropdowns\" />\n </ng-container>\n <ng-container ngProjectAs=\"tuiOverHints\">\n <ng-content select=\"tuiOverHints\" />\n </ng-container>\n</tui-root>\n", styles: ["@keyframes tuiShaking{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(-.3125rem,0,0)}20%,40%,60%,80%{transform:translate3d(.3125rem,0,0)}}html,body{scroll-padding-top:4rem;background:var(--tui-background-base)}tui-root>tui-scroll-controls>.t-bar_vertical{top:4rem!important}tui-doc-main{display:block}code:not(pre code):not(.hljs):not([class*=language-]){transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;display:inline-flex;background:var(--tui-background-neutral-1);color:var(--tui-text-secondary);vertical-align:middle;align-items:center;border-radius:.25rem;font-weight:500;outline:1px solid var(--tui-border-hover);font-size:.75rem;padding:0 .3125rem;margin:.125rem .1875rem;text-wrap:wrap}a code:not(pre code):not(.hljs):not([class*=language-]){color:var(--tui-text-action)}button:focus code,a:focus code{background:var(--tui-background-base)}.tui-doc-page{isolation:isolate;padding-block-start:4rem}tui-doc-navigation.tui-doc-navigation{position:fixed;top:4rem;bottom:0;inline-size:16.25rem;border-inline-end:1px solid var(--tui-border-normal)}@media screen and (max-width: 47.9625em){tui-doc-navigation.tui-doc-navigation{display:none}}.tui-doc-content{margin-inline-start:16.25rem}@media screen and (max-width: 47.9625em){.tui-doc-content{margin-inline-start:0}}.tui-doc-outlet+*{display:block}.tui-doc-switch-direction,.tui-doc-dark-mode-switch{margin-inline-start:1rem}tui-doc-code .hljs-tag{background:none}tui-doc-code .hljs{display:block;overflow-x:auto;padding:.5em;color:var(--tui-text-primary);background-color:var(--tui-background-neutral-1)}tui-doc-code .hljs.hljs-line-numbers{background:transparent}tui-doc-code .hljs-subst,tui-doc-code .hljs-title{font-weight:400;color:var(--tui-text-primary)}tui-doc-code .hljs-property{color:#bd65a4}tui-doc-code .hljs-comment,tui-doc-code .hljs-quote{color:var(--tui-text-secondary);font-style:italic}tui-doc-code .hljs-meta{color:#e38162}tui-doc-code .hljs-section,tui-doc-code .hljs-name,tui-doc-code .hljs-literal,tui-doc-code .hljs-keyword,tui-doc-code .hljs-selector-tag,tui-doc-code .hljs-type,tui-doc-code .hljs-selector-id,tui-doc-code .hljs-selector-class{font-weight:700;color:var(--tui-text-action)}tui-doc-code .hljs-attr{color:var(--tui-text-action)}tui-doc-code .hljs-attribute,tui-doc-code .hljs-number,tui-doc-code .hljs-regexp,tui-doc-code .hljs-link,tui-doc-code .hljs-built_in{font-weight:700;color:#b8474e}tui-doc-code .hljs-number,tui-doc-code .hljs-regexp,tui-doc-code .hljs-link{font-weight:400}tui-doc-code .hljs-string{color:var(--tui-status-positive);font-weight:700}tui-doc-code .hljs-symbol,tui-doc-code .hljs-bullet,tui-doc-code .hljs-formula{color:var(--tui-text-primary);background:var(--tui-background-base-alt);font-style:italic}tui-doc-code .hljs-doctag{text-decoration:underline}tui-doc-code .hljs-variable,tui-doc-code .hljs-template-variable{color:var(--tui-text-action-hover)}tui-doc-code .hljs-addition{background:var(--tui-status-positive-pale)}tui-doc-code .hljs-deletion{background:var(--tui-status-negative-pale)}tui-doc-code .hljs-emphasis{font-style:italic}tui-doc-code .hljs-strong{font-weight:700}tui-doc-code .hljs .hljs-line-numbers{padding:0}tui-doc-code .hljs-ln-numbers{vertical-align:top;opacity:.3;text-align:end;padding-inline-end:1em!important}[tuiTheme=dark] tui-doc-code .hljs-variable,tui-doc-code[tuiTheme=dark] .hljs-variable,[tuiTheme=dark] tui-doc-code .hljs-template-variable,tui-doc-code[tuiTheme=dark] .hljs-template-variable{color:var(--tui-status-warning)}\n"] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZGRvbi1kb2MvY29tcG9uZW50cy9tYWluL21haW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWRkb24tZG9jL2NvbXBvbmVudHMvbWFpbi9tYWluLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLHlCQUF5QixFQUFFLGFBQWEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BGLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUMzRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7O0FBRXBFLE1BbUJhLFVBQVU7SUFuQnZCO1FBb0JxQixRQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JCLFVBQUssR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUIsUUFBRyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3hDLGFBQVEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakMsVUFBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzFELFNBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ3BDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUN2RCxDQUFDO0tBT0w7SUFMVSxtQkFBbUI7UUFDdEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUVsRSxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEYsQ0FBQzsrR0FkUSxVQUFVO21HQUFWLFVBQVUsd0VDckN2Qix3NERBc0RBLGdqSERoQ1EsSUFBSSw2RkFDSixZQUFZLDJKQUNaLFNBQVMsb0lBQ1QsWUFBWSxpRUFDWixnQkFBZ0IsK0RBQ2hCLE9BQU8scUZBQ1AsT0FBTzs7U0FTRixVQUFVOzRGQUFWLFVBQVU7a0JBbkJ0QixTQUFTO2lDQUNNLElBQUksWUFDTixjQUFjLFdBQ2Y7d0JBQ0wsSUFBSTt3QkFDSixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLE9BQU87d0JBQ1AsT0FBTztxQkFDVixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUdwQix1QkFBdUIsQ0FBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtET0NVTUVOVCwgTmdJZn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIGluamVjdCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlck91dGxldH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VFVJX0RPQ19ESVJFQ1RJT05fRU5BQkxFRCwgVFVJX0RPQ19JQ09OU30gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWRvYy90b2tlbnMnO1xuaW1wb3J0IHtUdWlCdXR0b259IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7VHVpSWNvbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9pY29uJztcbmltcG9ydCB7VHVpUm9vdH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9yb290JztcbmltcG9ydCB7VFVJX0RBUktfTU9ERX0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvdG9rZW5zJztcblxuaW1wb3J0IHtUdWlEb2NIZWFkZXJ9IGZyb20gJy4uL2ludGVybmFsL2hlYWRlcic7XG5pbXBvcnQge1R1aURvY05hdmlnYXRpb259IGZyb20gJy4uL25hdmlnYXRpb24vbmF2aWdhdGlvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAndHVpLWRvYy1tYWluJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIFJvdXRlck91dGxldCxcbiAgICAgICAgVHVpQnV0dG9uLFxuICAgICAgICBUdWlEb2NIZWFkZXIsXG4gICAgICAgIFR1aURvY05hdmlnYXRpb24sXG4gICAgICAgIFR1aUljb24sXG4gICAgICAgIFR1aVJvb3QsXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWFpbi50ZW1wbGF0ZS5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tYWluLnN0eWxlLmxlc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIC8vIEBub3RlOiBUaGlzIG9uZSB3YXMgZGVmYXVsdCBvbiBwdXJwb3NlLCBzbyB3ZSBjYW4gdGVzdCBkZW1vIGluIGRlZmF1bHQgbW9kZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L3ByZWZlci1vbi1wdXNoLWNvbXBvbmVudC1jaGFuZ2UtZGV0ZWN0aW9uXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxufSlcbmV4cG9ydCBjbGFzcyBUdWlEb2NNYWluIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvYyA9IGluamVjdChET0NVTUVOVCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGljb25zID0gaW5qZWN0KFRVSV9ET0NfSUNPTlMpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkaXIgPSBpbmplY3QoVFVJX0RPQ19ESVJFQ1RJT05fRU5BQkxFRCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhcmtNb2RlID0gaW5qZWN0KFRVSV9EQVJLX01PREUpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSB0aGVtZSA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmRhcmtNb2RlKCkgPyAnZGFyaycgOiBudWxsKSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGljb24gPSBjb21wdXRlZCgoKSA9PlxuICAgICAgICB0aGlzLmRhcmtNb2RlKCkgPyB0aGlzLmljb25zLmxpZ2h0IDogdGhpcy5pY29ucy5kYXJrLFxuICAgICk7XG5cbiAgICBwdWJsaWMgY2hhbmdlVGV4dERpcmVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlyID0gdGhpcy5kb2MuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlyJykgPz8gJ2x0cic7XG5cbiAgICAgICAgdGhpcy5kb2MuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGlyJywgZGlyID09PSAnbHRyJyA/ICdydGwnIDogJ2x0cicpO1xuICAgIH1cbn1cbiIsIjx0dWktcm9vdCBbYXR0ci50dWlUaGVtZV09XCJ0aGVtZSgpXCI+XG4gICAgPGRpdiBjbGFzcz1cInR1aS1kb2MtcGFnZVwiPlxuICAgICAgICA8dHVpLWRvYy1uYXZpZ2F0aW9uIGNsYXNzPVwidHVpLWRvYy1uYXZpZ2F0aW9uXCI+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJ0dWlEb2NOYXZpZ2F0aW9uXCIgLz5cbiAgICAgICAgPC90dWktZG9jLW5hdmlnYXRpb24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0dWktZG9jLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxyb3V0ZXItb3V0bGV0IGNsYXNzPVwidHVpLWRvYy1vdXRsZXRcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8aGVhZGVyIHR1aURvY0hlYWRlcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwidHVpRG9jSGVhZGVyXCIgLz5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImRpciAmJiBpY29ucy5sdHJcIlxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlN3aXRjaCBkaXJlY3Rpb25hbGl0eSBvZiB0aGUgZWxlbWVudCdzIHRleHRcIlxuICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwidHVpLWRvYy1zd2l0Y2gtZGlyZWN0aW9uXCJcbiAgICAgICAgICAgIFtpY29uRW5kXT1cImljb25zLmx0ci5wcmV2aWV3XCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VUZXh0RGlyZWN0aW9uKClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8dHVpLWljb24gW2ljb25dPVwiaWNvbnMubHRyLmRpcmVjdGlvblwiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlN3aXRjaCBiZXR3ZWVuIGRhcmsgYW5kIGxpZ2h0IG1vZGVcIlxuICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInR1aS1kb2MtZGFyay1tb2RlLXN3aXRjaFwiXG4gICAgICAgICAgICBbaWNvblN0YXJ0XT1cImljb24oKVwiXG4gICAgICAgICAgICBbc3R5bGUuYm9yZGVyLXJhZGl1cy4lXT1cIjEwMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZGFya01vZGUuc2V0KCFkYXJrTW9kZSgpKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L2hlYWRlcj5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwidHVpT3ZlckNvbnRlbnRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwidHVpT3ZlckNvbnRlbnRcIiAvPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJ0dWlPdmVyRGlhbG9nc1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJ0dWlPdmVyRGlhbG9nc1wiIC8+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cInR1aU92ZXJBbGVydHNcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwidHVpT3ZlckFsZXJ0c1wiIC8+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cInR1aU92ZXJEcm9wZG93bnNcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwidHVpT3ZlckRyb3Bkb3duc1wiIC8+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cInR1aU92ZXJIaW50c1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJ0dWlPdmVySGludHNcIiAvPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC90dWktcm9vdD5cbiJdfQ==