@alauda-fe/common
Version:
Alauda frontend team common codes.
456 lines • 69.3 kB
JavaScript
import { IconModule, TabsModule, ButtonModule } from '@alauda/ui';
import { NgIf, NgForOf, KeyValuePipe } from '@angular/common';
import { HttpClient } from '@angular/common/http';
import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter, ChangeDetectorRef, ElementRef, } from '@angular/core';
import { of, map, catchError } from 'rxjs';
import { PurePipe, ParseJsonTranslatePipe } from '../../core/pipes/public-api';
import { KubernetesSchemaService } from '../../core/services/kubernetes-schema.service';
import { TRANSLATE_MODULE } from '../../translate/translate.module';
import { BUILT_IN_YAML_EXAMPLES } from '../yaml-examples';
import * as i0 from "@angular/core";
import * as i1 from "../../core/services/kubernetes-schema.service";
import * as i2 from "@angular/common/http";
import * as i3 from "../../translate/translate.pipe";
import * as i4 from "@alauda/ui";
function ResourceYamlSidebarComponent_aui_tab_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtext(1, " Schema ");
i0.ɵɵelementContainerEnd();
} }
function ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_ng_container_2_Template(rf, ctx) { if (rf & 1) {
const _r1 = i0.ɵɵgetCurrentView();
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "a", 13);
i0.ɵɵlistener("click", function ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_ng_container_2_Template_a_click_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.refresh()); });
i0.ɵɵtext(2);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext(4);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx_r1.resourceKind);
} }
function ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
const _r3 = i0.ɵɵgetCurrentView();
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "span", 14);
i0.ɵɵtext(2, ">");
i0.ɵɵelementEnd();
i0.ɵɵelementStart(3, "a", 13);
i0.ɵɵlistener("click", function ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_ng_container_3_ng_container_1_Template_a_click_3_listener() { i0.ɵɵrestoreView(_r3); const i_r4 = i0.ɵɵnextContext().index; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToPath(i_r4)); });
i0.ɵɵtext(4);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const p_r5 = i0.ɵɵnextContext().$implicit;
i0.ɵɵadvance(4);
i0.ɵɵtextInterpolate(p_r5);
} }
function ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_ng_container_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "span", 14);
i0.ɵɵtext(2, ">");
i0.ɵɵelementEnd();
i0.ɵɵelementStart(3, "span");
i0.ɵɵtext(4);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const p_r5 = i0.ɵɵnextContext().$implicit;
i0.ɵɵadvance(4);
i0.ɵɵtextInterpolate(p_r5);
} }
function ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_ng_container_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_ng_container_3_ng_container_1_Template, 5, 1, "ng-container", 3)(2, ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_ng_container_3_ng_container_2_Template, 5, 1, "ng-container", 3);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const isLast_r6 = ctx.last;
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", !isLast_r6);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", isLast_r6);
} }
function ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_div_4_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelement(0, "div", 15);
i0.ɵɵpipe(1, "aclParseJsonTranslate");
i0.ɵɵpipe(2, "pure");
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext(4);
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(2, 3, i0.ɵɵpipeBind1(1, 1, ctx_r1.currentSchemaDescription), ctx_r1.processDescription), i0.ɵɵsanitizeHtml);
} }
function ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_div_6_p_8_Template(rf, ctx) { if (rf & 1) {
const _r7 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "p")(1, "a", 13);
i0.ɵɵlistener("click", function ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_div_6_p_8_Template_a_click_1_listener() { i0.ɵɵrestoreView(_r7); const item_r8 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.drillDownToProperty(item_r8.key)); });
i0.ɵɵtext(2);
i0.ɵɵpipe(3, "translate");
i0.ɵɵelementEnd()();
} if (rf & 2) {
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 1, "view_detail"), " ");
} }
function ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_div_6_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 16)(1, "h3")(2, "span");
i0.ɵɵtext(3);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(4, "span", 17);
i0.ɵɵtext(5);
i0.ɵɵelementEnd()();
i0.ɵɵelement(6, "p", 18);
i0.ɵɵpipe(7, "pure");
i0.ɵɵtemplate(8, ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_div_6_p_8_Template, 4, 3, "p", 3);
i0.ɵɵpipe(9, "pure");
i0.ɵɵelementEnd();
} if (rf & 2) {
const item_r8 = ctx.$implicit;
const ctx_r1 = i0.ɵɵnextContext(4);
i0.ɵɵadvance(3);
i0.ɵɵtextInterpolate(item_r8.key);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(item_r8.value.type);
i0.ɵɵadvance();
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(7, 4, item_r8.value.description, ctx_r1.processDescription), i0.ɵɵsanitizeHtml);
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(9, 7, item_r8.value, ctx_r1.hasViewableContent));
} }
function ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 7)(1, "div", 8);
i0.ɵɵtemplate(2, ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_ng_container_2_Template, 3, 1, "ng-container", 3)(3, ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_ng_container_3_Template, 3, 2, "ng-container", 9);
i0.ɵɵelementEnd();
i0.ɵɵtemplate(4, ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_div_4_Template, 3, 6, "div", 10);
i0.ɵɵelementStart(5, "div", 11);
i0.ɵɵtemplate(6, ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_div_6_Template, 10, 10, "div", 12);
i0.ɵɵpipe(7, "keyvalue");
i0.ɵɵelementEnd()();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext(3);
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", ctx_r1.path.length);
i0.ɵɵadvance();
i0.ɵɵproperty("ngForOf", ctx_r1.path);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx_r1.currentSchemaDescription);
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(7, 4, ctx_r1.properties));
} }
function ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_div_1_Template, 8, 6, "div", 6);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx_r1.schema);
} }
function ResourceYamlSidebarComponent_aui_tab_5_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "aui-tab");
i0.ɵɵtemplate(1, ResourceYamlSidebarComponent_aui_tab_5_ng_container_1_Template, 2, 0, "ng-container", 4)(2, ResourceYamlSidebarComponent_aui_tab_5_ng_container_2_Template, 2, 1, "ng-container", 5);
i0.ɵɵelementEnd();
} }
function ResourceYamlSidebarComponent_aui_tab_6_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtext(1, " Samples ");
i0.ɵɵelementContainerEnd();
} }
function ResourceYamlSidebarComponent_aui_tab_6_ng_container_2_div_2_Template(rf, ctx) { if (rf & 1) {
const _r9 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "div", 21)(1, "h3");
i0.ɵɵtext(2);
i0.ɵɵelementStart(3, "span");
i0.ɵɵtext(4);
i0.ɵɵelementEnd()();
i0.ɵɵelement(5, "p", 18);
i0.ɵɵpipe(6, "pure");
i0.ɵɵelementStart(7, "p", 22)(8, "a", 13);
i0.ɵɵlistener("click", function ResourceYamlSidebarComponent_aui_tab_6_ng_container_2_div_2_Template_a_click_8_listener() { const example_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.tryExample(example_r10)); });
i0.ɵɵelement(9, "aui-icon", 23);
i0.ɵɵelementStart(10, "span");
i0.ɵɵtext(11, "Try it");
i0.ɵɵelementEnd()();
i0.ɵɵelementStart(12, "a", 13);
i0.ɵɵlistener("click", function ResourceYamlSidebarComponent_aui_tab_6_ng_container_2_div_2_Template_a_click_12_listener() { const example_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.downloadYaml(example_r10)); });
i0.ɵɵelement(13, "aui-icon", 24);
i0.ɵɵelementStart(14, "span");
i0.ɵɵtext(15, "Download YAML");
i0.ɵɵelementEnd()()()();
} if (rf & 2) {
const example_r10 = ctx.$implicit;
const i_r11 = ctx.index;
const ctx_r1 = i0.ɵɵnextContext(3);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate1(" ", i_r11 + 1, ". ");
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(example_r10.title);
i0.ɵɵadvance();
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(6, 3, example_r10.description, ctx_r1.processDescription), i0.ɵɵsanitizeHtml);
} }
function ResourceYamlSidebarComponent_aui_tab_6_ng_container_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "div", 19);
i0.ɵɵtemplate(2, ResourceYamlSidebarComponent_aui_tab_6_ng_container_2_div_2_Template, 16, 6, "div", 20);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngForOf", ctx_r1.examples);
} }
function ResourceYamlSidebarComponent_aui_tab_6_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "aui-tab");
i0.ɵɵtemplate(1, ResourceYamlSidebarComponent_aui_tab_6_ng_container_1_Template, 2, 0, "ng-container", 4)(2, ResourceYamlSidebarComponent_aui_tab_6_ng_container_2_Template, 3, 1, "ng-container", 5);
i0.ɵɵelementEnd();
} }
export class ResourceYamlSidebarComponent {
constructor(schemaService, http, cdr, host) {
this.schemaService = schemaService;
this.http = http;
this.cdr = cdr;
this.host = host;
this.close = new EventEmitter();
this.tryYaml = new EventEmitter();
this.schemaEnable = true;
this.exampleEnable = true;
this.DEFINITIONS_PREFIX = '#/definitions/';
this.path = [];
this.examples = [];
this.hasSchema = false;
this.hasExamples = false;
}
ngOnInit() {
this.refresh();
this.loadExamples();
}
ngOnChanges(changes) {
if (changes.schema || changes.resource) {
this.refresh();
this.loadExamples();
}
}
refresh() {
if (this.schema) {
this.currentSchema = this.schema;
this.currentSchemaDescription = this.schema.description;
this.properties = this.schema.properties || {};
this.path = [];
this.hasSchema = true;
}
else {
this.hasSchema = false;
}
if (this.resource) {
this.resourceKind = this.resource.kind || 'Resource';
}
}
loadExamples() {
if (!this.resource) {
this.examples = [];
this.hasExamples = false;
this.cdr.markForCheck();
return;
}
const resourceKey = `${this.resource.apiVersion}.${this.resource.kind}`;
const builtInExamples = BUILT_IN_YAML_EXAMPLES[resourceKey] || [];
// 加载 ConsoleYAMLSample CRD 中的示例
this.loadConsoleYAMLSamples().subscribe({
next: crdExamples => {
this.examples = [
...builtInExamples,
...(this.extraExamples || []),
...crdExamples,
];
this.hasExamples = this.examples.length > 0;
this.cdr.markForCheck();
},
error: () => {
// 如果加载 CRD 示例失败,只使用内置示例
this.examples = builtInExamples;
this.hasExamples = this.examples.length > 0;
this.cdr.markForCheck();
},
});
}
loadConsoleYAMLSamples() {
if (!this.resource) {
return of([]);
}
// 构建查询 ConsoleYAMLSample 的 API 路径
const apiPath = `{{API_GATEWAY}}/kubernetes/${this.schemaService.workspaceHelper?.baseParamsSnapshot.cluster || 'global'}/apis/console.alauda.io/v1/consoleyamlsamples`;
return this.http.get(apiPath).pipe(map(response => {
return response.items
.filter(sample => {
const target = sample.spec.targetResource;
return (target.apiVersion === this.resource.apiVersion &&
target.kind === this.resource.kind);
})
.map(sample => ({
title: sample.spec.title,
description: sample.spec.description,
yaml: sample.spec.yaml,
snippet: sample.spec.snippet,
}));
}), catchError(() => of([])));
}
drillDownToProperty(name) {
const property = this.currentSchema.properties?.[name];
if (property) {
this.currentSchemaDescription = property.description;
let targetSchema = null;
// 处理 $ref 引用
if (property.$ref || property.items?.$ref) {
const ref = property.$ref || property.items?.$ref;
if (ref.startsWith(this.DEFINITIONS_PREFIX)) {
const definitionName = ref.replace(this.DEFINITIONS_PREFIX, '');
// 从根 schema 的 definitions 中获取定义
const rootDefinitions = this.schemaService.definitions;
targetSchema = rootDefinitions?.[definitionName] || null;
}
}
// 处理普通的嵌套属性
else if (property.properties || property.items?.properties) {
targetSchema = property.items?.properties ? property.items : property;
}
if (targetSchema) {
this.currentSchema = targetSchema;
this.path.push(name);
this.properties = targetSchema.properties || {};
this.scrollTop();
}
}
}
navigateToPath(index) {
const targetPath = this.path.slice(0, index + 1);
this.path = [...targetPath];
let currentObj = this.schema;
for (const pathSegment of targetPath) {
const property = currentObj.properties?.[pathSegment];
if (property) {
this.currentSchemaDescription = property.description;
// 处理 $ref 引用
if (property.$ref || property.items?.$ref) {
const ref = property.$ref || property.items?.$ref;
if (ref.startsWith(this.DEFINITIONS_PREFIX)) {
const definitionName = ref.replace(this.DEFINITIONS_PREFIX, '');
const rootDefinitions = this.schemaService.definitions;
const definition = rootDefinitions?.[definitionName];
if (definition) {
currentObj = definition;
}
}
}
// 处理普通的嵌套属性
else {
currentObj = property.items?.properties ? property.items : property;
}
}
}
this.currentSchema = currentObj;
this.properties = currentObj.properties || {};
}
/**
* 检查属性是否有 $ref 引用或嵌套属性
*/
hasViewableContent(property) {
return (
// 有 properties 的对象
(property.type === 'object' &&
property.properties &&
Object.keys(property.properties).length > 0) ||
// 有 properties 的数组项
(property.type === 'array' &&
property.items &&
typeof property.items === 'object' &&
property.items.properties &&
Object.keys(property.items.properties || {})
.length > 0) ||
// 有 $ref 引用
!!property.$ref ||
!!property?.items?.$ref);
}
// Examples 相关方法
tryExample(example) {
// 触发事件,让父组件处理 try it 功能,将 YAML 内容发送给父组件
this.tryYaml.emit(example.yaml);
}
downloadYaml(example) {
const blob = new Blob([example.yaml], { type: 'text/yaml' });
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = `${example.title.toLowerCase().replace(/\s+/g, '-')}.yaml`;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
window.URL.revokeObjectURL(url);
}
// 处理描述中的链接
processDescription(description) {
if (!description)
return '';
// 将 URL 转换为可点击的链接
const urlRegex = /(https?:\/\/[^\s]+)/g;
return description
.replace(urlRegex, '<a href="$1" target="_blank" rel="noopener noreferrer">$1</a>')
.replace(/\n/g, '<br>'); // 保留换行符
}
scrollTop() {
this.host.nativeElement.scrollTo({
top: 0,
});
}
static { this.ɵfac = function ResourceYamlSidebarComponent_Factory(t) { return new (t || ResourceYamlSidebarComponent)(i0.ɵɵdirectiveInject(i1.KubernetesSchemaService), i0.ɵɵdirectiveInject(i2.HttpClient), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ElementRef)); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ResourceYamlSidebarComponent, selectors: [["acl-resource-yaml-sidebar"]], inputs: { resource: "resource", schema: "schema", schemaEnable: "schemaEnable", exampleEnable: "exampleEnable", extraExamples: "extraExamples" }, outputs: { close: "close", tryYaml: "tryYaml" }, standalone: true, features: [i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature], decls: 7, vars: 3, consts: [[1, "schema-header"], ["icon", "xmark", 3, "click"], ["type", "card"], [4, "ngIf"], [4, "auiTabLabel"], [4, "auiTabContent"], ["class", "schema-content", 4, "ngIf"], [1, "schema-content"], [1, "schema-path"], [4, "ngFor", "ngForOf"], ["class", "schema-desc", 3, "innerHTML", 4, "ngIf"], [1, "schema-list"], ["class", "schema-item", 4, "ngFor", "ngForOf"], ["href", "javascript:", 3, "click"], [1, "path-mark"], [1, "schema-desc", 3, "innerHTML"], [1, "schema-item"], [1, "obj-type"], [3, "innerHTML"], [1, "example-list"], ["class", "example-item", 4, "ngFor", "ngForOf"], [1, "example-item"], [1, "tw-flex", "tw-justify-between"], ["icon", "arrow_turn_up", "size", "14", "margin", "right"], ["icon", "download", "size", "14", "margin", "right"]], template: function ResourceYamlSidebarComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 0)(1, "span");
i0.ɵɵtext(2);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(3, "aui-icon", 1);
i0.ɵɵlistener("click", function ResourceYamlSidebarComponent_Template_aui_icon_click_3_listener() { return ctx.close.next(); });
i0.ɵɵelementEnd()();
i0.ɵɵelementStart(4, "aui-tab-group", 2);
i0.ɵɵtemplate(5, ResourceYamlSidebarComponent_aui_tab_5_Template, 3, 0, "aui-tab", 3)(6, ResourceYamlSidebarComponent_aui_tab_6_Template, 3, 0, "aui-tab", 3);
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx.resourceKind);
i0.ɵɵadvance(3);
i0.ɵɵproperty("ngIf", ctx.schemaEnable && ctx.hasSchema);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx.exampleEnable && ctx.hasExamples);
} }, dependencies: [NgIf,
NgForOf,
KeyValuePipe, i3.TranslatePipe, ParseJsonTranslatePipe,
IconModule, i4.IconComponent, TabsModule, i4.TabGroupComponent, i4.TabComponent, i4.TabLabelDirective, i4.TabContentDirective, ButtonModule,
PurePipe], styles: ["[_nghost-%COMP%]{display:block;box-sizing:border-box;min-width:360px;padding:16px;background-color:rgb(var(--aui-color-n-10));box-shadow:0 0 4px rgba(var(--aui-color-n-1),.16);margin-left:12px;overflow-y:scroll}[_nghost-%COMP%]::-webkit-scrollbar{width:8px;height:4px}[_nghost-%COMP%]::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}[_nghost-%COMP%]::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}[_nghost-%COMP%]::-webkit-scrollbar-corner{background-color:transparent}aui-tab-group[_ngcontent-%COMP%]{display:block;margin-top:5px}.schema-header[_ngcontent-%COMP%]{height:40px;display:flex;justify-content:space-between;align-items:center;font-size:18px}.schema-header[_ngcontent-%COMP%] aui-icon[_ngcontent-%COMP%]{font-size:16px;color:rgb(var(--aui-color-n-6));cursor:pointer}.schema-header[_ngcontent-%COMP%] aui-icon[_ngcontent-%COMP%]:hover{color:rgb(var(--aui-color-primary))}.schema-content[_ngcontent-%COMP%]{line-height:20px;overflow-y:auto;height:calc(100% - 40px)}.schema-content[_ngcontent-%COMP%]::-webkit-scrollbar{width:8px;height:4px}.schema-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.schema-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.schema-content[_ngcontent-%COMP%]::-webkit-scrollbar-corner{background-color:transparent}.schema-desc[_ngcontent-%COMP%]{margin-bottom:12px}.schema-desc[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#007bff;text-decoration:none}.schema-desc[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{text-decoration:underline}.schema-path[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;margin-bottom:12px}.schema-path[_ngcontent-%COMP%] *[_ngcontent-%COMP%]{margin-left:2px;word-break:break-all}.schema-path[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:first-child{margin-right:2px}.schema-path[_ngcontent-%COMP%] .path-mark[_ngcontent-%COMP%]{margin:0 4px;color:rgb(var(--aui-color-n-6))}.schema-list[_ngcontent-%COMP%] .schema-item[_ngcontent-%COMP%], .schema-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%], .example-list[_ngcontent-%COMP%] .schema-item[_ngcontent-%COMP%], .example-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%]{padding-left:16px}.schema-list[_ngcontent-%COMP%] .schema-item[_ngcontent-%COMP%]:not(:last-of-type), .schema-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%]:not(:last-of-type), .example-list[_ngcontent-%COMP%] .schema-item[_ngcontent-%COMP%]:not(:last-of-type), .example-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%]:not(:last-of-type){border-bottom:1px solid rgb(var(--aui-color-border));margin-bottom:12px}.schema-list[_ngcontent-%COMP%] .schema-item[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]:before, .example-list[_ngcontent-%COMP%] .schema-item[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]:before{content:\"\";display:block;width:6px;height:6px;border-radius:50%;background-color:rgb(var(--aui-color-n-6));position:absolute;left:-12px;top:8px}.schema-list[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .example-list[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{position:relative;font-weight:500;margin-bottom:12px;word-break:break-word}.schema-list[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .example-list[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{margin-right:4px}.schema-list[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .obj-type[_ngcontent-%COMP%], .example-list[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .obj-type[_ngcontent-%COMP%]{color:rgb(var(--aui-color-n-4))}.schema-list[_ngcontent-%COMP%] p[_ngcontent-%COMP%], .example-list[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin-bottom:12px;word-break:break-word}.schema-list[_ngcontent-%COMP%] p[_ngcontent-%COMP%] a[_ngcontent-%COMP%], .example-list[_ngcontent-%COMP%] p[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#007bff;text-decoration:none}.schema-list[_ngcontent-%COMP%] p[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover, .example-list[_ngcontent-%COMP%] p[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{text-decoration:underline}.schema-examples[_ngcontent-%COMP%]{padding:16px}.examples-header[_ngcontent-%COMP%]{margin-bottom:16px}.examples-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:18px;font-weight:600;color:#333}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%]{margin-bottom:24px;border:1px solid #e1e5e9;border-radius:6px;overflow:hidden}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%]:last-child{margin-bottom:0}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background-color:#f8f9fa;border-bottom:1px solid #e1e5e9}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%] .example-title[_ngcontent-%COMP%]{margin:0;font-size:16px;font-weight:600;color:#333}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%] .example-actions[_ngcontent-%COMP%]{display:flex;gap:8px}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%] .example-actions[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{padding:4px 12px;font-size:12px;border-radius:4px;cursor:pointer;transition:all .2s ease}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%] .example-actions[_ngcontent-%COMP%] .btn.btn-outline-primary[_ngcontent-%COMP%]{color:#007bff;border:1px solid #007bff;background-color:transparent}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%] .example-actions[_ngcontent-%COMP%] .btn.btn-outline-primary[_ngcontent-%COMP%]:hover{color:#fff;background-color:#007bff}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%] .example-actions[_ngcontent-%COMP%] .btn.btn-outline-secondary[_ngcontent-%COMP%]{color:#6c757d;border:1px solid #6c757d;background-color:transparent}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-header[_ngcontent-%COMP%] .example-actions[_ngcontent-%COMP%] .btn.btn-outline-secondary[_ngcontent-%COMP%]:hover{color:#fff;background-color:#6c757d}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-description[_ngcontent-%COMP%]{padding:12px 16px;color:#666;font-size:14px;line-height:1.5;border-bottom:1px solid #e1e5e9}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-description[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#007bff;text-decoration:none}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-description[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{text-decoration:underline}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-yaml[_ngcontent-%COMP%]{background-color:#f8f9fa}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-yaml[_ngcontent-%COMP%] pre[_ngcontent-%COMP%]{margin:0;padding:16px;background-color:transparent;border:none;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:13px;line-height:1.4;color:#333;overflow-x:auto}.examples-content[_ngcontent-%COMP%] .examples-list[_ngcontent-%COMP%] .example-item[_ngcontent-%COMP%] .example-yaml[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{background-color:transparent;padding:0;color:inherit}"], changeDetection: 0 }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ResourceYamlSidebarComponent, [{
type: Component,
args: [{ selector: 'acl-resource-yaml-sidebar', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
NgIf,
NgForOf,
KeyValuePipe,
TRANSLATE_MODULE,
ParseJsonTranslatePipe,
IconModule,
TabsModule,
ButtonModule,
PurePipe,
], template: "<div class=\"schema-header\">\n <span>{{ resourceKind }}</span>\n <aui-icon\n icon=\"xmark\"\n (click)=\"close.next()\"\n ></aui-icon>\n</div>\n<aui-tab-group type=\"card\">\n <aui-tab *ngIf=\"schemaEnable && hasSchema\">\n <ng-container *auiTabLabel> Schema </ng-container>\n <ng-container *auiTabContent>\n <div\n *ngIf=\"schema\"\n class=\"schema-content\"\n >\n <div class=\"schema-path\">\n <ng-container *ngIf=\"path.length\">\n <a\n href=\"javascript:\"\n (click)=\"refresh()\"\n >{{ resourceKind }}</a\n >\n </ng-container>\n\n <ng-container *ngFor=\"let p of path; index as i; last as isLast\">\n <ng-container *ngIf=\"!isLast\">\n <span class=\"path-mark\">></span>\n <a\n href=\"javascript:\"\n (click)=\"navigateToPath(i)\"\n >{{ p }}</a\n >\n </ng-container>\n <ng-container *ngIf=\"isLast\">\n <span class=\"path-mark\">></span>\n <span>{{ p }}</span>\n </ng-container>\n </ng-container>\n </div>\n <div\n *ngIf=\"currentSchemaDescription\"\n class=\"schema-desc\"\n [innerHTML]=\"\n currentSchemaDescription\n | aclParseJsonTranslate\n | pure: processDescription\n \"\n ></div>\n <div class=\"schema-list\">\n <div\n *ngFor=\"let item of properties | keyvalue\"\n class=\"schema-item\"\n >\n <h3>\n <span>{{ item.key }}</span>\n <span class=\"obj-type\">{{ item.value.type }}</span>\n </h3>\n <p\n [innerHTML]=\"item.value.description | pure: processDescription\"\n ></p>\n <p *ngIf=\"item.value | pure: hasViewableContent\">\n <a\n href=\"javascript:\"\n (click)=\"drillDownToProperty(item.key)\"\n >\n {{ 'view_detail' | translate }}\n </a>\n </p>\n </div>\n </div>\n </div>\n </ng-container>\n </aui-tab>\n <aui-tab *ngIf=\"exampleEnable && hasExamples\">\n <ng-container *auiTabLabel> Samples </ng-container>\n <ng-container *auiTabContent>\n <div class=\"example-list\">\n <div\n *ngFor=\"let example of examples; let i = index\"\n class=\"example-item\"\n >\n <h3>\n {{ i + 1 }}. <span>{{ example.title }}</span>\n </h3>\n <p [innerHTML]=\"example.description | pure: processDescription\"></p>\n <p class=\"tw-flex tw-justify-between\">\n <a\n href=\"javascript:\"\n (click)=\"tryExample(example)\"\n >\n <aui-icon\n icon=\"arrow_turn_up\"\n size=\"14\"\n margin=\"right\"\n ></aui-icon>\n <span>Try it</span>\n </a>\n <a\n href=\"javascript:\"\n (click)=\"downloadYaml(example)\"\n >\n <aui-icon\n icon=\"download\"\n size=\"14\"\n margin=\"right\"\n ></aui-icon>\n <span>Download YAML</span>\n </a>\n </p>\n </div>\n </div>\n </ng-container>\n </aui-tab>\n</aui-tab-group>\n", styles: [":host{display:block;box-sizing:border-box;min-width:360px;padding:16px;background-color:rgb(var(--aui-color-n-10));box-shadow:0 0 4px rgba(var(--aui-color-n-1),.16);margin-left:12px;overflow-y:scroll}:host::-webkit-scrollbar{width:8px;height:4px}:host::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}:host::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}:host::-webkit-scrollbar-corner{background-color:transparent}aui-tab-group{display:block;margin-top:5px}.schema-header{height:40px;display:flex;justify-content:space-between;align-items:center;font-size:18px}.schema-header aui-icon{font-size:16px;color:rgb(var(--aui-color-n-6));cursor:pointer}.schema-header aui-icon:hover{color:rgb(var(--aui-color-primary))}.schema-content{line-height:20px;overflow-y:auto;height:calc(100% - 40px)}.schema-content::-webkit-scrollbar{width:8px;height:4px}.schema-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.schema-content::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.schema-content::-webkit-scrollbar-corner{background-color:transparent}.schema-desc{margin-bottom:12px}.schema-desc a{color:#007bff;text-decoration:none}.schema-desc a:hover{text-decoration:underline}.schema-path{display:flex;flex-wrap:wrap;margin-bottom:12px}.schema-path *{margin-left:2px;word-break:break-all}.schema-path span:first-child{margin-right:2px}.schema-path .path-mark{margin:0 4px;color:rgb(var(--aui-color-n-6))}.schema-list .schema-item,.schema-list .example-item,.example-list .schema-item,.example-list .example-item{padding-left:16px}.schema-list .schema-item:not(:last-of-type),.schema-list .example-item:not(:last-of-type),.example-list .schema-item:not(:last-of-type),.example-list .example-item:not(:last-of-type){border-bottom:1px solid rgb(var(--aui-color-border));margin-bottom:12px}.schema-list .schema-item h3:before,.example-list .schema-item h3:before{content:\"\";display:block;width:6px;height:6px;border-radius:50%;background-color:rgb(var(--aui-color-n-6));position:absolute;left:-12px;top:8px}.schema-list h3,.example-list h3{position:relative;font-weight:500;margin-bottom:12px;word-break:break-word}.schema-list h3 span,.example-list h3 span{margin-right:4px}.schema-list h3 .obj-type,.example-list h3 .obj-type{color:rgb(var(--aui-color-n-4))}.schema-list p,.example-list p{margin-bottom:12px;word-break:break-word}.schema-list p a,.example-list p a{color:#007bff;text-decoration:none}.schema-list p a:hover,.example-list p a:hover{text-decoration:underline}.schema-examples{padding:16px}.examples-header{margin-bottom:16px}.examples-header h3{margin:0;font-size:18px;font-weight:600;color:#333}.examples-content .examples-list .example-item{margin-bottom:24px;border:1px solid #e1e5e9;border-radius:6px;overflow:hidden}.examples-content .examples-list .example-item:last-child{margin-bottom:0}.examples-content .examples-list .example-item .example-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background-color:#f8f9fa;border-bottom:1px solid #e1e5e9}.examples-content .examples-list .example-item .example-header .example-title{margin:0;font-size:16px;font-weight:600;color:#333}.examples-content .examples-list .example-item .example-header .example-actions{display:flex;gap:8px}.examples-content .examples-list .example-item .example-header .example-actions .btn{padding:4px 12px;font-size:12px;border-radius:4px;cursor:pointer;transition:all .2s ease}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-primary{color:#007bff;border:1px solid #007bff;background-color:transparent}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-primary:hover{color:#fff;background-color:#007bff}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-secondary{color:#6c757d;border:1px solid #6c757d;background-color:transparent}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-secondary:hover{color:#fff;background-color:#6c757d}.examples-content .examples-list .example-item .example-description{padding:12px 16px;color:#666;font-size:14px;line-height:1.5;border-bottom:1px solid #e1e5e9}.examples-content .examples-list .example-item .example-description a{color:#007bff;text-decoration:none}.examples-content .examples-list .example-item .example-description a:hover{text-decoration:underline}.examples-content .examples-list .example-item .example-yaml{background-color:#f8f9fa}.examples-content .examples-list .example-item .example-yaml pre{margin:0;padding:16px;background-color:transparent;border:none;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:13px;line-height:1.4;color:#333;overflow-x:auto}.examples-content .examples-list .example-item .example-yaml pre code{background-color:transparent;padding:0;color:inherit}\n"] }]
}], () => [{ type: i1.KubernetesSchemaService }, { type: i2.HttpClient }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], { resource: [{
type: Input
}], schema: [{
type: Input
}],
// eslint-disable-next-line @angular-eslint/no-output-native
close: [{
type: Output
}], tryYaml: [{
type: Output
}], schemaEnable: [{
type: Input
}], exampleEnable: [{
type: Input
}], extraExamples: [{
type: Input
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ResourceYamlSidebarComponent, { className: "ResourceYamlSidebarComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2NvZGUveWFtbC1zaWRlYmFyL2NvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jb2RlL3lhbWwtc2lkZWJhci90ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNsRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBSUwsdUJBQXVCLEVBQ3ZCLE1BQU0sRUFDTixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBS3hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7O0lDZnRELDZCQUEyQjtJQUFDLHdCQUFPOzs7OztJQU83Qiw2QkFBa0M7SUFDaEMsNkJBR0c7SUFERCw0TkFBUyxnQkFBUyxLQUFDO0lBQ2xCLFlBQWtCO0lBQUEsaUJBQ3BCOzs7O0lBREUsZUFBa0I7SUFBbEIseUNBQWtCOzs7O0lBS3JCLDZCQUE4QjtJQUM1Qixn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