@alauda-fe/common
Version:
Alauda frontend team common codes.
342 lines • 49.8 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { CodeEditorModule, MonacoLanguageService, } from '@alauda/code-editor';
import { CARD_MODULE, CHECKBOX_MODULE, ButtonModule, IconModule, TooltipModule, } from '@alauda/ui';
import { AsyncPipe, NgIf, NgTemplateOutlet } from '@angular/common';
import { ChangeDetectionStrategy, Component, Input, ViewChild, } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { yamlDefaults, setDiagnosticsOptions } from 'monaco-yaml';
import { BehaviorSubject, combineLatest, Observable, map, distinctUntilChanged, of, switchMap, shareReplay, takeUntil, Subject, } from 'rxjs';
import { KubernetesSchemaService, YamlUtilService, ObservableInput, } from '../../core/public-api';
import { TRANSLATE_MODULE } from '../../translate/public-api';
import { viewActions, yamlReadMinimapOptions, yamlReadOptions, } from '../code-editor-configs';
import { foldManagedFields, } from '../managed-fields-folder.util';
import { ResourceYamlSidebarComponent } from '../yaml-sidebar/component';
import * as i0 from "@angular/core";
import * as i1 from "../../core/public-api";
import * as i2 from "@alauda/code-editor";
import * as i3 from "@alauda/ui";
import * as i4 from "@angular/forms";
import * as i5 from "../../translate/translate.pipe";
const _c0 = ["codeEditorRef"];
function ResourceYamlDisplayComponent_aui_card_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainer(0);
} }
function ResourceYamlDisplayComponent_aui_card_0_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "aui-card");
i0.ɵɵtemplate(1, ResourceYamlDisplayComponent_aui_card_0_ng_container_1_Template, 1, 0, "ng-container", 3);
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵnextContext();
const content_r1 = i0.ɵɵreference(2);
i0.ɵɵadvance();
i0.ɵɵproperty("ngTemplateOutlet", content_r1);
} }
function ResourceYamlDisplayComponent_ng_template_1_aui_checkbox_7_Template(rf, ctx) { if (rf & 1) {
const _r2 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "aui-checkbox", 12);
i0.ɵɵpipe(1, "async");
i0.ɵɵlistener("ngModelChange", function ResourceYamlDisplayComponent_ng_template_1_aui_checkbox_7_Template_aui_checkbox_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.conciseChange($event)); });
i0.ɵɵtext(2);
i0.ɵɵpipe(3, "translate");
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r2 = i0.ɵɵnextContext(2);
i0.ɵɵproperty("ngModel", i0.ɵɵpipeBind1(1, 2, ctx_r2.concise$$));
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 4, "preview_concise_yaml"), " ");
} }
function ResourceYamlDisplayComponent_ng_template_1_button_9_Template(rf, ctx) { if (rf & 1) {
const _r4 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "button", 13);
i0.ɵɵpipe(1, "async");
i0.ɵɵpipe(2, "async");
i0.ɵɵpipe(3, "translate");
i0.ɵɵlistener("click", function ResourceYamlDisplayComponent_ng_template_1_button_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.toggleSidebar()); });
i0.ɵɵelement(4, "aui-icon", 14);
i0.ɵɵpipe(5, "async");
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵnextContext();
const codeEditorRef_r5 = i0.ɵɵreference(4);
const ctx_r2 = i0.ɵɵnextContext();
i0.ɵɵproperty("hidden", !!codeEditorRef_r5.fullscreenDialog)("disabled", !i0.ɵɵpipeBind1(1, 4, ctx_r2.finalSchema$))("auiTooltip", i0.ɵɵpipeBind1(3, 8, i0.ɵɵpipeBind1(2, 6, ctx_r2.showSidebar$$) ? "hide_sidebar" : "view_sidebar"));
i0.ɵɵadvance(4);
i0.ɵɵproperty("icon", i0.ɵɵpipeBind1(5, 10, ctx_r2.showSidebar$$) ? "prod:expand_sidebar" : "prod:collapse_sidebar");
} }
function ResourceYamlDisplayComponent_ng_template_1_div_10_Template(rf, ctx) { if (rf & 1) {
const _r6 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "div", 15)(1, "acl-resource-yaml-sidebar", 16);
i0.ɵɵpipe(2, "async");
i0.ɵɵlistener("close", function ResourceYamlDisplayComponent_ng_template_1_div_10_Template_acl_resource_yaml_sidebar_close_1_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.toggleSidebar()); });
i0.ɵɵelementEnd()();
} if (rf & 2) {
const ctx_r2 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵproperty("resource", ctx_r2.getCurrentResource())("schema", i0.ɵɵpipeBind1(2, 4, ctx_r2.finalSchema$))("schemaEnable", ctx_r2.schemaEnable)("exampleEnable", false);
} }
function ResourceYamlDisplayComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 4);
i0.ɵɵpipe(1, "async");
i0.ɵɵelementStart(2, "div", 5)(3, "aui-code-editor", 6, 1);
i0.ɵɵpipe(5, "async");
i0.ɵɵelementContainerStart(6, 7);
i0.ɵɵtemplate(7, ResourceYamlDisplayComponent_ng_template_1_aui_checkbox_7_Template, 4, 6, "aui-checkbox", 8);
i0.ɵɵelementContainerEnd();
i0.ɵɵelementContainerStart(8, 9);
i0.ɵɵtemplate(9, ResourceYamlDisplayComponent_ng_template_1_button_9_Template, 6, 12, "button", 10);
i0.ɵɵelementContainerEnd();
i0.ɵɵelementEnd()();
i0.ɵɵtemplate(10, ResourceYamlDisplayComponent_ng_template_1_div_10_Template, 3, 6, "div", 11);
i0.ɵɵpipe(11, "async");
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r2 = i0.ɵɵnextContext();
i0.ɵɵclassProp("with-sidebar", i0.ɵɵpipeBind1(1, 9, ctx_r2.showSidebar$$));
i0.ɵɵadvance(3);
i0.ɵɵproperty("ngModel", i0.ɵɵpipeBind1(5, 11, ctx_r2.yaml$))("options", ctx_r2.editorOptions)("actionsConfig", ctx_r2.viewActions)("modelUri", ctx_r2.modelUri);
i0.ɵɵadvance(4);
i0.ɵɵproperty("ngIf", ctx_r2.conciseEnable);
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", ctx_r2.sidebarEnable);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(11, 13, ctx_r2.showSidebar$$));
} }
export class ResourceYamlDisplayComponent {
constructor(yamlUtil, schemaService, monacoLanguageService) {
this.yamlUtil = yamlUtil;
this.schemaService = schemaService;
this.monacoLanguageService = monacoLanguageService;
this.destroy$ = new Subject();
this.concise$$ = new BehaviorSubject(false);
this.reduce$$ = new BehaviorSubject(false);
this.showSidebar$$ = new BehaviorSubject(false);
this.showDebugPanel$$ = new BehaviorSubject(false);
this.monacoEditor = null;
this.registeredSchemas = new Set();
this.hasWrapper = true;
this.showDebugInfo = false;
this.conciseEnable = true;
this.manageFieldActionEnable = true;
this.sidebarEnable = true;
this.schemaEnable = true;
this.exampleEnable = true;
this.autoFoldManagedFields = true;
this.minimap = true;
this.yamlReadMinimapOptions = yamlReadMinimapOptions;
this.yamlReadOptions = yamlReadOptions;
this.hasFolded = false;
/**
* 自动获取的 schema,当没有手动提供 schema 时使用
*/
this.autoSchema$ = this.resource$.pipe(switchMap(resource => {
if (!resource) {
return of(null);
}
const firstResource = (Array.isArray(resource) ? resource[0] : resource);
if (!firstResource?.apiVersion || !firstResource?.kind) {
return of(null);
}
return this.schemaService.getResourceSchema(firstResource.apiVersion, firstResource.kind);
}), shareReplay(1));
/**
* 最终使用的 schema,优先使用手动提供的,否则使用自动获取的
*/
this.finalSchema$ = combineLatest([this.schema$, this.autoSchema$]).pipe(map(([manualSchema, autoSchema]) => manualSchema || autoSchema), distinctUntilChanged(), shareReplay(1));
this.yaml$ = combineLatest([
this.resource$,
this.concise$$,
this.reduce$$.pipe(distinctUntilChanged()),
]).pipe(map(([resource, concise, reduce]) => this.yamlUtil.generateFilteredYamlResource(resource, concise, reduce)));
this.viewActions = viewActions;
this.yamlSchemaService =
this.monacoLanguageService.getLanguageSchemaService(['yaml', 'yamlDefaults'], yamlDefaults);
// 启用 YAML 语法提示功能
setDiagnosticsOptions({
validate: true,
format: true,
completion: true,
hover: true,
});
// 自动设置 schema
combineLatest([this.resource$, this.finalSchema$])
.pipe(takeUntil(this.destroy$))
.subscribe(([resource, schema]) => {
if (resource && schema) {
const firstResource = Array.isArray(resource)
? resource[0]
: resource;
if (firstResource && !Array.isArray(firstResource)) {
this.setYamlSchema(firstResource, schema);
}
}
});
this.finalSchema$.pipe(takeUntil(this.destroy$)).subscribe();
}
get editorOptions() {
return this.minimap ? yamlReadMinimapOptions : yamlReadOptions;
}
conciseChange(value) {
this.concise$$.next(value);
}
toggleSidebar() {
this.showSidebar$$.next(!this.showSidebar$$.value);
}
toggleDebugInfo() {
this.showDebugPanel$$.next(!this.showDebugPanel$$.value);
}
getCurrentResource() {
const resource = this.resource;
if (Array.isArray(resource)) {
return resource.length > 0 ? resource[0] : null;
}
return resource || null;
}
getCurrentSchema() {
return this.schema || null;
}
selfFoldManagedFields() {
if (this.hasFolded) {
return;
}
this.hasFolded = true;
setTimeout(() => {
const editor = this.getEditorInstance();
if (editor) {
foldManagedFields(editor);
}
}, 50);
}
/**
* 设置 YAML schema 以提供 hover 提示和自动完成
*/
setYamlSchema(resource, schema) {
if (!schema) {
return;
}
// 使用 apiVersion + kind 组合作为标识
const apiVersion = resource?.apiVersion || 'unknown';
const kind = resource?.kind || 'unknown';
const schemaKey = `${apiVersion}/${kind}`;
this.modelUri = `${schemaKey}.yaml`;
this.selfFoldManagedFields();
// 检查是否已经注册过相同的 schema,避免重复注册
if (this.registeredSchemas.has(schemaKey)) {
return;
}
// 获取完整的 definitions 以支持 $ref 引用
const definitions = this.schemaService.definitions || {};
// 创建包含完整 definitions 的 schema 对象
const fullSchema = {
...schema,
definitions,
};
// 确保schema被正确注册,并启用自动完成功能
this.yamlSchemaService.addSchema({
uri: `k8s://${schemaKey}.schema.json`,
fileMatch: [this.modelUri],
schema: fullSchema,
});
this.registeredSchemas.add(schemaKey);
}
ngAfterViewInit() {
if (this.autoFoldManagedFields && this.schemaService.definitions) {
this.selfFoldManagedFields();
}
}
/**
* 获取 Monaco Editor 实例
*/
getEditorInstance() {
if (this.codeEditorRef && !this.monacoEditor) {
// 尝试从 ViewChild 获取编辑器实例
const editorComponent = this.codeEditorRef;
if (editorComponent.editor) {
this.monacoEditor = editorComponent.editor;
}
}
return this.monacoEditor;
}
/**
* 自动折叠 managedFields 字段
*/
foldManagedFields() {
const editor = this.getEditorInstance();
if (editor) {
foldManagedFields(editor);
}
}
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
this.monacoEditor = null;
}
static { this.ɵfac = function ResourceYamlDisplayComponent_Factory(t) { return new (t || ResourceYamlDisplayComponent)(i0.ɵɵdirectiveInject(i1.YamlUtilService), i0.ɵɵdirectiveInject(i1.KubernetesSchemaService), i0.ɵɵdirectiveInject(i2.MonacoLanguageService)); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ResourceYamlDisplayComponent, selectors: [["acl-resource-yaml-display"]], viewQuery: function ResourceYamlDisplayComponent_Query(rf, ctx) { if (rf & 1) {
i0.ɵɵviewQuery(_c0, 5);
} if (rf & 2) {
let _t;
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.codeEditorRef = _t.first);
} }, inputs: { hasWrapper: "hasWrapper", showDebugInfo: "showDebugInfo", conciseEnable: "conciseEnable", manageFieldActionEnable: "manageFieldActionEnable", sidebarEnable: "sidebarEnable", schemaEnable: "schemaEnable", exampleEnable: "exampleEnable", autoFoldManagedFields: "autoFoldManagedFields", schema: "schema", resource: "resource", minimap: "minimap" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 3, vars: 2, consts: [["content", ""], ["codeEditorRef", ""], [4, "ngIf", "ngIfElse"], [4, "ngTemplateOutlet"], [1, "yaml-display-container"], [1, "yaml-editor-section"], ["name", "yaml", 3, "ngModel", "options", "actionsConfig", "modelUri"], ["auiCodeEditorToolbarLeft", ""], ["class", "aui-code-editor-toolbar__control-button", 3, "ngModel", "ngModelChange", 4, "ngIf"], ["auiCodeEditorToolbarRightSide", ""], ["type", "button", "class", "aui-code-editor-toolbar__control-button", "size", "small", 3, "hidden", "disabled", "auiTooltip", "click", 4, "ngIf"], ["class", "yaml-sidebar-section", 4, "ngIf"], [1, "aui-code-editor-toolbar__control-button", 3, "ngModelChange", "ngModel"], ["type", "button", "size", "small", 1, "aui-code-editor-toolbar__control-button", 3, "click", "hidden", "disabled", "auiTooltip"], [3, "icon"], [1, "yaml-sidebar-section"], [3, "close", "resource", "schema", "schemaEnable", "exampleEnable"]], template: function ResourceYamlDisplayComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, ResourceYamlDisplayComponent_aui_card_0_Template, 2, 1, "aui-card", 2)(1, ResourceYamlDisplayComponent_ng_template_1_Template, 12, 15, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
} if (rf & 2) {
const content_r1 = i0.ɵɵreference(2);
i0.ɵɵproperty("ngIf", ctx.hasWrapper)("ngIfElse", content_r1);
} }, dependencies: [i3.CardComponent, NgIf,
FormsModule, i4.NgControlStatus, i4.NgModel, i3.CheckboxComponent, ButtonModule,
CodeEditorModule, i2.CodeEditorComponent, i5.TranslatePipe, AsyncPipe,
NgTemplateOutlet,
ResourceYamlSidebarComponent,
IconModule, i3.IconComponent, TooltipModule, i3.TooltipDirective], styles: ["[_nghost-%COMP%]:not(.dialog-content){display:block;height:calc(100vh - (var(--acl-page-header-height) + 44px) - 147px)}[_nghost-%COMP%]:not(.dialog-content) .aui-code-editor{min-height:100%}[_nghost-%COMP%]:not(.dialog-content) > .aui-card[_ngcontent-%COMP%]{height:100%}[_nghost-%COMP%]:not(.dialog-content) > .aui-card[_ngcontent-%COMP%] .aui-card__content[_ngcontent-%COMP%], [_nghost-%COMP%]:not(.dialog-content) > .aui-card[_ngcontent-%COMP%] aui-code-editor[_ngcontent-%COMP%], [_nghost-%COMP%]:not(.dialog-content) > .aui-card[_ngcontent-%COMP%] .aui-code-editor[_ngcontent-%COMP%]{height:100%;min-height:100%}[_nghost-%COMP%]{display:block}[_nghost-%COMP%] aui-card, [_nghost-%COMP%] .aui-card, [_nghost-%COMP%] .aui-card__content{height:100%}[_nghost-%COMP%] .aui-checkbox{margin-right:0}[_nghost-%COMP%] aui-code-editor[_ngcontent-%COMP%]{height:100%}.yaml-display-container[_ngcontent-%COMP%]{display:flex;height:100%}.yaml-display-container.with-sidebar[_ngcontent-%COMP%] .yaml-editor-section[_ngcontent-%COMP%]{flex:2;min-width:0}.yaml-display-container.with-sidebar[_ngcontent-%COMP%] .yaml-sidebar-section[_ngcontent-%COMP%]{flex:1 0 0%}.yaml-display-container[_ngcontent-%COMP%]:not(.with-sidebar) .yaml-editor-section[_ngcontent-%COMP%]{flex:1}.yaml-editor-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%}.yaml-editor-section[_ngcontent-%COMP%] aui-code-editor[_ngcontent-%COMP%]{flex:1;height:100%}.yaml-sidebar-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%}.yaml-sidebar-section[_ngcontent-%COMP%] acl-resource-yaml-sidebar[_ngcontent-%COMP%]{flex:1;height:100%}.yaml-debug-section[_ngcontent-%COMP%]{position:absolute;top:0;right:0;width:350px;height:100%;background:var(--aui-color-bg-container);border-left:1px solid var(--aui-color-border-default);z-index:1000;overflow-y:auto}.debug-panel[_ngcontent-%COMP%]{padding:16px;font-size:12px}.debug-panel[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0 0 12px;font-size:14px;color:var(--aui-color-text-primary)}.debug-panel[_ngcontent-%COMP%] .debug-item[_ngcontent-%COMP%]{margin-bottom:16px}.debug-panel[_ngcontent-%COMP%] .debug-item[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--aui-color-text-primary);display:block;margin-bottom:4px}.debug-panel[_ngcontent-%COMP%] .debug-item[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{margin:0;padding-left:16px}.debug-panel[_ngcontent-%COMP%] .debug-item[_ngcontent-%COMP%] ul[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin-bottom:2px;color:var(--aui-color-text-secondary)}.debug-panel[_ngcontent-%COMP%] .debug-actions[_ngcontent-%COMP%]{border-top:1px solid var(--aui-color-border-default);padding-top:12px;text-align:right}@media (width <= 1200px){.yaml-display-container.with-sidebar[_ngcontent-%COMP%] .yaml-sidebar-section[_ngcontent-%COMP%]{width:350px}}@media (width <= 992px){.yaml-display-container.with-sidebar[_ngcontent-%COMP%]{flex-direction:column}.yaml-display-container.with-sidebar[_ngcontent-%COMP%] .yaml-editor-section[_ngcontent-%COMP%]{flex:1;min-height:50%}.yaml-display-container.with-sidebar[_ngcontent-%COMP%] .yaml-sidebar-section[_ngcontent-%COMP%]{width:100%;height:50%;border-top:1px solid var(--aui-color-border, #e0e0e0);border-left:none}}"], changeDetection: 0 }); }
}
__decorate([
ObservableInput(),
__metadata("design:type", Observable)
], ResourceYamlDisplayComponent.prototype, "resource$", void 0);
__decorate([
ObservableInput(),
__metadata("design:type", Observable)
], ResourceYamlDisplayComponent.prototype, "schema$", void 0);
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ResourceYamlDisplayComponent, [{
type: Component,
args: [{ selector: 'acl-resource-yaml-display', preserveWhitespaces: false, standalone: true, imports: [
CARD_MODULE,
NgIf,
FormsModule,
CHECKBOX_MODULE,
ButtonModule,
CodeEditorModule,
TRANSLATE_MODULE,
AsyncPipe,
NgTemplateOutlet,
ResourceYamlSidebarComponent,
IconModule,
TooltipModule,
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<aui-card *ngIf=\"hasWrapper; else content\">\n <ng-container *ngTemplateOutlet=\"content\" />\n</aui-card>\n<ng-template #content>\n <div\n class=\"yaml-display-container\"\n [class.with-sidebar]=\"showSidebar$$ | async\"\n >\n <div class=\"yaml-editor-section\">\n <aui-code-editor\n #codeEditorRef\n name=\"yaml\"\n [ngModel]=\"yaml$ | async\"\n [options]=\"editorOptions\"\n [actionsConfig]=\"viewActions\"\n [modelUri]=\"modelUri\"\n >\n <ng-container auiCodeEditorToolbarLeft>\n <aui-checkbox\n *ngIf=\"conciseEnable\"\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"concise$$ | async\"\n (ngModelChange)=\"conciseChange($event)\"\n >\n {{ 'preview_concise_yaml' | translate }}\n </aui-checkbox>\n </ng-container>\n <ng-container auiCodeEditorToolbarRightSide>\n <!-- Schema \u6309\u94AE\uFF1A\u5F53\u542F\u7528\u4FA7\u8FB9\u680F\u65F6\u663E\u793A -->\n <button\n type=\"button\"\n *ngIf=\"sidebarEnable\"\n [hidden]=\"!!codeEditorRef.fullscreenDialog\"\n class=\"aui-code-editor-toolbar__control-button\"\n [disabled]=\"!(finalSchema$ | async)\"\n size=\"small\"\n (click)=\"toggleSidebar()\"\n [auiTooltip]=\"\n ((showSidebar$$ | async) ? 'hide_sidebar' : 'view_sidebar')\n | translate\n \"\n >\n <aui-icon\n [icon]=\"\n (showSidebar$$ | async)\n ? 'prod:expand_sidebar'\n : 'prod:collapse_sidebar'\n \"\n ></aui-icon>\n </button>\n </ng-container>\n </aui-code-editor>\n </div>\n\n <div\n class=\"yaml-sidebar-section\"\n *ngIf=\"showSidebar$$ | async\"\n >\n <acl-resource-yaml-sidebar\n [resource]=\"getCurrentResource()\"\n [schema]=\"finalSchema$ | async\"\n (close)=\"toggleSidebar()\"\n [schemaEnable]=\"schemaEnable\"\n [exampleEnable]=\"false\"\n ></acl-resource-yaml-sidebar>\n </div>\n </div>\n</ng-template>\n", styles: [":host(:not(.dialog-content)){display:block;height:calc(100vh - (var(--acl-page-header-height) + 44px) - 147px)}:host(:not(.dialog-content)) ::ng-deep .aui-code-editor{min-height:100%}:host(:not(.dialog-content))>.aui-card{height:100%}:host(:not(.dialog-content))>.aui-card .aui-card__content,:host(:not(.dialog-content))>.aui-card aui-code-editor,:host(:not(.dialog-content))>.aui-card .aui-code-editor{height:100%;min-height:100%}:host{display:block}:host ::ng-deep aui-card,:host ::ng-deep .aui-card,:host ::ng-deep .aui-card__content{height:100%}:host ::ng-deep .aui-checkbox{margin-right:0}:host aui-code-editor{height:100%}.yaml-display-container{display:flex;height:100%}.yaml-display-container.with-sidebar .yaml-editor-section{flex:2;min-width:0}.yaml-display-container.with-sidebar .yaml-sidebar-section{flex:1 0 0%}.yaml-display-container:not(.with-sidebar) .yaml-editor-section{flex:1}.yaml-editor-section{display:flex;flex-direction:column;height:100%}.yaml-editor-section aui-code-editor{flex:1;height:100%}.yaml-sidebar-section{display:flex;flex-direction:column;height:100%}.yaml-sidebar-section acl-resource-yaml-sidebar{flex:1;height:100%}.yaml-debug-section{position:absolute;top:0;right:0;width:350px;height:100%;background:var(--aui-color-bg-container);border-left:1px solid var(--aui-color-border-default);z-index:1000;overflow-y:auto}.debug-panel{padding:16px;font-size:12px}.debug-panel h4{margin:0 0 12px;font-size:14px;color:var(--aui-color-text-primary)}.debug-panel .debug-item{margin-bottom:16px}.debug-panel .debug-item strong{color:var(--aui-color-text-primary);display:block;margin-bottom:4px}.debug-panel .debug-item ul{margin:0;padding-left:16px}.debug-panel .debug-item ul li{margin-bottom:2px;color:var(--aui-color-text-secondary)}.debug-panel .debug-actions{border-top:1px solid var(--aui-color-border-default);padding-top:12px;text-align:right}@media (width <= 1200px){.yaml-display-container.with-sidebar .yaml-sidebar-section{width:350px}}@media (width <= 992px){.yaml-display-container.with-sidebar{flex-direction:column}.yaml-display-container.with-sidebar .yaml-editor-section{flex:1;min-height:50%}.yaml-display-container.with-sidebar .yaml-sidebar-section{width:100%;height:50%;border-top:1px solid var(--aui-color-border, #e0e0e0);border-left:none}}\n"] }]
}], () => [{ type: i1.YamlUtilService }, { type: i1.KubernetesSchemaService }, { type: i2.MonacoLanguageService }], { codeEditorRef: [{
type: ViewChild,
args: ['codeEditorRef']
}], hasWrapper: [{
type: Input
}], showDebugInfo: [{
type: Input
}], conciseEnable: [{
type: Input
}], manageFieldActionEnable: [{
type: Input
}], sidebarEnable: [{
type: Input
}], schemaEnable: [{
type: Input
}], exampleEnable: [{
type: Input
}], autoFoldManagedFields: [{
type: Input
}], schema: [{
type: Input
}], resource: [{
type: Input
}], resource$: [], schema$: [], minimap: [{
type: Input
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ResourceYamlDisplayComponent, { className: "ResourceYamlDisplayComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2NvZGUvcmVzb3VyY2UteWFtbC1kaXNwbGF5L2NvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jb2RlL3Jlc291cmNlLXlhbWwtZGlzcGxheS90ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLHFCQUFxQixHQUN0QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsZUFBZSxFQUNmLFlBQVksRUFDWixVQUFVLEVBQ1YsYUFBYSxHQUNkLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixVQUFVLEVBQ1YsR0FBRyxFQUNILG9CQUFvQixFQUNwQixFQUFFLEVBQ0YsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixlQUFlLEVBSWYsZUFBZSxHQUNoQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFDTCxXQUFXLEVBQ1gsc0JBQXNCLEVBQ3RCLGVB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QVM7MkJBQ0UsMkJBQTJCLHVCQUdoQixLQUFLLGNBQ2QsSUFBSSxXQUNQO29CQUNQLFdBQVc7b0JBQ1gsSUFBSTtvQkFDSixXQUFXO29CQUNYLGVBQWU7b0JBQ2YsWUFBWTtvQkFDWixnQkFBZ0I7b0JBQ2hCLGdCQUFnQjtvQkFDaEIsU0FBUztvQkFDVCxnQkFBZ0I7b0JBQ2hCLDRCQUE0QjtvQkFDNUIsVUFBVTtvQkFDVixhQUFhO2lCQUNkLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNOzBIQXVCL0MsYUFBYTtrQkFEWixTQUFTO21CQUFDLGVBQWU7WUFNMUIsVUFBVTtrQkFEVCxLQUFLO1lBSU4sYUFBYTtrQkFEWixLQUFLO1lBSU4sYUFBYTtrQkFEWixLQUFLO1lBSU4sdUJBQXVCO2tCQUR0QixLQUFLO1lBSU4sYUFBYTtrQkFEWixLQUFLO1lBSU4sWUFBWTtrQkFEWCxLQUFLO1lBSU4sYUFBYTtrQkFEWixLQUFLO1lBSU4scUJBQXFCO2tCQURwQixLQUFLO1lBSU4sTUFBTTtrQkFETCxLQUFLO1lBSU4sUUFBUTtrQkFEUCxLQUFLO1lBSUcsU0FBUyxNQUdULE9BQU8sTUFHaEIsT0FBTztrQkFETixLQUFLOztrRkE3REssNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29kZUVkaXRvck1vZHVsZSxcbiAgTGFuZ3VhZ2VTY2hlbWFTZXJ2aWNlLFxuICBNb25hY29MYW5ndWFnZVNlcnZpY2UsXG59IGZyb20gJ0BhbGF1ZGEvY29kZS1lZGl0b3InO1xuaW1wb3J0IHtcbiAgQ0FSRF9NT0RVTEUsXG4gIENIRUNLQk9YX01PRFVMRSxcbiAgQnV0dG9uTW9kdWxlLFxuICBJY29uTW9kdWxlLFxuICBUb29sdGlwTW9kdWxlLFxufSBmcm9tICdAYWxhdWRhL3VpJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBBZnRlclZpZXdJbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB5YW1sRGVmYXVsdHMsIHNldERpYWdub3N0aWNzT3B0aW9ucyB9IGZyb20gJ21vbmFjby15YW1sJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgT2JzZXJ2YWJsZSxcbiAgbWFwLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgb2YsXG4gIHN3aXRjaE1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHRha2VVbnRpbCxcbiAgU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIEt1YmVybmV0ZXNTY2hlbWFTZXJ2aWNlLFxuICBZYW1sVXRpbFNlcnZpY2UsXG4gIEFycmF5YWJsZSxcbiAgS3ViZXJuZXRlc1Jlc291cmNlLFxuICBPcGVuQVBJVjNTY2hlbWFPYmplY3QsXG4gIE9ic2VydmFibGVJbnB1dCxcbn0gZnJvbSAnLi4vLi4vY29yZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IFRSQU5TTEFURV9NT0RVTEUgfSBmcm9tICcuLi8uLi90cmFuc2xhdGUvcHVibGljLWFwaSc7XG5pbXBvcnQge1xuICB2aWV3QWN0aW9ucyxcbiAgeWFtbFJlYWRNaW5pbWFwT3B0aW9ucyxcbiAgeWFtbFJlYWRPcHRpb25zLFxufSBmcm9tICcuLi9jb2RlLWVkaXRvci1jb25maWdzJztcbmltcG9ydCB7XG4gIGZvbGRNYW5hZ2VkRmllbGRzLFxuICBFZGl0b3JJbnN0YW5jZVByb3ZpZGVyLFxufSBmcm9tICcuLi9tYW5hZ2VkLWZpZWxkcy1mb2xkZXIudXRpbCc7XG5pbXBvcnQgeyBSZXNvdXJjZVlhbWxTaWRlYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4veWFtbC1zaWRlYmFyL2NvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjbC1yZXNvdXJjZS15YW1sLWRpc3BsYXknLFxuICB0ZW1wbGF0ZVVybDogJ3RlbXBsYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc3R5bGVzLnNjc3MnXSxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDQVJEX01PRFVMRSxcbiAgICBOZ0lmLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIENIRUNLQk9YX01PRFVMRSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgQ29kZUVkaXRvck1vZHVsZSxcbiAgICBUUkFOU0xBVEVfTU9EVUxFLFxuICAgIEFzeW5jUGlwZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIFJlc291cmNlWWFtbFNpZGViYXJDb21wb25lbnQsXG4gICAgSWNvbk1vZHVsZSxcbiAgICBUb29sdGlwTW9kdWxlLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VZYW1sRGlzcGxheUNvbXBvbmVudDxUIGV4dGVuZHMgS3ViZXJuZXRlc1Jlc291cmNlPlxuICBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgRWRpdG9ySW5zdGFuY2VQcm92aWRlclxue1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY29uY2lzZSQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgcmVkdWNlJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBzaG93U2lkZWJhciQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgc2hvd0RlYnVnUGFuZWwkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIG1vZGVsVXJpOiBzdHJpbmc7XG4gIHByaXZhdGUgeWFtbFNjaGVtYVNlcnZpY2U6IExhbmd1YWdlU2NoZW1hU2VydmljZTtcbiAgcHJpdmF0ZSBtb25hY29FZGl0b3I6XG4gICAgfCBpbXBvcnQoJ21vbmFjby1lZGl0b3IvZXNtL3ZzL2VkaXRvci9lZGl0b3IuYXBpJykuZWRpdG9yLklTdGFuZGFsb25lQ29kZUVkaXRvclxuICAgIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWdpc3RlcmVkU2NoZW1hcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2NvZGVFZGl0b3JSZWYnKVxuICBjb2RlRWRpdG9yUmVmIToge1xuICAgIGVkaXRvcjogaW1wb3J0KCdtb25hY28tZWRpdG9yL2VzbS92cy9lZGl0b3IvZWRpdG9yLmFwaScpLmVkaXRvci5JU3RhbmRhbG9uZUNvZGVFZGl0b3I7XG4gIH07XG5cbiAgQElucHV0KClcbiAgaGFzV3JhcHBlciA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgc2hvd0RlYnVnSW5mbyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGNvbmNpc2VFbmFibGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIG1hbmFnZUZpZWxkQWN0aW9uRW5hYmxlID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBzaWRlYmFyRW5hYmxlID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBzY2hlbWFFbmFibGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGV4YW1wbGVFbmFibGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGF1dG9Gb2xkTWFuYWdlZEZpZWxkcyA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgc2NoZW1hOiBPcGVuQVBJVjNTY2hlbWFPYmplY3Q7XG5cbiAgQElucHV0KClcbiAgcmVzb3VyY2U6IEFycmF5YWJsZTxUPjtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgcmVhZG9ubHkgcmVzb3VyY2UkITogT2JzZXJ2YWJsZTxBcnJheWFibGU8VD4+O1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICByZWFkb25seSBzY2hlbWEkITogT2JzZXJ2YWJsZTxPcGVuQVBJVjNTY2hlbWFPYmplY3Q+O1xuXG4gIEBJbnB1dCgpXG4gIG1pbmltYXAgPSB0cnVlO1xuXG4gIHlhbWxSZWFkTWluaW1hcE9wdGlvbnMgPSB5YW1sUmVhZE1pbmltYXBPcHRpb25zO1xuICB5YW1sUmVhZE9wdGlvbnMgPSB5YW1sUmVhZE9wdGlvbnM7XG5cbiAgaGFzRm9sZGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIOiHquWKqOiOt+WPlueahCBzY2hlbWHvvIzlvZPmsqHmnInmiYvliqjmj5Dkvpsgc2NoZW1hIOaXtuS9v+eUqFxuICAgKi9cbiAgYXV0b1NjaGVtYSQgPSB0aGlzLnJlc291cmNlJC5waXBlKFxuICAgIHN3aXRjaE1hcChyZXNvdXJjZSA9PiB7XG4gICAgICBpZiAoIXJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlyc3RSZXNvdXJjZSA9IChcbiAgICAgICAgQXJyYXkuaXNBcnJheShyZXNvdXJjZSkgPyByZXNvdXJjZVswXSA6IHJlc291cmNlXG4gICAgICApIGFzIFQ7XG4gICAgICBpZiAoIWZpcnN0UmVzb3VyY2U/LmFwaVZlcnNpb24gfHwgIWZpcnN0UmVzb3VyY2U/LmtpbmQpIHtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFJlc291cmNlU2NoZW1hKFxuICAgICAgICBmaXJzdFJlc291cmNlLmFwaVZlcnNpb24sXG4gICAgICAgIGZpcnN0UmVzb3VyY2Uua2luZCxcbiAgICAgICk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSksXG4gICk7XG5cbiAgLyoqXG4gICAqIOacgOe7iOS9v+eUqOeahCBzY2hlbWHvvIzkvJjlhYjkvb/nlKjmiYvliqjmj5DkvpvnmoTvvIzlkKbliJnkvb/nlKjoh6rliqjojrflj5bnmoRcbiAgICovXG4gIGZpbmFsU2NoZW1hJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc2NoZW1hJCwgdGhpcy5hdXRvU2NoZW1hJF0pLnBpcGUoXG4gICAgbWFwKChbbWFudWFsU2NoZW1hLCBhdXRvU2NoZW1hXSkgPT4gbWFudWFsU2NoZW1hIHx8IGF1dG9TY2hlbWEpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSksXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHlhbWxVdGlsOiBZYW1sVXRpbFNlcnZpY2UsXG4gICAgcHVibGljIHJlYWRvbmx5IHNjaGVtYVNlcnZpY2U6IEt1YmVybmV0ZXNTY2hlbWFTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9uYWNvTGFuZ3VhZ2VTZXJ2aWNlOiBNb25hY29MYW5ndWFnZVNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMueWFtbFNjaGVtYVNlcnZpY2UgPVxuICAgICAgdGhpcy5tb25hY29MYW5ndWFnZVNlcnZpY2UuZ2V0TGFuZ3VhZ2VTY2hlbWFTZXJ2aWNlKFxuICAgICAgICBbJ3lhbWwnLCAneWFtbERlZmF1bHRzJ10sXG4gICAgICAgIHlhbWxEZWZhdWx0cyxcbiAgICAgICk7XG5cbiAgICAvLyDlkK/nlKggWUFNTCDor63ms5Xmj5DnpLrlip/og71cbiAgICBzZXREaWFnbm9zdGljc09wdGlvbnMoe1xuICAgICAgdmFsaWRhdGU6IHRydWUsXG4gICAgICBmb3JtYXQ6IHRydWUsXG4gICAgICBjb21wbGV0aW9uOiB0cnVlLFxuICAgICAgaG92ZXI6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyDoh6rliqjorr7nva4gc2NoZW1hXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5yZXNvdXJjZSQsIHRoaXMuZmluYWxTY2hlbWEkXSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtyZXNvdXJjZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICBpZiAocmVzb3VyY2UgJiYgc2NoZW1hKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RSZXNvdXJjZSA9IEFycmF5LmlzQXJyYXkocmVzb3VyY2UpXG4gICAgICAgICAgICA/IHJlc291cmNlWzBdXG4gICAgICAgICAgICA6IHJlc291cmNlO1xuICAgICAgICAgIGlmIChmaXJzdFJlc291cmNlICYmICFBcnJheS5pc0FycmF5KGZpcnN0UmVzb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFlhbWxTY2hlbWEoZmlyc3RSZXNvdXJjZSBhcyBULCBzY2hlbWEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmZpbmFsU2NoZW1hJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICB5YW1sJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMucmVzb3VyY2UkLFxuICAgIHRoaXMuY29uY2lzZSQkLFxuICAgIHRoaXMucmVkdWNlJCQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtyZXNvdXJjZSwgY29uY2lzZSwgcmVkdWNlXSkgPT5cbiAgICAgIHRoaXMueWFtbFV0aWwuZ2VuZXJhdGVGaWx0ZXJlZFlhbWxSZXNvdXJjZShyZXNvdXJjZSwgY29uY2lzZSwgcmVkdWNlKSxcbiAgICApLFxuICApO1xuXG4gIGdldCBlZGl0b3JPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLm1pbmltYXAgPyB5YW1sUmVhZE1pbmltYXBPcHRpb25zIDogeWFtbFJlYWRPcHRpb25zO1xuICB9XG5cbiAgdmlld0FjdGlvbnMgPSB2aWV3QWN0aW9ucztcblxuICBjb25jaXNlQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25jaXNlJCQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICB0b2dnbGVTaWRlYmFyKCkge1xuICAgIHRoaXMuc2hvd1NpZGViYXIkJC5uZXh0KCF0aGlzLnNob3dTaWRlYmFyJCQudmFsdWUpO1xuICB9XG5cbiAgdG9nZ2xlRGVidWdJbmZvKCkge1xuICAgIHRoaXMuc2hvd0RlYnVnUGFuZWwkJC5uZXh0KCF0aGlzLnNob3dEZWJ1Z1BhbmVsJCQudmFsdWUpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFJlc291cmNlKCk6IFQgfCBudWxsIHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gcmVzb3VyY2UubGVuZ3RoID4gMCA/IHJlc291cmNlWzBdIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChyZXNvdXJjZSBhcyBUKSB8fCBudWxsO1xuICB9XG5cbiAgZ2V0Q3VycmVudFNjaGVtYSgpOiBPcGVuQVBJVjNTY2hlbWFPYmplY3QgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlbWEgfHwgbnVsbDtcbiAgfVxuXG4gIHNlbGZGb2xkTWFuYWdlZEZpZWxkcygpIHtcbiAgICBpZiAodGhpcy5oYXNGb2xkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYXNGb2xkZWQgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5nZXRFZGl0b3JJbnN0YW5jZSgpO1xuICAgICAgaWYgKGVkaXRvcikge1xuICAgICAgICBmb2xkTWFuYWdlZEZpZWxkcyhlZGl0b3IpO1xuICAgICAgfVxuICAgIH0sIDUwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDorr7nva4gWUFNTCBzY2hlbWEg5Lul5o+Q5L6bIGhvdmVyIOaPkOekuuWSjOiHquWKqOWujOaIkFxuICAgKi9cbiAgc2V0WWFtbFNjaGVtYShyZXNvdXJjZTogVCwgc2NoZW1hOiBPcGVuQVBJVjNTY2hlbWFPYmplY3QpIHtcbiAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOS9v+eUqCBhcGlWZXJzaW9uICsga2luZCDnu4TlkIjkvZzkuLrmoIfor4ZcbiAgICBjb25zdCBhcGlWZXJzaW9uID0gcmVzb3VyY2U/LmFwaVZlcnNpb24gfHwgJ3Vua25vd24nO1xuICAgIGNvbnN0IGtpbmQgPSByZXNvdXJjZT8ua2luZCB8fCAndW5rbm93bic7XG4gICAgY29uc3Qgc2NoZW1hS2V5ID0gYCR7YXBpVmVyc2lvbn0vJHtraW5kfWA7XG5cbiAgICB0aGlzLm1vZGVsVXJpID0gYCR7c2NoZW1hS2V5fS55YW1sYDtcblxuICAgIHRoaXMuc2VsZkZvbGRNYW5hZ2VkRmllbGRzKCk7XG5cbiAgICAvLyDmo4Dmn6XmmK/lkKblt7Lnu4/ms6jlhozov4fnm7jlkIznmoQgc2NoZW1h77yM6YG/5YWN6YeN5aSN5rOo5YaMXG4gICAgaWYgKHRoaXMucmVnaXN0ZXJlZFNjaGVtYXMuaGFzKHNjaGVtYUtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDojrflj5blrozmlbTnmoQgZGVmaW5pdGlvbnMg5Lul5pSv5oyBICRyZWYg5byV55SoXG4gICAgY29uc3QgZGVmaW5pdGlvbnMgPSB0aGlzLnNjaGVtYVNlcnZpY2UuZGVmaW5pdGlvbnMgfHwge307XG5cbiAgICAvLyDliJvlu7rljIXlkKvlrozmlbQgZGVmaW5pdGlvbnMg55qEIHNjaGVtYSDlr7nosaFcbiAgICBjb25zdCBmdWxsU2NoZW1hID0ge1xuICAgICAgLi4uc2NoZW1hLFxuICAgICAgZGVmaW5pdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIOehruS/nXNjaGVtYeiiq+ato+ehruazqOWGjO+8jOW5tuWQr+eUqOiHquWKqOWujOaIkOWKn+iDvVxuICAgIHRoaXMueWFtbFNjaGVtYVNlcnZpY2UuYWRkU2NoZW1hKHtcbiAgICAgIHVyaTogYGs4czovLyR7c2NoZW1hS2V5fS5zY2hlbWEuanNvbmAsXG4gICAgICBmaWxlTWF0Y2g6IFt0aGlzLm1vZGVsVXJpXSxcbiAgICAgIHNjaGVtYTogZnVsbFNjaGVtYSxcbiAgICB9KTtcblxuICAgIHRoaXMucmVnaXN0ZXJlZFNjaGVtYXMuYWRkKHNjaGVtYUtleSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b0ZvbGRNYW5hZ2VkRmllbGRzICYmIHRoaXMuc2NoZW1hU2VydmljZS5kZWZpbml0aW9ucykge1xuICAgICAgdGhpcy5zZWxmRm9sZE1hbmFnZWRGaWVsZHMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6I635Y+WIE1vbmFjbyBFZGl0b3Ig5a6e5L6LXG4gICAqL1xuICBnZXRFZGl0b3JJbnN0YW5jZSgpOlxuICAgIHwgaW1wb3J0KCdtb25hY28tZWRpdG9yL2VzbS92cy9lZGl0b3IvZWRpdG9yLmFwaScpLmVkaXRvci5JU3RhbmRhbG9uZUNvZGVFZGl0b3JcbiAgICB8IG51bGwge1xuICAgIGlmICh0aGlzLmNvZGVFZGl0b3JSZWYgJiYgIXRoaXMubW9uYWNvRWRpdG9yKSB7XG4gICAgICAvLyDlsJ3or5Xku44gVmlld0NoaWxkIOiOt+WPlue8lui+keWZqOWunuS+i1xuICAgICAgY29uc3QgZWRpdG9yQ29tcG9uZW50ID0gdGhpcy5jb2RlRWRpdG9yUmVmO1xuICAgICAgaWYgKGVkaXRvckNvbXBvbmVudC5lZGl0b3IpIHtcbiAgICAgICAgdGhpcy5tb25hY29FZGl0b3IgPSBlZGl0b3JDb21wb25lbnQuZWRpdG9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tb25hY29FZGl0b3I7XG4gIH1cblxuICAvKipcbiAgICog6Ieq5Yqo5oqY5Y+gIG1hbmFnZWRGaWVsZHMg5a2X5q61XG4gICAqL1xuICBmb2xkTWFuYWdlZEZpZWxkcygpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmdldEVkaXRvckluc3RhbmNlKCk7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgZm9sZE1hbmFnZWRGaWVsZHMoZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5tb25hY29FZGl0b3IgPSBudWxsO1xuICB9XG59XG4iLCI8YXVpLWNhcmQgKm5nSWY9XCJoYXNXcmFwcGVyOyBlbHNlIGNvbnRlbnRcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIiAvPlxuPC9hdWktY2FyZD5cbjxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgPGRpdlxuICAgIGNsYXNzPVwieWFtbC1kaXNwbGF5LWNvbnRhaW5lclwiXG4gICAgW2NsYXNzLndpdGgtc2lkZWJhcl09XCJzaG93U2lkZWJhciQkIHwgYXN5bmNcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInlhbWwtZWRpdG9yLXNlY3Rpb25cIj5cbiAgICAgIDxhdWktY29kZS1lZGl0b3JcbiAgICAgICAgI2NvZGVFZGl0b3JSZWZcbiAgICAgICAgbmFtZT1cInlhbWxcIlxuICAgICAgICBbbmdNb2RlbF09XCJ5YW1sJCB8IGFzeW5jXCJcbiAgICAgICAgW29wdGlvbnNdPVwiZWRpdG9yT3B0aW9uc1wiXG4gICAgICAgIFthY3Rpb25zQ29uZmlnXT1cInZpZXdBY3Rpb25zXCJcbiAgICAgICAgW21vZGVsVXJpXT1cIm1vZGVsVXJpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBhdWlDb2RlRWRpdG9yVG9vbGJhckxlZnQ+XG4gICAgICAgICAgPGF1aS1jaGVja2JveFxuICAgICAgICAgICAgKm5nSWY9XCJjb25jaXNlRW5hYmxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYXVpLWNvZGUtZWRpdG9yLXRvb2xiYXJfX2NvbnRyb2wtYnV0dG9uXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImNvbmNpc2UkJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNvbmNpc2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ3ByZXZpZXdfY29uY2lzZV95YW1sJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYXVpLWNoZWNrYm94PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBhdWlDb2RlRWRpdG9yVG9vbGJhclJpZ2h0U2lkZT5cbiAgICAgICAgICA8IS0tIFNjaGVtYSDmjInpkq7vvJrlvZPlkK/nlKjkvqfovrnmoI/ml7bmmL7npLogLS0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAqbmdJZj1cInNpZGViYXJFbmFibGVcIlxuICAgICAgICAgICAgW2hpZGRlbl09XCIhIWNvZGVFZGl0b3JSZWYuZnVsbHNjcmVlbkRpYWxvZ1wiXG4gICAgICAgICAgICBjbGFzcz1cImF1aS1jb2RlLWVkaXRvci10b29sYmFyX19jb250cm9sLWJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIShmaW5hbFNjaGVtYSQgfCBhc3luYylcIlxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaWRlYmFyKClcIlxuICAgICAgICAgICAgW2F1aVRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICgoc2hvd1NpZGViYXIkJCB8IGFzeW5jKSA/ICdoaWRlX3NpZGViYXInIDogJ3ZpZXdfc2lkZWJhcicpXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGF1aS1pY29uXG4gICAgICAgICAgICAgIFtpY29uXT1cIlxuICAgICAgICAgICAgICAgIChzaG93U2lkZWJhciQkIHwgYXN5bmMpXG4gICAgICAgICAgICAgICAgICA/ICdwcm9kOmV4cGFuZF9zaWRlYmFyJ1xuICAgICAgICAgICAgICAgICAgOiAncHJvZDpjb2xsYXBzZV9zaWRlYmFyJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvYXVpLWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9hdWktY29kZS1lZGl0b3I+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInlhbWwtc2lkZWJhci1zZWN0aW9uXCJcbiAgICAgICpuZ0lmPVwic2hvd1NpZGViYXIkJCB8IGFzeW5jXCJcbiAgICA+XG4gICAgICA8YWNsLXJlc291cmNlLXlhbWwtc2lkZWJhclxuICAgICAgICBbcmVzb3VyY2VdPVwiZ2V0Q3VycmVudFJlc291cmNlKClcIlxuICAgICAgICBbc2NoZW1hXT1cImZpbmFsU2NoZW1hJCB8IGFzeW5jXCJcbiAgICAgICAgKGNsb3NlKT1cInRvZ2dsZVNpZGViYXIoKVwiXG4gICAgICAgIFtzY2hlbWFFbmFibGVdPVwic2NoZW1hRW5hYmxlXCJcbiAgICAgICAgW2V4YW1wbGVFbmFibGVdPVwiZmFsc2VcIlxuICAgICAgPjwvYWNsLXJlc291cmNlLXlhbWwtc2lkZWJhcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19