@alauda-fe/dynamic-plugin-shared 0.0.4-alpha.10 → 0.0.4-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,15 +1,15 @@
1
1
  import * as i1 from '@alauda/ui';
2
- import { rgbColor, ThemeService, coerceAttrBoolean, FormItemControlDirective, observeResizeOn, MessageService, NotificationService, DIALOG_DATA, DialogModule, ButtonModule, InputModule, IconModule, FormModule, MultiSelectComponent, handlePixel, isTemplateRef, ThemePickerPipe, TooltipModule, TooltipType, ButtonComponent, IconComponent, TagComponent, TooltipDirective, DateNavRange, InputGroupComponent, InputSuffixDirective, InputComponent, DateRangePickerPanelComponent, TagType, TagModule, TooltipComponent, BaseTooltip, TooltipTrigger, DialogService, INPUT_GROUP_MODULE, SelectModule, FORM_MODULE, DropdownModule, CheckboxModule, CardComponent, TOOLTIP_MODULE, CheckboxComponent, BackTopComponent, SortDirective, SortHeaderComponent, PaginatorComponent, TABLE_MODULE, DROPDOWN_MODULE, DialogRef, DIALOG_MODULE, CARD_MODULE, CHECKBOX_MODULE, TabsModule } from '@alauda/ui';
3
- import { last, cloneDeep, has, unset, get, isBoolean, sortBy, set, trim, isFunction, range, debounce, uniq, identity, first, isString, isEmpty, isObjectLike } from 'lodash-es';
2
+ import { rgbColor, ThemeService, coerceAttrBoolean, FormItemControlDirective, observeResizeOn, MessageService, NotificationService, DIALOG_DATA, DialogModule, ButtonModule, InputModule, IconModule, FormModule, MultiSelectComponent, handlePixel, isTemplateRef, ThemePickerPipe, TooltipModule, TooltipType, ButtonComponent, IconComponent, TagComponent, TooltipDirective, DateNavRange, InputGroupComponent, InputSuffixDirective, InputComponent, DateRangePickerPanelComponent, TagType, TagModule, TooltipComponent, BaseTooltip, TooltipTrigger, DialogService, INPUT_GROUP_MODULE, SelectModule, FORM_MODULE, DropdownModule, CheckboxModule, CardComponent, TOOLTIP_MODULE, CheckboxComponent, BackTopComponent, SortDirective, SortHeaderComponent, PaginatorComponent, TABLE_MODULE, DROPDOWN_MODULE, DialogRef, DIALOG_MODULE, CARD_MODULE, CHECKBOX_MODULE, TabsModule, DialogSize, MessageType, NOTIFICATION_DEFAULT_CONFIG } from '@alauda/ui';
3
+ import { last, cloneDeep, has, unset, get, isBoolean, sortBy, set, trim, isFunction, range, debounce, uniq, identity, first, isString, isEmpty, isObjectLike, throttle, min, clamp, round, add, subtract } from 'lodash-es';
4
4
  import * as i3 from '@alauda-fe/dynamic-plugin-sdk';
5
- import { parseBase64Type, isBlank, publishRef, TOKEN_BASE_DOMAIN, stringify as stringify$1, isEqual, TimeService, TranslateService, isZhLang, FALLBACK_LANGUAGE, TranslatePipe, ObservableInput, FeatureGateService, FieldNotAvailablePipe, ValueHook, LoadingMaskComponent, PurePipe, StandardTimePipe, RelativeTimePipe, skipError, CURR_ESCAPE_DEACTIVATE_GUARD, ESCAPE_DEACTIVATE_GUARD, parseAll, FIELD_NOT_AVAILABLE_PLACEHOLDER, noop, SafePipe, WatchEvent, K8sUtilService, NAMESPACE as NAMESPACE$1, isFieldNotAvailable, K8S_UTIL_PIPES_MODULE, ResourceSelectorPopupService, ProjectService, ConfigurableField, API_GATEWAY as API_GATEWAY$1, ClusterListComponent, K8sApiService, TRANSLATE_MODULE, KubernetesSchemaService } from '@alauda-fe/dynamic-plugin-sdk';
6
- import { Observable, finalize, map, startWith, catchError, of, isObservable, switchMap, animationFrameScheduler, fromEvent, auditTime, Subject, takeUntil, distinctUntilChanged, combineLatest, filter, debounceTime, take, merge, pairwise, tap, BehaviorSubject, from, timer, ReplaySubject, delay, withLatestFrom, scan, takeWhile, concat, exhaustMap, EMPTY as EMPTY$1, interval, NEVER, switchScan, shareReplay, mapTo } from 'rxjs';
5
+ import { parseBase64Type, isBlank, publishRef, TOKEN_BASE_DOMAIN, stringify as stringify$1, isEqual, TimeService, TranslateService, isZhLang, FALLBACK_LANGUAGE, TranslatePipe, ObservableInput, FeatureGateService, FieldNotAvailablePipe, ValueHook, LoadingMaskComponent, PurePipe, StandardTimePipe, RelativeTimePipe, skipError, CURR_ESCAPE_DEACTIVATE_GUARD, ESCAPE_DEACTIVATE_GUARD, parseAll, FIELD_NOT_AVAILABLE_PLACEHOLDER, noop, SafePipe, WatchEvent, K8sUtilService, NAMESPACE as NAMESPACE$1, isFieldNotAvailable, K8S_UTIL_PIPES_MODULE, ResourceSelectorPopupService, ProjectService, ConfigurableField, API_GATEWAY as API_GATEWAY$1, ClusterListComponent, K8sApiService, TRANSLATE_MODULE, KubernetesSchemaService, NOTIFY_DURATION_HEADER as NOTIFY_DURATION_HEADER$1, EMPTY as EMPTY$2, FALSE as FALSE$1, isMac } from '@alauda-fe/dynamic-plugin-sdk';
6
+ import { Observable, finalize, map, startWith, catchError, of, isObservable, switchMap, animationFrameScheduler, fromEvent, auditTime, Subject, takeUntil, distinctUntilChanged, combineLatest, filter, debounceTime, take, merge, pairwise, tap, BehaviorSubject, from, timer, ReplaySubject, delay, withLatestFrom, scan, takeWhile, concat, exhaustMap, EMPTY as EMPTY$1, interval, NEVER, switchScan, shareReplay, mapTo, throwError } from 'rxjs';
7
7
  import { ActivatedRoute, Router, RouterLink } from '@angular/router';
8
- import { dissocPath, converge, mergeAll, mergeDeepRight, path, assocPath, identity as identity$1, equals } from 'ramda';
8
+ import { dissocPath, converge, mergeAll, mergeDeepRight, path, assocPath, identity as identity$1, equals, mergeRight } from 'ramda';
9
9
  import { compare } from 'compare-versions';
10
10
  export { compareVersions as compareVersionToNum, satisfies as satisfiesVersion } from 'compare-versions';
11
11
  import * as i0 from '@angular/core';
12
- import { inject, Directive, NgZone, Injectable, IterableDiffers, isDevMode, Pipe, ChangeDetectorRef, Input, ViewContainerRef, TemplateRef, ɵstringify as _stringify, ElementRef, Injector, HostBinding, ChangeDetectionStrategy, Component, EventEmitter, Output, HostListener, booleanAttribute, forwardRef, ContentChild, Renderer2, ViewEncapsulation, ViewChild, ApplicationRef, ViewChildren, ContentChildren, InjectionToken, input, NgModule, computed } from '@angular/core';
12
+ import { inject, Directive, NgZone, Injectable, IterableDiffers, isDevMode, Pipe, ChangeDetectorRef, Input, ViewContainerRef, TemplateRef, ɵstringify as _stringify, ElementRef, Injector, HostBinding, ChangeDetectionStrategy, Component, EventEmitter, Output, HostListener, booleanAttribute, forwardRef, ContentChild, Renderer2, ViewEncapsulation, ViewChild, ApplicationRef, ViewChildren, ContentChildren, InjectionToken, input, computed, numberAttribute } from '@angular/core';
13
13
  import parser from 'cron-parser';
14
14
  import dayjs from 'dayjs';
15
15
  import { marked } from 'marked';
@@ -26,7 +26,7 @@ import { CdkScrollable, ScrollingModule, CdkVirtualScrollViewport } from '@angul
26
26
  import { ScrollDispatcher, Overlay } from '@angular/cdk/overlay';
27
27
  import { decode, encode } from 'ab64';
28
28
  import { DomPortalOutlet, ComponentPortal } from '@angular/cdk/portal';
29
- import { yamlWriteOptions, createActions, MonacoEditorConfig, viewActions, readonlyOptions, CodeEditorComponent, yamlReadOptions, MonacoLanguageService, yamlWriteMinimapOptions, updateActions } from '@alauda/code-editor';
29
+ import { yamlWriteOptions, createActions, MonacoEditorConfig, viewActions, readonlyOptions, CodeEditorComponent, yamlReadMinimapOptions, yamlReadOptions, MonacoLanguageService, yamlWriteMinimapOptions, updateActions } from '@alauda/code-editor';
30
30
  import { DomSanitizer } from '@angular/platform-browser';
31
31
  import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
32
32
  import { BaseResourceFormComponent } from 'ng-resource-form-util';
@@ -10927,9 +10927,10 @@ class AclTableVirtualComponent {
10927
10927
  this.height = '400px';
10928
10928
  this.trackBy = (index) => index;
10929
10929
  this.placeholderActive = false;
10930
+ this.checked$ = new Subject();
10930
10931
  this.destroy$ = new Subject();
10931
10932
  }
10932
- ngAfterViewInit() {
10933
+ ngAfterViewChecked() {
10933
10934
  // 如果有虚拟滚动视口,优先监听其滚动;否则退回到外层容器滚动。
10934
10935
  const container = this.scrollContainerRef?.nativeElement;
10935
10936
  const viewportEl = this.viewport?.elementRef?.nativeElement ?? null;
@@ -10937,17 +10938,26 @@ class AclTableVirtualComponent {
10937
10938
  fromEvent(viewportEl ?? container, 'scroll');
10938
10939
  const containerScrolled$ = fromEvent(container, 'scroll');
10939
10940
  const resized$ = fromEvent(window, 'resize');
10941
+ this.checked$.next();
10940
10942
  merge(viewportScrolled$, containerScrolled$, resized$)
10941
- .pipe(startWith(null), takeUntil(this.destroy$))
10943
+ .pipe(startWith(null), takeUntil(this.checked$))
10942
10944
  .subscribe(() => {
10943
10945
  this.mutateVerticalScroll();
10944
10946
  this.mutateHorizontalScroll();
10947
+ if (this.headerRow && viewportEl) {
10948
+ this.headerRow.nativeElement.scrollLeft = viewportEl.scrollLeft;
10949
+ }
10945
10950
  });
10946
- // 初始化一次,以便首次渲染即得到正确的阴影状态。
10947
- this.mutateVerticalScroll();
10948
- this.mutateHorizontalScroll();
10951
+ }
10952
+ onHeaderRowScroll(ev) {
10953
+ if (!this.viewport) {
10954
+ return;
10955
+ }
10956
+ this.viewport.elementRef.nativeElement.scrollLeft = ev.target.scrollLeft;
10949
10957
  }
10950
10958
  ngOnDestroy() {
10959
+ this.checked$.next();
10960
+ this.checked$.complete();
10951
10961
  this.destroy$.next();
10952
10962
  this.destroy$.complete();
10953
10963
  }
@@ -10981,13 +10991,17 @@ class AclTableVirtualComponent {
10981
10991
  this.placeClass(scrollLeft < scrollDisX && scrollDisX > 0, 'aui-table__scroll-shadow--before-end');
10982
10992
  }
10983
10993
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10984
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: AclTableVirtualComponent, isStandalone: true, selector: "acl-table-virtual", inputs: { dataSource: "dataSource", itemSize: "itemSize", minBufferPx: "minBufferPx", maxBufferPx: "maxBufferPx", height: "height", trackBy: "trackBy", placeholderActive: "placeholderActive" }, queries: [{ propertyName: "headerTemplate", first: true, predicate: AclTableVirtualHeaderDefDirective, descendants: true, read: TemplateRef }, { propertyName: "rowTemplate", first: true, predicate: (AclTableVirtualRowDefDirective), descendants: true, read: TemplateRef }, { propertyName: "placeholderTemplate", first: true, predicate: AclTableVirtualPlaceholderDefDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "scrollContainerRef", first: true, predicate: ["scrollContainer"], descendants: true, static: true }], exportAs: ["aclTableVirtual"], ngImport: i0, template: `
10994
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: AclTableVirtualComponent, isStandalone: true, selector: "acl-table-virtual", inputs: { dataSource: "dataSource", itemSize: "itemSize", minBufferPx: "minBufferPx", maxBufferPx: "maxBufferPx", height: "height", trackBy: "trackBy", placeholderActive: "placeholderActive" }, queries: [{ propertyName: "headerTemplate", first: true, predicate: AclTableVirtualHeaderDefDirective, descendants: true, read: TemplateRef }, { propertyName: "rowTemplate", first: true, predicate: (AclTableVirtualRowDefDirective), descendants: true, read: TemplateRef }, { propertyName: "placeholderTemplate", first: true, predicate: AclTableVirtualPlaceholderDefDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "scrollContainerRef", first: true, predicate: ["scrollContainer"], descendants: true, static: true }, { propertyName: "headerRow", first: true, predicate: ["headerRow"], descendants: true }], exportAs: ["aclTableVirtual"], ngImport: i0, template: `
10985
10995
  <div
10986
10996
  #scrollContainer
10987
10997
  class="aui-table aui-table__scroll-shadow"
10988
10998
  >
10989
10999
  @if (headerTemplate) {
10990
- <div class="aui-table__header-row">
11000
+ <div
11001
+ class="aui-table__header-row"
11002
+ #headerRow
11003
+ (scroll)="onHeaderRowScroll($event)"
11004
+ >
10991
11005
  <ng-template [ngTemplateOutlet]="headerTemplate"></ng-template>
10992
11006
  </div>
10993
11007
  }
@@ -11026,7 +11040,7 @@ class AclTableVirtualComponent {
11026
11040
  </cdk-virtual-scroll-viewport>
11027
11041
  }
11028
11042
  </div>
11029
- `, isInline: true, styles: [":host{display:block}.aui-table__body-viewport{display:block}cdk-virtual-scroll-viewport::-webkit-scrollbar{width:8px;height:4px}cdk-virtual-scroll-viewport::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}cdk-virtual-scroll-viewport::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}cdk-virtual-scroll-viewport::-webkit-scrollbar-corner{background-color:transparent}.aui-table{position:relative;display:block;padding:0 12px 12px}.aui-table{font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-main-text))}.aui-table{background-color:rgb(var(--aui-color-n-9));border-radius:var(--aui-border-radius-l)}.aui-table__row,.aui-table__header-row{display:flex;align-items:center}.aui-table__row.hasPanel,.aui-table__header-row.hasPanel{flex-wrap:wrap}.aui-table__header-row+.aui-table__row{border-top-left-radius:var(--aui-border-radius-l);border-top-right-radius:var(--aui-border-radius-l)}.aui-table__row{position:relative;border-width:1px;border-style:solid;border-color:rgb(var(--aui-color-n-8));border-bottom-width:0;background-color:rgb(var(--aui-color-n-10));padding:0 9px;min-height:58px;box-sizing:content-box}.aui-table__row:first-child{border-top-left-radius:var(--aui-border-radius-l);border-top-right-radius:var(--aui-border-radius-l)}.aui-table__row:last-of-type{border-bottom-width:1px;min-height:58px;border-bottom-left-radius:var(--aui-border-radius-l);border-bottom-right-radius:var(--aui-border-radius-l)}.aui-table__row.isDisabled:before{content:\"\";z-index:2;position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgb(var(--aui-color-n-10));opacity:.7;cursor:not-allowed}.aui-table__header-row{background-color:rgb(var(--aui-color-n-9));padding:0 10px}.aui-table__cell,.aui-table__header-cell{display:flex;align-items:center;flex:1;position:relative}.aui-table__cell{padding:15px 10px;background-color:rgb(var(--aui-color-n-10));overflow:hidden}.aui-table__cell--column{flex-direction:column;justify-content:center;align-items:flex-start}.aui-table__header-cell{padding:12px 10px;font-weight:var(--aui-font-weight-bold);background-color:rgb(var(--aui-color-n-9))}.aui-table__column-expand-button{display:flex;align-items:center;max-width:calc(10px * 2 + var(--aui-icon-size-m))}.aui-table__column-expand-button.aui-table__cell{height:58px}.aui-table__column-expand-button .aui-expand-button{display:inline-flex;justify-content:center;align-items:center;width:var(--aui-icon-size-m);height:var(--aui-icon-size-m);color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6));border-radius:50%;border:none;cursor:pointer;transition:transform .1s ease-in-out}.aui-table__column-expand-button .aui-expand-button aui-icon{display:flex;justify-content:center;align-items:center;width:var(--aui-icon-size-s);height:var(--aui-icon-size-s);font-size:var(--aui-icon-size-s)}.aui-table__column-expand-button .aui-expand-button:hover{background-color:rgb(var(--aui-color-p-7))}.aui-table__column-expand-button .aui-expand-button:active{background-color:rgb(var(--aui-color-p-5))}.aui-table__column-expand-button .aui-expand-button.isExpanded{transform:rotate(90deg);color:#fff;background-color:rgb(var(--aui-color-primary))}.aui-table__column-expand-button .aui-expand-button.isExpanded:hover{background-color:rgb(var(--aui-color-p-1))}.aui-table__column-expand-button .aui-expand-button.isExpanded:active{background-color:rgb(var(--aui-color-p-0))}.aui-table__column-expand-button .aui-expand-button[disabled],.aui-table__column-expand-button .aui-expand-button.isExpanded[disabled]{background-color:rgb(var(--aui-color-n-8));color:rgb(var(--aui-color-n-6));cursor:not-allowed}.aui-table__column-expand-panel{margin-top:-6px}.aui-table__column-expand-panel.aui-table__header-cell{display:none}.aui-table__column-expand-panel.aui-table__cell{width:100%;flex-shrink:0;flex-basis:100%;padding:0 10px;overflow:hidden}.aui-table__column-expand-panel.aui-table__cell .aui-table__cell-expand-panel{width:100%;border-radius:var(--aui-border-radius-l);overflow:hidden}.aui-table__column-expand-panel.aui-table__cell .aui-table__cell-expand-panel-content.hasBackground{padding:16px;background-color:rgb(var(--aui-color-n-9))}.aui-table-column-resizable__handle{display:block;position:absolute;top:0;bottom:0;right:0;width:5px;color:rgb(var(--aui-color-n-7));cursor:col-resize}.aui-table-column-resizable__handle:after{content:\"\";display:block;margin:12px 0 12px auto;width:1px;height:calc(100% - 24px);background-color:currentcolor}.aui-table-column-resizable__handle:hover{color:rgb(var(--aui-color-primary))}.aui-table-column-resizable__mark-line{display:block;position:absolute;top:0;bottom:0;width:1px;background-color:rgb(var(--aui-color-primary));z-index:9999;cursor:col-resize}.aui-table-column-resizable__overlay{display:block;position:absolute;inset:0;z-index:9000;cursor:col-resize}.aui-table__scroll-wrapper{position:relative;display:flex;flex-direction:column;max-height:100%;overflow:hidden;background-color:rgb(var(--aui-color-n-9));padding:0 12px 12px;border-radius:var(--aui-border-radius-l)}.aui-table__scroll-wrapper::-webkit-scrollbar{width:8px;height:4px}.aui-table__scroll-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.aui-table__scroll-wrapper::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.aui-table__scroll-wrapper::-webkit-scrollbar-corner{background-color:transparent}.aui-table__scroll-wrapper .aui-table{padding:0;border-radius:0}.aui-table__scroll-wrapper .aui-table__scroll-shadow.hasTableTopShadow:before,.aui-table__scroll-wrapper .aui-table__scroll-shadow.hasTableBottomShadow:after{transform:none;width:100%;left:0}.aui-table__scroll-shadow.aui-table{overflow:auto}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar{width:8px;height:4px}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-corner{background-color:transparent}.aui-table__scroll-shadow.hasTableTopShadow:before{content:\"\";position:sticky;display:block;height:16px;margin:-16px -12px 0;z-index:99;top:28px}:root .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow.hasTableBottomShadow:after{content:\"\";position:sticky;display:block;height:16px;transform:translate3d(0,12px,0);z-index:99;bottom:0;margin:-16px -12px 0}:root .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-1),.16) inset}html[aui-theme-mode=light] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-1),.16) inset}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-9),.75) inset}}html[aui-theme-mode=dark] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-9),.75) inset}.aui-table__scroll-shadow .aui-table__header-row{margin:0;padding:0;align-items:stretch}.aui-table__scroll-shadow .aui-table__header-row .aui-table__header-cell:first-of-type{padding-left:20px}.aui-table__scroll-shadow .aui-table__header-row .aui-table__header-cell:last-of-type{padding-right:20px}.aui-table__scroll-shadow .aui-table__header-row+.aui-table__row .aui-table__cell:first-of-type{border-top-left-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__header-row+.aui-table__row .aui-table__cell:last-of-type{border-top-right-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row{border:none;padding:0;align-items:stretch;min-height:59px}.aui-table__scroll-shadow .aui-table__row .aui-table__cell{border-width:1px 0;border-style:solid;border-color:rgb(var(--aui-color-n-8))}.aui-table__scroll-shadow .aui-table__row .aui-table__cell:first-of-type{border-left-width:1px;padding-left:19px}.aui-table__scroll-shadow .aui-table__row .aui-table__cell:last-of-type{border-right-width:1px;padding-right:19px}.aui-table__scroll-shadow .aui-table__row:last-child{min-height:60px}.aui-table__scroll-shadow .aui-table__row:last-child .aui-table__cell:first-of-type{border-bottom-left-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row:last-child .aui-table__cell:last-of-type{border-bottom-right-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row:not(:last-child) .aui-table__cell{border-bottom-width:0}.aui-table__scroll-shadow--has-scroll aui-table-header-cell.aui-table-sticky-border-elem-left .aui-table-column-resizable__handle{transform:translate(-20px)}.aui-table__scroll-shadow--has-scroll .aui-table-column-resizable__mark-line.inStickyBorderElemLeft{transform:translate(-20px)}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:after,.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:after{position:absolute;top:0;bottom:-1px;width:20px;transition:box-shadow .3s;content:\"\";pointer-events:none}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:before,.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:before{position:absolute;top:0;bottom:-1px;content:\"\";background:linear-gradient(to bottom,rgb(var(--aui-color-n-7)),rgb(var(--aui-color-n-7)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left{padding-right:30px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:after{right:-10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:before{right:10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right{padding-left:30px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:after{left:-10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:before{left:10px}:root .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):before{background:linear-gradient(to bottom,rgb(var(--aui-color-primary)),rgb(var(--aui-color-primary)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}:root .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):before{background:linear-gradient(to bottom,rgb(var(--aui-color-primary)),rgb(var(--aui-color-primary)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1$2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1$2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1$2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
11043
+ `, isInline: true, styles: ["acl-table-virtual{display:block;max-width:100%;overflow:hidden}.aui-table__body-viewport{display:block}cdk-virtual-scroll-viewport::-webkit-scrollbar{width:8px;height:4px}cdk-virtual-scroll-viewport::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}cdk-virtual-scroll-viewport::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}cdk-virtual-scroll-viewport::-webkit-scrollbar-corner{background-color:transparent}.aui-table{position:relative;display:block;padding:0 12px 12px}.aui-table{font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-main-text))}.aui-table{background-color:rgb(var(--aui-color-n-9));border-radius:var(--aui-border-radius-l)}.aui-table__row,.aui-table__header-row{display:flex;align-items:center;background-color:rgb(var(--aui-color-n-9));padding:0 10px;overflow:scroll}.aui-table__row.hasPanel,.aui-table__header-row.hasPanel{flex-wrap:wrap}.aui-table__header-row+.aui-table__row{border-top-left-radius:var(--aui-border-radius-l);border-top-right-radius:var(--aui-border-radius-l)}.aui-table__row{position:relative;border-width:1px;border-style:solid;border-color:rgb(var(--aui-color-n-8));border-bottom-width:0;background-color:rgb(var(--aui-color-n-10));padding:0 9px;min-height:58px;box-sizing:content-box}.aui-table__row:first-child{border-top-left-radius:var(--aui-border-radius-l);border-top-right-radius:var(--aui-border-radius-l)}.aui-table__row:last-of-type{border-bottom-width:1px;min-height:58px;border-bottom-left-radius:var(--aui-border-radius-l);border-bottom-right-radius:var(--aui-border-radius-l)}.aui-table__row.isDisabled:before{content:\"\";z-index:2;position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgb(var(--aui-color-n-10));opacity:.7;cursor:not-allowed}.aui-table__cell,.aui-table__header-cell{display:flex;align-items:center;flex:1;position:relative}.aui-table__cell{padding:15px 10px;background-color:rgb(var(--aui-color-n-10));overflow:hidden}.aui-table__cell--column{flex-direction:column;justify-content:center;align-items:flex-start}.aui-table__header-cell{padding:12px 10px;font-weight:var(--aui-font-weight-bold);background-color:rgb(var(--aui-color-n-9))}.aui-table__column-expand-button{display:flex;align-items:center;max-width:calc(10px * 2 + var(--aui-icon-size-m))}.aui-table__column-expand-button.aui-table__cell{height:58px}.aui-table__column-expand-button .aui-expand-button{display:inline-flex;justify-content:center;align-items:center;width:var(--aui-icon-size-m);height:var(--aui-icon-size-m);color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6));border-radius:50%;border:none;cursor:pointer;transition:transform .1s ease-in-out}.aui-table__column-expand-button .aui-expand-button aui-icon{display:flex;justify-content:center;align-items:center;width:var(--aui-icon-size-s);height:var(--aui-icon-size-s);font-size:var(--aui-icon-size-s)}.aui-table__column-expand-button .aui-expand-button:hover{background-color:rgb(var(--aui-color-p-7))}.aui-table__column-expand-button .aui-expand-button:active{background-color:rgb(var(--aui-color-p-5))}.aui-table__column-expand-button .aui-expand-button.isExpanded{transform:rotate(90deg);color:#fff;background-color:rgb(var(--aui-color-primary))}.aui-table__column-expand-button .aui-expand-button.isExpanded:hover{background-color:rgb(var(--aui-color-p-1))}.aui-table__column-expand-button .aui-expand-button.isExpanded:active{background-color:rgb(var(--aui-color-p-0))}.aui-table__column-expand-button .aui-expand-button[disabled],.aui-table__column-expand-button .aui-expand-button.isExpanded[disabled]{background-color:rgb(var(--aui-color-n-8));color:rgb(var(--aui-color-n-6));cursor:not-allowed}.aui-table__column-expand-panel{margin-top:-6px}.aui-table__column-expand-panel.aui-table__header-cell{display:none}.aui-table__column-expand-panel.aui-table__cell{width:100%;flex-shrink:0;flex-basis:100%;padding:0 10px;overflow:hidden}.aui-table__column-expand-panel.aui-table__cell .aui-table__cell-expand-panel{width:100%;border-radius:var(--aui-border-radius-l);overflow:hidden}.aui-table__column-expand-panel.aui-table__cell .aui-table__cell-expand-panel-content.hasBackground{padding:16px;background-color:rgb(var(--aui-color-n-9))}.aui-table-column-resizable__handle{display:block;position:absolute;top:0;bottom:0;right:0;width:5px;color:rgb(var(--aui-color-n-7));cursor:col-resize}.aui-table-column-resizable__handle:after{content:\"\";display:block;margin:12px 0 12px auto;width:1px;height:calc(100% - 24px);background-color:currentcolor}.aui-table-column-resizable__handle:hover{color:rgb(var(--aui-color-primary))}.aui-table-column-resizable__mark-line{display:block;position:absolute;top:0;bottom:0;width:1px;background-color:rgb(var(--aui-color-primary));z-index:9999;cursor:col-resize}.aui-table-column-resizable__overlay{display:block;position:absolute;inset:0;z-index:9000;cursor:col-resize}.aui-table__scroll-wrapper{position:relative;display:flex;flex-direction:column;max-height:100%;overflow:hidden;background-color:rgb(var(--aui-color-n-9));padding:0 12px 12px;border-radius:var(--aui-border-radius-l)}.aui-table__scroll-wrapper::-webkit-scrollbar{width:8px;height:4px}.aui-table__scroll-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.aui-table__scroll-wrapper::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.aui-table__scroll-wrapper::-webkit-scrollbar-corner{background-color:transparent}.aui-table__scroll-wrapper .aui-table{padding:0;border-radius:0}.aui-table__scroll-wrapper .aui-table__scroll-shadow.hasTableTopShadow:before,.aui-table__scroll-wrapper .aui-table__scroll-shadow.hasTableBottomShadow:after{transform:none;width:100%;left:0}.aui-table__scroll-shadow.aui-table{overflow:auto}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar{width:8px;height:4px}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-corner{background-color:transparent}.aui-table__scroll-shadow.hasTableTopShadow:before{content:\"\";position:sticky;display:block;height:16px;margin:-16px -12px 0;z-index:99;top:28px}:root .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow.hasTableBottomShadow:after{content:\"\";position:sticky;display:block;height:16px;transform:translate3d(0,12px,0);z-index:99;bottom:0;margin:-16px -12px 0}:root .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-1),.16) inset}html[aui-theme-mode=light] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-1),.16) inset}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-9),.75) inset}}html[aui-theme-mode=dark] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-9),.75) inset}.aui-table__scroll-shadow .aui-table__header-row{margin:0;padding:0;align-items:stretch}.aui-table__scroll-shadow .aui-table__header-row .aui-table__header-cell:first-of-type{padding-left:20px}.aui-table__scroll-shadow .aui-table__header-row .aui-table__header-cell:last-of-type{padding-right:20px}.aui-table__scroll-shadow .aui-table__header-row+.aui-table__row .aui-table__cell:first-of-type{border-top-left-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__header-row+.aui-table__row .aui-table__cell:last-of-type{border-top-right-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row{border:none;padding:0;align-items:stretch;min-height:59px}.aui-table__scroll-shadow .aui-table__row .aui-table__cell{border-width:1px 0;border-style:solid;border-color:rgb(var(--aui-color-n-8))}.aui-table__scroll-shadow .aui-table__row .aui-table__cell:first-of-type{border-left-width:1px;padding-left:19px}.aui-table__scroll-shadow .aui-table__row .aui-table__cell:last-of-type{border-right-width:1px;padding-right:19px}.aui-table__scroll-shadow .aui-table__row:last-child{min-height:60px}.aui-table__scroll-shadow .aui-table__row:last-child .aui-table__cell:first-of-type{border-bottom-left-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row:last-child .aui-table__cell:last-of-type{border-bottom-right-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row:not(:last-child) .aui-table__cell{border-bottom-width:0}.aui-table__scroll-shadow--has-scroll aui-table-header-cell.aui-table-sticky-border-elem-left .aui-table-column-resizable__handle{transform:translate(-20px)}.aui-table__scroll-shadow--has-scroll .aui-table-column-resizable__mark-line.inStickyBorderElemLeft{transform:translate(-20px)}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:after,.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:after{position:absolute;top:0;bottom:-1px;width:20px;transition:box-shadow .3s;content:\"\";pointer-events:none}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:before,.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:before{position:absolute;top:0;bottom:-1px;content:\"\";background:linear-gradient(to bottom,rgb(var(--aui-color-n-7)),rgb(var(--aui-color-n-7)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left{padding-right:30px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:after{right:-10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:before{right:10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right{padding-left:30px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:after{left:-10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:before{left:10px}:root .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):before{background:linear-gradient(to bottom,rgb(var(--aui-color-primary)),rgb(var(--aui-color-primary)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}:root .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):before{background:linear-gradient(to bottom,rgb(var(--aui-color-primary)),rgb(var(--aui-color-primary)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1$2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1$2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1$2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
11030
11044
  }
11031
11045
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualComponent, decorators: [{
11032
11046
  type: Component,
@@ -11036,7 +11050,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
11036
11050
  class="aui-table aui-table__scroll-shadow"
11037
11051
  >
11038
11052
  @if (headerTemplate) {
11039
- <div class="aui-table__header-row">
11053
+ <div
11054
+ class="aui-table__header-row"
11055
+ #headerRow
11056
+ (scroll)="onHeaderRowScroll($event)"
11057
+ >
11040
11058
  <ng-template [ngTemplateOutlet]="headerTemplate"></ng-template>
11041
11059
  </div>
11042
11060
  }
@@ -11075,7 +11093,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
11075
11093
  </cdk-virtual-scroll-viewport>
11076
11094
  }
11077
11095
  </div>
11078
- `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ScrollingModule, NgTemplateOutlet], styles: [":host{display:block}.aui-table__body-viewport{display:block}cdk-virtual-scroll-viewport::-webkit-scrollbar{width:8px;height:4px}cdk-virtual-scroll-viewport::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}cdk-virtual-scroll-viewport::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}cdk-virtual-scroll-viewport::-webkit-scrollbar-corner{background-color:transparent}.aui-table{position:relative;display:block;padding:0 12px 12px}.aui-table{font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-main-text))}.aui-table{background-color:rgb(var(--aui-color-n-9));border-radius:var(--aui-border-radius-l)}.aui-table__row,.aui-table__header-row{display:flex;align-items:center}.aui-table__row.hasPanel,.aui-table__header-row.hasPanel{flex-wrap:wrap}.aui-table__header-row+.aui-table__row{border-top-left-radius:var(--aui-border-radius-l);border-top-right-radius:var(--aui-border-radius-l)}.aui-table__row{position:relative;border-width:1px;border-style:solid;border-color:rgb(var(--aui-color-n-8));border-bottom-width:0;background-color:rgb(var(--aui-color-n-10));padding:0 9px;min-height:58px;box-sizing:content-box}.aui-table__row:first-child{border-top-left-radius:var(--aui-border-radius-l);border-top-right-radius:var(--aui-border-radius-l)}.aui-table__row:last-of-type{border-bottom-width:1px;min-height:58px;border-bottom-left-radius:var(--aui-border-radius-l);border-bottom-right-radius:var(--aui-border-radius-l)}.aui-table__row.isDisabled:before{content:\"\";z-index:2;position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgb(var(--aui-color-n-10));opacity:.7;cursor:not-allowed}.aui-table__header-row{background-color:rgb(var(--aui-color-n-9));padding:0 10px}.aui-table__cell,.aui-table__header-cell{display:flex;align-items:center;flex:1;position:relative}.aui-table__cell{padding:15px 10px;background-color:rgb(var(--aui-color-n-10));overflow:hidden}.aui-table__cell--column{flex-direction:column;justify-content:center;align-items:flex-start}.aui-table__header-cell{padding:12px 10px;font-weight:var(--aui-font-weight-bold);background-color:rgb(var(--aui-color-n-9))}.aui-table__column-expand-button{display:flex;align-items:center;max-width:calc(10px * 2 + var(--aui-icon-size-m))}.aui-table__column-expand-button.aui-table__cell{height:58px}.aui-table__column-expand-button .aui-expand-button{display:inline-flex;justify-content:center;align-items:center;width:var(--aui-icon-size-m);height:var(--aui-icon-size-m);color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6));border-radius:50%;border:none;cursor:pointer;transition:transform .1s ease-in-out}.aui-table__column-expand-button .aui-expand-button aui-icon{display:flex;justify-content:center;align-items:center;width:var(--aui-icon-size-s);height:var(--aui-icon-size-s);font-size:var(--aui-icon-size-s)}.aui-table__column-expand-button .aui-expand-button:hover{background-color:rgb(var(--aui-color-p-7))}.aui-table__column-expand-button .aui-expand-button:active{background-color:rgb(var(--aui-color-p-5))}.aui-table__column-expand-button .aui-expand-button.isExpanded{transform:rotate(90deg);color:#fff;background-color:rgb(var(--aui-color-primary))}.aui-table__column-expand-button .aui-expand-button.isExpanded:hover{background-color:rgb(var(--aui-color-p-1))}.aui-table__column-expand-button .aui-expand-button.isExpanded:active{background-color:rgb(var(--aui-color-p-0))}.aui-table__column-expand-button .aui-expand-button[disabled],.aui-table__column-expand-button .aui-expand-button.isExpanded[disabled]{background-color:rgb(var(--aui-color-n-8));color:rgb(var(--aui-color-n-6));cursor:not-allowed}.aui-table__column-expand-panel{margin-top:-6px}.aui-table__column-expand-panel.aui-table__header-cell{display:none}.aui-table__column-expand-panel.aui-table__cell{width:100%;flex-shrink:0;flex-basis:100%;padding:0 10px;overflow:hidden}.aui-table__column-expand-panel.aui-table__cell .aui-table__cell-expand-panel{width:100%;border-radius:var(--aui-border-radius-l);overflow:hidden}.aui-table__column-expand-panel.aui-table__cell .aui-table__cell-expand-panel-content.hasBackground{padding:16px;background-color:rgb(var(--aui-color-n-9))}.aui-table-column-resizable__handle{display:block;position:absolute;top:0;bottom:0;right:0;width:5px;color:rgb(var(--aui-color-n-7));cursor:col-resize}.aui-table-column-resizable__handle:after{content:\"\";display:block;margin:12px 0 12px auto;width:1px;height:calc(100% - 24px);background-color:currentcolor}.aui-table-column-resizable__handle:hover{color:rgb(var(--aui-color-primary))}.aui-table-column-resizable__mark-line{display:block;position:absolute;top:0;bottom:0;width:1px;background-color:rgb(var(--aui-color-primary));z-index:9999;cursor:col-resize}.aui-table-column-resizable__overlay{display:block;position:absolute;inset:0;z-index:9000;cursor:col-resize}.aui-table__scroll-wrapper{position:relative;display:flex;flex-direction:column;max-height:100%;overflow:hidden;background-color:rgb(var(--aui-color-n-9));padding:0 12px 12px;border-radius:var(--aui-border-radius-l)}.aui-table__scroll-wrapper::-webkit-scrollbar{width:8px;height:4px}.aui-table__scroll-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.aui-table__scroll-wrapper::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.aui-table__scroll-wrapper::-webkit-scrollbar-corner{background-color:transparent}.aui-table__scroll-wrapper .aui-table{padding:0;border-radius:0}.aui-table__scroll-wrapper .aui-table__scroll-shadow.hasTableTopShadow:before,.aui-table__scroll-wrapper .aui-table__scroll-shadow.hasTableBottomShadow:after{transform:none;width:100%;left:0}.aui-table__scroll-shadow.aui-table{overflow:auto}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar{width:8px;height:4px}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-corner{background-color:transparent}.aui-table__scroll-shadow.hasTableTopShadow:before{content:\"\";position:sticky;display:block;height:16px;margin:-16px -12px 0;z-index:99;top:28px}:root .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow.hasTableBottomShadow:after{content:\"\";position:sticky;display:block;height:16px;transform:translate3d(0,12px,0);z-index:99;bottom:0;margin:-16px -12px 0}:root .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-1),.16) inset}html[aui-theme-mode=light] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-1),.16) inset}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-9),.75) inset}}html[aui-theme-mode=dark] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-9),.75) inset}.aui-table__scroll-shadow .aui-table__header-row{margin:0;padding:0;align-items:stretch}.aui-table__scroll-shadow .aui-table__header-row .aui-table__header-cell:first-of-type{padding-left:20px}.aui-table__scroll-shadow .aui-table__header-row .aui-table__header-cell:last-of-type{padding-right:20px}.aui-table__scroll-shadow .aui-table__header-row+.aui-table__row .aui-table__cell:first-of-type{border-top-left-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__header-row+.aui-table__row .aui-table__cell:last-of-type{border-top-right-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row{border:none;padding:0;align-items:stretch;min-height:59px}.aui-table__scroll-shadow .aui-table__row .aui-table__cell{border-width:1px 0;border-style:solid;border-color:rgb(var(--aui-color-n-8))}.aui-table__scroll-shadow .aui-table__row .aui-table__cell:first-of-type{border-left-width:1px;padding-left:19px}.aui-table__scroll-shadow .aui-table__row .aui-table__cell:last-of-type{border-right-width:1px;padding-right:19px}.aui-table__scroll-shadow .aui-table__row:last-child{min-height:60px}.aui-table__scroll-shadow .aui-table__row:last-child .aui-table__cell:first-of-type{border-bottom-left-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row:last-child .aui-table__cell:last-of-type{border-bottom-right-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row:not(:last-child) .aui-table__cell{border-bottom-width:0}.aui-table__scroll-shadow--has-scroll aui-table-header-cell.aui-table-sticky-border-elem-left .aui-table-column-resizable__handle{transform:translate(-20px)}.aui-table__scroll-shadow--has-scroll .aui-table-column-resizable__mark-line.inStickyBorderElemLeft{transform:translate(-20px)}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:after,.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:after{position:absolute;top:0;bottom:-1px;width:20px;transition:box-shadow .3s;content:\"\";pointer-events:none}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:before,.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:before{position:absolute;top:0;bottom:-1px;content:\"\";background:linear-gradient(to bottom,rgb(var(--aui-color-n-7)),rgb(var(--aui-color-n-7)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left{padding-right:30px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:after{right:-10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:before{right:10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right{padding-left:30px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:after{left:-10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:before{left:10px}:root .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):before{background:linear-gradient(to bottom,rgb(var(--aui-color-primary)),rgb(var(--aui-color-primary)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}:root .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):before{background:linear-gradient(to bottom,rgb(var(--aui-color-primary)),rgb(var(--aui-color-primary)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}\n"] }]
11096
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ScrollingModule, NgTemplateOutlet], styles: ["acl-table-virtual{display:block;max-width:100%;overflow:hidden}.aui-table__body-viewport{display:block}cdk-virtual-scroll-viewport::-webkit-scrollbar{width:8px;height:4px}cdk-virtual-scroll-viewport::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}cdk-virtual-scroll-viewport::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}cdk-virtual-scroll-viewport::-webkit-scrollbar-corner{background-color:transparent}.aui-table{position:relative;display:block;padding:0 12px 12px}.aui-table{font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-main-text))}.aui-table{background-color:rgb(var(--aui-color-n-9));border-radius:var(--aui-border-radius-l)}.aui-table__row,.aui-table__header-row{display:flex;align-items:center;background-color:rgb(var(--aui-color-n-9));padding:0 10px;overflow:scroll}.aui-table__row.hasPanel,.aui-table__header-row.hasPanel{flex-wrap:wrap}.aui-table__header-row+.aui-table__row{border-top-left-radius:var(--aui-border-radius-l);border-top-right-radius:var(--aui-border-radius-l)}.aui-table__row{position:relative;border-width:1px;border-style:solid;border-color:rgb(var(--aui-color-n-8));border-bottom-width:0;background-color:rgb(var(--aui-color-n-10));padding:0 9px;min-height:58px;box-sizing:content-box}.aui-table__row:first-child{border-top-left-radius:var(--aui-border-radius-l);border-top-right-radius:var(--aui-border-radius-l)}.aui-table__row:last-of-type{border-bottom-width:1px;min-height:58px;border-bottom-left-radius:var(--aui-border-radius-l);border-bottom-right-radius:var(--aui-border-radius-l)}.aui-table__row.isDisabled:before{content:\"\";z-index:2;position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgb(var(--aui-color-n-10));opacity:.7;cursor:not-allowed}.aui-table__cell,.aui-table__header-cell{display:flex;align-items:center;flex:1;position:relative}.aui-table__cell{padding:15px 10px;background-color:rgb(var(--aui-color-n-10));overflow:hidden}.aui-table__cell--column{flex-direction:column;justify-content:center;align-items:flex-start}.aui-table__header-cell{padding:12px 10px;font-weight:var(--aui-font-weight-bold);background-color:rgb(var(--aui-color-n-9))}.aui-table__column-expand-button{display:flex;align-items:center;max-width:calc(10px * 2 + var(--aui-icon-size-m))}.aui-table__column-expand-button.aui-table__cell{height:58px}.aui-table__column-expand-button .aui-expand-button{display:inline-flex;justify-content:center;align-items:center;width:var(--aui-icon-size-m);height:var(--aui-icon-size-m);color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6));border-radius:50%;border:none;cursor:pointer;transition:transform .1s ease-in-out}.aui-table__column-expand-button .aui-expand-button aui-icon{display:flex;justify-content:center;align-items:center;width:var(--aui-icon-size-s);height:var(--aui-icon-size-s);font-size:var(--aui-icon-size-s)}.aui-table__column-expand-button .aui-expand-button:hover{background-color:rgb(var(--aui-color-p-7))}.aui-table__column-expand-button .aui-expand-button:active{background-color:rgb(var(--aui-color-p-5))}.aui-table__column-expand-button .aui-expand-button.isExpanded{transform:rotate(90deg);color:#fff;background-color:rgb(var(--aui-color-primary))}.aui-table__column-expand-button .aui-expand-button.isExpanded:hover{background-color:rgb(var(--aui-color-p-1))}.aui-table__column-expand-button .aui-expand-button.isExpanded:active{background-color:rgb(var(--aui-color-p-0))}.aui-table__column-expand-button .aui-expand-button[disabled],.aui-table__column-expand-button .aui-expand-button.isExpanded[disabled]{background-color:rgb(var(--aui-color-n-8));color:rgb(var(--aui-color-n-6));cursor:not-allowed}.aui-table__column-expand-panel{margin-top:-6px}.aui-table__column-expand-panel.aui-table__header-cell{display:none}.aui-table__column-expand-panel.aui-table__cell{width:100%;flex-shrink:0;flex-basis:100%;padding:0 10px;overflow:hidden}.aui-table__column-expand-panel.aui-table__cell .aui-table__cell-expand-panel{width:100%;border-radius:var(--aui-border-radius-l);overflow:hidden}.aui-table__column-expand-panel.aui-table__cell .aui-table__cell-expand-panel-content.hasBackground{padding:16px;background-color:rgb(var(--aui-color-n-9))}.aui-table-column-resizable__handle{display:block;position:absolute;top:0;bottom:0;right:0;width:5px;color:rgb(var(--aui-color-n-7));cursor:col-resize}.aui-table-column-resizable__handle:after{content:\"\";display:block;margin:12px 0 12px auto;width:1px;height:calc(100% - 24px);background-color:currentcolor}.aui-table-column-resizable__handle:hover{color:rgb(var(--aui-color-primary))}.aui-table-column-resizable__mark-line{display:block;position:absolute;top:0;bottom:0;width:1px;background-color:rgb(var(--aui-color-primary));z-index:9999;cursor:col-resize}.aui-table-column-resizable__overlay{display:block;position:absolute;inset:0;z-index:9000;cursor:col-resize}.aui-table__scroll-wrapper{position:relative;display:flex;flex-direction:column;max-height:100%;overflow:hidden;background-color:rgb(var(--aui-color-n-9));padding:0 12px 12px;border-radius:var(--aui-border-radius-l)}.aui-table__scroll-wrapper::-webkit-scrollbar{width:8px;height:4px}.aui-table__scroll-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.aui-table__scroll-wrapper::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.aui-table__scroll-wrapper::-webkit-scrollbar-corner{background-color:transparent}.aui-table__scroll-wrapper .aui-table{padding:0;border-radius:0}.aui-table__scroll-wrapper .aui-table__scroll-shadow.hasTableTopShadow:before,.aui-table__scroll-wrapper .aui-table__scroll-shadow.hasTableBottomShadow:after{transform:none;width:100%;left:0}.aui-table__scroll-shadow.aui-table{overflow:auto}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar{width:8px;height:4px}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-corner{background-color:transparent}.aui-table__scroll-shadow.hasTableTopShadow:before{content:\"\";position:sticky;display:block;height:16px;margin:-16px -12px 0;z-index:99;top:28px}:root .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow.hasTableBottomShadow:after{content:\"\";position:sticky;display:block;height:16px;transform:translate3d(0,12px,0);z-index:99;bottom:0;margin:-16px -12px 0}:root .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-1),.16) inset}html[aui-theme-mode=light] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-1),.16) inset}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-9),.75) inset}}html[aui-theme-mode=dark] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-9),.75) inset}.aui-table__scroll-shadow .aui-table__header-row{margin:0;padding:0;align-items:stretch}.aui-table__scroll-shadow .aui-table__header-row .aui-table__header-cell:first-of-type{padding-left:20px}.aui-table__scroll-shadow .aui-table__header-row .aui-table__header-cell:last-of-type{padding-right:20px}.aui-table__scroll-shadow .aui-table__header-row+.aui-table__row .aui-table__cell:first-of-type{border-top-left-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__header-row+.aui-table__row .aui-table__cell:last-of-type{border-top-right-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row{border:none;padding:0;align-items:stretch;min-height:59px}.aui-table__scroll-shadow .aui-table__row .aui-table__cell{border-width:1px 0;border-style:solid;border-color:rgb(var(--aui-color-n-8))}.aui-table__scroll-shadow .aui-table__row .aui-table__cell:first-of-type{border-left-width:1px;padding-left:19px}.aui-table__scroll-shadow .aui-table__row .aui-table__cell:last-of-type{border-right-width:1px;padding-right:19px}.aui-table__scroll-shadow .aui-table__row:last-child{min-height:60px}.aui-table__scroll-shadow .aui-table__row:last-child .aui-table__cell:first-of-type{border-bottom-left-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row:last-child .aui-table__cell:last-of-type{border-bottom-right-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row:not(:last-child) .aui-table__cell{border-bottom-width:0}.aui-table__scroll-shadow--has-scroll aui-table-header-cell.aui-table-sticky-border-elem-left .aui-table-column-resizable__handle{transform:translate(-20px)}.aui-table__scroll-shadow--has-scroll .aui-table-column-resizable__mark-line.inStickyBorderElemLeft{transform:translate(-20px)}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:after,.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:after{position:absolute;top:0;bottom:-1px;width:20px;transition:box-shadow .3s;content:\"\";pointer-events:none}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:before,.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:before{position:absolute;top:0;bottom:-1px;content:\"\";background:linear-gradient(to bottom,rgb(var(--aui-color-n-7)),rgb(var(--aui-color-n-7)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left{padding-right:30px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:after{right:-10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:before{right:10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right{padding-left:30px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:after{left:-10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:before{left:10px}:root .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):before{background:linear-gradient(to bottom,rgb(var(--aui-color-primary)),rgb(var(--aui-color-primary)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}:root .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):before{background:linear-gradient(to bottom,rgb(var(--aui-color-primary)),rgb(var(--aui-color-primary)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}\n"] }]
11079
11097
  }], propDecorators: { dataSource: [{
11080
11098
  type: Input
11081
11099
  }], itemSize: [{
@@ -11105,36 +11123,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
11105
11123
  }], scrollContainerRef: [{
11106
11124
  type: ViewChild,
11107
11125
  args: ['scrollContainer', { static: true }]
11126
+ }], headerRow: [{
11127
+ type: ViewChild,
11128
+ args: ['headerRow', { static: false }]
11108
11129
  }] } });
11109
11130
 
11110
- class AclTableVirtualModule {
11111
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11112
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualModule, imports: [AclTableVirtualComponent,
11113
- AclTableVirtualHeaderDefDirective,
11114
- AclTableVirtualRowDefDirective,
11115
- AclTableVirtualPlaceholderDefDirective], exports: [AclTableVirtualComponent,
11116
- AclTableVirtualHeaderDefDirective,
11117
- AclTableVirtualRowDefDirective,
11118
- AclTableVirtualPlaceholderDefDirective] }); }
11119
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualModule, imports: [AclTableVirtualComponent] }); }
11120
- }
11121
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualModule, decorators: [{
11122
- type: NgModule,
11123
- args: [{
11124
- imports: [
11125
- AclTableVirtualComponent,
11126
- AclTableVirtualHeaderDefDirective,
11127
- AclTableVirtualRowDefDirective,
11128
- AclTableVirtualPlaceholderDefDirective,
11129
- ],
11130
- exports: [
11131
- AclTableVirtualComponent,
11132
- AclTableVirtualHeaderDefDirective,
11133
- AclTableVirtualRowDefDirective,
11134
- AclTableVirtualPlaceholderDefDirective,
11135
- ],
11136
- }]
11137
- }] });
11131
+ const TABLE_VIRTUAL_MODULE = [
11132
+ AclTableVirtualComponent,
11133
+ AclTableVirtualHeaderDefDirective,
11134
+ AclTableVirtualRowDefDirective,
11135
+ AclTableVirtualPlaceholderDefDirective,
11136
+ ];
11138
11137
 
11139
11138
  class TerminatingTagComponent {
11140
11139
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TerminatingTagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -11544,6 +11543,7 @@ class ArrayFormTableComponent {
11544
11543
  this.addDisabled = false;
11545
11544
  this.actionColumnDivider = false;
11546
11545
  this.showZeroState = true;
11546
+ this.injector = inject(Injector);
11547
11547
  this.minRow = 0;
11548
11548
  this.minRowTooltip = '';
11549
11549
  this.maxRow = Infinity;
@@ -11558,7 +11558,8 @@ class ArrayFormTableComponent {
11558
11558
  };
11559
11559
  }
11560
11560
  get formDirective() {
11561
- return inject(FormGroupDirective, null) || inject(NgForm, null);
11561
+ return (this.injector.get(FormGroupDirective, null) ||
11562
+ this.injector.get(NgForm, null));
11562
11563
  }
11563
11564
  /**
11564
11565
  * 自定义是否展示错误内容
@@ -12302,68 +12303,6 @@ const logsReadOptions = {
12302
12303
  renderLineHighlight: 'none',
12303
12304
  };
12304
12305
 
12305
- class ResourceYamlDisplayComponent {
12306
- constructor() {
12307
- this.concise$$ = new BehaviorSubject(false);
12308
- this.reduce$$ = new BehaviorSubject(true);
12309
- this.hasWrapper = true;
12310
- this.conciseEnable = true;
12311
- this.manageFieldActionEnable = true;
12312
- this.yamlUtil = inject(YamlUtilService);
12313
- this.yaml$ = combineLatest([
12314
- this.resource$,
12315
- this.concise$$,
12316
- this.reduce$$.pipe(distinctUntilChanged()),
12317
- ]).pipe(map(([resource, concise, reduce]) => this.yamlUtil.generateFilteredYamlResource(resource, concise, reduce)));
12318
- this.editorOptions = yamlReadOptions;
12319
- this.viewActions = viewActions;
12320
- }
12321
- conciseChange(value) {
12322
- this.concise$$.next(value);
12323
- if (value) {
12324
- this.reduce$$.next(true);
12325
- }
12326
- }
12327
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceYamlDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12328
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: ResourceYamlDisplayComponent, isStandalone: true, selector: "acl-resource-yaml-display", inputs: { hasWrapper: "hasWrapper", conciseEnable: "conciseEnable", manageFieldActionEnable: "manageFieldActionEnable", resource: "resource" }, ngImport: i0, template: "@if (hasWrapper) {\n <aui-card>\n <ng-container *ngTemplateOutlet=\"content\" />\n </aui-card>\n} @else {\n <aui-code-editor\n name=\"yaml\"\n [ngModel]=\"yaml$ | async\"\n [options]=\"editorOptions\"\n [actionsConfig]=\"viewActions\"\n >\n <ng-container auiCodeEditorToolbarLeft>\n @if (conciseEnable) {\n <aui-checkbox\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 }\n @if (manageFieldActionEnable) {\n <aui-checkbox\n [hidden]=\"concise$$ | async\"\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"reduce$$ | async\"\n (ngModelChange)=\"reduce$$.next($event)\"\n >\n {{ 'hide_manage_fields_field' | translate }}\n </aui-checkbox>\n }\n </ng-container>\n </aui-code-editor>\n}\n<ng-template #content>\n <aui-code-editor\n name=\"yaml\"\n [ngModel]=\"yaml$ | async\"\n [options]=\"editorOptions\"\n [actionsConfig]=\"viewActions\"\n >\n <ng-container auiCodeEditorToolbarLeft>\n @if (conciseEnable) {\n <aui-checkbox\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 }\n @if (manageFieldActionEnable) {\n <aui-checkbox\n [hidden]=\"concise$$ | async\"\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"reduce$$ | async\"\n (ngModelChange)=\"reduce$$.next($event)\"\n >\n {{ 'hide_manage_fields_field' | translate }}\n </aui-checkbox>\n }\n </ng-container>\n </aui-code-editor>\n</ng-template>\n", styles: [":host(:not(.dialog-content)) ::ng-deep .aui-code-editor{min-height:100%}:host(:not(.dialog-content)){display:block;height:calc(100vh - (var(--acl-page-header-height) + 44px) - 147px)}: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%}\n"], dependencies: [{ kind: "component", type: i1.CardComponent, selector: "aui-card", inputs: ["divider"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.CheckboxComponent, selector: "aui-checkbox", inputs: ["name", "type", "label", "indeterminate"] }, { kind: "component", type: CodeEditorComponent, selector: "aui-code-editor", inputs: ["options", "plain", "showLanguageLabel", "value", "originalValue", "actionsConfig", "previewMode", "diffMode", "modelUri"], outputs: ["editorChange", "editorBlur"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12329
- }
12330
- __decorate([
12331
- ObservableInput(),
12332
- __metadata("design:type", Observable)
12333
- ], ResourceYamlDisplayComponent.prototype, "resource$", void 0);
12334
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceYamlDisplayComponent, decorators: [{
12335
- type: Component,
12336
- args: [{ selector: 'acl-resource-yaml-display', preserveWhitespaces: false, standalone: true, imports: [
12337
- CARD_MODULE,
12338
- FormsModule,
12339
- CHECKBOX_MODULE,
12340
- CodeEditorComponent,
12341
- TranslatePipe,
12342
- AsyncPipe,
12343
- NgTemplateOutlet,
12344
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (hasWrapper) {\n <aui-card>\n <ng-container *ngTemplateOutlet=\"content\" />\n </aui-card>\n} @else {\n <aui-code-editor\n name=\"yaml\"\n [ngModel]=\"yaml$ | async\"\n [options]=\"editorOptions\"\n [actionsConfig]=\"viewActions\"\n >\n <ng-container auiCodeEditorToolbarLeft>\n @if (conciseEnable) {\n <aui-checkbox\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 }\n @if (manageFieldActionEnable) {\n <aui-checkbox\n [hidden]=\"concise$$ | async\"\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"reduce$$ | async\"\n (ngModelChange)=\"reduce$$.next($event)\"\n >\n {{ 'hide_manage_fields_field' | translate }}\n </aui-checkbox>\n }\n </ng-container>\n </aui-code-editor>\n}\n<ng-template #content>\n <aui-code-editor\n name=\"yaml\"\n [ngModel]=\"yaml$ | async\"\n [options]=\"editorOptions\"\n [actionsConfig]=\"viewActions\"\n >\n <ng-container auiCodeEditorToolbarLeft>\n @if (conciseEnable) {\n <aui-checkbox\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 }\n @if (manageFieldActionEnable) {\n <aui-checkbox\n [hidden]=\"concise$$ | async\"\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"reduce$$ | async\"\n (ngModelChange)=\"reduce$$.next($event)\"\n >\n {{ 'hide_manage_fields_field' | translate }}\n </aui-checkbox>\n }\n </ng-container>\n </aui-code-editor>\n</ng-template>\n", styles: [":host(:not(.dialog-content)) ::ng-deep .aui-code-editor{min-height:100%}:host(:not(.dialog-content)){display:block;height:calc(100vh - (var(--acl-page-header-height) + 44px) - 147px)}: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%}\n"] }]
12345
- }], propDecorators: { hasWrapper: [{
12346
- type: Input
12347
- }], conciseEnable: [{
12348
- type: Input
12349
- }], manageFieldActionEnable: [{
12350
- type: Input
12351
- }], resource: [{
12352
- type: Input
12353
- }], resource$: [] } });
12354
-
12355
- class K8sYamlDisplayDialogComponent {
12356
- constructor() {
12357
- this.data = inject(DIALOG_DATA);
12358
- }
12359
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: K8sYamlDisplayDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12360
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: K8sYamlDisplayDialogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<aui-dialog-header [divider]=\"false\">\n <div [class.ellipsis-dialog-header]=\"data.ellipsis\">\n <span [class.text-ellipsis]=\"data.ellipsis\">\n {{ data.title || ('view_yaml' | translate) }}\n </span>\n @if (data.extra) {\n <span class=\"extra\">{{ data.extra }}</span>\n }\n </div>\n</aui-dialog-header>\n<aui-dialog-content>\n <acl-resource-yaml-display\n [resource]=\"data.resource\"\n [hasWrapper]=\"false\"\n class=\"dialog-content\"\n ></acl-resource-yaml-display>\n</aui-dialog-content>\n", dependencies: [{ kind: "component", type: i1.DialogHeaderComponent, selector: "aui-dialog-header", inputs: ["divider", "closeable", "result"] }, { kind: "component", type: i1.DialogContentComponent, selector: "aui-dialog-content" }, { kind: "component", type: ResourceYamlDisplayComponent, selector: "acl-resource-yaml-display", inputs: ["hasWrapper", "conciseEnable", "manageFieldActionEnable", "resource"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12361
- }
12362
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: K8sYamlDisplayDialogComponent, decorators: [{
12363
- type: Component,
12364
- args: [{ preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [DIALOG_MODULE, TranslatePipe, ResourceYamlDisplayComponent], template: "<aui-dialog-header [divider]=\"false\">\n <div [class.ellipsis-dialog-header]=\"data.ellipsis\">\n <span [class.text-ellipsis]=\"data.ellipsis\">\n {{ data.title || ('view_yaml' | translate) }}\n </span>\n @if (data.extra) {\n <span class=\"extra\">{{ data.extra }}</span>\n }\n </div>\n</aui-dialog-header>\n<aui-dialog-content>\n <acl-resource-yaml-display\n [resource]=\"data.resource\"\n [hasWrapper]=\"false\"\n class=\"dialog-content\"\n ></acl-resource-yaml-display>\n</aui-dialog-content>\n" }]
12365
- }] });
12366
-
12367
12306
  /**
12368
12307
  * 自动折叠 managedFields 字段
12369
12308
  * @param monacoEditor Monaco 编辑器实例
@@ -12511,192 +12450,430 @@ class ManagedFieldsAutoFolder {
12511
12450
  }
12512
12451
  }
12513
12452
 
12514
- /**
12515
- * Kubernetes 资源的内置 YAML 示例
12516
- * 按照 apiVersion.kind 的格式组织
12517
- */
12518
- const BUILT_IN_YAML_EXAMPLES = {
12519
- 'apps/v1.Deployment': [
12520
- {
12521
- title: 'Basic Deployment',
12522
- description: 'A basic deployment example with nginx container',
12523
- yaml: `apiVersion: apps/v1
12524
- kind: Deployment
12525
- metadata:
12526
- labels:
12527
- app: nginx
12528
- name: nginx-deployment
12529
- namespace: ''
12530
- spec:
12531
- selector:
12532
- matchLabels:
12533
- app: nginx
12534
- template:
12535
- metadata:
12536
- labels:
12537
- app: nginx
12538
- spec:
12539
- containers:
12540
- - image: nginx:1.7.9
12541
- name: nginx
12542
- ports:
12543
- - containerPort: 80
12544
- securityContext:
12545
- allowPrivilegeEscalation: false
12546
- capabilities:
12547
- drop:
12548
- - ALL
12549
- runAsNonRoot: true
12550
- seccompProfile:
12551
- type: RuntimeDefault
12552
- securityContext:
12553
- runAsNonRoot: true
12554
- seccompProfile:
12555
- type: RuntimeDefault`,
12556
- },
12557
- ],
12558
- 'v1.ConfigMap': [
12559
- {
12560
- title: 'Basic ConfigMap',
12561
- description: 'A basic ConfigMap example with properties and file data',
12562
- yaml: `apiVersion: v1
12563
- kind: ConfigMap
12564
- metadata:
12565
- name: example
12566
- namespace: ''
12567
- data:
12568
- example.property.1: hello
12569
- example.property.2: world
12570
- example.property.file: |-
12571
- property.1=value-1
12572
- property.2=value-2
12573
- property.3=value-3`,
12574
- },
12575
- ],
12576
- 'batch/v1.CronJob': [
12577
- {
12578
- title: 'Basic CronJob',
12579
- description: 'A basic CronJob example that runs daily',
12580
- yaml: `apiVersion: batch/v1
12581
- kind: CronJob
12582
- metadata:
12583
- name: hello
12584
- spec:
12585
- jobTemplate:
12586
- metadata:
12587
- labels:
12588
- cronjob.cpaas.io/name: hello
12589
- spec:
12590
- template:
12591
- metadata:
12592
- labels:
12593
- cronjob.cpaas.io/name: hello
12594
- spec:
12595
- containers:
12596
- - args:
12597
- - /bin/sh
12598
- - -c
12599
- - date; echo Hello from the Kubernetes cluster
12600
- image: busybox
12601
- name: hello
12602
- securityContext:
12603
- allowPrivilegeEscalation: false
12604
- capabilities:
12605
- drop:
12606
- - ALL
12607
- runAsNonRoot: true
12608
- seccompProfile:
12609
- type: RuntimeDefault
12610
- securityContext:
12611
- runAsNonRoot: true
12612
- seccompProfile:
12613
- type: RuntimeDefault
12614
- restartPolicy: Never
12615
- schedule: "*/1 * * * *"`,
12616
- },
12617
- ],
12618
- 'v1.PersistentVolume': [
12619
- {
12620
- title: 'Basic PersistentVolume',
12621
- description: 'A basic PersistentVolume example with NFS storage',
12622
- yaml: `apiVersion: v1
12623
- kind: PersistentVolume
12624
- metadata:
12625
- name: example
12626
- namespace: ''
12627
- spec:
12628
- capacity:
12629
- storage: 5Gi
12630
- accessModes:
12631
- - ReadWriteOnce
12632
- persistentVolumeReclaimPolicy: Retain
12633
- storageClassName: slow
12634
- nfs:
12635
- path: /tmp
12636
- server: 172.17.0.2`,
12637
- },
12638
- ],
12639
- 'autoscaling/v2.HorizontalPodAutoscaler': [
12640
- {
12641
- title: 'Basic HorizontalPodAutoscaler',
12642
- description: 'A basic HPA example with CPU utilization target',
12643
- yaml: `apiVersion: autoscaling/v2
12644
- kind: HorizontalPodAutoscaler
12645
- metadata:
12646
- name: example
12647
- namespace: ''
12648
- spec:
12649
- scaleTargetRef:
12650
- apiVersion: apps/v1
12651
- kind: Deployment
12652
- name: example
12653
- minReplicas: 1
12654
- maxReplicas: 3
12655
- metrics:
12656
- - type: Resource
12657
- resource:
12658
- name: cpu
12659
- target:
12660
- averageUtilization: 50
12661
- type: Utilization`,
12662
- },
12663
- ],
12664
- 'apps/v1.DaemonSet': [
12665
- {
12666
- title: 'Basic DaemonSet',
12667
- description: 'A basic DaemonSet example with nginx container',
12668
- yaml: `apiVersion: apps/v1
12669
- kind: DaemonSet
12670
- metadata:
12671
- name: fluentd-elasticsearch
12672
- namespace: ''
12673
- labels:
12674
- k8s-app: fluentd-logging
12675
- spec:
12676
- selector:
12677
- matchLabels:
12678
- name: fluentd-elasticsearch
12679
- template:
12680
- metadata:
12681
- labels:
12682
- name: fluentd-elasticsearch
12683
- spec:
12684
- tolerations:
12685
- - key: node-role.kubernetes.io/control-plane
12686
- operator: Exists
12687
- effect: NoSchedule
12688
- - key: node-role.kubernetes.io/master
12689
- operator: Exists
12690
- effect: NoSchedule
12691
- containers:
12692
- - name: fluentd-elasticsearch
12693
- image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
12694
- resources:
12695
- limits:
12696
- memory: 200Mi
12697
- requests:
12698
- cpu: 100m
12699
- memory: 200Mi
12453
+ class ResourceYamlDisplayComponent {
12454
+ constructor() {
12455
+ this.destroy$ = new Subject();
12456
+ this.concise$$ = new BehaviorSubject(false);
12457
+ this.reduce$$ = new BehaviorSubject(false);
12458
+ this.showSidebar$$ = new BehaviorSubject(false);
12459
+ this.showDebugPanel$$ = new BehaviorSubject(false);
12460
+ this.monacoEditor = null;
12461
+ this.registeredSchemas = new Set();
12462
+ this.pendingSchemas = new Set();
12463
+ this.hasWrapper = true;
12464
+ this.showDebugInfo = false;
12465
+ this.conciseEnable = true;
12466
+ this.manageFieldActionEnable = true;
12467
+ this.sidebarEnable = true;
12468
+ this.schemaEnable = true;
12469
+ this.exampleEnable = true;
12470
+ this.autoFoldManagedFields = true;
12471
+ this.minimap = true;
12472
+ this.yamlReadMinimapOptions = yamlReadMinimapOptions;
12473
+ this.yamlReadOptions = yamlReadOptions;
12474
+ this.hasFolded = false;
12475
+ /**
12476
+ * 自动获取的 schema,当没有手动提供 schema 时使用
12477
+ */
12478
+ this.autoSchema$ = this.resource$.pipe(switchMap(resource => {
12479
+ if (!resource) {
12480
+ return of(null);
12481
+ }
12482
+ const firstResource = (Array.isArray(resource) ? resource[0] : resource);
12483
+ if (!firstResource?.apiVersion || !firstResource?.kind) {
12484
+ return of(null);
12485
+ }
12486
+ return this.schemaService.getResourceSchema(firstResource.apiVersion, firstResource.kind, '');
12487
+ }), shareReplay(1));
12488
+ /**
12489
+ * 最终使用的 schema,优先使用手动提供的,否则使用自动获取的
12490
+ */
12491
+ this.finalSchema$ = combineLatest([this.schema$, this.autoSchema$]).pipe(map(([manualSchema, autoSchema]) => manualSchema || autoSchema), distinctUntilChanged(), shareReplay(1));
12492
+ this.yamlUtil = inject(YamlUtilService);
12493
+ this.schemaService = inject(KubernetesSchemaService);
12494
+ this.monacoLanguageService = inject(MonacoLanguageService);
12495
+ this.yaml$ = combineLatest([
12496
+ this.resource$,
12497
+ this.concise$$,
12498
+ this.reduce$$.pipe(distinctUntilChanged()),
12499
+ ]).pipe(map(([resource, concise, reduce]) => this.yamlUtil.generateFilteredYamlResource(resource, concise, reduce)));
12500
+ this.viewActions = viewActions;
12501
+ this.yamlSchemaService = this.monacoLanguageService.getYamlSchemaService();
12502
+ // 自动设置 schema
12503
+ combineLatest([this.resource$, this.finalSchema$])
12504
+ .pipe(takeUntil(this.destroy$))
12505
+ .subscribe(([resource, schema]) => {
12506
+ if (resource && schema) {
12507
+ const firstResource = Array.isArray(resource)
12508
+ ? resource[0]
12509
+ : resource;
12510
+ if (firstResource && !Array.isArray(firstResource)) {
12511
+ this.setYamlSchema(firstResource, schema);
12512
+ }
12513
+ }
12514
+ });
12515
+ this.autoSchema$.pipe(takeUntil(this.destroy$)).subscribe();
12516
+ }
12517
+ get editorOptions() {
12518
+ return this.minimap ? yamlReadMinimapOptions : yamlReadOptions;
12519
+ }
12520
+ conciseChange(value) {
12521
+ this.concise$$.next(value);
12522
+ }
12523
+ toggleSidebar() {
12524
+ this.showSidebar$$.next(!this.showSidebar$$.value);
12525
+ }
12526
+ toggleDebugInfo() {
12527
+ this.showDebugPanel$$.next(!this.showDebugPanel$$.value);
12528
+ }
12529
+ getCurrentResource() {
12530
+ const resource = this.resource;
12531
+ if (Array.isArray(resource)) {
12532
+ return resource.length > 0 ? resource[0] : null;
12533
+ }
12534
+ return resource || null;
12535
+ }
12536
+ getCurrentSchema() {
12537
+ return this.schema || null;
12538
+ }
12539
+ selfFoldManagedFields() {
12540
+ if (this.hasFolded) {
12541
+ return;
12542
+ }
12543
+ this.hasFolded = true;
12544
+ setTimeout(() => {
12545
+ const editor = this.getEditorInstance();
12546
+ if (editor) {
12547
+ foldManagedFields(editor);
12548
+ }
12549
+ }, 50);
12550
+ }
12551
+ /**
12552
+ * 设置 YAML schema 以提供 hover 提示和自动完成
12553
+ */
12554
+ setYamlSchema(resource, schema) {
12555
+ if (!schema) {
12556
+ return;
12557
+ }
12558
+ // 使用 apiVersion + kind 组合作为标识
12559
+ const apiVersion = resource?.apiVersion || 'unknown';
12560
+ const kind = resource?.kind || 'unknown';
12561
+ const schemaKey = `${apiVersion}/${kind}`;
12562
+ this.modelUri = `${schemaKey}.yaml`;
12563
+ this.selfFoldManagedFields();
12564
+ // 检查是否已经注册过相同的 schema,避免重复注册
12565
+ if (this.registeredSchemas.has(schemaKey) ||
12566
+ this.pendingSchemas.has(schemaKey)) {
12567
+ return;
12568
+ }
12569
+ this.pendingSchemas.add(schemaKey);
12570
+ const registerSchema = (schemaToRegister) => {
12571
+ this.yamlSchemaService.addSchema({
12572
+ uri: `k8s://${schemaKey}.schema.json`,
12573
+ fileMatch: [this.modelUri],
12574
+ schema: schemaToRegister,
12575
+ });
12576
+ this.registeredSchemas.add(schemaKey);
12577
+ this.pendingSchemas.delete(schemaKey);
12578
+ };
12579
+ const schemaDefinitions = schema?.definitions;
12580
+ if (schemaDefinitions && Object.keys(schemaDefinitions).length > 0) {
12581
+ registerSchema(schema);
12582
+ return;
12583
+ }
12584
+ this.schemaService
12585
+ .getAllResourceDefinitionsCached(this.clusterName)
12586
+ .pipe(take(1), takeUntil(this.destroy$))
12587
+ .subscribe(definitions => {
12588
+ const fullSchema = {
12589
+ ...schema,
12590
+ definitions: definitions || schemaDefinitions || {},
12591
+ };
12592
+ registerSchema(fullSchema);
12593
+ });
12594
+ }
12595
+ ngAfterViewInit() {
12596
+ if (this.autoFoldManagedFields &&
12597
+ this.schemaService.getOpenAPISchema(this.clusterName)) {
12598
+ this.selfFoldManagedFields();
12599
+ }
12600
+ }
12601
+ /**
12602
+ * 获取 Monaco Editor 实例
12603
+ */
12604
+ getEditorInstance() {
12605
+ if (this.codeEditorRef && !this.monacoEditor) {
12606
+ // 尝试从 ViewChild 获取编辑器实例
12607
+ const editorComponent = this.codeEditorRef;
12608
+ if (editorComponent.editor) {
12609
+ this.monacoEditor = editorComponent.editor;
12610
+ }
12611
+ }
12612
+ return this.monacoEditor;
12613
+ }
12614
+ /**
12615
+ * 自动折叠 managedFields 字段
12616
+ */
12617
+ foldManagedFields() {
12618
+ const editor = this.getEditorInstance();
12619
+ if (editor) {
12620
+ foldManagedFields(editor);
12621
+ }
12622
+ }
12623
+ ngOnDestroy() {
12624
+ this.destroy$.next();
12625
+ this.destroy$.complete();
12626
+ this.monacoEditor = null;
12627
+ }
12628
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceYamlDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12629
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: ResourceYamlDisplayComponent, isStandalone: true, selector: "acl-resource-yaml-display", inputs: { hasWrapper: "hasWrapper", showDebugInfo: "showDebugInfo", conciseEnable: "conciseEnable", manageFieldActionEnable: "manageFieldActionEnable", sidebarEnable: "sidebarEnable", schemaEnable: "schemaEnable", exampleEnable: "exampleEnable", autoFoldManagedFields: "autoFoldManagedFields", schema: "schema", resource: "resource", minimap: "minimap", clusterName: "clusterName" }, viewQueries: [{ propertyName: "codeEditorRef", first: true, predicate: ["codeEditorRef"], descendants: true }], ngImport: i0, template: "@if (hasWrapper) {\n <aui-card>\n <ng-container *ngTemplateOutlet=\"content\" />\n </aui-card>\n} @else {\n <aui-code-editor\n name=\"yaml\"\n [ngModel]=\"yaml$ | async\"\n [options]=\"editorOptions\"\n [actionsConfig]=\"viewActions\"\n >\n <ng-container auiCodeEditorToolbarLeft>\n @if (conciseEnable) {\n <aui-checkbox\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 }\n @if (manageFieldActionEnable) {\n <aui-checkbox\n [hidden]=\"concise$$ | async\"\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"reduce$$ | async\"\n (ngModelChange)=\"reduce$$.next($event)\"\n >\n {{ 'hide_manage_fields_field' | translate }}\n </aui-checkbox>\n }\n </ng-container>\n </aui-code-editor>\n}\n<ng-template #content>\n <aui-code-editor\n name=\"yaml\"\n [ngModel]=\"yaml$ | async\"\n [options]=\"editorOptions\"\n [actionsConfig]=\"viewActions\"\n >\n <ng-container auiCodeEditorToolbarLeft>\n @if (conciseEnable) {\n <aui-checkbox\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 }\n @if (manageFieldActionEnable) {\n <aui-checkbox\n [hidden]=\"concise$$ | async\"\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"reduce$$ | async\"\n (ngModelChange)=\"reduce$$.next($event)\"\n >\n {{ 'hide_manage_fields_field' | translate }}\n </aui-checkbox>\n }\n </ng-container>\n </aui-code-editor>\n</ng-template>\n", styles: [":host(:not(.dialog-content)) ::ng-deep .aui-code-editor{min-height:100%}:host(:not(.dialog-content)){display:block;height:calc(100vh - (var(--acl-page-header-height) + 44px) - 147px)}: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%}\n"], dependencies: [{ kind: "component", type: i1.CardComponent, selector: "aui-card", inputs: ["divider"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.CheckboxComponent, selector: "aui-checkbox", inputs: ["name", "type", "label", "indeterminate"] }, { kind: "component", type: CodeEditorComponent, selector: "aui-code-editor", inputs: ["options", "plain", "showLanguageLabel", "value", "originalValue", "actionsConfig", "previewMode", "diffMode", "modelUri"], outputs: ["editorChange", "editorBlur"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12630
+ }
12631
+ __decorate([
12632
+ ObservableInput(),
12633
+ __metadata("design:type", Observable)
12634
+ ], ResourceYamlDisplayComponent.prototype, "resource$", void 0);
12635
+ __decorate([
12636
+ ObservableInput(),
12637
+ __metadata("design:type", Observable)
12638
+ ], ResourceYamlDisplayComponent.prototype, "schema$", void 0);
12639
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceYamlDisplayComponent, decorators: [{
12640
+ type: Component,
12641
+ args: [{ selector: 'acl-resource-yaml-display', preserveWhitespaces: false, standalone: true, imports: [
12642
+ CARD_MODULE,
12643
+ FormsModule,
12644
+ CHECKBOX_MODULE,
12645
+ CodeEditorComponent,
12646
+ TranslatePipe,
12647
+ AsyncPipe,
12648
+ NgTemplateOutlet,
12649
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (hasWrapper) {\n <aui-card>\n <ng-container *ngTemplateOutlet=\"content\" />\n </aui-card>\n} @else {\n <aui-code-editor\n name=\"yaml\"\n [ngModel]=\"yaml$ | async\"\n [options]=\"editorOptions\"\n [actionsConfig]=\"viewActions\"\n >\n <ng-container auiCodeEditorToolbarLeft>\n @if (conciseEnable) {\n <aui-checkbox\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 }\n @if (manageFieldActionEnable) {\n <aui-checkbox\n [hidden]=\"concise$$ | async\"\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"reduce$$ | async\"\n (ngModelChange)=\"reduce$$.next($event)\"\n >\n {{ 'hide_manage_fields_field' | translate }}\n </aui-checkbox>\n }\n </ng-container>\n </aui-code-editor>\n}\n<ng-template #content>\n <aui-code-editor\n name=\"yaml\"\n [ngModel]=\"yaml$ | async\"\n [options]=\"editorOptions\"\n [actionsConfig]=\"viewActions\"\n >\n <ng-container auiCodeEditorToolbarLeft>\n @if (conciseEnable) {\n <aui-checkbox\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 }\n @if (manageFieldActionEnable) {\n <aui-checkbox\n [hidden]=\"concise$$ | async\"\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"reduce$$ | async\"\n (ngModelChange)=\"reduce$$.next($event)\"\n >\n {{ 'hide_manage_fields_field' | translate }}\n </aui-checkbox>\n }\n </ng-container>\n </aui-code-editor>\n</ng-template>\n", styles: [":host(:not(.dialog-content)) ::ng-deep .aui-code-editor{min-height:100%}:host(:not(.dialog-content)){display:block;height:calc(100vh - (var(--acl-page-header-height) + 44px) - 147px)}: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%}\n"] }]
12650
+ }], ctorParameters: () => [], propDecorators: { codeEditorRef: [{
12651
+ type: ViewChild,
12652
+ args: ['codeEditorRef']
12653
+ }], hasWrapper: [{
12654
+ type: Input
12655
+ }], showDebugInfo: [{
12656
+ type: Input
12657
+ }], conciseEnable: [{
12658
+ type: Input
12659
+ }], manageFieldActionEnable: [{
12660
+ type: Input
12661
+ }], sidebarEnable: [{
12662
+ type: Input
12663
+ }], schemaEnable: [{
12664
+ type: Input
12665
+ }], exampleEnable: [{
12666
+ type: Input
12667
+ }], autoFoldManagedFields: [{
12668
+ type: Input
12669
+ }], schema: [{
12670
+ type: Input
12671
+ }], resource: [{
12672
+ type: Input
12673
+ }], resource$: [], schema$: [], minimap: [{
12674
+ type: Input
12675
+ }], clusterName: [{
12676
+ type: Input
12677
+ }] } });
12678
+
12679
+ class K8sYamlDisplayDialogComponent {
12680
+ constructor() {
12681
+ this.data = inject(DIALOG_DATA);
12682
+ }
12683
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: K8sYamlDisplayDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12684
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: K8sYamlDisplayDialogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<aui-dialog-header [divider]=\"false\">\n <div [class.ellipsis-dialog-header]=\"data.ellipsis\">\n <span [class.text-ellipsis]=\"data.ellipsis\">\n {{ data.title || ('view_yaml' | translate) }}\n </span>\n @if (data.extra) {\n <span class=\"extra\">{{ data.extra }}</span>\n }\n </div>\n</aui-dialog-header>\n<aui-dialog-content>\n <acl-resource-yaml-display\n [resource]=\"data.resource\"\n [hasWrapper]=\"false\"\n class=\"dialog-content\"\n ></acl-resource-yaml-display>\n</aui-dialog-content>\n", dependencies: [{ kind: "component", type: i1.DialogHeaderComponent, selector: "aui-dialog-header", inputs: ["divider", "closeable", "result"] }, { kind: "component", type: i1.DialogContentComponent, selector: "aui-dialog-content" }, { kind: "component", type: ResourceYamlDisplayComponent, selector: "acl-resource-yaml-display", inputs: ["hasWrapper", "showDebugInfo", "conciseEnable", "manageFieldActionEnable", "sidebarEnable", "schemaEnable", "exampleEnable", "autoFoldManagedFields", "schema", "resource", "minimap", "clusterName"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12685
+ }
12686
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: K8sYamlDisplayDialogComponent, decorators: [{
12687
+ type: Component,
12688
+ args: [{ preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [DIALOG_MODULE, TranslatePipe, ResourceYamlDisplayComponent], template: "<aui-dialog-header [divider]=\"false\">\n <div [class.ellipsis-dialog-header]=\"data.ellipsis\">\n <span [class.text-ellipsis]=\"data.ellipsis\">\n {{ data.title || ('view_yaml' | translate) }}\n </span>\n @if (data.extra) {\n <span class=\"extra\">{{ data.extra }}</span>\n }\n </div>\n</aui-dialog-header>\n<aui-dialog-content>\n <acl-resource-yaml-display\n [resource]=\"data.resource\"\n [hasWrapper]=\"false\"\n class=\"dialog-content\"\n ></acl-resource-yaml-display>\n</aui-dialog-content>\n" }]
12689
+ }] });
12690
+
12691
+ /**
12692
+ * Kubernetes 资源的内置 YAML 示例
12693
+ * 按照 apiVersion.kind 的格式组织
12694
+ */
12695
+ const BUILT_IN_YAML_EXAMPLES = {
12696
+ 'apps/v1.Deployment': [
12697
+ {
12698
+ title: 'Basic Deployment',
12699
+ description: 'A basic deployment example with nginx container',
12700
+ yaml: `apiVersion: apps/v1
12701
+ kind: Deployment
12702
+ metadata:
12703
+ labels:
12704
+ app: nginx
12705
+ name: nginx-deployment
12706
+ namespace: ''
12707
+ spec:
12708
+ selector:
12709
+ matchLabels:
12710
+ app: nginx
12711
+ template:
12712
+ metadata:
12713
+ labels:
12714
+ app: nginx
12715
+ spec:
12716
+ containers:
12717
+ - image: nginx:1.7.9
12718
+ name: nginx
12719
+ ports:
12720
+ - containerPort: 80
12721
+ securityContext:
12722
+ allowPrivilegeEscalation: false
12723
+ capabilities:
12724
+ drop:
12725
+ - ALL
12726
+ runAsNonRoot: true
12727
+ seccompProfile:
12728
+ type: RuntimeDefault
12729
+ securityContext:
12730
+ runAsNonRoot: true
12731
+ seccompProfile:
12732
+ type: RuntimeDefault`,
12733
+ },
12734
+ ],
12735
+ 'v1.ConfigMap': [
12736
+ {
12737
+ title: 'Basic ConfigMap',
12738
+ description: 'A basic ConfigMap example with properties and file data',
12739
+ yaml: `apiVersion: v1
12740
+ kind: ConfigMap
12741
+ metadata:
12742
+ name: example
12743
+ namespace: ''
12744
+ data:
12745
+ example.property.1: hello
12746
+ example.property.2: world
12747
+ example.property.file: |-
12748
+ property.1=value-1
12749
+ property.2=value-2
12750
+ property.3=value-3`,
12751
+ },
12752
+ ],
12753
+ 'batch/v1.CronJob': [
12754
+ {
12755
+ title: 'Basic CronJob',
12756
+ description: 'A basic CronJob example that runs daily',
12757
+ yaml: `apiVersion: batch/v1
12758
+ kind: CronJob
12759
+ metadata:
12760
+ name: hello
12761
+ spec:
12762
+ jobTemplate:
12763
+ metadata:
12764
+ labels:
12765
+ cronjob.cpaas.io/name: hello
12766
+ spec:
12767
+ template:
12768
+ metadata:
12769
+ labels:
12770
+ cronjob.cpaas.io/name: hello
12771
+ spec:
12772
+ containers:
12773
+ - args:
12774
+ - /bin/sh
12775
+ - -c
12776
+ - date; echo Hello from the Kubernetes cluster
12777
+ image: busybox
12778
+ name: hello
12779
+ securityContext:
12780
+ allowPrivilegeEscalation: false
12781
+ capabilities:
12782
+ drop:
12783
+ - ALL
12784
+ runAsNonRoot: true
12785
+ seccompProfile:
12786
+ type: RuntimeDefault
12787
+ securityContext:
12788
+ runAsNonRoot: true
12789
+ seccompProfile:
12790
+ type: RuntimeDefault
12791
+ restartPolicy: Never
12792
+ schedule: "*/1 * * * *"`,
12793
+ },
12794
+ ],
12795
+ 'v1.PersistentVolume': [
12796
+ {
12797
+ title: 'Basic PersistentVolume',
12798
+ description: 'A basic PersistentVolume example with NFS storage',
12799
+ yaml: `apiVersion: v1
12800
+ kind: PersistentVolume
12801
+ metadata:
12802
+ name: example
12803
+ namespace: ''
12804
+ spec:
12805
+ capacity:
12806
+ storage: 5Gi
12807
+ accessModes:
12808
+ - ReadWriteOnce
12809
+ persistentVolumeReclaimPolicy: Retain
12810
+ storageClassName: slow
12811
+ nfs:
12812
+ path: /tmp
12813
+ server: 172.17.0.2`,
12814
+ },
12815
+ ],
12816
+ 'autoscaling/v2.HorizontalPodAutoscaler': [
12817
+ {
12818
+ title: 'Basic HorizontalPodAutoscaler',
12819
+ description: 'A basic HPA example with CPU utilization target',
12820
+ yaml: `apiVersion: autoscaling/v2
12821
+ kind: HorizontalPodAutoscaler
12822
+ metadata:
12823
+ name: example
12824
+ namespace: ''
12825
+ spec:
12826
+ scaleTargetRef:
12827
+ apiVersion: apps/v1
12828
+ kind: Deployment
12829
+ name: example
12830
+ minReplicas: 1
12831
+ maxReplicas: 3
12832
+ metrics:
12833
+ - type: Resource
12834
+ resource:
12835
+ name: cpu
12836
+ target:
12837
+ averageUtilization: 50
12838
+ type: Utilization`,
12839
+ },
12840
+ ],
12841
+ 'apps/v1.DaemonSet': [
12842
+ {
12843
+ title: 'Basic DaemonSet',
12844
+ description: 'A basic DaemonSet example with nginx container',
12845
+ yaml: `apiVersion: apps/v1
12846
+ kind: DaemonSet
12847
+ metadata:
12848
+ name: fluentd-elasticsearch
12849
+ namespace: ''
12850
+ labels:
12851
+ k8s-app: fluentd-logging
12852
+ spec:
12853
+ selector:
12854
+ matchLabels:
12855
+ name: fluentd-elasticsearch
12856
+ template:
12857
+ metadata:
12858
+ labels:
12859
+ name: fluentd-elasticsearch
12860
+ spec:
12861
+ tolerations:
12862
+ - key: node-role.kubernetes.io/control-plane
12863
+ operator: Exists
12864
+ effect: NoSchedule
12865
+ - key: node-role.kubernetes.io/master
12866
+ operator: Exists
12867
+ effect: NoSchedule
12868
+ containers:
12869
+ - name: fluentd-elasticsearch
12870
+ image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
12871
+ resources:
12872
+ limits:
12873
+ memory: 200Mi
12874
+ requests:
12875
+ cpu: 100m
12876
+ memory: 200Mi
12700
12877
  volumeMounts:
12701
12878
  - name: varlog
12702
12879
  mountPath: /var/log
@@ -13823,9 +14000,774 @@ const ASYNC_DATA_MODULE = [
13823
14000
  ErrorStateComponent,
13824
14001
  ];
13825
14002
 
14003
+ /**
14004
+ * @packageDocumentation
14005
+ * @module notification
14006
+ */
14007
+ const ZH_ERRORS = {
14008
+ Unknown: '未知错误',
14009
+ Unauthorized: '授权不足',
14010
+ Forbidden: '资源不可用',
14011
+ NotFound: '找不到资源',
14012
+ AlreadyExists: '资源已存在',
14013
+ Conflict: '资源版本冲突,请重新获取资源',
14014
+ Gone: '资源位置已变更',
14015
+ Invalid: '数据错误',
14016
+ ServerTimeout: '响应超时',
14017
+ Timeout: '请求超时',
14018
+ TooManyRequests: '请求太多,超过服务能力',
14019
+ BadRequest: '无效的请求',
14020
+ MethodNotAllowed: '请求的操作不被允许',
14021
+ NotAcceptable: '接收的数据类型不被支持',
14022
+ RequestEntityTooLarge: '请求实体太大',
14023
+ UnsupportedMediaType: '发送的数据类型不被支持',
14024
+ InternalError: '内部错误',
14025
+ Expired: '请求内容已过期',
14026
+ ServiceUnavailable: '当前请求的服务不可用,可稍后重试',
14027
+ ProjectNamespaceConflict: '平台级命名空间已存在,请处理',
14028
+ };
14029
+ const DEFAULT_ZH_ERROR = '网络错误';
14030
+
14031
+ /**
14032
+ * @packageDocumentation
14033
+ * @module notification
14034
+ */
14035
+ class FeedbackNotificationComponent {
14036
+ constructor() {
14037
+ this.onPrimary = new EventEmitter();
14038
+ this.onSecondary = new EventEmitter();
14039
+ }
14040
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: FeedbackNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14041
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: FeedbackNotificationComponent, isStandalone: true, selector: "ng-component", inputs: { primary: "primary", secondary: "secondary", content: "content", pre: "pre" }, outputs: { onPrimary: "onPrimary", onSecondary: "onSecondary" }, ngImport: i0, template: "@if (content) {\n <main>\n @if (pre) {\n <pre [innerHTML]=\"content\"></pre>\n } @else {\n <div [innerHTML]=\"content\"></div>\n }\n </main>\n}\n<footer>\n @if (primary) {\n <button\n aui-button=\"primary\"\n type=\"button\"\n size=\"mini\"\n (click)=\"onPrimary.emit()\"\n >\n {{ primary | translate }}\n </button>\n }\n @if (secondary) {\n <button\n aui-button=\"default\"\n type=\"button\"\n size=\"mini\"\n (click)=\"onSecondary.emit()\"\n >\n {{ secondary | translate }}\n </button>\n }\n</footer>\n", styles: [":host{display:flex;flex-direction:column;max-height:150px}main{display:flex;flex:1;overflow:hidden}main>*{flex:1;overflow:auto}footer{padding-top:12px}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
14042
+ }
14043
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: FeedbackNotificationComponent, decorators: [{
14044
+ type: Component,
14045
+ args: [{ standalone: true, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TRANSLATE_MODULE, ButtonModule], template: "@if (content) {\n <main>\n @if (pre) {\n <pre [innerHTML]=\"content\"></pre>\n } @else {\n <div [innerHTML]=\"content\"></div>\n }\n </main>\n}\n<footer>\n @if (primary) {\n <button\n aui-button=\"primary\"\n type=\"button\"\n size=\"mini\"\n (click)=\"onPrimary.emit()\"\n >\n {{ primary | translate }}\n </button>\n }\n @if (secondary) {\n <button\n aui-button=\"default\"\n type=\"button\"\n size=\"mini\"\n (click)=\"onSecondary.emit()\"\n >\n {{ secondary | translate }}\n </button>\n }\n</footer>\n", styles: [":host{display:flex;flex-direction:column;max-height:150px}main{display:flex;flex:1;overflow:hidden}main>*{flex:1;overflow:auto}footer{padding-top:12px}\n"] }]
14046
+ }], propDecorators: { primary: [{
14047
+ type: Input
14048
+ }], secondary: [{
14049
+ type: Input
14050
+ }], content: [{
14051
+ type: Input
14052
+ }], pre: [{
14053
+ type: Input
14054
+ }], onPrimary: [{
14055
+ type: Output
14056
+ }], onSecondary: [{
14057
+ type: Output
14058
+ }] } });
14059
+
14060
+ function isK8sErrorStatus(e) {
14061
+ return e?.metadata && e.apiVersion && e.kind === 'Status' && e.status;
14062
+ }
14063
+
14064
+ /**
14065
+ * @packageDocumentation
14066
+ * @module notification
14067
+ */
14068
+ class NotificationUtilService {
14069
+ constructor() {
14070
+ this.injector = inject(Injector);
14071
+ this.dialog = inject(DialogService);
14072
+ this.time = inject(TimeService);
14073
+ this.notification = inject(NotificationService);
14074
+ }
14075
+ viewDetail(json, title, notificationId) {
14076
+ this.dialog.open(CodeDisplayDialogComponent, {
14077
+ data: {
14078
+ code: this.normalizeJson(json),
14079
+ language: 'json',
14080
+ title: title || 'view_detail',
14081
+ ellipsis: true,
14082
+ },
14083
+ size: DialogSize.Big,
14084
+ });
14085
+ if (notificationId) {
14086
+ this.notification.remove(notificationId);
14087
+ }
14088
+ }
14089
+ createFeedback(config, { content, onPrimary, onSecondary, pre, primary, secondary, summary, } = {}) {
14090
+ const { instance } = this.notification.create({
14091
+ type: MessageType.Error,
14092
+ ...config,
14093
+ content: null,
14094
+ contentRef: FeedbackNotificationComponent,
14095
+ });
14096
+ const feedback = instance.childComponentInstance;
14097
+ if (primary === true) {
14098
+ primary = 'view_detail';
14099
+ }
14100
+ else if (secondary === true) {
14101
+ secondary = 'view_detail';
14102
+ }
14103
+ content = this.normalizeJson(content || config.content);
14104
+ const viewDetail = this.viewDetail.bind(this, content, config.title, instance.uniqueId);
14105
+ if (primary && !onPrimary) {
14106
+ onPrimary = viewDetail;
14107
+ }
14108
+ if (onPrimary) {
14109
+ feedback.onPrimary.pipe(take(1)).subscribe(onPrimary);
14110
+ }
14111
+ else if (secondary && !onSecondary) {
14112
+ onSecondary = viewDetail;
14113
+ }
14114
+ if (onSecondary) {
14115
+ feedback.onSecondary.pipe(take(1)).subscribe(onSecondary);
14116
+ }
14117
+ Object.assign(feedback, {
14118
+ content: this.normalizeJson(summary),
14119
+ pre,
14120
+ primary,
14121
+ secondary,
14122
+ });
14123
+ }
14124
+ normalizeJson(json) {
14125
+ return typeof json === 'string'
14126
+ ? json
14127
+ : json && JSON.stringify(json, null, 2);
14128
+ }
14129
+ async notify(reqOrStatus, res) {
14130
+ // we stored original req in `err.__req__`
14131
+ const req = ('__req__' in reqOrStatus ? get(reqOrStatus, '__req__') : reqOrStatus);
14132
+ if (isK8sErrorStatus(reqOrStatus)) {
14133
+ res = reqOrStatus?.['__origin__'];
14134
+ }
14135
+ const duration = Math.round(numberAttribute(req.headers.get(NOTIFY_DURATION_HEADER$1), NOTIFICATION_DEFAULT_CONFIG.duration));
14136
+ let reason;
14137
+ let resError = res.error;
14138
+ if (resError instanceof Blob && resError.type === 'application/json') {
14139
+ try {
14140
+ resError = JSON.parse(await resError.text());
14141
+ }
14142
+ catch { }
14143
+ }
14144
+ if (isK8sErrorStatus(resError)) {
14145
+ reason = resError.reason;
14146
+ reason =
14147
+ this.injector.get(TranslateService).locale === 'zh'
14148
+ ? ZH_ERRORS[reason] || DEFAULT_ZH_ERROR
14149
+ : reason;
14150
+ }
14151
+ this.createFeedback({
14152
+ title: reason || this.getResErrorMessage(res),
14153
+ duration,
14154
+ }, {
14155
+ content: {
14156
+ apiVersion: 'v1',
14157
+ RequestURI: req.urlWithParams,
14158
+ Method: req.method,
14159
+ RequestObject: {
14160
+ Time: this.time.format(req.requestAt),
14161
+ Header: this.getAllHeaders(req.headers),
14162
+ Body: req.body,
14163
+ },
14164
+ ResponseObject: {
14165
+ Time: this.time.format(),
14166
+ RelativeTime: this.time.distance(req.requestAt),
14167
+ StatusCode: res.status,
14168
+ Header: this.getAllHeaders(res.headers),
14169
+ Body: resError,
14170
+ },
14171
+ },
14172
+ secondary: true,
14173
+ });
14174
+ }
14175
+ getResErrorMessage(res) {
14176
+ return typeof res.error === 'string'
14177
+ ? res.error
14178
+ : (res.statusText === 'OK' && res.error.message) ||
14179
+ // compatible with legacy ACE API
14180
+ get(res.error, 'errors[0].message') ||
14181
+ res.statusText;
14182
+ }
14183
+ getAllHeaders(headers) {
14184
+ return headers
14185
+ .keys()
14186
+ .reduce((acc, key) => {
14187
+ let values = headers.getAll(key);
14188
+ if (Array.isArray(values) && values.length === 1) {
14189
+ values = values[0];
14190
+ }
14191
+ acc[key] = values;
14192
+ return acc;
14193
+ }, {});
14194
+ }
14195
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NotificationUtilService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14196
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NotificationUtilService, providedIn: 'root' }); }
14197
+ }
14198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NotificationUtilService, decorators: [{
14199
+ type: Injectable,
14200
+ args: [{
14201
+ providedIn: 'root',
14202
+ }]
14203
+ }] });
14204
+
14205
+ /**
14206
+ * @packageDocumentation
14207
+ * @module notification
14208
+ */
14209
+ const WRITABLE_METHODS = ['delete', 'patch', 'post', 'put'];
14210
+ class ResourceErrorInterceptor {
14211
+ constructor() {
14212
+ this.notificationUtil = inject(NotificationUtilService);
14213
+ }
14214
+ intercept(req, next) {
14215
+ // Maybe used later in custom `catchError`
14216
+ req.requestAt = Date.now();
14217
+ let notifyOnError = this.notifyOnError(req);
14218
+ if (notifyOnError || req.headers.has(NOTIFY_ON_ERROR_HEADER)) {
14219
+ const notifyOnErrorHeader = req.headers.get(NOTIFY_ON_ERROR_HEADER);
14220
+ req = req.clone({
14221
+ headers: req.headers.delete(NOTIFY_ON_ERROR_HEADER),
14222
+ });
14223
+ const skipNotifyOnError = notifyOnErrorHeader != null &&
14224
+ [EMPTY$2, FALSE$1].includes(notifyOnErrorHeader);
14225
+ if (skipNotifyOnError) {
14226
+ notifyOnError = false;
14227
+ }
14228
+ else {
14229
+ if (!notifyOnError) {
14230
+ notifyOnError = true;
14231
+ }
14232
+ }
14233
+ }
14234
+ return next.handle(req).pipe(catchError((err) => {
14235
+ console.error(err);
14236
+ if (notifyOnError) {
14237
+ this.notificationUtil.notify(req, err);
14238
+ }
14239
+ return throwError(() => isK8sErrorStatus(err.error)
14240
+ ? {
14241
+ ...err.error,
14242
+ __origin__: err,
14243
+ __req__: req,
14244
+ }
14245
+ : {
14246
+ ...err,
14247
+ __req__: req,
14248
+ });
14249
+ }));
14250
+ }
14251
+ notifyOnError(req) {
14252
+ return (WRITABLE_METHODS.includes(req.method.toLowerCase()) &&
14253
+ !req.url.endsWith('/v1/selfsubjectaccessreviews'));
14254
+ }
14255
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceErrorInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14256
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceErrorInterceptor }); }
14257
+ }
14258
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceErrorInterceptor, decorators: [{
14259
+ type: Injectable
14260
+ }] });
14261
+
14262
+ /**
14263
+ * [[include:notification/README.md]]
14264
+ * @module notification
14265
+ * @preferred
14266
+ */
14267
+ /** imports */
14268
+
14269
+ class GraphActionsComponent {
14270
+ constructor() {
14271
+ this.position = 'right top';
14272
+ }
14273
+ get positionClass() {
14274
+ return this.position
14275
+ .split(' ')
14276
+ .reduce((acc, v) => (v ? { ...acc, [v]: true } : acc), {});
14277
+ }
14278
+ handleMouseDown(e) {
14279
+ e.stopPropagation();
14280
+ }
14281
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14282
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: GraphActionsComponent, isStandalone: true, selector: "acl-graph-actions", inputs: { position: "position" }, host: { listeners: { "mousedown": "handleMouseDown($event)" } }, ngImport: i0, template: `<div
14283
+ class="acl-graph-canvas__action-wrapper"
14284
+ [ngClass]="positionClass"
14285
+ >
14286
+ <ng-content></ng-content>
14287
+ </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
14288
+ }
14289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphActionsComponent, decorators: [{
14290
+ type: Component,
14291
+ args: [{
14292
+ selector: 'acl-graph-actions',
14293
+ template: `<div
14294
+ class="acl-graph-canvas__action-wrapper"
14295
+ [ngClass]="positionClass"
14296
+ >
14297
+ <ng-content></ng-content>
14298
+ </div>`,
14299
+ changeDetection: ChangeDetectionStrategy.OnPush,
14300
+ encapsulation: ViewEncapsulation.None,
14301
+ standalone: true,
14302
+ imports: [CommonModule],
14303
+ }]
14304
+ }], propDecorators: { position: [{
14305
+ type: Input
14306
+ }], handleMouseDown: [{
14307
+ type: HostListener,
14308
+ args: ['mousedown', ['$event']]
14309
+ }] } });
14310
+
14311
+ class GraphStoreService {
14312
+ constructor() {
14313
+ this.nodeStore = {};
14314
+ this.scale = 1;
14315
+ this.nodeChanged$$ = new ReplaySubject(1);
14316
+ this.nodeChanged$ = this.nodeChanged$$
14317
+ .asObservable()
14318
+ .pipe(debounceTime(0));
14319
+ this.resizeObserver = new ResizeObserver(throttle(() => this.nodeChanged$$.next(), 100));
14320
+ }
14321
+ registerSurfaceNode(surface) {
14322
+ this.surfaceNode = surface;
14323
+ }
14324
+ registerNode(id, node) {
14325
+ if (id) {
14326
+ this.resizeObserver.observe(node.el.nativeElement);
14327
+ }
14328
+ this.nodeStore[id] = node;
14329
+ this.nodeChanged$$.next();
14330
+ }
14331
+ unregisterNode(id) {
14332
+ if (id && this.getNode(id)) {
14333
+ this.resizeObserver.unobserve(this.nodeStore[id].el.nativeElement);
14334
+ }
14335
+ this.nodeStore[id] = null;
14336
+ this.nodeChanged$$.next();
14337
+ }
14338
+ getNode(id) {
14339
+ return this.nodeStore[id];
14340
+ }
14341
+ getSurfaceNode() {
14342
+ return this.surfaceNode;
14343
+ }
14344
+ nodeChanged() {
14345
+ return this.nodeChanged$;
14346
+ }
14347
+ getScale() {
14348
+ return this.scale;
14349
+ }
14350
+ setScale(scale) {
14351
+ return (this.scale = scale);
14352
+ }
14353
+ disconnectObserver() {
14354
+ this.resizeObserver.disconnect();
14355
+ }
14356
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphStoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14357
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphStoreService }); }
14358
+ }
14359
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphStoreService, decorators: [{
14360
+ type: Injectable
14361
+ }] });
14362
+
14363
+ function getRect(el) {
14364
+ const r = el.getBoundingClientRect();
14365
+ return {
14366
+ top: r.top,
14367
+ bottom: r.bottom,
14368
+ left: r.left,
14369
+ right: r.right,
14370
+ width: r.width,
14371
+ height: r.height,
14372
+ offsetTop: el.offsetTop,
14373
+ offsetLeft: el.offsetLeft,
14374
+ offsetWidth: el.offsetWidth,
14375
+ offsetHeight: el.offsetHeight,
14376
+ };
14377
+ }
14378
+
14379
+ const isMacSystem = isMac();
14380
+ class GraphCanvasComponent {
14381
+ constructor() {
14382
+ this.minScale = 0.25;
14383
+ this.maxScale = 2;
14384
+ this.originX = 'center';
14385
+ this.originY = 'top';
14386
+ this.boundary = 60;
14387
+ this.loading = false;
14388
+ this.loadFailed = false;
14389
+ this.retry = new EventEmitter();
14390
+ this.getCanvasRect = () => getRect(this.canvasRef.nativeElement);
14391
+ this.graphStore = inject(GraphStoreService);
14392
+ this.getSurfaceRect = () => getRect(this.surfaceRef.nativeElement);
14393
+ }
14394
+ get dragging() {
14395
+ return !!this.dragStartPoint;
14396
+ }
14397
+ get canvasStyle() {
14398
+ return {
14399
+ padding: this.boundary + 'px',
14400
+ justifyContent: xSelector(this.transformState.origin[0], [
14401
+ 'flex-start',
14402
+ 'center',
14403
+ 'flex-end',
14404
+ ]),
14405
+ alignItems: ySelector(this.transformState.origin[1], [
14406
+ 'flex-start',
14407
+ 'center',
14408
+ 'flex-end',
14409
+ ]),
14410
+ cursor: this.dragging ? 'grabbing' : 'grab',
14411
+ };
14412
+ }
14413
+ get surfaceStyle() {
14414
+ return {
14415
+ transformOrigin: this.transformState.origin.join(' '),
14416
+ transform: `translate(${this.transformState.translate[0]}px, ${this.transformState.translate[1]}px) scale(${this.transformState.scale})`,
14417
+ };
14418
+ }
14419
+ ngOnInit() {
14420
+ this.transformState = {
14421
+ origin: [this.originX, this.originY],
14422
+ translate: [0, 0],
14423
+ scale: this.graphStore.getScale(),
14424
+ };
14425
+ }
14426
+ ngAfterViewInit() {
14427
+ this.graphStore.registerSurfaceNode({ getRect: this.getSurfaceRect });
14428
+ }
14429
+ ngOnDestroy() {
14430
+ this.graphStore.disconnectObserver();
14431
+ }
14432
+ handleWheelEvent(e) {
14433
+ e.preventDefault();
14434
+ e.stopPropagation();
14435
+ const { deltaX, deltaY, ctrlKey, shiftKey, clientX, clientY } = e;
14436
+ if (ctrlKey) {
14437
+ this.zoomByWheel(-deltaY, [clientX, clientY]);
14438
+ }
14439
+ else if (shiftKey && !isMacSystem) {
14440
+ this.move(-deltaY, -deltaX);
14441
+ }
14442
+ else {
14443
+ this.move(-deltaX, -deltaY);
14444
+ }
14445
+ }
14446
+ handleMouseDown(e) {
14447
+ this.dragStartPoint = [e.clientX, e.clientY];
14448
+ }
14449
+ handleMouseMove(e) {
14450
+ if (!this.dragStartPoint) {
14451
+ return;
14452
+ }
14453
+ this.move(e.clientX - this.dragStartPoint[0], e.clientY - this.dragStartPoint[1]);
14454
+ this.dragStartPoint = [e.clientX, e.clientY];
14455
+ }
14456
+ handleMouseUp() {
14457
+ this.dragStartPoint = null;
14458
+ }
14459
+ zoomByWheel(v, pointerPosition) {
14460
+ this.dispatchTransform((transform, rects) => {
14461
+ const { scale, translate } = transform;
14462
+ const nextScale = scaleLimit(scale + v / 500);
14463
+ const origin = originCoordinatePoint(transform, rects);
14464
+ const pointer = coordinate(rects.canvasRect, pointerPosition);
14465
+ const deltaX = ((pointer[0] - origin[0]) / scale) * nextScale -
14466
+ (pointer[0] - origin[0]);
14467
+ const deltaY = ((pointer[1] - origin[1]) / scale) * nextScale -
14468
+ (pointer[1] - origin[1]);
14469
+ return {
14470
+ translate: [translate[0] - deltaX, translate[1] - deltaY],
14471
+ scale: nextScale,
14472
+ };
14473
+ });
14474
+ }
14475
+ zoomByDefaultStep(direction) {
14476
+ this.dispatchTransform(({ scale }) => ({
14477
+ scale: scaleLimit(scale + (direction === 'in' ? 0.25 : -0.25)),
14478
+ }));
14479
+ }
14480
+ zoomOriginal() {
14481
+ this.dispatchTransform(() => ({
14482
+ origin: [this.originX, this.originY],
14483
+ translate: [0, 0],
14484
+ scale: 1,
14485
+ }));
14486
+ }
14487
+ zoomOverview() {
14488
+ this.dispatchTransform((_, { canvasRect, surfaceRect }) => {
14489
+ const scaleX = (canvasRect.offsetWidth - this.boundary * 2) / surfaceRect.offsetWidth;
14490
+ const scaleY = (canvasRect.offsetHeight - this.boundary * 2) /
14491
+ surfaceRect.offsetHeight;
14492
+ return {
14493
+ origin: ['center', 'center'],
14494
+ translate: [0, 0],
14495
+ scale: scaleLimit(min([scaleX, scaleY, 1])),
14496
+ };
14497
+ });
14498
+ }
14499
+ move(x, y) {
14500
+ this.dispatchTransform(({ translate }) => ({
14501
+ translate: [translate[0] + x, translate[1] + y],
14502
+ }));
14503
+ }
14504
+ dispatchTransform(action) {
14505
+ const rects = {
14506
+ canvasRect: this.getCanvasRect(),
14507
+ surfaceRect: this.getSurfaceRect(),
14508
+ };
14509
+ const nextTransform = mergeRight(this.transformState, action(this.transformState, rects));
14510
+ this.transformState = applyCanvasBoundaries({
14511
+ rects,
14512
+ transform: nextTransform,
14513
+ boundary: this.boundary,
14514
+ });
14515
+ this.graphStore.setScale(this.transformState.scale);
14516
+ }
14517
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphCanvasComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14518
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: GraphCanvasComponent, isStandalone: true, selector: "acl-graph-canvas", inputs: { minScale: "minScale", maxScale: "maxScale", originX: "originX", originY: "originY", boundary: "boundary", loading: "loading", loadFailed: "loadFailed" }, outputs: { retry: "retry" }, host: { listeners: { "document:mousemove": "handleMouseMove($event)", "document:mouseup": "handleMouseUp()" } }, providers: [GraphStoreService], viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true, static: true }, { propertyName: "surfaceRef", first: true, predicate: ["surface"], descendants: true, static: true }], ngImport: i0, template: "<div\n #canvas\n class=\"acl-graph-canvas\"\n [ngStyle]=\"canvasStyle\"\n (wheel)=\"handleWheelEvent($event)\"\n (mousedown)=\"handleMouseDown($event)\"\n>\n <div\n #surface\n class=\"acl-graph-canvas__surface\"\n [ngStyle]=\"surfaceStyle\"\n >\n <ng-content></ng-content>\n <ng-content select=\"acl-graph-links\"></ng-content>\n </div>\n\n <div class=\"acl-graph-canvas__action-wrapper right bottom\">\n <div\n class=\"acl-graph-canvas__action square\"\n [title]=\"'panoramic_view' | translate\"\n (click)=\"zoomOverview()\"\n (mousedown)=\"$event.stopPropagation()\"\n >\n <aui-icon icon=\"full_size\"></aui-icon>\n </div>\n <div class=\"acl-graph-canvas__scale-controller\">\n <aui-icon\n icon=\"minus\"\n [title]=\"'zoom_out' | translate\"\n [class.disabled]=\"transformState.scale <= minScale\"\n (click)=\"zoomByDefaultStep('out')\"\n (mousedown)=\"$event.stopPropagation()\"\n ></aui-icon>\n <span>{{ (transformState.scale * 100).toFixed(0) }}%</span>\n <aui-icon\n icon=\"plus\"\n [title]=\"'zoom_in' | translate\"\n [class.disabled]=\"transformState.scale >= maxScale\"\n (click)=\"zoomByDefaultStep('in')\"\n (mousedown)=\"$event.stopPropagation()\"\n ></aui-icon>\n </div>\n <div\n class=\"acl-graph-canvas__action square\"\n [title]=\"'isometric_view' | translate\"\n (click)=\"zoomOriginal()\"\n (mousedown)=\"$event.stopPropagation()\"\n >\n <aui-icon icon=\"actual_size\"></aui-icon>\n </div>\n </div>\n <ng-content select=\"acl-graph-actions\"></ng-content>\n <div\n class=\"acl-graph-canvas__loading-mask\"\n (wheel)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n [hidden]=\"!loading && !loadFailed\"\n >\n <div class=\"acl-graph-canvas__loading\">\n @if (loading) {\n <aui-icon icon=\"spinner\"></aui-icon>\n <span>{{ 'loading_please_wait' | translate }}</span>\n }\n @if (loadFailed) {\n <span>{{ 'failed_load_please' | translate }}</span>\n <button\n aui-button=\"text\"\n (click)=\"retry.emit()\"\n >\n {{ 'retry' | translate }}\n </button>\n }\n </div>\n </div>\n</div>\n", styles: [".acl-graph-canvas{display:flex;width:100%;height:100%;border-radius:var(--aui-border-radius-l);background-color:rgb(var(--aui-color-n-9));background-image:radial-gradient(rgba(var(--aui-color-n-7),.5) 1px,transparent 1px);background-size:10px 10px;background-position:center center;position:relative;overflow:hidden}.acl-graph-canvas:after{content:\"\";display:block;position:absolute;inset:0;border-radius:inherit;overflow:hidden;pointer-events:none}:root .acl-graph-canvas:after{box-shadow:inset 0 0 4px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] .acl-graph-canvas:after{box-shadow:inset 0 0 4px rgba(var(--aui-color-origin-shadow),.2)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .acl-graph-canvas:after{box-shadow:inset 0 0 4px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .acl-graph-canvas:after{box-shadow:inset 0 0 4px rgba(var(--aui-color-origin-shadow),.75)}.acl-graph-canvas__surface{position:relative}.acl-graph-canvas__links{position:absolute;top:0;left:0;width:1000px;height:1000px;overflow:visible;color:rgb(var(--aui-color-primary));pointer-events:none}.acl-graph-canvas__links .acl-graph-link__line{fill:none;stroke:currentcolor;stroke-width:2px}.acl-graph-canvas__links .acl-graph-link__dot,.acl-graph-canvas__links .acl-graph-link__arrow{fill:currentcolor}.acl-graph-canvas__loading{padding:8px 16px;border-radius:var(--aui-border-radius-m)}.acl-graph-canvas__loading{font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-secondary-text))}:root .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.05)}html[aui-theme-mode=light] .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.05)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.1)}}html[aui-theme-mode=dark] .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.1)}.acl-graph-canvas__loading aui-icon{margin-right:8px;color:rgb(var(--aui-color-primary));font-size:var(--aui-icon-size-m)}.acl-graph-canvas__loading-mask{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;cursor:default}.acl-graph-canvas__action-wrapper{position:absolute;display:flex}.acl-graph-canvas__action-wrapper.top{top:var(--aui-spacing-m)}.acl-graph-canvas__action-wrapper.right{right:var(--aui-spacing-m)}.acl-graph-canvas__action-wrapper.left{left:var(--aui-spacing-m)}.acl-graph-canvas__action-wrapper.bottom{bottom:var(--aui-spacing-m)}.acl-graph-canvas acl-graph-actions .acl-graph-canvas__action-wrapper.bottom.right{right:168px}.acl-graph-canvas__action{padding:0 6px;height:24px;display:flex;align-items:center;justify-content:center;background-color:rgb(var(--aui-color-n-10));border-radius:var(--aui-border-radius-m);cursor:pointer;-webkit-user-select:none;user-select:none}.acl-graph-canvas__action{font-size:var(--aui-font-size-s);line-height:var(--aui-line-height-s);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-secondary-text))}:root .acl-graph-canvas__action{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] .acl-graph-canvas__action{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .acl-graph-canvas__action{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .acl-graph-canvas__action{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}.acl-graph-canvas__action.square{width:24px}.acl-graph-canvas__action:hover,.acl-graph-canvas__action.active{color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6))}.acl-graph-canvas__action.disabled{color:rgb(var(--aui-color-disabled-text));background-color:rgb(var(--aui-color-n-10))}.acl-graph-canvas__action+.acl-graph-canvas__action{margin-left:4px}.acl-graph-canvas__scale-controller{display:flex;align-items:center;justify-content:center;margin:0 4px}.acl-graph-canvas__scale-controller{font-size:var(--aui-font-size-s);line-height:var(--aui-line-height-s);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-secondary-text))}.acl-graph-canvas__scale-controller{background-color:rgb(var(--aui-color-n-10));border-radius:var(--aui-border-radius-m)}:root .acl-graph-canvas__scale-controller{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] .acl-graph-canvas__scale-controller{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .acl-graph-canvas__scale-controller{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .acl-graph-canvas__scale-controller{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}.acl-graph-canvas__scale-controller{-webkit-user-select:none;user-select:none}.acl-graph-canvas__scale-controller aui-icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px;cursor:pointer}.acl-graph-canvas__scale-controller aui-icon:hover{color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6))}.acl-graph-canvas__scale-controller aui-icon.disabled{color:rgb(var(--aui-color-disabled-text));background-color:rgb(var(--aui-color-n-10));cursor:not-allowed}.acl-graph-canvas__scale-controller span{text-align:center;height:16px;width:50px;border-left:1px solid rgb(var(--aui-color-n-8));border-right:1px solid rgb(var(--aui-color-n-8))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "component", type: ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
14519
+ }
14520
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphCanvasComponent, decorators: [{
14521
+ type: Component,
14522
+ args: [{ selector: 'acl-graph-canvas', changeDetection: ChangeDetectionStrategy.OnPush, providers: [GraphStoreService], standalone: true, imports: [CommonModule, IconComponent, ButtonComponent, TranslatePipe], template: "<div\n #canvas\n class=\"acl-graph-canvas\"\n [ngStyle]=\"canvasStyle\"\n (wheel)=\"handleWheelEvent($event)\"\n (mousedown)=\"handleMouseDown($event)\"\n>\n <div\n #surface\n class=\"acl-graph-canvas__surface\"\n [ngStyle]=\"surfaceStyle\"\n >\n <ng-content></ng-content>\n <ng-content select=\"acl-graph-links\"></ng-content>\n </div>\n\n <div class=\"acl-graph-canvas__action-wrapper right bottom\">\n <div\n class=\"acl-graph-canvas__action square\"\n [title]=\"'panoramic_view' | translate\"\n (click)=\"zoomOverview()\"\n (mousedown)=\"$event.stopPropagation()\"\n >\n <aui-icon icon=\"full_size\"></aui-icon>\n </div>\n <div class=\"acl-graph-canvas__scale-controller\">\n <aui-icon\n icon=\"minus\"\n [title]=\"'zoom_out' | translate\"\n [class.disabled]=\"transformState.scale <= minScale\"\n (click)=\"zoomByDefaultStep('out')\"\n (mousedown)=\"$event.stopPropagation()\"\n ></aui-icon>\n <span>{{ (transformState.scale * 100).toFixed(0) }}%</span>\n <aui-icon\n icon=\"plus\"\n [title]=\"'zoom_in' | translate\"\n [class.disabled]=\"transformState.scale >= maxScale\"\n (click)=\"zoomByDefaultStep('in')\"\n (mousedown)=\"$event.stopPropagation()\"\n ></aui-icon>\n </div>\n <div\n class=\"acl-graph-canvas__action square\"\n [title]=\"'isometric_view' | translate\"\n (click)=\"zoomOriginal()\"\n (mousedown)=\"$event.stopPropagation()\"\n >\n <aui-icon icon=\"actual_size\"></aui-icon>\n </div>\n </div>\n <ng-content select=\"acl-graph-actions\"></ng-content>\n <div\n class=\"acl-graph-canvas__loading-mask\"\n (wheel)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n [hidden]=\"!loading && !loadFailed\"\n >\n <div class=\"acl-graph-canvas__loading\">\n @if (loading) {\n <aui-icon icon=\"spinner\"></aui-icon>\n <span>{{ 'loading_please_wait' | translate }}</span>\n }\n @if (loadFailed) {\n <span>{{ 'failed_load_please' | translate }}</span>\n <button\n aui-button=\"text\"\n (click)=\"retry.emit()\"\n >\n {{ 'retry' | translate }}\n </button>\n }\n </div>\n </div>\n</div>\n", styles: [".acl-graph-canvas{display:flex;width:100%;height:100%;border-radius:var(--aui-border-radius-l);background-color:rgb(var(--aui-color-n-9));background-image:radial-gradient(rgba(var(--aui-color-n-7),.5) 1px,transparent 1px);background-size:10px 10px;background-position:center center;position:relative;overflow:hidden}.acl-graph-canvas:after{content:\"\";display:block;position:absolute;inset:0;border-radius:inherit;overflow:hidden;pointer-events:none}:root .acl-graph-canvas:after{box-shadow:inset 0 0 4px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] .acl-graph-canvas:after{box-shadow:inset 0 0 4px rgba(var(--aui-color-origin-shadow),.2)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .acl-graph-canvas:after{box-shadow:inset 0 0 4px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .acl-graph-canvas:after{box-shadow:inset 0 0 4px rgba(var(--aui-color-origin-shadow),.75)}.acl-graph-canvas__surface{position:relative}.acl-graph-canvas__links{position:absolute;top:0;left:0;width:1000px;height:1000px;overflow:visible;color:rgb(var(--aui-color-primary));pointer-events:none}.acl-graph-canvas__links .acl-graph-link__line{fill:none;stroke:currentcolor;stroke-width:2px}.acl-graph-canvas__links .acl-graph-link__dot,.acl-graph-canvas__links .acl-graph-link__arrow{fill:currentcolor}.acl-graph-canvas__loading{padding:8px 16px;border-radius:var(--aui-border-radius-m)}.acl-graph-canvas__loading{font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-secondary-text))}:root .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.05)}html[aui-theme-mode=light] .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.05)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.1)}}html[aui-theme-mode=dark] .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.1)}.acl-graph-canvas__loading aui-icon{margin-right:8px;color:rgb(var(--aui-color-primary));font-size:var(--aui-icon-size-m)}.acl-graph-canvas__loading-mask{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;cursor:default}.acl-graph-canvas__action-wrapper{position:absolute;display:flex}.acl-graph-canvas__action-wrapper.top{top:var(--aui-spacing-m)}.acl-graph-canvas__action-wrapper.right{right:var(--aui-spacing-m)}.acl-graph-canvas__action-wrapper.left{left:var(--aui-spacing-m)}.acl-graph-canvas__action-wrapper.bottom{bottom:var(--aui-spacing-m)}.acl-graph-canvas acl-graph-actions .acl-graph-canvas__action-wrapper.bottom.right{right:168px}.acl-graph-canvas__action{padding:0 6px;height:24px;display:flex;align-items:center;justify-content:center;background-color:rgb(var(--aui-color-n-10));border-radius:var(--aui-border-radius-m);cursor:pointer;-webkit-user-select:none;user-select:none}.acl-graph-canvas__action{font-size:var(--aui-font-size-s);line-height:var(--aui-line-height-s);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-secondary-text))}:root .acl-graph-canvas__action{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] .acl-graph-canvas__action{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .acl-graph-canvas__action{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .acl-graph-canvas__action{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}.acl-graph-canvas__action.square{width:24px}.acl-graph-canvas__action:hover,.acl-graph-canvas__action.active{color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6))}.acl-graph-canvas__action.disabled{color:rgb(var(--aui-color-disabled-text));background-color:rgb(var(--aui-color-n-10))}.acl-graph-canvas__action+.acl-graph-canvas__action{margin-left:4px}.acl-graph-canvas__scale-controller{display:flex;align-items:center;justify-content:center;margin:0 4px}.acl-graph-canvas__scale-controller{font-size:var(--aui-font-size-s);line-height:var(--aui-line-height-s);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-secondary-text))}.acl-graph-canvas__scale-controller{background-color:rgb(var(--aui-color-n-10));border-radius:var(--aui-border-radius-m)}:root .acl-graph-canvas__scale-controller{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] .acl-graph-canvas__scale-controller{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .acl-graph-canvas__scale-controller{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .acl-graph-canvas__scale-controller{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}.acl-graph-canvas__scale-controller{-webkit-user-select:none;user-select:none}.acl-graph-canvas__scale-controller aui-icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px;cursor:pointer}.acl-graph-canvas__scale-controller aui-icon:hover{color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6))}.acl-graph-canvas__scale-controller aui-icon.disabled{color:rgb(var(--aui-color-disabled-text));background-color:rgb(var(--aui-color-n-10));cursor:not-allowed}.acl-graph-canvas__scale-controller span{text-align:center;height:16px;width:50px;border-left:1px solid rgb(var(--aui-color-n-8));border-right:1px solid rgb(var(--aui-color-n-8))}\n"] }]
14523
+ }], propDecorators: { minScale: [{
14524
+ type: Input
14525
+ }], maxScale: [{
14526
+ type: Input
14527
+ }], originX: [{
14528
+ type: Input
14529
+ }], originY: [{
14530
+ type: Input
14531
+ }], boundary: [{
14532
+ type: Input
14533
+ }], loading: [{
14534
+ type: Input
14535
+ }], loadFailed: [{
14536
+ type: Input
14537
+ }], retry: [{
14538
+ type: Output
14539
+ }], canvasRef: [{
14540
+ type: ViewChild,
14541
+ args: ['canvas', { static: true }]
14542
+ }], surfaceRef: [{
14543
+ type: ViewChild,
14544
+ args: ['surface', { static: true }]
14545
+ }], handleMouseMove: [{
14546
+ type: HostListener,
14547
+ args: ['document:mousemove', ['$event']]
14548
+ }], handleMouseUp: [{
14549
+ type: HostListener,
14550
+ args: ['document:mouseup', []]
14551
+ }] } });
14552
+ function scaleLimit(scale) {
14553
+ return clamp(round(scale, 2), 0.25, 2);
14554
+ }
14555
+ function applyCanvasBoundaries({ transform, rects, boundary, }) {
14556
+ const { origin: [originX, originY], scale, translate, } = transform;
14557
+ const { surfaceRect: { offsetWidth: surfaceWidth, offsetHeight: surfaceHeight }, canvasRect: { offsetWidth: canvasWidth, offsetHeight: canvasHeight }, } = rects;
14558
+ const x = xSelector(originX, [
14559
+ boundary,
14560
+ canvasWidth / 2,
14561
+ canvasWidth - boundary,
14562
+ ]);
14563
+ const x1 = x +
14564
+ xSelector(originX, [surfaceWidth * scale, (surfaceWidth * scale) / 2, 0]);
14565
+ const x2 = canvasWidth -
14566
+ (x -
14567
+ xSelector(originX, [
14568
+ 0,
14569
+ (surfaceWidth * scale) / 2,
14570
+ surfaceWidth * scale,
14571
+ ]));
14572
+ const y = ySelector(originY, [
14573
+ boundary,
14574
+ canvasHeight / 2,
14575
+ canvasHeight - boundary,
14576
+ ]);
14577
+ const y1 = y +
14578
+ ySelector(originY, [surfaceHeight * scale, (surfaceHeight * scale) / 2, 0]);
14579
+ const y2 = canvasHeight -
14580
+ (y -
14581
+ ySelector(originY, [
14582
+ 0,
14583
+ (surfaceHeight * scale) / 2,
14584
+ surfaceHeight * scale,
14585
+ ]));
14586
+ return mergeRight(transform, {
14587
+ translate: [
14588
+ clamp(translate[0], boundary - x1, x2 - boundary),
14589
+ clamp(translate[1], boundary - y1, y2 - boundary),
14590
+ ],
14591
+ });
14592
+ }
14593
+ function originCoordinatePoint({ origin: [originX, originY] }, { surfaceRect, canvasRect }) {
14594
+ const [left, top] = coordinate(canvasRect, [
14595
+ surfaceRect.left,
14596
+ surfaceRect.top,
14597
+ ]);
14598
+ const x = xSelector(originX, [
14599
+ left,
14600
+ left + surfaceRect.width / 2,
14601
+ left + surfaceRect.width,
14602
+ ]);
14603
+ const y = ySelector(originY, [
14604
+ top,
14605
+ top + surfaceRect.height / 2,
14606
+ top + surfaceRect.height,
14607
+ ]);
14608
+ return [x, y];
14609
+ }
14610
+ function xSelector(x, [l, c, r]) {
14611
+ return x === 'left' ? l : x === 'center' ? c : r;
14612
+ }
14613
+ function ySelector(y, [t, c, b]) {
14614
+ return y === 'top' ? t : y === 'center' ? c : b;
14615
+ }
14616
+ function coordinate(canvas, [left, top]) {
14617
+ return [left - canvas.left, top - canvas.top];
14618
+ }
14619
+
14620
+ class GraphLinkComponent {
14621
+ get arrowTransform() {
14622
+ const [[x1, y1], [x2, y2]] = this.points;
14623
+ const deg = this.direction === 'v' && y1 < y2
14624
+ ? -90
14625
+ : this.direction === 'v'
14626
+ ? 90
14627
+ : this.direction === 'h' && x1 < x2
14628
+ ? 180
14629
+ : 0;
14630
+ return `translate(${x2}px, ${y2}px) rotate(${deg}deg)`;
14631
+ }
14632
+ constructor() {
14633
+ this.direction = 'v';
14634
+ this.radius = 12;
14635
+ this.arrow = true;
14636
+ this.path = ([[x1, y1], [x2, y2]]) => {
14637
+ const mX = x1 + (x2 - x1) / 2;
14638
+ const mY = y1 + (y2 - y1) / 2;
14639
+ const r = Math.min(Math.abs(x1 - x2) / 2, Math.abs(y1 - y2) / 2, this.radius);
14640
+ return this.direction === 'h'
14641
+ ? `M ${x1} ${y1}
14642
+ L ${addOrMinus(x1 > x2, mX, r)} ${y1}
14643
+ Q ${mX} ${y1} ${mX} ${addOrMinus(y1 < y2, y1, r)}
14644
+ L ${mX} ${addOrMinus(y1 > y2, y2, r)}
14645
+ Q ${mX} ${y2} ${addOrMinus(x1 < x2, mX, r)} ${y2}
14646
+ L ${this.arrow ? addOrMinus(x1 > x2, x2, 8) : x2} ${y2}`
14647
+ : `M ${x1} ${y1}
14648
+ L ${x1} ${addOrMinus(y1 > y2, mY, r)}
14649
+ Q ${x1} ${mY} ${addOrMinus(x1 < x2, x1, r)} ${mY}
14650
+ L ${addOrMinus(x1 > x2, x2, r)} ${mY}
14651
+ Q ${x2} ${mY} ${x2} ${addOrMinus(y1 < y2, mY, r)}
14652
+ L ${x2} ${this.arrow ? addOrMinus(y1 > y2, y2, 8) : y2}`;
14653
+ };
14654
+ this.parallelDirection = (a, b, al, bl) => a + al < b ? [a + al, b] : [a, b + bl];
14655
+ this.verticalDirection = (a, b, al, bl) => [
14656
+ a + al / 2,
14657
+ b + bl / 2,
14658
+ ];
14659
+ this.onDestroy$$ = new Subject();
14660
+ this.store = inject(GraphStoreService);
14661
+ this.cdr = inject(ChangeDetectorRef);
14662
+ this.store
14663
+ .nodeChanged()
14664
+ .pipe(takeUntil(this.onDestroy$$))
14665
+ .subscribe(() => {
14666
+ const currentPoints = this.points;
14667
+ const nextPoints = this.findPoints();
14668
+ if (isEqual(currentPoints, nextPoints)) {
14669
+ return;
14670
+ }
14671
+ this.points = nextPoints;
14672
+ this.cdr.markForCheck();
14673
+ });
14674
+ }
14675
+ ngOnDestroy() {
14676
+ this.onDestroy$$.next();
14677
+ }
14678
+ findPoints() {
14679
+ const r1 = this.store.getNode(this.from)?.getRect();
14680
+ const r2 = this.store.getNode(this.to)?.getRect();
14681
+ if (!r1 || !r2) {
14682
+ return;
14683
+ }
14684
+ const s = this.store.getSurfaceNode().getRect();
14685
+ const [x1, x2] = (this.direction === 'h' ? this.parallelDirection : this.verticalDirection)(r1.left - s.left, r2.left - s.left, r1.width, r2.width);
14686
+ const [y1, y2] = (this.direction === 'h' ? this.verticalDirection : this.parallelDirection)(r1.top - s.top, r2.top - s.top, r1.height, r2.height);
14687
+ return this.unScale([
14688
+ [x1, y1],
14689
+ [x2, y2],
14690
+ ]);
14691
+ }
14692
+ unScale(points) {
14693
+ return points.map(p => p.map(n => n / this.store.getScale()));
14694
+ }
14695
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14696
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: GraphLinkComponent, isStandalone: true, selector: "g[aclGraphLink]", inputs: { from: "from", to: "to", direction: "direction", radius: "radius", arrow: "arrow", color: "color", path: "path", parallelDirection: "parallelDirection", verticalDirection: "verticalDirection" }, providers: [GraphStoreService], ngImport: i0, template: "@if (points) {\n <svg:path\n class=\"acl-graph-link__line\"\n [attr.d]=\"path(points)\"\n [style.stroke]=\"color\"\n />\n @if (arrow) {\n <svg:circle\n class=\"acl-graph-link__dot\"\n r=\"4\"\n [attr.cx]=\"points[0][0]\"\n [attr.cy]=\"points[0][1]\"\n [style.fill]=\"color\"\n ></svg:circle>\n <svg:polygon\n class=\"acl-graph-link__arrow\"\n points=\"0,0 8,-4 8,4\"\n [style.transform]=\"arrowTransform\"\n [style.fill]=\"color\"\n ></svg:polygon>\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
14697
+ }
14698
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphLinkComponent, decorators: [{
14699
+ type: Component,
14700
+ args: [{ selector: 'g[aclGraphLink]', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], providers: [GraphStoreService], template: "@if (points) {\n <svg:path\n class=\"acl-graph-link__line\"\n [attr.d]=\"path(points)\"\n [style.stroke]=\"color\"\n />\n @if (arrow) {\n <svg:circle\n class=\"acl-graph-link__dot\"\n r=\"4\"\n [attr.cx]=\"points[0][0]\"\n [attr.cy]=\"points[0][1]\"\n [style.fill]=\"color\"\n ></svg:circle>\n <svg:polygon\n class=\"acl-graph-link__arrow\"\n points=\"0,0 8,-4 8,4\"\n [style.transform]=\"arrowTransform\"\n [style.fill]=\"color\"\n ></svg:polygon>\n }\n}\n" }]
14701
+ }], ctorParameters: () => [], propDecorators: { from: [{
14702
+ type: Input
14703
+ }], to: [{
14704
+ type: Input
14705
+ }], direction: [{
14706
+ type: Input
14707
+ }], radius: [{
14708
+ type: Input
14709
+ }], arrow: [{
14710
+ type: Input
14711
+ }], color: [{
14712
+ type: Input
14713
+ }], path: [{
14714
+ type: Input
14715
+ }], parallelDirection: [{
14716
+ type: Input
14717
+ }], verticalDirection: [{
14718
+ type: Input
14719
+ }] } });
14720
+ function addOrMinus(condition, v1, v2) {
14721
+ return (condition ? add : subtract)(v1, v2);
14722
+ }
14723
+
14724
+ class GraphLinksComponent {
14725
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphLinksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14726
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: GraphLinksComponent, isStandalone: true, selector: "acl-graph-links", ngImport: i0, template: "<svg class=\"acl-graph-canvas__links\">\n <ng-content select=\"[aclGraphLink]\"></ng-content>\n</svg>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
14727
+ }
14728
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphLinksComponent, decorators: [{
14729
+ type: Component,
14730
+ args: [{ selector: 'acl-graph-links', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], template: "<svg class=\"acl-graph-canvas__links\">\n <ng-content select=\"[aclGraphLink]\"></ng-content>\n</svg>\n" }]
14731
+ }] });
14732
+
14733
+ class GraphNodeDirective {
14734
+ constructor() {
14735
+ this.hostRect = () => getRect(this.el.nativeElement);
14736
+ this.el = inject(ElementRef);
14737
+ this.store = inject(GraphStoreService);
14738
+ }
14739
+ ngOnInit() {
14740
+ this.store.registerNode(this.id, { getRect: this.hostRect, el: this.el });
14741
+ }
14742
+ ngOnDestroy() {
14743
+ this.store.unregisterNode(this.id);
14744
+ }
14745
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphNodeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
14746
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: GraphNodeDirective, isStandalone: true, selector: "[aclGraphNode]", inputs: { id: ["aclGraphNode", "id"] }, providers: [GraphStoreService], ngImport: i0 }); }
14747
+ }
14748
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphNodeDirective, decorators: [{
14749
+ type: Directive,
14750
+ args: [{
14751
+ selector: '[aclGraphNode]',
14752
+ standalone: true,
14753
+ providers: [GraphStoreService],
14754
+ }]
14755
+ }], propDecorators: { id: [{
14756
+ type: Input,
14757
+ args: ['aclGraphNode']
14758
+ }] } });
14759
+
14760
+ const GRAPH_COMPONENTS = [
14761
+ GraphActionsComponent,
14762
+ GraphCanvasComponent,
14763
+ GraphLinksComponent,
14764
+ GraphLinkComponent,
14765
+ GraphNodeDirective,
14766
+ ];
14767
+
13826
14768
  /**
13827
14769
  * Generated bundle index. Do not edit.
13828
14770
  */
13829
14771
 
13830
- export { ACTION, AIT_API_GROUP, ALL, ALL_VALUE, ANNOTATIONS, API_GATEWAY, ARGOCD_GROUP, ARRAY_FORM_TABLE_MODULE, ARRAY_TABLE_FORM_ERROR_BG, ASSIGN_ALL, ASYNC_DATA_MODULE, AccessMode, AccessModes, AclTableVirtualComponent, AclTableVirtualHeaderDefDirective, AclTableVirtualModule, AclTableVirtualPlaceholderDefDirective, AclTableVirtualRowDefDirective, AlaudaDeployStatus, AlaudaRunningStatus, ArrayFormTableComponent, ArrayFormTableFooterDirective, ArrayFormTableHeaderDirective, ArrayFormTableRowControlDirective, ArrayFormTableRowDirective, ArrayFormTableRowErrorDirective, ArrayFormTableRowSeparatorDirective, ArrayFormTableZeroStateDirective, AsyncDataLoader, AsyncFunctionValidatorDirective, AuiCodeEditorHelperDirective, BASE_TIMEZONE, BUILT_IN_YAML_EXAMPLES, BaseFormContainer, BaseNestedFormControl, BaseNestedFormControlPure, BaseStringMapFormComponent, Bracket, CHART_PICKER_TIME_RANGES, CLUSTER, COMMON_RESOURCE_DEFINITIONS, CORE_UNITS, CORE_UNIT_REG, CREATE, CREATED_AT, CREATION_TIMESTAMP, CREATOR, CRON_ENABLE_7_FOR_SUNDAY, CRON_FORMAT_ERROR, CRON_MIN_INTERVAL_ERROR, CRYPTO_HEADER_KEY, CRYPTO_KEY, CRYPTO_RANDOM_HEADER_KEY, CRYPTO_TYPE, CUSTOM, CUSTOMIZED, CUSTOM_RANGE, CalcPipe, CardSectionComponent, ClickOutsideDirective, CloudHelmRequestStateEnum, CodeDisplayDialogComponent, CoerceNumberDirective, ConfirmDeleteComponent, ConfirmDeleteContentDirective, ConfirmDeleteLabelDirective, ConfirmDeleteTipDirective, ControlValueTraceDirective, CronHumanReadablePipe, CronWeekDays, CrontabNextPipe, CurrentTimeComponent, DATE_FORMAT, DATE_TIME_FORMAT, DEFAULT_CODE_EDITOR_OPTIONS, DEFAULT_CONTAINER_ANNOTATION, DEFAULT_OPERATOR, DEFAULT_OPTIONS, DEFAULT_REASON, DELIMITER, DESCRIPTION, DISPLAY_NAME, DNS1123SubdomainValidator, DOMAIN_PATTERN, DOMAIN_PATTERN_BASE, DOT, DOWNGRADE_WATCH_ENABLED, DOWNGRADE_WATCH_POLLING, DUPLICATE_ERROR_KEY, DUPLICATION_JUSTIFY_STRATEGY, DataSource, DateRangePickerComponent, DeclareDirective, DefaultStatusColorMapper, DefaultStatusIconMapper, DeleteType, DeletingTagComponent, DisabledContainerComponent, DisabledDirective, DragHandleDirective, DurationPipe, E2eAttributeBindingDirective, EFFECT_DIRECTIVE_MODULE, EMAIL_PATTERN, EMPTY, ERRORS_MAPPER_MODULE, ESCAPE_DEACTIVATE_CHECK, ErrorStateComponent, ErrorsMapperComponent, ErrorsMapperDirective, FALSE, FIELDSET_GROUP_COMPONENTS, FeatureGateDirective, FieldSetColumnComponent, FieldSetColumnGroupComponent, FieldSetGroupComponent, FieldSetItemActionDirective, FieldSetItemComponent, FileResultType, FoldableBlockComponent, FoldableItemInTableComponent, FormItemMarginEffectDirective, FunctionValidatorDirective, GLOBAL_CLUSTER, GenericStatusColor, GenericStatusIcon, GuardStatus, HTTP_ADDRESS_PATTERN, HTTP_DUAL_IP_OR_DOMAIN_PATTERN, HTTP_IP_OR_DOMAIN_PATTERN, HYPHEN, HelmRequestPhaseEnum, HelpDocDirective, HelpDocUrlPipe, HelpDocumentComponent, HelpDocumentService, IMAGE_TAG_PATTERN, INT_PATTERN, INT_ZERO_PATTERN, IPV4_IPV6_ADDRESS_HOSTNAME_PORT_PATTERN, IPV6_ADDRESS_HOSTNAME_PATTERN, IPV6_ADDRESS_HOSTNAME_PORT_PATTERN, IPV6_PATTERN_BASE, IP_ADDRESS_HOSTNAME_PATTERN, IP_ADDRESS_HOSTNAME_PATTERN_EXTEND, IP_ADDRESS_HOSTNAME_PORT_PATTERN, IP_ADDRESS_PATTERN, IP_ADDRESS_PORT_PATTERN, IP_ADDRESS_SUBNET_PATTERN, IP_PATTERN, IP_PATTERN_BASE, IP_V4_OR_V6_PATTERN, IP_V6_ADDRESS_PATTERN, IP_V6_PATTERN, InterceptDeactivateDirective, InterceptDeactivateGuard, InterceptDeactivateService, JobStatusColorMapper, JobStatusEnum, JobStatusIconMapper, K8SResourceList, K8SResourceListFooterComponent, K8SResourcePagedList, K8S_APP_API_GROUP, K8S_CORE_API_GROUP, K8S_RESOURCE_LABEL_KEY_NAME_PATTERN, K8S_RESOURCE_LABEL_KEY_PREFIX_PATTERN, K8S_RESOURCE_LABEL_VALUE_PATTERN, K8S_RESOURCE_LIST_MODULE, K8S_RESOURCE_NAME_START_WITH_CHARS_ONLY, K8S_RESOURCE_TRANSLATE_KEY, K8sListFooterLoadingErrorDirective, K8sListFooterNoDataDirective, K8sResourceAction, K8sResourceMarkComponent, K8sResourceTranslateKeyPipe, K8sSharedUtilService, K8sYamlDisplayDialogComponent, KNOWN_COLUMNS, KeyValueFormTableComponent, KeyValueTableComponent, LABELS, LINK, LOCAL_STORAGE_KEY_THEME_MODE, ListDisplayComponent, ListenResizeDirective, LoadAction, LocaleTransformPipe, MACHINE_API_GROUP, METADATA, MUTABLE_BASIC_OPTIONS, MUTABLE_MODULE, MarkedPipe, MaxLengthValidatorDirective, MaxValidatorDirective, MinLengthValidatorDirective, MinValidatorDirective, MinimumFormatPipe, MosaicComponent, MosaicLeftDirective, MosaicRightDirective, MultiSearchActionInputComponent, MultiSearchAdvanced, MultiSearchBasic, MultiSearchComponent, MutableDirective, NAME, NAMESPACE, NOTIFICATION_SERVER_NAME, NOTIFY_DURATION_HEADER, NOTIFY_ON_ERROR_HEADER, NOTIFY_ON_ERROR_HEADERS, NOT_NOTIFY_ON_ERROR_HEADERS, NUMBER_PATTERN, NamespaceBadgeComponent, NotBeValidatorDirective, OAM_GROUP, OnResizeChangeService, OneOfValidatorDirective, OverviewBannerComponent, PACKAGE_RUNTIME_VALUE, PAGE_GUARD_MODULE, PLATFORM_OPS_MODE, PORT_PATTERN, POSITIVE_INT_PATTERN, POSITIVE_NUMBER_PATTERN, PREFIX_LABEL_CLASS, PROJECT, PUBLIC_NAMESPACE, PageGuardComponent, PageGuardContentDirective, PageGuardDescriptionDirective, PageGuardImageDirective, PageGuardOperationDirective, PageStateComponent, ParseJsonTranslatePipe, PasswordInputComponent, PluginClusterSelectorComponent, PodStatusColorMapper, PodStatusComponent, PodStatusEnum, PodStatusIconMapper, PreventClipboardDirective, PreventDirective, PreventHandler, ProductKey, REASON_MAP, RESOURCE_MAC_TYPES, RESOURCE_REQUIREMENT_KEYS, ReadonlyFieldDirective, Reason, RelativeTimeComponent, RequestPool, ResizeDirective, ResourceLabelComponent, ResourceMultiSelectComponent, ResourceYamlDisplayComponent, ResourceYamlEditorComponent, SERVICE_PORT_BASE_PROTOCOLS, SERVICE_PORT_PROTOCOLS, SERVICE_SESSION_AFFINITIES, SERVICE_TYPES, SLASH, SPACE, SPEC, STATUS, STRATEGY_JUDGE_MAPPER, STRONG_PASSWORD_SPECIAL_CHARS, ScrollBorderObserverDirective, ScrollToFirstInvalidDirective, ScrollToFirstInvalidMarkerDirective, SearchItemComponent, SearchItemLabelDirective, SearchPanelComponent, SecretType, SelectPrefixLabelDirective, SpanComponent, StatusIconComponent, StopDirective, StringArrayFormTableComponent, StrongPasswordDirective, StrongPasswordTooltipComponent, TEMPLATE_OPTIONS, TIMEZONES, TIME_FORMAT, TOKEN_HELP_DOC_DATA, TRUE, TableCellDefDirective, TableComponent, TableCustomColumnsComponent, TableHeaderCellDefDirective, TableUtilService, TagsLabelComponent, TaintEffect, TerminatingTagComponent, TestTagComponent, TextEllipsisComponent, TextTooltipDirective, TextWithUrlComponent, ThemeTransformPipe, TimezoneDisplayPipe, TolerationOperator, TrimDirective, UNDERSCORE, UNITS, UNIT_REG, UPDATE, UPDATED_AT, UPDATED__AT, UpdateDescriptionDialogComponent, UpdateDisplayNameDialogComponent, UpdateKeyValueDialogComponent, UploadFileComponent, UserSecurityPolicyRule, UserState, VOLUME_SNAPSHOT_GROUP, ValidateRowDuplicateService, ValidatorsDirective, VolumeMode, VolumeModes, VolumeTypeEnum, WEEK_DAYS, WILDCARD, WORKSPACE_PARAMS, WorkloadKind, WorkloadStatusColorMapper, WorkloadStatusEnum, WorkloadStatusIconComponent, WorkloadStatusIconMapper, YamlUtilService, ZeroStateComponent, addUnitCoreM, addUnitGi, addUnitMi, appendImageHeader, atobWithFallback, buildImageAddress, buildUrl, checkValueExit, clearWindowsXtermTools, compareMinorVersion, compareVersion, copyValue, createNestedFormControl, cronValidator, cronValidatorBasic, dataTransfer, dateValueOf, defaultFilter, defaultSorter, emptyObjectRemoveRuleFactory, errorColor, extractListParamsFromRoute, extractPagedListParams, extractWorkspace, extractWorkspaceFromRoute, filterEmptyValue, filterTrees, findPath, firstPath, formatCPU, formatMemory, formatNumber, genControlDepsMap, getAppropriateMemory, getBaseHref, getCpu, getCronWeekDayNumbers, getDisabledState, getDisabledState$, getHelpDocUrl, getHostname, getJobStatus, getK8sResourceAnnotationErrorMapper, getK8sResourceAnnotationErrorMapper$, getK8sResourceLabelErrorMapper, getK8sResourceLabelErrorMapper$, getMemory, getPickerTimeRanges, getPodAggregatedStatus, getPodIPs, getPodStatus, getPrivateIP, getPrivateIPv4, getPrivateIPv6, getRelativePath, getResourceLimitAsyncValidatorFn, getResourceLimitValidatorFn, getResourceValue, getResourceViewModel, getToPath, getValidVersion, getWorkloadStatus, initGreaterValidator, isAbsoluteUrl, isB, isCronFieldCountCorrect, isCronWeekDayCorrect, isCronWeekDaysContinuous, isErrorMessage, isJsonObjectString, isK8sResource, isL, isR, isSelectAll, isT, isValidRID, isValidWorkspace, k8sResourceAnnotationKeyValidator, k8sResourceAnnotationValidator, k8sResourceLabelKeyValidator, k8sResourceLabelValidator, k8sResourceLabelValueValidator, loadEnv, logsReadOptions, mapTrees, matchExpressionsToString, matchLabelsToString, maxParallelByHttpVersion, noShowRowError, normalizeParams, numToStr, parseDaemonSetStatus, parseDeploymentStatus, parseImageAddress, parseRID, parseStatefulSetStatus, parseToWorkloadStatus, parseUrlInText, parseValidImageName, parseValueAndUnit, parseVersion, parseWorkspace, prefixFilterRuleFactory, primaryColor, queryListParams, randomPassword, reduceTrees, removeDirtyFieldsBeforeUpdate, resourceUnits, rowBackgroundColorFn, safeAssign, scrollIntoView, setNode, setupErrorMapper, shortNum, sortByCreationTimestamp, stringToMatchLabels, stringifyRID, stringifyWorkspace, successColor, tableSort, tableSortAdvance, tagRenderDefault, toLowerFirstLetter, toNumber, toPercent, toPx, toUnitGi, toUnitI, toUnitMi, toUnitNum, toUnitNumM, trackByName, trackByUid, transferResource, versionRegex, warnColor, withLoadState, workspaceToPath, yamlFilterField };
14772
+ export { ACTION, AIT_API_GROUP, ALL, ALL_VALUE, ANNOTATIONS, API_GATEWAY, ARGOCD_GROUP, ARRAY_FORM_TABLE_MODULE, ARRAY_TABLE_FORM_ERROR_BG, ASSIGN_ALL, ASYNC_DATA_MODULE, AccessMode, AccessModes, AclTableVirtualComponent, AclTableVirtualHeaderDefDirective, AclTableVirtualPlaceholderDefDirective, AclTableVirtualRowDefDirective, AlaudaDeployStatus, AlaudaRunningStatus, ArrayFormTableComponent, ArrayFormTableFooterDirective, ArrayFormTableHeaderDirective, ArrayFormTableRowControlDirective, ArrayFormTableRowDirective, ArrayFormTableRowErrorDirective, ArrayFormTableRowSeparatorDirective, ArrayFormTableZeroStateDirective, AsyncDataLoader, AsyncFunctionValidatorDirective, AuiCodeEditorHelperDirective, BASE_TIMEZONE, BUILT_IN_YAML_EXAMPLES, BaseFormContainer, BaseNestedFormControl, BaseNestedFormControlPure, BaseStringMapFormComponent, Bracket, CHART_PICKER_TIME_RANGES, CLUSTER, COMMON_RESOURCE_DEFINITIONS, CORE_UNITS, CORE_UNIT_REG, CREATE, CREATED_AT, CREATION_TIMESTAMP, CREATOR, CRON_ENABLE_7_FOR_SUNDAY, CRON_FORMAT_ERROR, CRON_MIN_INTERVAL_ERROR, CRYPTO_HEADER_KEY, CRYPTO_KEY, CRYPTO_RANDOM_HEADER_KEY, CRYPTO_TYPE, CUSTOM, CUSTOMIZED, CUSTOM_RANGE, CalcPipe, CardSectionComponent, ClickOutsideDirective, CloudHelmRequestStateEnum, CodeDisplayDialogComponent, CoerceNumberDirective, ConfirmDeleteComponent, ConfirmDeleteContentDirective, ConfirmDeleteLabelDirective, ConfirmDeleteTipDirective, ControlValueTraceDirective, CronHumanReadablePipe, CronWeekDays, CrontabNextPipe, CurrentTimeComponent, DATE_FORMAT, DATE_TIME_FORMAT, DEFAULT_CODE_EDITOR_OPTIONS, DEFAULT_CONTAINER_ANNOTATION, DEFAULT_OPERATOR, DEFAULT_OPTIONS, DEFAULT_REASON, DEFAULT_ZH_ERROR, DELIMITER, DESCRIPTION, DISPLAY_NAME, DNS1123SubdomainValidator, DOMAIN_PATTERN, DOMAIN_PATTERN_BASE, DOT, DOWNGRADE_WATCH_ENABLED, DOWNGRADE_WATCH_POLLING, DUPLICATE_ERROR_KEY, DUPLICATION_JUSTIFY_STRATEGY, DataSource, DateRangePickerComponent, DeclareDirective, DefaultStatusColorMapper, DefaultStatusIconMapper, DeleteType, DeletingTagComponent, DisabledContainerComponent, DisabledDirective, DragHandleDirective, DurationPipe, E2eAttributeBindingDirective, EFFECT_DIRECTIVE_MODULE, EMAIL_PATTERN, EMPTY, ERRORS_MAPPER_MODULE, ESCAPE_DEACTIVATE_CHECK, ErrorStateComponent, ErrorsMapperComponent, ErrorsMapperDirective, FALSE, FIELDSET_GROUP_COMPONENTS, FeatureGateDirective, FeedbackNotificationComponent, FieldSetColumnComponent, FieldSetColumnGroupComponent, FieldSetGroupComponent, FieldSetItemActionDirective, FieldSetItemComponent, FileResultType, FoldableBlockComponent, FoldableItemInTableComponent, FormItemMarginEffectDirective, FunctionValidatorDirective, GLOBAL_CLUSTER, GRAPH_COMPONENTS, GenericStatusColor, GenericStatusIcon, GraphActionsComponent, GraphCanvasComponent, GraphLinkComponent, GraphLinksComponent, GraphNodeDirective, GuardStatus, HTTP_ADDRESS_PATTERN, HTTP_DUAL_IP_OR_DOMAIN_PATTERN, HTTP_IP_OR_DOMAIN_PATTERN, HYPHEN, HelmRequestPhaseEnum, HelpDocDirective, HelpDocUrlPipe, HelpDocumentComponent, HelpDocumentService, IMAGE_TAG_PATTERN, INT_PATTERN, INT_ZERO_PATTERN, IPV4_IPV6_ADDRESS_HOSTNAME_PORT_PATTERN, IPV6_ADDRESS_HOSTNAME_PATTERN, IPV6_ADDRESS_HOSTNAME_PORT_PATTERN, IPV6_PATTERN_BASE, IP_ADDRESS_HOSTNAME_PATTERN, IP_ADDRESS_HOSTNAME_PATTERN_EXTEND, IP_ADDRESS_HOSTNAME_PORT_PATTERN, IP_ADDRESS_PATTERN, IP_ADDRESS_PORT_PATTERN, IP_ADDRESS_SUBNET_PATTERN, IP_PATTERN, IP_PATTERN_BASE, IP_V4_OR_V6_PATTERN, IP_V6_ADDRESS_PATTERN, IP_V6_PATTERN, InterceptDeactivateDirective, InterceptDeactivateGuard, InterceptDeactivateService, JobStatusColorMapper, JobStatusEnum, JobStatusIconMapper, K8SResourceList, K8SResourceListFooterComponent, K8SResourcePagedList, K8S_APP_API_GROUP, K8S_CORE_API_GROUP, K8S_RESOURCE_LABEL_KEY_NAME_PATTERN, K8S_RESOURCE_LABEL_KEY_PREFIX_PATTERN, K8S_RESOURCE_LABEL_VALUE_PATTERN, K8S_RESOURCE_LIST_MODULE, K8S_RESOURCE_NAME_START_WITH_CHARS_ONLY, K8S_RESOURCE_TRANSLATE_KEY, K8sListFooterLoadingErrorDirective, K8sListFooterNoDataDirective, K8sResourceAction, K8sResourceMarkComponent, K8sResourceTranslateKeyPipe, K8sSharedUtilService, K8sYamlDisplayDialogComponent, KNOWN_COLUMNS, KeyValueFormTableComponent, KeyValueTableComponent, LABELS, LINK, LOCAL_STORAGE_KEY_THEME_MODE, ListDisplayComponent, ListenResizeDirective, LoadAction, LocaleTransformPipe, MACHINE_API_GROUP, METADATA, MUTABLE_BASIC_OPTIONS, MUTABLE_MODULE, MarkedPipe, MaxLengthValidatorDirective, MaxValidatorDirective, MinLengthValidatorDirective, MinValidatorDirective, MinimumFormatPipe, MosaicComponent, MosaicLeftDirective, MosaicRightDirective, MultiSearchActionInputComponent, MultiSearchAdvanced, MultiSearchBasic, MultiSearchComponent, MutableDirective, NAME, NAMESPACE, NOTIFICATION_SERVER_NAME, NOTIFY_DURATION_HEADER, NOTIFY_ON_ERROR_HEADER, NOTIFY_ON_ERROR_HEADERS, NOT_NOTIFY_ON_ERROR_HEADERS, NUMBER_PATTERN, NamespaceBadgeComponent, NotBeValidatorDirective, NotificationUtilService, OAM_GROUP, OnResizeChangeService, OneOfValidatorDirective, OverviewBannerComponent, PACKAGE_RUNTIME_VALUE, PAGE_GUARD_MODULE, PLATFORM_OPS_MODE, PORT_PATTERN, POSITIVE_INT_PATTERN, POSITIVE_NUMBER_PATTERN, PREFIX_LABEL_CLASS, PROJECT, PUBLIC_NAMESPACE, PageGuardComponent, PageGuardContentDirective, PageGuardDescriptionDirective, PageGuardImageDirective, PageGuardOperationDirective, PageStateComponent, ParseJsonTranslatePipe, PasswordInputComponent, PluginClusterSelectorComponent, PodStatusColorMapper, PodStatusComponent, PodStatusEnum, PodStatusIconMapper, PreventClipboardDirective, PreventDirective, PreventHandler, ProductKey, REASON_MAP, RESOURCE_MAC_TYPES, RESOURCE_REQUIREMENT_KEYS, ReadonlyFieldDirective, Reason, RelativeTimeComponent, RequestPool, ResizeDirective, ResourceErrorInterceptor, ResourceLabelComponent, ResourceMultiSelectComponent, ResourceYamlDisplayComponent, ResourceYamlEditorComponent, SERVICE_PORT_BASE_PROTOCOLS, SERVICE_PORT_PROTOCOLS, SERVICE_SESSION_AFFINITIES, SERVICE_TYPES, SLASH, SPACE, SPEC, STATUS, STRATEGY_JUDGE_MAPPER, STRONG_PASSWORD_SPECIAL_CHARS, ScrollBorderObserverDirective, ScrollToFirstInvalidDirective, ScrollToFirstInvalidMarkerDirective, SearchItemComponent, SearchItemLabelDirective, SearchPanelComponent, SecretType, SelectPrefixLabelDirective, SpanComponent, StatusIconComponent, StopDirective, StringArrayFormTableComponent, StrongPasswordDirective, StrongPasswordTooltipComponent, TABLE_VIRTUAL_MODULE, TEMPLATE_OPTIONS, TIMEZONES, TIME_FORMAT, TOKEN_HELP_DOC_DATA, TRUE, TableCellDefDirective, TableComponent, TableCustomColumnsComponent, TableHeaderCellDefDirective, TableUtilService, TagsLabelComponent, TaintEffect, TerminatingTagComponent, TestTagComponent, TextEllipsisComponent, TextTooltipDirective, TextWithUrlComponent, ThemeTransformPipe, TimezoneDisplayPipe, TolerationOperator, TrimDirective, UNDERSCORE, UNITS, UNIT_REG, UPDATE, UPDATED_AT, UPDATED__AT, UpdateDescriptionDialogComponent, UpdateDisplayNameDialogComponent, UpdateKeyValueDialogComponent, UploadFileComponent, UserSecurityPolicyRule, UserState, VOLUME_SNAPSHOT_GROUP, ValidateRowDuplicateService, ValidatorsDirective, VolumeMode, VolumeModes, VolumeTypeEnum, WEEK_DAYS, WILDCARD, WORKSPACE_PARAMS, WRITABLE_METHODS, WorkloadKind, WorkloadStatusColorMapper, WorkloadStatusEnum, WorkloadStatusIconComponent, WorkloadStatusIconMapper, YamlUtilService, ZH_ERRORS, ZeroStateComponent, addUnitCoreM, addUnitGi, addUnitMi, appendImageHeader, atobWithFallback, buildImageAddress, buildUrl, checkValueExit, clearWindowsXtermTools, compareMinorVersion, compareVersion, copyValue, createNestedFormControl, cronValidator, cronValidatorBasic, dataTransfer, dateValueOf, defaultFilter, defaultSorter, emptyObjectRemoveRuleFactory, errorColor, extractListParamsFromRoute, extractPagedListParams, extractWorkspace, extractWorkspaceFromRoute, filterEmptyValue, filterTrees, findPath, firstPath, formatCPU, formatMemory, formatNumber, genControlDepsMap, getAppropriateMemory, getBaseHref, getCpu, getCronWeekDayNumbers, getDisabledState, getDisabledState$, getHelpDocUrl, getHostname, getJobStatus, getK8sResourceAnnotationErrorMapper, getK8sResourceAnnotationErrorMapper$, getK8sResourceLabelErrorMapper, getK8sResourceLabelErrorMapper$, getMemory, getPickerTimeRanges, getPodAggregatedStatus, getPodIPs, getPodStatus, getPrivateIP, getPrivateIPv4, getPrivateIPv6, getRelativePath, getResourceLimitAsyncValidatorFn, getResourceLimitValidatorFn, getResourceValue, getResourceViewModel, getToPath, getValidVersion, getWorkloadStatus, initGreaterValidator, isAbsoluteUrl, isB, isCronFieldCountCorrect, isCronWeekDayCorrect, isCronWeekDaysContinuous, isErrorMessage, isJsonObjectString, isK8sErrorStatus, isK8sResource, isL, isR, isSelectAll, isT, isValidRID, isValidWorkspace, k8sResourceAnnotationKeyValidator, k8sResourceAnnotationValidator, k8sResourceLabelKeyValidator, k8sResourceLabelValidator, k8sResourceLabelValueValidator, loadEnv, logsReadOptions, mapTrees, matchExpressionsToString, matchLabelsToString, maxParallelByHttpVersion, noShowRowError, normalizeParams, numToStr, parseDaemonSetStatus, parseDeploymentStatus, parseImageAddress, parseRID, parseStatefulSetStatus, parseToWorkloadStatus, parseUrlInText, parseValidImageName, parseValueAndUnit, parseVersion, parseWorkspace, prefixFilterRuleFactory, primaryColor, queryListParams, randomPassword, reduceTrees, removeDirtyFieldsBeforeUpdate, resourceUnits, rowBackgroundColorFn, safeAssign, scrollIntoView, setNode, setupErrorMapper, shortNum, sortByCreationTimestamp, stringToMatchLabels, stringifyRID, stringifyWorkspace, successColor, tableSort, tableSortAdvance, tagRenderDefault, toLowerFirstLetter, toNumber, toPercent, toPx, toUnitGi, toUnitI, toUnitMi, toUnitNum, toUnitNumM, trackByName, trackByUid, transferResource, versionRegex, warnColor, withLoadState, workspaceToPath, yamlFilterField };
13831
14773
  //# sourceMappingURL=alauda-fe-dynamic-plugin-shared.mjs.map