UNPKG

@taiga-ui/addon-doc

Version:

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

77 lines 25.7 kB
import { KeyValuePipe, NgForOf, NgIf, NgTemplateOutlet } from '@angular/common'; import { ChangeDetectionStrategy, Component, ContentChildren, inject, Input, } from '@angular/core'; import { ActivatedRoute, RouterLink, RouterLinkActive } from '@angular/router'; import { TUI_DOC_DEFAULT_TABS, TUI_DOC_SUPPORT_LANGUAGE } from '@taiga-ui/addon-doc/tokens'; import { EMPTY_QUERY } from '@taiga-ui/cdk/constants'; import { TuiReplacePipe } from '@taiga-ui/cdk/pipes/replace'; import { TuiAutoColorPipe } from '@taiga-ui/core/pipes/auto-color'; import { TuiChip } from '@taiga-ui/kit/components/chip'; import { TuiTabs } from '@taiga-ui/kit/components/tabs'; import { PolymorpheusOutlet } from '@taiga-ui/polymorpheus'; import { TuiDocSeeAlso } from '../internal/see-also'; import { TuiDocSourceCode } from '../internal/source-code/source-code.component'; import { TuiDocLanguageSwitcher } from '../language-switcher'; import { PAGE_PROVIDERS, PAGE_SEE_ALSO, TUI_DOC_TABS } from './page.providers'; import { TuiDocPageTabConnector } from './page-tab.directive'; import * as i0 from "@angular/core"; import * as i1 from "@taiga-ui/cdk/directives/item"; import * as i2 from "@taiga-ui/kit/components/tabs"; class TuiDocPage { constructor() { this.tabs = inject(TUI_DOC_TABS)(inject(ActivatedRoute).snapshot); this.supportLanguage = inject(TUI_DOC_SUPPORT_LANGUAGE); this.defaultTabs = inject(TUI_DOC_DEFAULT_TABS); this.from = / /g; this.to = '_'; this.header = ''; this.package = ''; this.type = ''; this.tags = []; this.path = ''; this.deprecated = false; this.tabConnectors = EMPTY_QUERY; this.activeItemIndex = 0; this.seeAlso = inject(PAGE_SEE_ALSO); } get showSeeAlso() { return !!this.seeAlso.length && this.activeItemIndex === 0; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDocPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiDocPage, isStandalone: true, selector: "tui-doc-page", inputs: { header: "header", package: "package", type: "type", tags: "tags", path: "path", deprecated: "deprecated" }, providers: PAGE_PROVIDERS, queries: [{ propertyName: "tabConnectors", predicate: TuiDocPageTabConnector }], ngImport: i0, template: "<header class=\"t-header\">\n <h1\n *ngIf=\"header\"\n class=\"t-title\"\n >\n {{ header }}\n <tui-chip\n *ngIf=\"!!deprecated || deprecated === ''\"\n appearance=\"custom\"\n size=\"xs\"\n class=\"t-tag t-tag_deprecated\"\n >\n deprecated\n </tui-chip>\n <tui-chip\n *ngIf=\"package\"\n appearance=\"custom\"\n size=\"xs\"\n class=\"t-tag t-tag_package\"\n [style.background]=\"package | tuiAutoColor\"\n >\n {{ package }}\n </tui-chip>\n <tui-chip\n *ngFor=\"let tag of tags\"\n appearance=\"custom\"\n size=\"xs\"\n class=\"t-tag t-tag_package\"\n [style.background]=\"tag | tuiAutoColor\"\n >\n {{ tag }}\n </tui-chip>\n </h1>\n <tui-tabs-with-more\n *ngIf=\"tabConnectors.length\"\n class=\"t-tabs\"\n [(activeItemIndex)]=\"activeItemIndex\"\n >\n <ng-container *ngFor=\"let tab of tabConnectors; first as first; index as index\">\n <ng-container *ngIf=\"tab.pageTab || defaultTabs[index] as tabName\">\n <a\n *tuiItem\n routerLinkActive\n tuiTab\n [routerLink]=\"first ? './' : (tabName | tuiReplace: from : to)\"\n [routerLinkActiveOptions]=\"{exact: first}\"\n >\n {{ tabName }}\n </a>\n </ng-container>\n </ng-container>\n <ng-container *ngFor=\"let tab of tabs | keyvalue\">\n <a\n *tuiItem\n routerLinkActive\n tuiTab\n [routerLink]=\"tab.key\"\n >\n {{ tab.key }}\n </a>\n </ng-container>\n </tui-tabs-with-more>\n\n <div\n *ngIf=\"package || path || type\"\n class=\"t-right-side\"\n >\n <tui-doc-source-code\n class=\"t-source-code\"\n [header]=\"header\"\n [package]=\"package\"\n [path]=\"path\"\n [type]=\"type\"\n />\n\n <tui-doc-language-switcher *ngIf=\"supportLanguage.has(header)\" />\n </div>\n</header>\n<div class=\"t-content\">\n <ng-content />\n <tui-doc-see-also\n *ngIf=\"showSeeAlso\"\n class=\"t-see-also\"\n [seeAlso]=\"seeAlso\"\n />\n <ng-container *ngFor=\"let tab of tabConnectors; index as index\">\n <ng-container\n *ngIf=\"index === activeItemIndex\"\n [ngTemplateOutlet]=\"tab.template\"\n />\n </ng-container>\n <ng-container *ngFor=\"let tab of tabs | keyvalue; index as index\">\n <ng-container *ngIf=\"index + tabConnectors.length === activeItemIndex\">\n <ng-container *polymorpheusOutlet=\"tab.value as text\">{{ text }}</ng-container>\n </ng-container>\n </ng-container>\n</div>\n", styles: [":host{display:flex;flex-direction:column;min-block-size:0;flex-basis:0;flex-grow:1;font:var(--tui-font-text-m)}.t-header{display:flex;font:var(--tui-font-heading-3);flex-wrap:wrap;color:var(--tui-text-primary);box-shadow:inset 0 -1px 0 0 var(--tui-border-normal);box-sizing:border-box;flex-shrink:0;margin:0 min(10vw,8.75rem)}@media screen and (max-width: 47.9625em){.t-header{font:var(--tui-font-heading-4);min-block-size:4.5rem;padding:0 1.25rem;margin:0}}.t-title{min-inline-size:100%;padding:3.75rem 0 0;font-size:inherit;margin:0}@media screen and (max-width: 47.9625em){.t-title{padding:1.25rem 0 0}}.t-tag{vertical-align:middle;text-transform:uppercase;margin-inline-end:.5rem}.t-tag_deprecated{background-color:var(--tui-status-negative);color:#fff}.t-tag.t-tag_package{color:#000}.t-tabs{flex:1;margin:1.125rem .3125rem 0 0;box-shadow:none}@media screen and (max-width: 47.9625em){.t-tabs{margin-block-start:.25rem}}.t-content{padding:2rem 0;margin:0 min(10vw,8.75rem)}@media screen and (max-width: 47.9625em){.t-content{padding:2rem 1.25rem;margin:0}}.t-see-also{min-inline-size:18.75rem;inline-size:30%;float:inline-end;margin:0 0 1rem;margin-inline-start:1.5rem}@media screen and (max-width: 47.9625em){.t-see-also{float:none;inline-size:100%;margin:0 0 1.5rem}}.t-right-side{display:flex;gap:1rem;align-items:center;align-self:center;margin-inline-start:auto}.t-source-code{block-size:3.125rem}\n"], dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: TuiAutoColorPipe, name: "tuiAutoColor" }, { kind: "directive", type: TuiChip, selector: "tui-chip,[tuiChip]", inputs: ["size"] }, { kind: "component", type: TuiDocLanguageSwitcher, selector: "tui-doc-language-switcher" }, { kind: "component", type: TuiDocSeeAlso, selector: "tui-doc-see-also", inputs: ["seeAlso"] }, { kind: "component", type: TuiDocSourceCode, selector: "tui-doc-source-code", inputs: ["header", "package", "type", "path"] }, { kind: "pipe", type: TuiReplacePipe, name: "tuiReplace" }, { kind: "directive", type: i1.TuiItem, selector: "[tuiItem]" }, { kind: "directive", type: i2.TuiTab, selector: "a[tuiTab]:not([routerLink]), a[tuiTab][routerLink][routerLinkActive], button[tuiTab]" }, { kind: "component", type: i2.TuiTabsWithMore, selector: "tui-tabs-with-more, nav[tuiTabsWithMore]", inputs: ["size", "moreContent", "dropdownContent", "underline", "itemsLimit", "activeItemIndex"], outputs: ["activeItemIndexChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } export { TuiDocPage }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDocPage, decorators: [{ type: Component, args: [{ standalone: true, selector: 'tui-doc-page', imports: [ KeyValuePipe, NgForOf, NgIf, NgTemplateOutlet, PolymorpheusOutlet, RouterLink, RouterLinkActive, TuiAutoColorPipe, TuiChip, TuiDocLanguageSwitcher, TuiDocSeeAlso, TuiDocSourceCode, TuiReplacePipe, TuiTabs, ], changeDetection: ChangeDetectionStrategy.OnPush, providers: PAGE_PROVIDERS, template: "<header class=\"t-header\">\n <h1\n *ngIf=\"header\"\n class=\"t-title\"\n >\n {{ header }}\n <tui-chip\n *ngIf=\"!!deprecated || deprecated === ''\"\n appearance=\"custom\"\n size=\"xs\"\n class=\"t-tag t-tag_deprecated\"\n >\n deprecated\n </tui-chip>\n <tui-chip\n *ngIf=\"package\"\n appearance=\"custom\"\n size=\"xs\"\n class=\"t-tag t-tag_package\"\n [style.background]=\"package | tuiAutoColor\"\n >\n {{ package }}\n </tui-chip>\n <tui-chip\n *ngFor=\"let tag of tags\"\n appearance=\"custom\"\n size=\"xs\"\n class=\"t-tag t-tag_package\"\n [style.background]=\"tag | tuiAutoColor\"\n >\n {{ tag }}\n </tui-chip>\n </h1>\n <tui-tabs-with-more\n *ngIf=\"tabConnectors.length\"\n class=\"t-tabs\"\n [(activeItemIndex)]=\"activeItemIndex\"\n >\n <ng-container *ngFor=\"let tab of tabConnectors; first as first; index as index\">\n <ng-container *ngIf=\"tab.pageTab || defaultTabs[index] as tabName\">\n <a\n *tuiItem\n routerLinkActive\n tuiTab\n [routerLink]=\"first ? './' : (tabName | tuiReplace: from : to)\"\n [routerLinkActiveOptions]=\"{exact: first}\"\n >\n {{ tabName }}\n </a>\n </ng-container>\n </ng-container>\n <ng-container *ngFor=\"let tab of tabs | keyvalue\">\n <a\n *tuiItem\n routerLinkActive\n tuiTab\n [routerLink]=\"tab.key\"\n >\n {{ tab.key }}\n </a>\n </ng-container>\n </tui-tabs-with-more>\n\n <div\n *ngIf=\"package || path || type\"\n class=\"t-right-side\"\n >\n <tui-doc-source-code\n class=\"t-source-code\"\n [header]=\"header\"\n [package]=\"package\"\n [path]=\"path\"\n [type]=\"type\"\n />\n\n <tui-doc-language-switcher *ngIf=\"supportLanguage.has(header)\" />\n </div>\n</header>\n<div class=\"t-content\">\n <ng-content />\n <tui-doc-see-also\n *ngIf=\"showSeeAlso\"\n class=\"t-see-also\"\n [seeAlso]=\"seeAlso\"\n />\n <ng-container *ngFor=\"let tab of tabConnectors; index as index\">\n <ng-container\n *ngIf=\"index === activeItemIndex\"\n [ngTemplateOutlet]=\"tab.template\"\n />\n </ng-container>\n <ng-container *ngFor=\"let tab of tabs | keyvalue; index as index\">\n <ng-container *ngIf=\"index + tabConnectors.length === activeItemIndex\">\n <ng-container *polymorpheusOutlet=\"tab.value as text\">{{ text }}</ng-container>\n </ng-container>\n </ng-container>\n</div>\n", styles: [":host{display:flex;flex-direction:column;min-block-size:0;flex-basis:0;flex-grow:1;font:var(--tui-font-text-m)}.t-header{display:flex;font:var(--tui-font-heading-3);flex-wrap:wrap;color:var(--tui-text-primary);box-shadow:inset 0 -1px 0 0 var(--tui-border-normal);box-sizing:border-box;flex-shrink:0;margin:0 min(10vw,8.75rem)}@media screen and (max-width: 47.9625em){.t-header{font:var(--tui-font-heading-4);min-block-size:4.5rem;padding:0 1.25rem;margin:0}}.t-title{min-inline-size:100%;padding:3.75rem 0 0;font-size:inherit;margin:0}@media screen and (max-width: 47.9625em){.t-title{padding:1.25rem 0 0}}.t-tag{vertical-align:middle;text-transform:uppercase;margin-inline-end:.5rem}.t-tag_deprecated{background-color:var(--tui-status-negative);color:#fff}.t-tag.t-tag_package{color:#000}.t-tabs{flex:1;margin:1.125rem .3125rem 0 0;box-shadow:none}@media screen and (max-width: 47.9625em){.t-tabs{margin-block-start:.25rem}}.t-content{padding:2rem 0;margin:0 min(10vw,8.75rem)}@media screen and (max-width: 47.9625em){.t-content{padding:2rem 1.25rem;margin:0}}.t-see-also{min-inline-size:18.75rem;inline-size:30%;float:inline-end;margin:0 0 1rem;margin-inline-start:1.5rem}@media screen and (max-width: 47.9625em){.t-see-also{float:none;inline-size:100%;margin:0 0 1.5rem}}.t-right-side{display:flex;gap:1rem;align-items:center;align-self:center;margin-inline-start:auto}.t-source-code{block-size:3.125rem}\n"] }] }], propDecorators: { header: [{ type: Input }], package: [{ type: Input }], type: [{ type: Input }], tags: [{ type: Input }], path: [{ type: Input }], deprecated: [{ type: Input }], tabConnectors: [{ type: ContentChildren, args: [TuiDocPageTabConnector] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZGRvbi1kb2MvY29tcG9uZW50cy9wYWdlL3BhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWRkb24tZG9jL2NvbXBvbmVudHMvcGFnZS9wYWdlLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFOUUsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLE1BQU0sRUFDTixLQUFLLEdBQ1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFMUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQy9FLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzdFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7O0FBRTVELE1Bd0JhLFVBQVU7SUF4QnZCO1FBeUJ1QixTQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxvQkFBZSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ25ELGdCQUFXLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDM0MsU0FBSSxHQUFHLElBQUksQ0FBQztRQUNaLE9BQUUsR0FBRyxHQUFHLENBQUM7UUFHckIsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUdaLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFHYixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBR1YsU0FBSSxHQUFhLEVBQUUsQ0FBQztRQUdwQixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBR1YsZUFBVSxHQUFpQixLQUFLLENBQUM7UUFHeEIsa0JBQWEsR0FBc0MsV0FBVyxDQUFDO1FBRXhFLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsWUFBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUtuRDtJQUhHLElBQVcsV0FBVztRQUNsQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLENBQUMsQ0FBQztJQUMvRCxDQUFDOytHQWpDUSxVQUFVO21HQUFWLFVBQVUsaUxBRlIsY0FBYyx3REEyQlIsc0JBQXNCLDZCQ3pFM0Msay9GQWlHQSxzN0NEckVRLFlBQVksaURBQ1osT0FBTyxtSEFDUCxJQUFJLDZGQUNKLGdCQUFnQixvSkFDaEIsa0JBQWtCLDhIQUNsQixVQUFVLDROQUNWLGdCQUFnQix5TUFDaEIsZ0JBQWdCLHFEQUNoQixPQUFPLGlGQUNQLHNCQUFzQixzRUFDdEIsYUFBYSxrRkFDYixnQkFBZ0IsMEdBQ2hCLGNBQWM7O1NBUVQsVUFBVTs0RkFBVixVQUFVO2tCQXhCdEIsU0FBUztpQ0FDTSxJQUFJLFlBQ04sY0FBYyxXQUNmO3dCQUNMLFlBQVk7d0JBQ1osT0FBTzt3QkFDUCxJQUFJO3dCQUNKLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixVQUFVO3dCQUNWLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixPQUFPO3dCQUNQLHNCQUFzQjt3QkFDdEIsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsT0FBTztxQkFDVixtQkFHZ0IsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxjQUFjOzhCQVVsQixNQUFNO3NCQURaLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLO2dCQUlDLElBQUk7c0JBRFYsS0FBSztnQkFJQyxJQUFJO3NCQURWLEtBQUs7Z0JBSUMsSUFBSTtzQkFEVixLQUFLO2dCQUlDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBSVUsYUFBYTtzQkFENUIsZUFBZTt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0tleVZhbHVlUGlwZSwgTmdGb3JPZiwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB0eXBlIHtRdWVyeUxpc3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJMaW5rLCBSb3V0ZXJMaW5rQWN0aXZlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtUVUlfRE9DX0RFRkFVTFRfVEFCUywgVFVJX0RPQ19TVVBQT1JUX0xBTkdVQUdFfSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tZG9jL3Rva2Vucyc7XG5pbXBvcnQge0VNUFRZX1FVRVJZfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NvbnN0YW50cyc7XG5pbXBvcnQge1R1aVJlcGxhY2VQaXBlfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3BpcGVzL3JlcGxhY2UnO1xuaW1wb3J0IHtUdWlBdXRvQ29sb3JQaXBlfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9waXBlcy9hdXRvLWNvbG9yJztcbmltcG9ydCB7VHVpQ2hpcH0gZnJvbSAnQHRhaWdhLXVpL2tpdC9jb21wb25lbnRzL2NoaXAnO1xuaW1wb3J0IHtUdWlUYWJzfSBmcm9tICdAdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvdGFicyc7XG5pbXBvcnQge1BvbHltb3JwaGV1c091dGxldH0gZnJvbSAnQHRhaWdhLXVpL3BvbHltb3JwaGV1cyc7XG5cbmltcG9ydCB7VHVpRG9jU2VlQWxzb30gZnJvbSAnLi4vaW50ZXJuYWwvc2VlLWFsc28nO1xuaW1wb3J0IHtUdWlEb2NTb3VyY2VDb2RlfSBmcm9tICcuLi9pbnRlcm5hbC9zb3VyY2UtY29kZS9zb3VyY2UtY29kZS5jb21wb25lbnQnO1xuaW1wb3J0IHtUdWlEb2NMYW5ndWFnZVN3aXRjaGVyfSBmcm9tICcuLi9sYW5ndWFnZS1zd2l0Y2hlcic7XG5pbXBvcnQge1BBR0VfUFJPVklERVJTLCBQQUdFX1NFRV9BTFNPLCBUVUlfRE9DX1RBQlN9IGZyb20gJy4vcGFnZS5wcm92aWRlcnMnO1xuaW1wb3J0IHtUdWlEb2NQYWdlVGFiQ29ubmVjdG9yfSBmcm9tICcuL3BhZ2UtdGFiLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICd0dWktZG9jLXBhZ2UnLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgS2V5VmFsdWVQaXBlLFxuICAgICAgICBOZ0Zvck9mLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBQb2x5bW9ycGhldXNPdXRsZXQsXG4gICAgICAgIFJvdXRlckxpbmssXG4gICAgICAgIFJvdXRlckxpbmtBY3RpdmUsXG4gICAgICAgIFR1aUF1dG9Db2xvclBpcGUsXG4gICAgICAgIFR1aUNoaXAsXG4gICAgICAgIFR1aURvY0xhbmd1YWdlU3dpdGNoZXIsXG4gICAgICAgIFR1aURvY1NlZUFsc28sXG4gICAgICAgIFR1aURvY1NvdXJjZUNvZGUsXG4gICAgICAgIFR1aVJlcGxhY2VQaXBlLFxuICAgICAgICBUdWlUYWJzLFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UudGVtcGxhdGUuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcGFnZS5zdHlsZS5sZXNzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBQQUdFX1BST1ZJREVSUyxcbn0pXG5leHBvcnQgY2xhc3MgVHVpRG9jUGFnZSB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRhYnMgPSBpbmplY3QoVFVJX0RPQ19UQUJTKShpbmplY3QoQWN0aXZhdGVkUm91dGUpLnNuYXBzaG90KTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3VwcG9ydExhbmd1YWdlID0gaW5qZWN0KFRVSV9ET0NfU1VQUE9SVF9MQU5HVUFHRSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRUYWJzID0gaW5qZWN0KFRVSV9ET0NfREVGQVVMVF9UQUJTKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZnJvbSA9IC8gL2c7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRvID0gJ18nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGVhZGVyID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwYWNrYWdlID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0eXBlID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0YWdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcGF0aCA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGVwcmVjYXRlZDogYm9vbGVhbiB8ICcnID0gZmFsc2U7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFR1aURvY1BhZ2VUYWJDb25uZWN0b3IpXG4gICAgcHVibGljIHJlYWRvbmx5IHRhYkNvbm5lY3RvcnM6IFF1ZXJ5TGlzdDxUdWlEb2NQYWdlVGFiQ29ubmVjdG9yPiA9IEVNUFRZX1FVRVJZO1xuXG4gICAgcHVibGljIGFjdGl2ZUl0ZW1JbmRleCA9IDA7XG4gICAgcHVibGljIHJlYWRvbmx5IHNlZUFsc28gPSBpbmplY3QoUEFHRV9TRUVfQUxTTyk7XG5cbiAgICBwdWJsaWMgZ2V0IHNob3dTZWVBbHNvKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnNlZUFsc28ubGVuZ3RoICYmIHRoaXMuYWN0aXZlSXRlbUluZGV4ID09PSAwO1xuICAgIH1cbn1cbiIsIjxoZWFkZXIgY2xhc3M9XCJ0LWhlYWRlclwiPlxuICAgIDxoMVxuICAgICAgICAqbmdJZj1cImhlYWRlclwiXG4gICAgICAgIGNsYXNzPVwidC10aXRsZVwiXG4gICAgPlxuICAgICAgICB7eyBoZWFkZXIgfX1cbiAgICAgICAgPHR1aS1jaGlwXG4gICAgICAgICAgICAqbmdJZj1cIiEhZGVwcmVjYXRlZCB8fCBkZXByZWNhdGVkID09PSAnJ1wiXG4gICAgICAgICAgICBhcHBlYXJhbmNlPVwiY3VzdG9tXCJcbiAgICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICBjbGFzcz1cInQtdGFnIHQtdGFnX2RlcHJlY2F0ZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgICBkZXByZWNhdGVkXG4gICAgICAgIDwvdHVpLWNoaXA+XG4gICAgICAgIDx0dWktY2hpcFxuICAgICAgICAgICAgKm5nSWY9XCJwYWNrYWdlXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJjdXN0b21cIlxuICAgICAgICAgICAgc2l6ZT1cInhzXCJcbiAgICAgICAgICAgIGNsYXNzPVwidC10YWcgdC10YWdfcGFja2FnZVwiXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJwYWNrYWdlIHwgdHVpQXV0b0NvbG9yXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgcGFja2FnZSB9fVxuICAgICAgICA8L3R1aS1jaGlwPlxuICAgICAgICA8dHVpLWNoaXBcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0YWcgb2YgdGFnc1wiXG4gICAgICAgICAgICBhcHBlYXJhbmNlPVwiY3VzdG9tXCJcbiAgICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICBjbGFzcz1cInQtdGFnIHQtdGFnX3BhY2thZ2VcIlxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFnIHwgdHVpQXV0b0NvbG9yXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgdGFnIH19XG4gICAgICAgIDwvdHVpLWNoaXA+XG4gICAgPC9oMT5cbiAgICA8dHVpLXRhYnMtd2l0aC1tb3JlXG4gICAgICAgICpuZ0lmPVwidGFiQ29ubmVjdG9ycy5sZW5ndGhcIlxuICAgICAgICBjbGFzcz1cInQtdGFic1wiXG4gICAgICAgIFsoYWN0aXZlSXRlbUluZGV4KV09XCJhY3RpdmVJdGVtSW5kZXhcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYkNvbm5lY3RvcnM7IGZpcnN0IGFzIGZpcnN0OyBpbmRleCBhcyBpbmRleFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYi5wYWdlVGFiIHx8IGRlZmF1bHRUYWJzW2luZGV4XSBhcyB0YWJOYW1lXCI+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgKnR1aUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZVxuICAgICAgICAgICAgICAgICAgICB0dWlUYWJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiZmlyc3QgPyAnLi8nIDogKHRhYk5hbWUgfCB0dWlSZXBsYWNlOiBmcm9tIDogdG8pXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cIntleGFjdDogZmlyc3R9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IHRhYk5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzIHwga2V5dmFsdWVcIj5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKnR1aUl0ZW1cbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlXG4gICAgICAgICAgICAgICAgdHVpVGFiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwidGFiLmtleVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdGFiLmtleSB9fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3R1aS10YWJzLXdpdGgtbW9yZT5cblxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJwYWNrYWdlIHx8IHBhdGggfHwgdHlwZVwiXG4gICAgICAgIGNsYXNzPVwidC1yaWdodC1zaWRlXCJcbiAgICA+XG4gICAgICAgIDx0dWktZG9jLXNvdXJjZS1jb2RlXG4gICAgICAgICAgICBjbGFzcz1cInQtc291cmNlLWNvZGVcIlxuICAgICAgICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxuICAgICAgICAgICAgW3BhY2thZ2VdPVwicGFja2FnZVwiXG4gICAgICAgICAgICBbcGF0aF09XCJwYXRoXCJcbiAgICAgICAgICAgIFt0eXBlXT1cInR5cGVcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDx0dWktZG9jLWxhbmd1YWdlLXN3aXRjaGVyICpuZ0lmPVwic3VwcG9ydExhbmd1YWdlLmhhcyhoZWFkZXIpXCIgLz5cbiAgICA8L2Rpdj5cbjwvaGVhZGVyPlxuPGRpdiBjbGFzcz1cInQtY29udGVudFwiPlxuICAgIDxuZy1jb250ZW50IC8+XG4gICAgPHR1aS1kb2Mtc2VlLWFsc29cbiAgICAgICAgKm5nSWY9XCJzaG93U2VlQWxzb1wiXG4gICAgICAgIGNsYXNzPVwidC1zZWUtYWxzb1wiXG4gICAgICAgIFtzZWVBbHNvXT1cInNlZUFsc29cIlxuICAgIC8+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYkNvbm5lY3RvcnM7IGluZGV4IGFzIGluZGV4XCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiaW5kZXggPT09IGFjdGl2ZUl0ZW1JbmRleFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWIudGVtcGxhdGVcIlxuICAgICAgICAvPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzIHwga2V5dmFsdWU7IGluZGV4IGFzIGluZGV4XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbmRleCArIHRhYkNvbm5lY3RvcnMubGVuZ3RoID09PSBhY3RpdmVJdGVtSW5kZXhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKnBvbHltb3JwaGV1c091dGxldD1cInRhYi52YWx1ZSBhcyB0ZXh0XCI+e3sgdGV4dCB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19