@alauda-fe/dynamic-plugin-shared 0.0.4-alpha.2 → 0.0.4-alpha.21

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.
Files changed (43) hide show
  1. package/assets/i18n/en.json +17 -0
  2. package/fesm2022/alauda-fe-dynamic-plugin-shared.mjs +2477 -357
  3. package/fesm2022/alauda-fe-dynamic-plugin-shared.mjs.map +1 -1
  4. package/package.json +31 -22
  5. package/styles/mixins.scss +3 -246
  6. package/types/alauda-fe-dynamic-plugin-shared.d.ts +503 -105
  7. package/assets/i18n/en/dynamic-plugin-shared.json +0 -3
  8. package/assets/images/abnormal.svg +0 -1
  9. package/assets/images/dark/403.svg +0 -1
  10. package/assets/images/dark/404.svg +0 -1
  11. package/assets/images/dark/500.svg +0 -1
  12. package/assets/images/dark/disconnected.svg +0 -1
  13. package/assets/images/dark/feature-reach-bg.svg +0 -1
  14. package/assets/images/dark/license-abnormal.svg +0 -1
  15. package/assets/images/dark/network-abnormal.svg +0 -1
  16. package/assets/images/dark/no-data-for-list-or-card.svg +0 -1
  17. package/assets/images/dark/no-data.svg +0 -1
  18. package/assets/images/dark/no-message.svg +0 -1
  19. package/assets/images/dark/no-permission.svg +0 -1
  20. package/assets/images/dark/no_realtime_alarm.svg +0 -1
  21. package/assets/images/dark/not-deployed.svg +0 -1
  22. package/assets/images/dark/not-found.svg +0 -1
  23. package/assets/images/dark/not-supported.svg +0 -1
  24. package/assets/images/dark/system-abnormal.svg +0 -1
  25. package/assets/images/light/403.svg +0 -1
  26. package/assets/images/light/404.svg +0 -1
  27. package/assets/images/light/500.svg +0 -1
  28. package/assets/images/light/disconnected.svg +0 -1
  29. package/assets/images/light/feature-reach-bg.svg +0 -1
  30. package/assets/images/light/license-abnormal.svg +0 -1
  31. package/assets/images/light/network-abnormal.svg +0 -1
  32. package/assets/images/light/no-data-for-list-or-card.svg +0 -1
  33. package/assets/images/light/no-data.svg +0 -1
  34. package/assets/images/light/no-message.svg +0 -1
  35. package/assets/images/light/no-permission.svg +0 -1
  36. package/assets/images/light/no_realtime_alarm.svg +0 -1
  37. package/assets/images/light/not-deployed.svg +0 -1
  38. package/assets/images/light/not-found.svg +0 -1
  39. package/assets/images/light/not-supported.svg +0 -1
  40. package/assets/images/light/system-abnormal.svg +0 -1
  41. package/assets/images/no-data.png +0 -0
  42. package/assets/images/overview-banner.svg +0 -1
  43. package/styles/lib.scss +0 -1
@@ -1,42 +1,36 @@
1
1
  import * as i1 from '@alauda/ui';
2
- import { rgbColor, ThemeService, coerceAttrBoolean, FormItemControlDirective, observeResizeOn, MessageService, NotificationService, DIALOG_DATA, DialogModule, ButtonModule, InputModule, IconModule, FormModule, handlePixel, isTemplateRef, ThemePickerPipe, TooltipModule, TooltipType, ButtonComponent, IconComponent, TagComponent, TooltipDirective, DateNavRange, InputGroupComponent, InputSuffixDirective, InputComponent, DateRangePickerPanelComponent, TagType, TagModule, TooltipComponent, BaseTooltip, TooltipTrigger, 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 } from '@alauda/ui';
3
- import { last, cloneDeep, has, unset, get, isBoolean, sortBy, set, trim, isFunction, range, debounce, uniq, identity, first, isString, isEmpty, isObjectLike, snakeCase } from 'lodash-es';
4
- import * as i2$1 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, isFieldNotAvailable, K8S_UTIL_PIPES_MODULE, K8sApiService, TRANSLATE_MODULE } 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, mapTo } from 'rxjs';
7
- import * as i2$2 from '@angular/router';
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
+ 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, 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';
8
7
  import { ActivatedRoute, Router, RouterLink } from '@angular/router';
9
- 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';
10
9
  import { compare } from 'compare-versions';
11
10
  export { compareVersions as compareVersionToNum, satisfies as satisfiesVersion } from 'compare-versions';
12
11
  import * as i0 from '@angular/core';
13
- import { inject, Directive, NgZone, Injectable, IterableDiffers, isDevMode, Pipe, ChangeDetectorRef, Input, ViewContainerRef, TemplateRef, ɵstringify as _stringify, ElementRef, ComponentFactoryResolver, HostBinding, ChangeDetectionStrategy, Component, EventEmitter, Output, HostListener, Inject, Host, booleanAttribute, forwardRef, ContentChild, Optional, ViewEncapsulation, ViewChild, Injector, 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';
14
13
  import parser from 'cron-parser';
15
14
  import dayjs from 'dayjs';
16
- import timezone from 'dayjs/plugin/timezone';
17
- import utc from 'dayjs/plugin/utc';
18
15
  import { marked } from 'marked';
19
16
  import cronstrue from 'cronstrue';
20
17
  import 'cronstrue/locales/zh_CN';
21
18
  import 'cronstrue/locales/en';
22
19
  import * as i1$1 from '@angular/common';
23
- import { DecimalPipe, NgTemplateOutlet, AsyncPipe, NgClass, NgStyle, CommonModule, Location } from '@angular/common';
24
- import duration from 'dayjs/plugin/duration';
20
+ import { DecimalPipe, NgTemplateOutlet, AsyncPipe, NgClass, NgStyle, CommonModule, Location, KeyValuePipe } from '@angular/common';
25
21
  import { __decorate, __metadata } from 'tslib';
26
22
  import * as i2 from '@angular/forms';
27
23
  import { ControlContainer, NgControl, Validators, NG_VALIDATORS, DefaultValueAccessor, NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule, NG_ASYNC_VALIDATORS, MaxLengthValidator, MinLengthValidator, NgForm, FormGroupDirective, FormBuilder, FormGroup, FormArray } from '@angular/forms';
28
- import { CdkPortalOutlet, TemplatePortal, ComponentPortal, DomPortalOutlet } from '@angular/cdk/portal';
29
- import * as i1$3 from '@angular/cdk/scrolling';
24
+ import * as i1$2 from '@angular/cdk/scrolling';
30
25
  import { CdkScrollable, ScrollingModule, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
31
- import * as i1$2 from '@angular/cdk/overlay';
32
- import { ScrollDispatcher } from '@angular/cdk/overlay';
26
+ import { ScrollDispatcher, Overlay } from '@angular/cdk/overlay';
33
27
  import { decode, encode } from 'ab64';
28
+ import { DomPortalOutlet, ComponentPortal } from '@angular/cdk/portal';
29
+ import { yamlWriteOptions, createActions, MonacoEditorConfig, viewActions, readonlyOptions, CodeEditorComponent, yamlReadMinimapOptions, yamlReadOptions, MonacoLanguageService, yamlWriteMinimapOptions, updateActions } from '@alauda/code-editor';
34
30
  import { DomSanitizer } from '@angular/platform-browser';
35
31
  import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
36
32
  import { BaseResourceFormComponent } from 'ng-resource-form-util';
37
- import { MonacoEditorConfig } from 'ng-monaco-editor';
38
- import * as i2$3 from '@alauda/code-editor';
39
- import { CodeEditorModule } from '@alauda/code-editor';
33
+ import { HttpClient } from '@angular/common/http';
40
34
 
41
35
  /**
42
36
  * @packageDocumentation
@@ -161,6 +155,7 @@ const AccessMode = {
161
155
  RWO: 'ReadWriteOnce',
162
156
  ROX: 'ReadOnlyMany',
163
157
  RWX: 'ReadWriteMany',
158
+ RWOP: 'ReadWriteOncePod',
164
159
  };
165
160
  const AccessModes = [AccessMode.RWO, AccessMode.ROX, AccessMode.RWX];
166
161
  var VolumeTypeEnum;
@@ -2913,8 +2908,6 @@ function fullStrategyCheck(keys, controls, _, mapFn, matchesFn, initData) {
2913
2908
  return toRemoveError;
2914
2909
  }
2915
2910
 
2916
- dayjs.extend(utc);
2917
- dayjs.extend(timezone);
2918
2911
  class CrontabNextPipe {
2919
2912
  constructor() {
2920
2913
  this.time = inject(TimeService);
@@ -3134,7 +3127,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
3134
3127
  }]
3135
3128
  }] });
3136
3129
 
3137
- dayjs.extend(duration);
3138
3130
  class DurationPipe {
3139
3131
  constructor() {
3140
3132
  this.translate = inject(TranslateService);
@@ -3365,8 +3357,8 @@ class ReadonlyFieldDirective {
3365
3357
  this.templateContext = {};
3366
3358
  this.destroy$ = new Subject();
3367
3359
  this.control = inject(NgControl);
3368
- this.cfr = inject(ComponentFactoryResolver);
3369
3360
  this.viewContainerRef = inject(ViewContainerRef);
3361
+ this.injector = inject(Injector);
3370
3362
  // 仅考虑当前control,子control无法知晓父FormItemControl元素 ,包裹了多少个control,以及各自处于什么状态,该情况自行处理
3371
3363
  this.controlDirective = inject(FormItemControlDirective, {
3372
3364
  optional: true,
@@ -3382,9 +3374,10 @@ class ReadonlyFieldDirective {
3382
3374
  $implicit: value,
3383
3375
  ...this.context,
3384
3376
  });
3377
+ this.templateViewRef?.detectChanges();
3385
3378
  }
3386
3379
  else {
3387
- this.spanComponentRef.instance.setData(value);
3380
+ this.spanComponentRef?.instance.setData(value);
3388
3381
  }
3389
3382
  }
3390
3383
  ngOnInit() {
@@ -3392,29 +3385,20 @@ class ReadonlyFieldDirective {
3392
3385
  // formControl will compose multi validators to 1, no matter defined in template nor FormBuilder
3393
3386
  const { validator, asyncValidator } = controlEntity;
3394
3387
  this.isControlRequired = this.controlDirective?.required || false;
3395
- const portalOutlet = new CdkPortalOutlet(this.cfr, this.viewContainerRef);
3396
- const portal = this.template
3397
- ? new TemplatePortal(this.template, this.viewContainerRef, this.templateContext)
3398
- : new ComponentPortal(SpanComponent, this.viewContainerRef);
3399
3388
  const containerAttached$ = this.aclReadonlyField$.pipe(distinctUntilChanged(), map(isUpdate => {
3400
3389
  if (!isUpdate) {
3401
3390
  // 重置
3402
3391
  if (this.controlDirective) {
3403
3392
  this.controlDirective.required = this.isControlRequired;
3404
3393
  }
3405
- if (portalOutlet.hasAttached()) {
3406
- portalOutlet.detach();
3407
- }
3394
+ this.detachReadonlyView();
3408
3395
  this.applyValidators(controlEntity, validator, asyncValidator);
3409
3396
  return false;
3410
3397
  }
3411
3398
  if (this.controlDirective) {
3412
3399
  this.controlDirective.required = false;
3413
3400
  }
3414
- const attachPoint = portalOutlet.attach(portal);
3415
- if (!this.template) {
3416
- this.spanComponentRef = attachPoint;
3417
- }
3401
+ this.attachReadonlyView();
3418
3402
  this.clearValidators(controlEntity);
3419
3403
  return true;
3420
3404
  }));
@@ -3448,6 +3432,30 @@ class ReadonlyFieldDirective {
3448
3432
  ngOnDestroy() {
3449
3433
  this.destroy$.next();
3450
3434
  }
3435
+ attachReadonlyView() {
3436
+ if (this.template) {
3437
+ if (!this.templateViewRef) {
3438
+ this.templateViewRef = this.viewContainerRef.createEmbeddedView(this.template, this.templateContext);
3439
+ }
3440
+ return;
3441
+ }
3442
+ if (!this.spanComponentRef) {
3443
+ this.spanComponentRef = this.viewContainerRef.createComponent(SpanComponent, {
3444
+ injector: this.injector,
3445
+ });
3446
+ }
3447
+ }
3448
+ detachReadonlyView() {
3449
+ if (this.templateViewRef) {
3450
+ this.templateViewRef.destroy();
3451
+ this.templateViewRef = undefined;
3452
+ }
3453
+ if (this.spanComponentRef) {
3454
+ this.spanComponentRef.destroy();
3455
+ this.spanComponentRef = undefined;
3456
+ }
3457
+ this.viewContainerRef.clear();
3458
+ }
3451
3459
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ReadonlyFieldDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
3452
3460
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: ReadonlyFieldDirective, isStandalone: true, selector: "[aclReadonlyField]", inputs: { aclReadonlyField: "aclReadonlyField", hidden: "hidden", template: ["aclReadonlyFieldTemplate", "template"], context: ["aclReadonlyFieldTemplateContext", "context"] }, host: { properties: { "hidden": "this.isHidden" } }, ngImport: i0 }); }
3453
3461
  }
@@ -3822,6 +3830,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
3822
3830
  *
3823
3831
  */
3824
3832
  class ControlValueTraceDirective {
3833
+ constructor() {
3834
+ this.ngControl = inject(NgControl, { host: true });
3835
+ this.aclValueTrackSkipFirst = false;
3836
+ this.destroy$$ = new Subject();
3837
+ }
3825
3838
  ngOnDestroy() {
3826
3839
  this.destroy$$.next();
3827
3840
  this.destroy$$.complete();
@@ -3834,12 +3847,7 @@ class ControlValueTraceDirective {
3834
3847
  .pipe(takeUntil(this.destroy$$))
3835
3848
  .subscribe(([value, changeFn]) => changeFn(value));
3836
3849
  }
3837
- constructor(ngControl) {
3838
- this.ngControl = ngControl;
3839
- this.aclValueTrackSkipFirst = false;
3840
- this.destroy$$ = new Subject();
3841
- }
3842
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ControlValueTraceDirective, deps: [{ token: NgControl, host: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3850
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ControlValueTraceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
3843
3851
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: ControlValueTraceDirective, isStandalone: true, selector: "[aclValueTrack]", inputs: { aclValueTrackSkipFirst: "aclValueTrackSkipFirst", aclValueTrack: "aclValueTrack" }, ngImport: i0 }); }
3844
3852
  }
3845
3853
  __decorate([
@@ -3852,12 +3860,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
3852
3860
  selector: '[aclValueTrack]',
3853
3861
  standalone: true,
3854
3862
  }]
3855
- }], ctorParameters: () => [{ type: i2.NgControl, decorators: [{
3856
- type: Inject,
3857
- args: [NgControl]
3858
- }, {
3859
- type: Host
3860
- }] }], propDecorators: { aclValueTrackSkipFirst: [{
3863
+ }], propDecorators: { aclValueTrackSkipFirst: [{
3861
3864
  type: Input
3862
3865
  }], aclValueTrack: [{
3863
3866
  type: Input
@@ -4402,7 +4405,7 @@ class ConfirmDeleteComponent {
4402
4405
  });
4403
4406
  }
4404
4407
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ConfirmDeleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4405
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: ConfirmDeleteComponent, isStandalone: true, selector: "acl-confirm-delete", inputs: { context: "context", type: "type", title: "title", resourceName: "resourceName", deleteTips: "deleteTips", confirmTips: "confirmTips", extraConfirmTips: "extraConfirmTips", confirmText: "confirmText", deleteResourceApi: "deleteResourceApi", deleteResourceParams: "deleteResourceParams", deleteSuccessMsg: "deleteSuccessMsg", deleteFailMsg: "deleteFailMsg" }, outputs: { close: "close" }, queries: [{ propertyName: "deleteTipTemplate", first: true, predicate: ConfirmDeleteTipDirective, descendants: true, read: TemplateRef }, { propertyName: "contentTemplate", first: true, predicate: ConfirmDeleteContentDirective, descendants: true, read: TemplateRef }, { propertyName: "labelTemplate", first: true, predicate: ConfirmDeleteLabelDirective, descendants: true, read: TemplateRef }], ngImport: i0, template: "<form (ngSubmit)=\"onConfirm()\">\n <aui-dialog-header>\n <aui-icon\n icon=\"exclamation_triangle_s\"\n background=\"triangle\"\n size=\"22\"\n ></aui-icon>\n {{ title }}\n </aui-dialog-header>\n <aui-dialog-content>\n <p class=\"tw-mt-0 tw-mb-12 tw-text-main-text\">\n @if (deleteTips) {\n {{ deleteTips }}\n }\n @if (deleteTipTemplate) {\n <ng-container *ngTemplateOutlet=\"deleteTipTemplate\"></ng-container>\n }\n </p>\n @if (contentTemplate) {\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n }\n <div class=\"tw-mb-4 tw-text-main-text\">\n @if (labelTemplate) {\n <ng-container *ngTemplateOutlet=\"labelTemplate\"></ng-container>\n }\n @if (!labelTemplate) {\n @if (confirmTips) {\n {{ confirmTips }}\n }\n @if (!confirmTips) {\n {{ 'please_enter_extra' | translate }}\n <span class=\"tw-text-red\">{{ resourceName }}</span>\n {{ 'extra_determine_' + type | translate\n }}{{ extraConfirmTips ? ('period_symbol' | translate) : null\n }}{{ extraConfirmTips }}\n }\n }\n </div>\n <input\n auiFormItemControl\n aui-input\n name=\"resource-name\"\n [(ngModel)]=\"inputValue\"\n (ngModelChange)=\"inputValue$$.next($event)\"\n />\n </aui-dialog-content>\n <aui-dialog-footer>\n <button\n aui-button=\"danger\"\n [loading]=\"deleting$$ | async\"\n [disabled]=\"disabled$ | async\"\n >\n {{ confirmText || type | translate }}\n </button>\n <button\n aui-button\n type=\"button\"\n (click)=\"closeDialog()\"\n >\n {{ 'cancel' | translate }}\n </button>\n </aui-dialog-footer>\n</form>\n", dependencies: [{ kind: "ngmodule", type: DialogModule }, { 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: i1.DialogFooterComponent, selector: "aui-dialog-footer" }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i1.InputComponent, selector: "input[aui-input],textarea[aui-input]", inputs: ["size", "disabled"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i1.IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormModule }, { kind: "directive", type: i1.FormItemControlDirective, selector: "[auiFormItemControl]", inputs: ["required"] }, { kind: "directive", type: E2eAttributeBindingDirective, selector: "[click],[routerLink],a[href],[auiTooltip],[auiDropdown]" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4408
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: ConfirmDeleteComponent, isStandalone: true, selector: "acl-confirm-delete", inputs: { context: "context", type: "type", title: "title", resourceName: "resourceName", deleteTips: "deleteTips", confirmTips: "confirmTips", extraConfirmTips: "extraConfirmTips", confirmText: "confirmText", deleteResourceApi: "deleteResourceApi", deleteResourceParams: "deleteResourceParams", deleteSuccessMsg: "deleteSuccessMsg", deleteFailMsg: "deleteFailMsg" }, outputs: { close: "close" }, queries: [{ propertyName: "deleteTipTemplate", first: true, predicate: ConfirmDeleteTipDirective, descendants: true, read: TemplateRef }, { propertyName: "contentTemplate", first: true, predicate: ConfirmDeleteContentDirective, descendants: true, read: TemplateRef }, { propertyName: "labelTemplate", first: true, predicate: ConfirmDeleteLabelDirective, descendants: true, read: TemplateRef }], ngImport: i0, template: "<form (ngSubmit)=\"onConfirm()\">\n <aui-dialog-header>\n <aui-icon\n icon=\"exclamation_triangle_s\"\n background=\"triangle\"\n size=\"22\"\n ></aui-icon>\n {{ title }}\n </aui-dialog-header>\n <aui-dialog-content>\n <p class=\"delete-tip\">\n @if (deleteTips) {\n {{ deleteTips }}\n }\n @if (deleteTipTemplate) {\n <ng-container *ngTemplateOutlet=\"deleteTipTemplate\"></ng-container>\n }\n </p>\n @if (contentTemplate) {\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n }\n <div class=\"confirm-tip\">\n @if (labelTemplate) {\n <ng-container *ngTemplateOutlet=\"labelTemplate\"></ng-container>\n }\n @if (!labelTemplate) {\n @if (confirmTips) {\n {{ confirmTips }}\n }\n @if (!confirmTips) {\n {{ 'please_enter_extra' | translate }}\n <span class=\"resource-name\">{{ resourceName }}</span>\n {{ 'extra_determine_' + type | translate\n }}{{ extraConfirmTips ? ('period_symbol' | translate) : null\n }}{{ extraConfirmTips }}\n }\n }\n </div>\n <input\n auiFormItemControl\n aui-input\n name=\"resource-name\"\n [(ngModel)]=\"inputValue\"\n (ngModelChange)=\"inputValue$$.next($event)\"\n />\n </aui-dialog-content>\n <aui-dialog-footer>\n <button\n aui-button=\"danger\"\n [loading]=\"deleting$$ | async\"\n [disabled]=\"disabled$ | async\"\n >\n {{ confirmText || type | translate }}\n </button>\n <button\n aui-button\n type=\"button\"\n (click)=\"closeDialog()\"\n >\n {{ 'cancel' | translate }}\n </button>\n </aui-dialog-footer>\n</form>\n", styles: [".delete-tip{margin:0 0 12px;color:rgb(var(--aui-color-n-1))}.confirm-tip{margin-bottom:4px;color:rgb(var(--aui-color-n-1))}.resource-name{color:rgb(var(--aui-color-red))}\n"], dependencies: [{ kind: "ngmodule", type: DialogModule }, { 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: i1.DialogFooterComponent, selector: "aui-dialog-footer" }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i1.InputComponent, selector: "input[aui-input],textarea[aui-input]", inputs: ["size", "disabled"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i1.IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormModule }, { kind: "directive", type: i1.FormItemControlDirective, selector: "[auiFormItemControl]", inputs: ["required"] }, { kind: "directive", type: E2eAttributeBindingDirective, selector: "[click],[routerLink],a[href],[auiTooltip],[auiDropdown]" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4406
4409
  }
4407
4410
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ConfirmDeleteComponent, decorators: [{
4408
4411
  type: Component,
@@ -4417,7 +4420,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
4417
4420
  FormModule,
4418
4421
  AsyncPipe,
4419
4422
  EFFECT_DIRECTIVE_MODULE,
4420
- ], standalone: true, template: "<form (ngSubmit)=\"onConfirm()\">\n <aui-dialog-header>\n <aui-icon\n icon=\"exclamation_triangle_s\"\n background=\"triangle\"\n size=\"22\"\n ></aui-icon>\n {{ title }}\n </aui-dialog-header>\n <aui-dialog-content>\n <p class=\"tw-mt-0 tw-mb-12 tw-text-main-text\">\n @if (deleteTips) {\n {{ deleteTips }}\n }\n @if (deleteTipTemplate) {\n <ng-container *ngTemplateOutlet=\"deleteTipTemplate\"></ng-container>\n }\n </p>\n @if (contentTemplate) {\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n }\n <div class=\"tw-mb-4 tw-text-main-text\">\n @if (labelTemplate) {\n <ng-container *ngTemplateOutlet=\"labelTemplate\"></ng-container>\n }\n @if (!labelTemplate) {\n @if (confirmTips) {\n {{ confirmTips }}\n }\n @if (!confirmTips) {\n {{ 'please_enter_extra' | translate }}\n <span class=\"tw-text-red\">{{ resourceName }}</span>\n {{ 'extra_determine_' + type | translate\n }}{{ extraConfirmTips ? ('period_symbol' | translate) : null\n }}{{ extraConfirmTips }}\n }\n }\n </div>\n <input\n auiFormItemControl\n aui-input\n name=\"resource-name\"\n [(ngModel)]=\"inputValue\"\n (ngModelChange)=\"inputValue$$.next($event)\"\n />\n </aui-dialog-content>\n <aui-dialog-footer>\n <button\n aui-button=\"danger\"\n [loading]=\"deleting$$ | async\"\n [disabled]=\"disabled$ | async\"\n >\n {{ confirmText || type | translate }}\n </button>\n <button\n aui-button\n type=\"button\"\n (click)=\"closeDialog()\"\n >\n {{ 'cancel' | translate }}\n </button>\n </aui-dialog-footer>\n</form>\n" }]
4423
+ ], standalone: true, template: "<form (ngSubmit)=\"onConfirm()\">\n <aui-dialog-header>\n <aui-icon\n icon=\"exclamation_triangle_s\"\n background=\"triangle\"\n size=\"22\"\n ></aui-icon>\n {{ title }}\n </aui-dialog-header>\n <aui-dialog-content>\n <p class=\"delete-tip\">\n @if (deleteTips) {\n {{ deleteTips }}\n }\n @if (deleteTipTemplate) {\n <ng-container *ngTemplateOutlet=\"deleteTipTemplate\"></ng-container>\n }\n </p>\n @if (contentTemplate) {\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n }\n <div class=\"confirm-tip\">\n @if (labelTemplate) {\n <ng-container *ngTemplateOutlet=\"labelTemplate\"></ng-container>\n }\n @if (!labelTemplate) {\n @if (confirmTips) {\n {{ confirmTips }}\n }\n @if (!confirmTips) {\n {{ 'please_enter_extra' | translate }}\n <span class=\"resource-name\">{{ resourceName }}</span>\n {{ 'extra_determine_' + type | translate\n }}{{ extraConfirmTips ? ('period_symbol' | translate) : null\n }}{{ extraConfirmTips }}\n }\n }\n </div>\n <input\n auiFormItemControl\n aui-input\n name=\"resource-name\"\n [(ngModel)]=\"inputValue\"\n (ngModelChange)=\"inputValue$$.next($event)\"\n />\n </aui-dialog-content>\n <aui-dialog-footer>\n <button\n aui-button=\"danger\"\n [loading]=\"deleting$$ | async\"\n [disabled]=\"disabled$ | async\"\n >\n {{ confirmText || type | translate }}\n </button>\n <button\n aui-button\n type=\"button\"\n (click)=\"closeDialog()\"\n >\n {{ 'cancel' | translate }}\n </button>\n </aui-dialog-footer>\n</form>\n", styles: [".delete-tip{margin:0 0 12px;color:rgb(var(--aui-color-n-1))}.confirm-tip{margin-bottom:4px;color:rgb(var(--aui-color-n-1))}.resource-name{color:rgb(var(--aui-color-red))}\n"] }]
4421
4424
  }], ctorParameters: () => [], propDecorators: { context: [{
4422
4425
  type: Input
4423
4426
  }], type: [{
@@ -4554,6 +4557,14 @@ const AUI_MULTI_SELECT_PLACEHOLDER_CLASS = 'aui-multi-select__placeholder';
4554
4557
  // NOTE: 提供此指令,是由于个人不支持此组件行为,不建议直接引入aui,希望作为业务上的尝试,因此提供指令以供删改
4555
4558
  // 纯css无法提供本问题的完整解决方案,若有更优方案,请删除此部分代码,以及 acl-select-prefix mixin
4556
4559
  class SelectPrefixLabelDirective {
4560
+ constructor() {
4561
+ this.elementRef = inject(ElementRef);
4562
+ this.renderer = inject(Renderer2);
4563
+ this.viewContainerRef = inject(ViewContainerRef);
4564
+ this.multiSelectComponent = inject(MultiSelectComponent, {
4565
+ optional: true,
4566
+ });
4567
+ }
4557
4568
  queryElementByClassName(className) {
4558
4569
  return this.elementRef.nativeElement?.querySelector(`.${className}`);
4559
4570
  }
@@ -4583,13 +4594,7 @@ class SelectPrefixLabelDirective {
4583
4594
  placeholder.style.paddingLeft = `${inlineLabel.offsetWidth + PREFIX_LABEL_PLACEHOLDER_PADDING_LEFT_FIX}px`;
4584
4595
  }
4585
4596
  }
4586
- constructor(elementRef, renderer, viewContainerRef, multiSelectComponent) {
4587
- this.elementRef = elementRef;
4588
- this.renderer = renderer;
4589
- this.viewContainerRef = viewContainerRef;
4590
- this.multiSelectComponent = multiSelectComponent;
4591
- }
4592
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SelectPrefixLabelDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i1.MultiSelectComponent, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
4597
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SelectPrefixLabelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
4593
4598
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: SelectPrefixLabelDirective, isStandalone: true, selector: "aui-select[aclPrefixLabel],aui-multi-select[aclPrefixLabel]", inputs: { aclPrefixLabel: "aclPrefixLabel" }, ngImport: i0 }); }
4594
4599
  }
4595
4600
  __decorate([
@@ -4620,9 +4625,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
4620
4625
  selector: 'aui-select[aclPrefixLabel],aui-multi-select[aclPrefixLabel]',
4621
4626
  standalone: true,
4622
4627
  }]
4623
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i1.MultiSelectComponent, decorators: [{
4624
- type: Optional
4625
- }] }], propDecorators: { aclPrefixLabel: [{
4628
+ }], propDecorators: { aclPrefixLabel: [{
4626
4629
  type: Input
4627
4630
  }] } });
4628
4631
 
@@ -4632,8 +4635,8 @@ class ZeroStateComponent {
4632
4635
  this.fetching = false;
4633
4636
  this.context = 'form';
4634
4637
  this.image = [
4635
- 'assets/images/light/no-data-for-list-or-card.svg',
4636
- 'assets/images/dark/no-data-for-list-or-card.svg',
4638
+ '/console-assets/images/light/no-data-for-list-or-card.svg',
4639
+ '/console-assets/images/dark/no-data-for-list-or-card.svg',
4637
4640
  ];
4638
4641
  this.handlePixel = handlePixel;
4639
4642
  this.isTemplateRef = isTemplateRef;
@@ -4675,9 +4678,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
4675
4678
  }] } });
4676
4679
 
4677
4680
  class RelativeTimeComponent {
4678
- constructor(cdr, translate) {
4679
- this.cdr = cdr;
4680
- this.translate = translate;
4681
+ constructor() {
4682
+ this.cdr = inject(ChangeDetectorRef);
4683
+ this.translate = inject(TranslateService);
4681
4684
  this.destroy$ = new Subject();
4682
4685
  }
4683
4686
  ngOnInit() {
@@ -4690,7 +4693,7 @@ class RelativeTimeComponent {
4690
4693
  ngOnDestroy() {
4691
4694
  this.destroy$.next();
4692
4695
  }
4693
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: RelativeTimeComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i2$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
4696
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: RelativeTimeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4694
4697
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: RelativeTimeComponent, isStandalone: true, selector: "acl-relative-time", inputs: { time: "time" }, ngImport: i0, template: `
4695
4698
  <span
4696
4699
  [auiTooltip]="time | aclStandardTime"
@@ -4719,7 +4722,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
4719
4722
  standalone: true,
4720
4723
  imports: [TooltipModule, StandardTimePipe, RelativeTimePipe],
4721
4724
  }]
4722
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i2$1.TranslateService }], propDecorators: { time: [{
4725
+ }], propDecorators: { time: [{
4723
4726
  type: Input
4724
4727
  }] } });
4725
4728
 
@@ -5007,7 +5010,7 @@ const CLONE_ELEMENT_BASE_STYLES = {
5007
5010
  * 效果:
5008
5011
  * 发生截取的文案会显示完整内容的 tooltip。未发生截取的文案不显示 tooltip。
5009
5012
  * @example:
5010
- * <span class="tw-text-overflow" aclTextTooltip>TEXT...</span>
5013
+ * <span aclTextTooltip>TEXT...</span>
5011
5014
  *
5012
5015
  * tooltip 的一些设置(位置、类型)可以使用 aui 相同设置。未传 tooltip content 则取元素 text content
5013
5016
  */
@@ -5277,7 +5280,7 @@ class DateRangePickerComponent {
5277
5280
  useExisting: forwardRef(() => DateRangePickerComponent),
5278
5281
  multi: true,
5279
5282
  },
5280
- ], viewQueries: [{ propertyName: "tip", first: true, predicate: ["tip"], descendants: true }], ngImport: i0, template: "@if (mode === 'input' || mode === 'dropdown') {\n <aui-input-group\n [auiTooltip]=\"tooltip\"\n auiTooltipClass=\"acl-date-range-picker__panel\"\n auiTooltipTrigger=\"click\"\n auiTooltipType=\"info\"\n auiTooltipPosition=\"bottom start\"\n auiTooltipAnimType=\"none\"\n [style.width]=\"inputWidth\"\n #tip=\"auiTooltip\"\n >\n <input\n aui-input\n [class]=\"{\n 'tw-text-center': mode === 'dropdown',\n '!tw-text-s': mode === 'dropdown',\n 'date-range-picker': true,\n }\"\n [title]=\"value | pure: formatValue : (translate.locale$ | async)\"\n [value]=\"value | pure: formatValue : (translate.locale$ | async)\"\n readonly\n />\n <aui-icon\n auiInputSuffix\n class=\"tw-text-n-2\"\n [icon]=\"mode === 'dropdown' ? 'calendar' : 'caret_down_s'\"\n ></aui-icon>\n </aui-input-group>\n}\n\n@if (mode === 'tag') {\n <aui-tag\n size=\"mini\"\n class=\"tag\"\n [type]=\"tagActive ? 'primary' : 'info'\"\n [solid]=\"tagActive\"\n [auiTooltip]=\"tooltip\"\n auiTooltipClass=\"acl-date-range-picker__panel\"\n auiTooltipTrigger=\"click\"\n auiTooltipType=\"info\"\n #tip=\"auiTooltip\"\n auiTooltipPosition=\"bottom start\"\n >\n <aui-icon icon=\"clock\"></aui-icon>\n {{\n !value\n ? ('more' | translate)\n : (value | pure: formatValue : (translate.locale$ | async))\n }}\n <aui-icon\n class=\"tw-ml-[-4px]\"\n icon=\"angle_down\"\n margin=\"left\"\n ></aui-icon>\n </aui-tag>\n}\n\n<ng-template #tooltip>\n <div class=\"range-picker-panel\">\n <div class=\"control\">\n @for (range of ranges; track range) {\n <span\n class=\"control-row\"\n [class.active]=\"range.label === selectedRange?.label\"\n (click)=\"selectRange(range)\"\n >\n {{\n range.display\n ? (range.display | translate: range.displayCtx)\n : (range.label | translate)\n }}\n </span>\n }\n </div>\n @if (isCustom) {\n <div class=\"range-picker-wrapper\">\n <aui-date-range-picker-panel\n [disabledDate]=\"options | pure: getDisabledDate\"\n [(ngModel)]=\"rangeValue\"\n (confirm)=\"submitRange(CUSTOM_RANGE, rangeValue)\"\n (clear)=\"rangeValue = []\"\n (click)=\"$event.stopImmediatePropagation()\"\n [showTime]=\"finalOptions.timePicker\"\n [disabledTime]=\"enableDisableTime && disabledTime()\"\n ></aui-date-range-picker-panel>\n </div>\n }\n </div>\n</ng-template>\n", styles: [".range-picker-panel{display:inline-flex}.range-picker-footer{padding:9px;display:flex;justify-content:flex-end;box-sizing:content-box;border-top:1px solid use-rgb(divider)}.range-picker-footer .range-date-tip{display:flex;font-size:14px;align-items:center;margin-right:6px;color:use-text-color(main)}.date-range-picker[readonly]{background-color:use-rgb(n-9);border-color:use-rgb(n-7)}aui-input-group{width:100%;display:inline-block}:host::ng-deep{display:flex}:host::ng-deep .aui-input{cursor:pointer!important}::ng-deep .acl-date-range-picker__panel{max-width:unset!important;padding:0!important;overflow:hidden}::ng-deep .acl-date-range-picker__panel .control{display:flex;min-width:120px;flex-direction:column;max-height:337px;overflow:auto}::ng-deep .acl-date-range-picker__panel .range-picker-wrapper{padding:8px;display:flex;flex-direction:column;border-left:1px solid use-rgb(divider)}::ng-deep .acl-date-range-picker__panel .control-row{padding:8px 12px;font-size:12px;color:use-text-color(main)}::ng-deep .acl-date-range-picker__panel .control-row:hover{background-color:use-rgb(p-6);color:use-rgb(primary);cursor:pointer}::ng-deep .acl-date-range-picker__panel .control-row.active{background-color:use-rgb(p-6);color:use-rgb(primary)}.tag{position:relative}.tag ::ng-deep .aui-tag__content{overflow:inherit}.tag ::ng-deep .aui-tag{max-width:unset!important}\n"], dependencies: [{ kind: "component", type: InputGroupComponent, selector: "aui-input-group" }, { kind: "directive", type: TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }, { kind: "directive", type: InputSuffixDirective, selector: "[auiInputSuffix]" }, { kind: "component", type: InputComponent, selector: "input[aui-input],textarea[aui-input]", inputs: ["size", "disabled"] }, { kind: "component", type: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "component", type: TagComponent, selector: "aui-tag", inputs: ["type", "size", "closeable", "border", "solid", "invalid", "round", "color", "allowClick"], outputs: ["close"] }, { kind: "component", type: DateRangePickerPanelComponent, selector: "aui-date-range-picker-panel", inputs: ["clearable", "clearText", "showTime", "showFooter", "disabledDate", "disabledTime", "weekStartDay", "minDate", "maxDate"], outputs: ["clear", "confirm"] }, { 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: "directive", type: E2eAttributeBindingDirective, selector: "[click],[routerLink],a[href],[auiTooltip],[auiDropdown]" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: PurePipe, name: "pure" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5283
+ ], viewQueries: [{ propertyName: "tip", first: true, predicate: ["tip"], descendants: true }], ngImport: i0, template: "@if (mode === 'input' || mode === 'dropdown') {\n <aui-input-group\n [auiTooltip]=\"tooltip\"\n auiTooltipClass=\"acl-date-range-picker__panel\"\n auiTooltipTrigger=\"click\"\n auiTooltipType=\"info\"\n auiTooltipPosition=\"bottom start\"\n auiTooltipAnimType=\"none\"\n [style.width]=\"inputWidth\"\n #tip=\"auiTooltip\"\n >\n <input\n aui-input\n [class]=\"{\n 'text-center': mode === 'dropdown',\n 'text-small': mode === 'dropdown',\n 'date-range-picker': true,\n }\"\n [title]=\"value | pure: formatValue : (translate.locale$ | async)\"\n [value]=\"value | pure: formatValue : (translate.locale$ | async)\"\n readonly\n />\n <aui-icon\n auiInputSuffix\n class=\"text-n-2\"\n [icon]=\"mode === 'dropdown' ? 'calendar' : 'caret_down_s'\"\n ></aui-icon>\n </aui-input-group>\n}\n\n@if (mode === 'tag') {\n <aui-tag\n size=\"mini\"\n class=\"tag\"\n [type]=\"tagActive ? 'primary' : 'info'\"\n [solid]=\"tagActive\"\n [auiTooltip]=\"tooltip\"\n auiTooltipClass=\"acl-date-range-picker__panel\"\n auiTooltipTrigger=\"click\"\n auiTooltipType=\"info\"\n #tip=\"auiTooltip\"\n auiTooltipPosition=\"bottom start\"\n >\n <aui-icon icon=\"clock\"></aui-icon>\n {{\n !value\n ? ('more' | translate)\n : (value | pure: formatValue : (translate.locale$ | async))\n }}\n <aui-icon\n class=\"icon-spacer\"\n icon=\"angle_down\"\n margin=\"left\"\n ></aui-icon>\n </aui-tag>\n}\n\n<ng-template #tooltip>\n <div class=\"range-picker-panel\">\n <div class=\"control\">\n @for (range of ranges; track range) {\n <span\n class=\"control-row\"\n [class.active]=\"range.label === selectedRange?.label\"\n (click)=\"selectRange(range)\"\n >\n {{\n range.display\n ? (range.display | translate: range.displayCtx)\n : (range.label | translate)\n }}\n </span>\n }\n </div>\n @if (isCustom) {\n <div class=\"range-picker-wrapper\">\n <aui-date-range-picker-panel\n [disabledDate]=\"options | pure: getDisabledDate\"\n [(ngModel)]=\"rangeValue\"\n (confirm)=\"submitRange(CUSTOM_RANGE, rangeValue)\"\n (clear)=\"rangeValue = []\"\n (click)=\"$event.stopImmediatePropagation()\"\n [showTime]=\"finalOptions.timePicker\"\n [disabledTime]=\"enableDisableTime && disabledTime()\"\n ></aui-date-range-picker-panel>\n </div>\n }\n </div>\n</ng-template>\n", styles: [".range-picker-panel{display:inline-flex}.range-picker-footer{padding:9px;display:flex;justify-content:flex-end;box-sizing:content-box;border-top:1px solid use-rgb(divider)}.range-picker-footer .range-date-tip{display:flex;font-size:14px;align-items:center;margin-right:6px;color:use-text-color(main)}.date-range-picker[readonly]{background-color:use-rgb(n-9);border-color:use-rgb(n-7)}aui-input-group{width:100%;display:inline-block}:host::ng-deep{display:flex}:host::ng-deep .aui-input{cursor:pointer!important}::ng-deep .acl-date-range-picker__panel{max-width:unset!important;padding:0!important;overflow:hidden}::ng-deep .acl-date-range-picker__panel .control{display:flex;min-width:120px;flex-direction:column;max-height:337px;overflow:auto}::ng-deep .acl-date-range-picker__panel .range-picker-wrapper{padding:8px;display:flex;flex-direction:column;border-left:1px solid use-rgb(divider)}::ng-deep .acl-date-range-picker__panel .control-row{padding:8px 12px;font-size:12px;color:use-text-color(main)}::ng-deep .acl-date-range-picker__panel .control-row:hover{background-color:use-rgb(p-6);color:use-rgb(primary);cursor:pointer}::ng-deep .acl-date-range-picker__panel .control-row.active{background-color:use-rgb(p-6);color:use-rgb(primary)}.tag{position:relative}.tag ::ng-deep .aui-tag__content{overflow:inherit}.text-center{text-align:center}.text-small{font-size:12px!important}.text-n-2{color:use-rgb(n-2)}.icon-spacer{margin-left:-4px}\n"], dependencies: [{ kind: "component", type: InputGroupComponent, selector: "aui-input-group" }, { kind: "directive", type: TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }, { kind: "directive", type: InputSuffixDirective, selector: "[auiInputSuffix]" }, { kind: "component", type: InputComponent, selector: "input[aui-input],textarea[aui-input]", inputs: ["size", "disabled"] }, { kind: "component", type: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "component", type: TagComponent, selector: "aui-tag", inputs: ["type", "size", "closeable", "border", "solid", "invalid", "round", "color", "allowClick"], outputs: ["close"] }, { kind: "component", type: DateRangePickerPanelComponent, selector: "aui-date-range-picker-panel", inputs: ["clearable", "clearText", "showTime", "showFooter", "disabledDate", "disabledTime", "weekStartDay", "minDate", "maxDate"], outputs: ["clear", "confirm"] }, { 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: "directive", type: E2eAttributeBindingDirective, selector: "[click],[routerLink],a[href],[auiTooltip],[auiDropdown]" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: PurePipe, name: "pure" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5281
5284
  }
5282
5285
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DateRangePickerComponent, decorators: [{
5283
5286
  type: Component,
@@ -5300,7 +5303,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
5300
5303
  PurePipe,
5301
5304
  AsyncPipe,
5302
5305
  EFFECT_DIRECTIVE_MODULE,
5303
- ], standalone: true, template: "@if (mode === 'input' || mode === 'dropdown') {\n <aui-input-group\n [auiTooltip]=\"tooltip\"\n auiTooltipClass=\"acl-date-range-picker__panel\"\n auiTooltipTrigger=\"click\"\n auiTooltipType=\"info\"\n auiTooltipPosition=\"bottom start\"\n auiTooltipAnimType=\"none\"\n [style.width]=\"inputWidth\"\n #tip=\"auiTooltip\"\n >\n <input\n aui-input\n [class]=\"{\n 'tw-text-center': mode === 'dropdown',\n '!tw-text-s': mode === 'dropdown',\n 'date-range-picker': true,\n }\"\n [title]=\"value | pure: formatValue : (translate.locale$ | async)\"\n [value]=\"value | pure: formatValue : (translate.locale$ | async)\"\n readonly\n />\n <aui-icon\n auiInputSuffix\n class=\"tw-text-n-2\"\n [icon]=\"mode === 'dropdown' ? 'calendar' : 'caret_down_s'\"\n ></aui-icon>\n </aui-input-group>\n}\n\n@if (mode === 'tag') {\n <aui-tag\n size=\"mini\"\n class=\"tag\"\n [type]=\"tagActive ? 'primary' : 'info'\"\n [solid]=\"tagActive\"\n [auiTooltip]=\"tooltip\"\n auiTooltipClass=\"acl-date-range-picker__panel\"\n auiTooltipTrigger=\"click\"\n auiTooltipType=\"info\"\n #tip=\"auiTooltip\"\n auiTooltipPosition=\"bottom start\"\n >\n <aui-icon icon=\"clock\"></aui-icon>\n {{\n !value\n ? ('more' | translate)\n : (value | pure: formatValue : (translate.locale$ | async))\n }}\n <aui-icon\n class=\"tw-ml-[-4px]\"\n icon=\"angle_down\"\n margin=\"left\"\n ></aui-icon>\n </aui-tag>\n}\n\n<ng-template #tooltip>\n <div class=\"range-picker-panel\">\n <div class=\"control\">\n @for (range of ranges; track range) {\n <span\n class=\"control-row\"\n [class.active]=\"range.label === selectedRange?.label\"\n (click)=\"selectRange(range)\"\n >\n {{\n range.display\n ? (range.display | translate: range.displayCtx)\n : (range.label | translate)\n }}\n </span>\n }\n </div>\n @if (isCustom) {\n <div class=\"range-picker-wrapper\">\n <aui-date-range-picker-panel\n [disabledDate]=\"options | pure: getDisabledDate\"\n [(ngModel)]=\"rangeValue\"\n (confirm)=\"submitRange(CUSTOM_RANGE, rangeValue)\"\n (clear)=\"rangeValue = []\"\n (click)=\"$event.stopImmediatePropagation()\"\n [showTime]=\"finalOptions.timePicker\"\n [disabledTime]=\"enableDisableTime && disabledTime()\"\n ></aui-date-range-picker-panel>\n </div>\n }\n </div>\n</ng-template>\n", styles: [".range-picker-panel{display:inline-flex}.range-picker-footer{padding:9px;display:flex;justify-content:flex-end;box-sizing:content-box;border-top:1px solid use-rgb(divider)}.range-picker-footer .range-date-tip{display:flex;font-size:14px;align-items:center;margin-right:6px;color:use-text-color(main)}.date-range-picker[readonly]{background-color:use-rgb(n-9);border-color:use-rgb(n-7)}aui-input-group{width:100%;display:inline-block}:host::ng-deep{display:flex}:host::ng-deep .aui-input{cursor:pointer!important}::ng-deep .acl-date-range-picker__panel{max-width:unset!important;padding:0!important;overflow:hidden}::ng-deep .acl-date-range-picker__panel .control{display:flex;min-width:120px;flex-direction:column;max-height:337px;overflow:auto}::ng-deep .acl-date-range-picker__panel .range-picker-wrapper{padding:8px;display:flex;flex-direction:column;border-left:1px solid use-rgb(divider)}::ng-deep .acl-date-range-picker__panel .control-row{padding:8px 12px;font-size:12px;color:use-text-color(main)}::ng-deep .acl-date-range-picker__panel .control-row:hover{background-color:use-rgb(p-6);color:use-rgb(primary);cursor:pointer}::ng-deep .acl-date-range-picker__panel .control-row.active{background-color:use-rgb(p-6);color:use-rgb(primary)}.tag{position:relative}.tag ::ng-deep .aui-tag__content{overflow:inherit}.tag ::ng-deep .aui-tag{max-width:unset!important}\n"] }]
5306
+ ], standalone: true, template: "@if (mode === 'input' || mode === 'dropdown') {\n <aui-input-group\n [auiTooltip]=\"tooltip\"\n auiTooltipClass=\"acl-date-range-picker__panel\"\n auiTooltipTrigger=\"click\"\n auiTooltipType=\"info\"\n auiTooltipPosition=\"bottom start\"\n auiTooltipAnimType=\"none\"\n [style.width]=\"inputWidth\"\n #tip=\"auiTooltip\"\n >\n <input\n aui-input\n [class]=\"{\n 'text-center': mode === 'dropdown',\n 'text-small': mode === 'dropdown',\n 'date-range-picker': true,\n }\"\n [title]=\"value | pure: formatValue : (translate.locale$ | async)\"\n [value]=\"value | pure: formatValue : (translate.locale$ | async)\"\n readonly\n />\n <aui-icon\n auiInputSuffix\n class=\"text-n-2\"\n [icon]=\"mode === 'dropdown' ? 'calendar' : 'caret_down_s'\"\n ></aui-icon>\n </aui-input-group>\n}\n\n@if (mode === 'tag') {\n <aui-tag\n size=\"mini\"\n class=\"tag\"\n [type]=\"tagActive ? 'primary' : 'info'\"\n [solid]=\"tagActive\"\n [auiTooltip]=\"tooltip\"\n auiTooltipClass=\"acl-date-range-picker__panel\"\n auiTooltipTrigger=\"click\"\n auiTooltipType=\"info\"\n #tip=\"auiTooltip\"\n auiTooltipPosition=\"bottom start\"\n >\n <aui-icon icon=\"clock\"></aui-icon>\n {{\n !value\n ? ('more' | translate)\n : (value | pure: formatValue : (translate.locale$ | async))\n }}\n <aui-icon\n class=\"icon-spacer\"\n icon=\"angle_down\"\n margin=\"left\"\n ></aui-icon>\n </aui-tag>\n}\n\n<ng-template #tooltip>\n <div class=\"range-picker-panel\">\n <div class=\"control\">\n @for (range of ranges; track range) {\n <span\n class=\"control-row\"\n [class.active]=\"range.label === selectedRange?.label\"\n (click)=\"selectRange(range)\"\n >\n {{\n range.display\n ? (range.display | translate: range.displayCtx)\n : (range.label | translate)\n }}\n </span>\n }\n </div>\n @if (isCustom) {\n <div class=\"range-picker-wrapper\">\n <aui-date-range-picker-panel\n [disabledDate]=\"options | pure: getDisabledDate\"\n [(ngModel)]=\"rangeValue\"\n (confirm)=\"submitRange(CUSTOM_RANGE, rangeValue)\"\n (clear)=\"rangeValue = []\"\n (click)=\"$event.stopImmediatePropagation()\"\n [showTime]=\"finalOptions.timePicker\"\n [disabledTime]=\"enableDisableTime && disabledTime()\"\n ></aui-date-range-picker-panel>\n </div>\n }\n </div>\n</ng-template>\n", styles: [".range-picker-panel{display:inline-flex}.range-picker-footer{padding:9px;display:flex;justify-content:flex-end;box-sizing:content-box;border-top:1px solid use-rgb(divider)}.range-picker-footer .range-date-tip{display:flex;font-size:14px;align-items:center;margin-right:6px;color:use-text-color(main)}.date-range-picker[readonly]{background-color:use-rgb(n-9);border-color:use-rgb(n-7)}aui-input-group{width:100%;display:inline-block}:host::ng-deep{display:flex}:host::ng-deep .aui-input{cursor:pointer!important}::ng-deep .acl-date-range-picker__panel{max-width:unset!important;padding:0!important;overflow:hidden}::ng-deep .acl-date-range-picker__panel .control{display:flex;min-width:120px;flex-direction:column;max-height:337px;overflow:auto}::ng-deep .acl-date-range-picker__panel .range-picker-wrapper{padding:8px;display:flex;flex-direction:column;border-left:1px solid use-rgb(divider)}::ng-deep .acl-date-range-picker__panel .control-row{padding:8px 12px;font-size:12px;color:use-text-color(main)}::ng-deep .acl-date-range-picker__panel .control-row:hover{background-color:use-rgb(p-6);color:use-rgb(primary);cursor:pointer}::ng-deep .acl-date-range-picker__panel .control-row.active{background-color:use-rgb(p-6);color:use-rgb(primary)}.tag{position:relative}.tag ::ng-deep .aui-tag__content{overflow:inherit}.text-center{text-align:center}.text-small{font-size:12px!important}.text-n-2{color:use-rgb(n-2)}.icon-spacer{margin-left:-4px}\n"] }]
5304
5307
  }], ctorParameters: () => [], propDecorators: { options: [{
5305
5308
  type: Input
5306
5309
  }], format: [{
@@ -5872,7 +5875,7 @@ const initGreaterValidator = (type, control) => {
5872
5875
 
5873
5876
  class StrongPasswordTooltipComponent extends TooltipComponent {
5874
5877
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: StrongPasswordTooltipComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
5875
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: StrongPasswordTooltipComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div\n [class]=\"class$ | async\"\n [class.strong-password-tooltip]=\"true\"\n (mouseenter)=\"hover$.next(true)\"\n (mouseleave)=\"hover$.next(false)\"\n>\n @if (context$ | async; as context) {\n <div class=\"title\">{{ 'strong_password_hint_title' | translate }}</div>\n <ul class=\"conditions\">\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.length }\"\n >\n </ng-container>\n <span>{{\n 'strong_password_conditions_length'\n | translate\n : {\n min: context.conditions.minLength,\n max: context.conditions.maxLength,\n }\n }}</span>\n </li>\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.englishChar }\"\n >\n </ng-container>\n <span>{{ 'strong_password_conditions_english_char' | translate }}</span>\n </li>\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.number }\"\n >\n </ng-container>\n <span>{{ 'strong_password_conditions_number' | translate }}</span>\n </li>\n @if (context.conditions.specialChar) {\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.specialChar }\"\n >\n </ng-container>\n <span>{{\n 'strong_password_conditions_special_char'\n | translate: { chars: context.conditions.specialChar }\n }}</span>\n </li>\n }\n </ul>\n }\n</div>\n\n<ng-template\n #indicator\n let-state=\"state\"\n>\n <span\n class=\"indicator\"\n [class.check]=\"state\"\n >\n <aui-icon [icon]=\"state ? 'check_circle' : 'circle'\"></aui-icon>\n </span>\n</ng-template>\n", styles: [".cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;display:flex;max-width:100%;max-height:100%;z-index:1000}.cdk-overlay-backdrop{position:absolute;inset:0;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);opacity:0;touch-action:manipulation;z-index:1000;transition:opacity .4s cubic-bezier(.25,.8,.25,1)}@media(prefers-reduced-motion){.cdk-overlay-backdrop{transition-duration:1ms}}.cdk-overlay-backdrop-showing{opacity:1}@media(forced-colors:active){.cdk-overlay-backdrop-showing{opacity:.6}}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing,.cdk-high-contrast-active .cdk-overlay-transparent-backdrop{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;display:flex;flex-direction:column;min-width:1px;min-height:1px;z-index:1000}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.cdk-overlay-popover{background:none;border:none;padding:0;outline:0;overflow:visible;position:fixed;pointer-events:none;white-space:normal;color:inherit;text-decoration:none;width:100%;height:100%;inset:0 auto auto 0}.cdk-overlay-popover::backdrop{display:none}.cdk-overlay-popover .cdk-overlay-backdrop{position:fixed;z-index:auto}.strong-password-tooltip.aui-tooltip{position:relative;padding:var(--aui-spacing-xl);line-height:var(--aui-line-height-s);font-size:var(--aui-font-size-s);border-radius:var(--aui-border-radius-m)}:root .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}@media(prefers-color-scheme:dark){html[aui-theme-mode=system] .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}.strong-password-tooltip.aui-tooltip{word-wrap:break-word}.strong-password-tooltip.aui-tooltip--info{color:rgb(var(--aui-color-n-1));background-color:rgb(var(--aui-color-popper-bg))}.strong-password-tooltip.aui-tooltip--top,.strong-password-tooltip.aui-tooltip--bottom{margin:var(--aui-spacing-s) 0}.strong-password-tooltip.aui-tooltip--start,.strong-password-tooltip.aui-tooltip--end{margin:0 var(--aui-spacing-s)}.strong-password-tooltip.aui-tooltip .title{margin-bottom:12px}.strong-password-tooltip.aui-tooltip .conditions li{display:flex;align-items:center}.strong-password-tooltip.aui-tooltip .conditions li+li{margin-top:8px}.strong-password-tooltip.aui-tooltip .indicator{display:inline-block;margin-right:8px;width:16px;height:16px;font-size:16px;color:rgb(var(--aui-color-border))}.strong-password-tooltip.aui-tooltip .indicator.check{color:rgb(var(--aui-color-green))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i1.IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5878
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: StrongPasswordTooltipComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div\n [class]=\"class$ | async\"\n [class.strong-password-tooltip]=\"true\"\n (mouseenter)=\"hover$.next(true)\"\n (mouseleave)=\"hover$.next(false)\"\n>\n @if (context$ | async; as context) {\n <div class=\"title\">{{ 'strong_password_hint_title' | translate }}</div>\n <ul class=\"conditions\">\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.length }\"\n >\n </ng-container>\n <span>{{\n 'strong_password_conditions_length'\n | translate\n : {\n min: context.conditions.minLength,\n max: context.conditions.maxLength,\n }\n }}</span>\n </li>\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.englishChar }\"\n >\n </ng-container>\n <span>{{ 'strong_password_conditions_english_char' | translate }}</span>\n </li>\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.number }\"\n >\n </ng-container>\n <span>{{ 'strong_password_conditions_number' | translate }}</span>\n </li>\n @if (context.conditions.specialChar) {\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.specialChar }\"\n >\n </ng-container>\n <span>{{\n 'strong_password_conditions_special_char'\n | translate: { chars: context.conditions.specialChar }\n }}</span>\n </li>\n }\n </ul>\n }\n</div>\n\n<ng-template\n #indicator\n let-state=\"state\"\n>\n <span\n class=\"indicator\"\n [class.check]=\"state\"\n >\n <aui-icon [icon]=\"state ? 'check_circle' : 'circle'\"></aui-icon>\n </span>\n</ng-template>\n", styles: [".cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;display:flex;max-width:100%;max-height:100%;z-index:1000}.cdk-overlay-backdrop{position:absolute;inset:0;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);opacity:0;touch-action:manipulation;z-index:1000;transition:opacity .4s cubic-bezier(.25,.8,.25,1)}@media (prefers-reduced-motion){.cdk-overlay-backdrop{transition-duration:1ms}}.cdk-overlay-backdrop-showing{opacity:1}@media (forced-colors: active){.cdk-overlay-backdrop-showing{opacity:.6}}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing,.cdk-high-contrast-active .cdk-overlay-transparent-backdrop{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;display:flex;flex-direction:column;min-width:1px;min-height:1px;z-index:1000}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.cdk-overlay-popover{background:none;border:none;padding:0;outline:0;overflow:visible;position:fixed;pointer-events:none;white-space:normal;color:inherit;text-decoration:none;width:100%;height:100%;inset:0 auto auto 0}.cdk-overlay-popover::backdrop{display:none}.cdk-overlay-popover .cdk-overlay-backdrop{position:fixed;z-index:auto}.strong-password-tooltip.aui-tooltip{position:relative;padding:var(--aui-spacing-xl);line-height:var(--aui-line-height-s);font-size:var(--aui-font-size-s);border-radius:var(--aui-border-radius-m)}:root .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}.strong-password-tooltip.aui-tooltip{word-wrap:break-word}.strong-password-tooltip.aui-tooltip--info{color:rgb(var(--aui-color-n-1));background-color:rgb(var(--aui-color-popper-bg))}.strong-password-tooltip.aui-tooltip--top,.strong-password-tooltip.aui-tooltip--bottom{margin:var(--aui-spacing-s) 0}.strong-password-tooltip.aui-tooltip--start,.strong-password-tooltip.aui-tooltip--end{margin:0 var(--aui-spacing-s)}.strong-password-tooltip.aui-tooltip .title{margin-bottom:12px}.strong-password-tooltip.aui-tooltip .conditions li{display:flex;align-items:center}.strong-password-tooltip.aui-tooltip .conditions li+li{margin-top:8px}.strong-password-tooltip.aui-tooltip .indicator{display:inline-block;margin-right:8px;width:16px;height:16px;font-size:16px;color:rgb(var(--aui-color-border))}.strong-password-tooltip.aui-tooltip .indicator.check{color:rgb(var(--aui-color-green))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i1.IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5876
5879
  }
5877
5880
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: StrongPasswordTooltipComponent, decorators: [{
5878
5881
  type: Component,
@@ -5882,7 +5885,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
5882
5885
  ReactiveFormsModule,
5883
5886
  IconModule,
5884
5887
  TranslatePipe,
5885
- ], template: "<div\n [class]=\"class$ | async\"\n [class.strong-password-tooltip]=\"true\"\n (mouseenter)=\"hover$.next(true)\"\n (mouseleave)=\"hover$.next(false)\"\n>\n @if (context$ | async; as context) {\n <div class=\"title\">{{ 'strong_password_hint_title' | translate }}</div>\n <ul class=\"conditions\">\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.length }\"\n >\n </ng-container>\n <span>{{\n 'strong_password_conditions_length'\n | translate\n : {\n min: context.conditions.minLength,\n max: context.conditions.maxLength,\n }\n }}</span>\n </li>\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.englishChar }\"\n >\n </ng-container>\n <span>{{ 'strong_password_conditions_english_char' | translate }}</span>\n </li>\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.number }\"\n >\n </ng-container>\n <span>{{ 'strong_password_conditions_number' | translate }}</span>\n </li>\n @if (context.conditions.specialChar) {\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.specialChar }\"\n >\n </ng-container>\n <span>{{\n 'strong_password_conditions_special_char'\n | translate: { chars: context.conditions.specialChar }\n }}</span>\n </li>\n }\n </ul>\n }\n</div>\n\n<ng-template\n #indicator\n let-state=\"state\"\n>\n <span\n class=\"indicator\"\n [class.check]=\"state\"\n >\n <aui-icon [icon]=\"state ? 'check_circle' : 'circle'\"></aui-icon>\n </span>\n</ng-template>\n", styles: [".cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;display:flex;max-width:100%;max-height:100%;z-index:1000}.cdk-overlay-backdrop{position:absolute;inset:0;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);opacity:0;touch-action:manipulation;z-index:1000;transition:opacity .4s cubic-bezier(.25,.8,.25,1)}@media(prefers-reduced-motion){.cdk-overlay-backdrop{transition-duration:1ms}}.cdk-overlay-backdrop-showing{opacity:1}@media(forced-colors:active){.cdk-overlay-backdrop-showing{opacity:.6}}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing,.cdk-high-contrast-active .cdk-overlay-transparent-backdrop{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;display:flex;flex-direction:column;min-width:1px;min-height:1px;z-index:1000}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.cdk-overlay-popover{background:none;border:none;padding:0;outline:0;overflow:visible;position:fixed;pointer-events:none;white-space:normal;color:inherit;text-decoration:none;width:100%;height:100%;inset:0 auto auto 0}.cdk-overlay-popover::backdrop{display:none}.cdk-overlay-popover .cdk-overlay-backdrop{position:fixed;z-index:auto}.strong-password-tooltip.aui-tooltip{position:relative;padding:var(--aui-spacing-xl);line-height:var(--aui-line-height-s);font-size:var(--aui-font-size-s);border-radius:var(--aui-border-radius-m)}:root .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}@media(prefers-color-scheme:dark){html[aui-theme-mode=system] .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}.strong-password-tooltip.aui-tooltip{word-wrap:break-word}.strong-password-tooltip.aui-tooltip--info{color:rgb(var(--aui-color-n-1));background-color:rgb(var(--aui-color-popper-bg))}.strong-password-tooltip.aui-tooltip--top,.strong-password-tooltip.aui-tooltip--bottom{margin:var(--aui-spacing-s) 0}.strong-password-tooltip.aui-tooltip--start,.strong-password-tooltip.aui-tooltip--end{margin:0 var(--aui-spacing-s)}.strong-password-tooltip.aui-tooltip .title{margin-bottom:12px}.strong-password-tooltip.aui-tooltip .conditions li{display:flex;align-items:center}.strong-password-tooltip.aui-tooltip .conditions li+li{margin-top:8px}.strong-password-tooltip.aui-tooltip .indicator{display:inline-block;margin-right:8px;width:16px;height:16px;font-size:16px;color:rgb(var(--aui-color-border))}.strong-password-tooltip.aui-tooltip .indicator.check{color:rgb(var(--aui-color-green))}\n"] }]
5888
+ ], template: "<div\n [class]=\"class$ | async\"\n [class.strong-password-tooltip]=\"true\"\n (mouseenter)=\"hover$.next(true)\"\n (mouseleave)=\"hover$.next(false)\"\n>\n @if (context$ | async; as context) {\n <div class=\"title\">{{ 'strong_password_hint_title' | translate }}</div>\n <ul class=\"conditions\">\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.length }\"\n >\n </ng-container>\n <span>{{\n 'strong_password_conditions_length'\n | translate\n : {\n min: context.conditions.minLength,\n max: context.conditions.maxLength,\n }\n }}</span>\n </li>\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.englishChar }\"\n >\n </ng-container>\n <span>{{ 'strong_password_conditions_english_char' | translate }}</span>\n </li>\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.number }\"\n >\n </ng-container>\n <span>{{ 'strong_password_conditions_number' | translate }}</span>\n </li>\n @if (context.conditions.specialChar) {\n <li>\n <ng-container\n [ngTemplateOutlet]=\"indicator\"\n [ngTemplateOutletContext]=\"{ state: context.state.specialChar }\"\n >\n </ng-container>\n <span>{{\n 'strong_password_conditions_special_char'\n | translate: { chars: context.conditions.specialChar }\n }}</span>\n </li>\n }\n </ul>\n }\n</div>\n\n<ng-template\n #indicator\n let-state=\"state\"\n>\n <span\n class=\"indicator\"\n [class.check]=\"state\"\n >\n <aui-icon [icon]=\"state ? 'check_circle' : 'circle'\"></aui-icon>\n </span>\n</ng-template>\n", styles: [".cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;display:flex;max-width:100%;max-height:100%;z-index:1000}.cdk-overlay-backdrop{position:absolute;inset:0;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);opacity:0;touch-action:manipulation;z-index:1000;transition:opacity .4s cubic-bezier(.25,.8,.25,1)}@media (prefers-reduced-motion){.cdk-overlay-backdrop{transition-duration:1ms}}.cdk-overlay-backdrop-showing{opacity:1}@media (forced-colors: active){.cdk-overlay-backdrop-showing{opacity:.6}}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing,.cdk-high-contrast-active .cdk-overlay-transparent-backdrop{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;display:flex;flex-direction:column;min-width:1px;min-height:1px;z-index:1000}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.cdk-overlay-popover{background:none;border:none;padding:0;outline:0;overflow:visible;position:fixed;pointer-events:none;white-space:normal;color:inherit;text-decoration:none;width:100%;height:100%;inset:0 auto auto 0}.cdk-overlay-popover::backdrop{display:none}.cdk-overlay-popover .cdk-overlay-backdrop{position:fixed;z-index:auto}.strong-password-tooltip.aui-tooltip{position:relative;padding:var(--aui-spacing-xl);line-height:var(--aui-line-height-s);font-size:var(--aui-font-size-s);border-radius:var(--aui-border-radius-m)}:root .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] .strong-password-tooltip.aui-tooltip{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}.strong-password-tooltip.aui-tooltip{word-wrap:break-word}.strong-password-tooltip.aui-tooltip--info{color:rgb(var(--aui-color-n-1));background-color:rgb(var(--aui-color-popper-bg))}.strong-password-tooltip.aui-tooltip--top,.strong-password-tooltip.aui-tooltip--bottom{margin:var(--aui-spacing-s) 0}.strong-password-tooltip.aui-tooltip--start,.strong-password-tooltip.aui-tooltip--end{margin:0 var(--aui-spacing-s)}.strong-password-tooltip.aui-tooltip .title{margin-bottom:12px}.strong-password-tooltip.aui-tooltip .conditions li{display:flex;align-items:center}.strong-password-tooltip.aui-tooltip .conditions li+li{margin-top:8px}.strong-password-tooltip.aui-tooltip .indicator{display:inline-block;margin-right:8px;width:16px;height:16px;font-size:16px;color:rgb(var(--aui-color-border))}.strong-password-tooltip.aui-tooltip .indicator.check{color:rgb(var(--aui-color-green))}\n"] }]
5886
5889
  }] });
5887
5890
 
5888
5891
  class StrongPasswordDirective extends BaseTooltip {
@@ -5904,7 +5907,13 @@ class StrongPasswordDirective extends BaseTooltip {
5904
5907
  ngOnChanges() {
5905
5908
  this.onValidatorChange?.();
5906
5909
  }
5907
- constructor(overlay, viewContainerRef, elRef, renderer, cdr, ngZone) {
5910
+ constructor() {
5911
+ const overlay = inject(Overlay);
5912
+ const viewContainerRef = inject(ViewContainerRef);
5913
+ const elRef = inject(ElementRef);
5914
+ const renderer = inject(Renderer2);
5915
+ const cdr = inject(ChangeDetectorRef);
5916
+ const ngZone = inject(NgZone);
5908
5917
  super(overlay, viewContainerRef, elRef, renderer, cdr, ngZone);
5909
5918
  this.specialChars = STRONG_PASSWORD_SPECIAL_CHARS;
5910
5919
  this.minlength = 8;
@@ -6012,7 +6021,7 @@ class StrongPasswordDirective extends BaseTooltip {
6012
6021
  },
6013
6022
  };
6014
6023
  }
6015
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: StrongPasswordDirective, deps: [{ token: i1$2.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
6024
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: StrongPasswordDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
6016
6025
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: StrongPasswordDirective, isStandalone: true, selector: "input[aclStrongPassword][ngModel],input[aclStrongPassword][formControl],input[aclStrongPassword][formControlName]", inputs: { aclStrongPassword: "aclStrongPassword", required: "required", specialChars: "specialChars", minlength: "minlength", maxlength: "maxlength", notStartsWith: "notStartsWith" }, providers: [
6017
6026
  {
6018
6027
  provide: NG_VALIDATORS,
@@ -6033,7 +6042,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
6033
6042
  },
6034
6043
  ],
6035
6044
  }]
6036
- }], ctorParameters: () => [{ type: i1$2.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }], propDecorators: { aclStrongPassword: [{
6045
+ }], ctorParameters: () => [], propDecorators: { aclStrongPassword: [{
6037
6046
  type: Input
6038
6047
  }], required: [{
6039
6048
  type: Input
@@ -6607,78 +6616,12 @@ function genControlDepsMap(context, rules, destroy$) {
6607
6616
  });
6608
6617
  }
6609
6618
 
6610
- /**
6611
- * @packageDocumentation
6612
- * @module code
6613
- */
6614
- const commonActions = {
6615
- copy: true,
6616
- find: true,
6617
- export: true,
6618
- };
6619
- const createActions = {
6620
- diffMode: false,
6621
- clear: true,
6622
- recover: false,
6623
- import: true,
6624
- ...commonActions,
6625
- };
6626
- const viewActions = {
6627
- diffMode: false,
6628
- clear: false,
6629
- recover: false,
6630
- import: false,
6631
- ...commonActions,
6632
- };
6633
- const updateActions = {
6634
- diffMode: true, // if true, you should also set 'originalValue' attribute, eg: <aui-code-editor [originalValue]="originalFile"></aui-code-editor>
6635
- clear: true,
6636
- recover: true,
6637
- import: true,
6638
- ...commonActions,
6639
- };
6640
- const logsActions = {
6641
- ...viewActions,
6642
- theme: true,
6643
- };
6644
- const commonOptions = {
6645
- folding: true,
6646
- minimap: { enabled: false },
6647
- wordWrap: 'on',
6648
- tabSize: 2,
6649
- scrollbar: {
6650
- alwaysConsumeMouseWheel: false,
6651
- },
6652
- };
6653
- const readonlyOptions = {
6654
- ...commonOptions,
6655
- readOnly: true,
6656
- };
6657
- const yamlReadOptions = {
6658
- language: 'yaml',
6659
- ...readonlyOptions,
6660
- };
6661
- const yamlWriteOptions = {
6662
- language: 'yaml',
6663
- ...commonOptions,
6664
- };
6665
- const textWriteOptions = {
6666
- language: 'text',
6667
- ...commonOptions,
6668
- };
6669
- // for logs
6670
- const logsReadOptions = {
6671
- wordWrap: 'on',
6672
- readOnly: true,
6673
- renderLineHighlight: 'none',
6674
- };
6675
-
6676
6619
  class InterceptDeactivateService {
6677
- constructor(location, router, dialog, translate) {
6678
- this.location = location;
6679
- this.router = router;
6680
- this.dialog = dialog;
6681
- this.translate = translate;
6620
+ constructor() {
6621
+ this.location = inject(Location);
6622
+ this.router = inject(Router);
6623
+ this.dialog = inject(DialogService);
6624
+ this.translate = inject(TranslateService);
6682
6625
  this.destroy$$ = new Subject();
6683
6626
  }
6684
6627
  ngOnDestroy() {
@@ -6721,13 +6664,13 @@ class InterceptDeactivateService {
6721
6664
  queryParams: this.searchParamsToQueryParams(url.searchParams),
6722
6665
  });
6723
6666
  }
6724
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: InterceptDeactivateService, deps: [{ token: i1$1.Location }, { token: i2$2.Router }, { token: i1.DialogService }, { token: i2$1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
6667
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: InterceptDeactivateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6725
6668
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: InterceptDeactivateService, providedIn: 'root' }); }
6726
6669
  }
6727
6670
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: InterceptDeactivateService, decorators: [{
6728
6671
  type: Injectable,
6729
6672
  args: [{ providedIn: 'root' }]
6730
- }], ctorParameters: () => [{ type: i1$1.Location }, { type: i2$2.Router }, { type: i1.DialogService }, { type: i2$1.TranslateService }] });
6673
+ }] });
6731
6674
 
6732
6675
  class InterceptDeactivateGuard {
6733
6676
  constructor() {
@@ -6765,9 +6708,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
6765
6708
  }] });
6766
6709
 
6767
6710
  class InterceptDeactivateDirective {
6768
- constructor(elRef, interceptDeactivate) {
6769
- this.elRef = elRef;
6770
- this.interceptDeactivate = interceptDeactivate;
6711
+ constructor() {
6712
+ this.elRef = inject(ElementRef);
6713
+ this.interceptDeactivate = inject(InterceptDeactivateService);
6771
6714
  this.enabled$ = this.enabled$$.pipe(map(coerceAttrBoolean));
6772
6715
  this.destroy$$ = new Subject();
6773
6716
  }
@@ -6785,7 +6728,7 @@ class InterceptDeactivateDirective {
6785
6728
  onBeforeUnload() {
6786
6729
  return isDevMode() || !this.enabled;
6787
6730
  }
6788
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: InterceptDeactivateDirective, deps: [{ token: i0.ElementRef }, { token: InterceptDeactivateService }], target: i0.ɵɵFactoryTarget.Directive }); }
6731
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: InterceptDeactivateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
6789
6732
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: InterceptDeactivateDirective, isStandalone: true, selector: "[aclInterceptDeactivate]", inputs: { enabled: ["aclInterceptDeactivate", "enabled"] }, host: { listeners: { "window:beforeunload": "onBeforeUnload()" } }, ngImport: i0 }); }
6790
6733
  }
6791
6734
  __decorate([
@@ -6798,7 +6741,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
6798
6741
  selector: '[aclInterceptDeactivate]',
6799
6742
  standalone: true,
6800
6743
  }]
6801
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: InterceptDeactivateService }], propDecorators: { enabled: [{
6744
+ }], propDecorators: { enabled: [{
6802
6745
  type: Input,
6803
6746
  args: ['aclInterceptDeactivate']
6804
6747
  }], enabled$$: [], onBeforeUnload: [{
@@ -7170,7 +7113,7 @@ class PasswordInputComponent extends BaseNestedFormControlPure {
7170
7113
  useExisting: forwardRef(() => PasswordInputComponent),
7171
7114
  multi: true,
7172
7115
  },
7173
- ], usesInheritance: true, ngImport: i0, template: "<aui-form-item [width]=\"width\">\n <label auiFormItemLabel>{{ label || ('password' | translate) }}</label>\n @if (showInput) {\n <aui-input-group\n class=\"tw-flex-1\"\n auiFormItemControl\n [required]=\"required\"\n >\n <input\n aui-input\n [type]=\"showPassword ? 'text' : 'password'\"\n name=\"password\"\n #password=\"ngModel\"\n [ngModel]=\"model\"\n (ngModelChange)=\"emitModel($event)\"\n autocomplete=\"new-password\"\n [required]=\"required\"\n [aclStrongPassword]=\"strongPassword\"\n [specialChars]=\"specialChars\"\n [pattern]=\"strongPassword ? null : pattern\"\n [placeholder]=\"placeholder\"\n [aclErrorsMapperOutlet]=\"passwordError\"\n [aclErrorsMapper]=\"{\n pattern: strongPassword\n ? ('strong_password_pattern_tip'\n | translate\n : {\n chars: specialChars.split('').join(', '),\n })\n : ('invalid_pattern' | translate),\n }\"\n />\n @if (toggleable) {\n <aui-icon\n auiInputSuffix\n class=\"tw-icon-m tw-cursor-pointer hover:tw-text-primary\"\n [icon]=\"showPassword ? 'eye_s' : 'eye_slash_s'\"\n (click)=\"showPassword = !showPassword\"\n ></aui-icon>\n }\n </aui-input-group>\n }\n @if (hint) {\n <div auiFormItemHint>\n @if (isTemplateRef(hint)) {\n <ng-container *ngTemplateOutlet=\"hint\"></ng-container>\n } @else {\n {{ hint }}\n }\n </div>\n }\n <div\n #passwordError\n auiFormItemError\n ></div>\n @if (!showInput) {\n <span>******</span>\n @if (!readonly) {\n <button\n aui-button=\"text\"\n (click)=\"updatePasswd()\"\n >\n <aui-icon icon=\"pencil\"></aui-icon>\n </button>\n }\n }\n</aui-form-item>\n@if (showInput && enableConfirm) {\n <aui-form-item [width]=\"width\">\n <label auiFormItemLabel>{{ 'confirm_password' | translate }}</label>\n <aui-input-group\n class=\"tw-flex-1\"\n auiFormItemControl\n [required]=\"required\"\n >\n <input\n aui-input\n [type]=\"showPassword ? 'text' : 'password'\"\n name=\"confirmPassword\"\n #confirm=\"ngModel\"\n [(ngModel)]=\"confirmPassword\"\n autocomplete=\"new-password\"\n [required]=\"required\"\n [aclValidateFn]=\"model | pure: validateConfirmPassword\"\n />\n @if (toggleable) {\n <aui-icon\n auiInputSuffix\n class=\"tw-icon-m tw-cursor-pointer hover:tw-text-primary\"\n [icon]=\"showPassword ? 'eye_s' : 'eye_slash_s'\"\n (click)=\"showPassword = !showPassword\"\n ></aui-icon>\n }\n </aui-input-group>\n <acl-errors-mapper\n auiFormItemError\n [errors]=\"confirm?.errors\"\n [errorsMapper]=\"{\n notMatch: 'confirm_password_not_match' | translate,\n }\"\n ></acl-errors-mapper>\n </aui-form-item>\n}\n", dependencies: [{ kind: "ngmodule", type: FormModule }, { kind: "component", type: i1.FormItemComponent, selector: "aui-form-item", inputs: ["labelWidth", "width", "labelPosition", "emptyAddon", "plain"] }, { kind: "directive", type: i1.FormItemErrorDirective, selector: "[auiFormItemError]" }, { kind: "directive", type: i1.FormItemHintDirective, selector: "[auiFormItemHint]" }, { kind: "directive", type: i1.FormItemLabelDirective, selector: "label[auiFormItemLabel]" }, { kind: "directive", type: i1.FormItemControlDirective, selector: "[auiFormItemControl]", inputs: ["required"] }, { kind: "component", type: InputComponent, selector: "input[aui-input],textarea[aui-input]", inputs: ["size", "disabled"] }, { kind: "component", type: i1.InputGroupComponent, selector: "aui-input-group" }, { kind: "directive", type: i1.InputSuffixDirective, selector: "[auiInputSuffix]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "component", type: ErrorsMapperComponent, selector: "acl-errors-mapper", inputs: ["errors", "errorsMapper", "errorsMapperFn", "controlName", "ignoreUnknownError"] }, { kind: "directive", type: ErrorsMapperDirective, selector: "[aclErrorsMapper]", inputs: ["aclErrorsMapper", "aclErrorsMapperFn", "aclErrorsMapperDisabled", "aclErrorsMapperOutlet", "aclErrorsMapperControlName"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FunctionValidatorDirective, selector: "[aclValidateFn][ngModel],[aclValidateFn][formControl],[aclValidateFn][formControlName]", inputs: ["aclValidateFn"] }, { kind: "directive", type: StrongPasswordDirective, selector: "input[aclStrongPassword][ngModel],input[aclStrongPassword][formControl],input[aclStrongPassword][formControlName]", inputs: ["aclStrongPassword", "required", "specialChars", "minlength", "maxlength", "notStartsWith"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: PurePipe, name: "pure" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7116
+ ], usesInheritance: true, ngImport: i0, template: "<aui-form-item [width]=\"width\">\n <label auiFormItemLabel>{{ label || ('password' | translate) }}</label>\n @if (showInput) {\n <aui-input-group\n class=\"flex-1\"\n auiFormItemControl\n [required]=\"required\"\n >\n <input\n aui-input\n [type]=\"showPassword ? 'text' : 'password'\"\n name=\"password\"\n #password=\"ngModel\"\n [ngModel]=\"model\"\n (ngModelChange)=\"emitModel($event)\"\n autocomplete=\"new-password\"\n [required]=\"required\"\n [aclStrongPassword]=\"strongPassword\"\n [specialChars]=\"specialChars\"\n [pattern]=\"strongPassword ? null : pattern\"\n [placeholder]=\"placeholder\"\n [aclErrorsMapperOutlet]=\"passwordError\"\n [aclErrorsMapper]=\"{\n pattern: strongPassword\n ? ('strong_password_pattern_tip'\n | translate\n : {\n chars: specialChars.split('').join(', '),\n })\n : ('invalid_pattern' | translate),\n }\"\n />\n @if (toggleable) {\n <aui-icon\n auiInputSuffix\n class=\"toggle-icon\"\n [icon]=\"showPassword ? 'eye_s' : 'eye_slash_s'\"\n (click)=\"showPassword = !showPassword\"\n ></aui-icon>\n }\n </aui-input-group>\n }\n @if (hint) {\n <div auiFormItemHint>\n @if (isTemplateRef(hint)) {\n <ng-container *ngTemplateOutlet=\"hint\"></ng-container>\n } @else {\n {{ hint }}\n }\n </div>\n }\n <div\n #passwordError\n auiFormItemError\n ></div>\n @if (!showInput) {\n <span>******</span>\n @if (!readonly) {\n <button\n aui-button=\"text\"\n (click)=\"updatePasswd()\"\n >\n <aui-icon icon=\"pencil\"></aui-icon>\n </button>\n }\n }\n</aui-form-item>\n@if (showInput && enableConfirm) {\n <aui-form-item [width]=\"width\">\n <label auiFormItemLabel>{{ 'confirm_password' | translate }}</label>\n <aui-input-group\n class=\"flex-1\"\n auiFormItemControl\n [required]=\"required\"\n >\n <input\n aui-input\n [type]=\"showPassword ? 'text' : 'password'\"\n name=\"confirmPassword\"\n #confirm=\"ngModel\"\n [(ngModel)]=\"confirmPassword\"\n autocomplete=\"new-password\"\n [required]=\"required\"\n [aclValidateFn]=\"model | pure: validateConfirmPassword\"\n />\n @if (toggleable) {\n <aui-icon\n auiInputSuffix\n class=\"toggle-icon\"\n [icon]=\"showPassword ? 'eye_s' : 'eye_slash_s'\"\n (click)=\"showPassword = !showPassword\"\n ></aui-icon>\n }\n </aui-input-group>\n <acl-errors-mapper\n auiFormItemError\n [errors]=\"confirm?.errors\"\n [errorsMapper]=\"{\n notMatch: 'confirm_password_not_match' | translate,\n }\"\n ></acl-errors-mapper>\n </aui-form-item>\n}\n", styles: [".flex-1{flex:1 1 0%}.toggle-icon{font-size:14px;cursor:pointer}.toggle-icon:hover{color:rgb(var(--aui-color-primary))}\n"], dependencies: [{ kind: "ngmodule", type: FormModule }, { kind: "component", type: i1.FormItemComponent, selector: "aui-form-item", inputs: ["labelWidth", "width", "labelPosition", "emptyAddon", "plain"] }, { kind: "directive", type: i1.FormItemErrorDirective, selector: "[auiFormItemError]" }, { kind: "directive", type: i1.FormItemHintDirective, selector: "[auiFormItemHint]" }, { kind: "directive", type: i1.FormItemLabelDirective, selector: "label[auiFormItemLabel]" }, { kind: "directive", type: i1.FormItemControlDirective, selector: "[auiFormItemControl]", inputs: ["required"] }, { kind: "component", type: InputComponent, selector: "input[aui-input],textarea[aui-input]", inputs: ["size", "disabled"] }, { kind: "component", type: i1.InputGroupComponent, selector: "aui-input-group" }, { kind: "directive", type: i1.InputSuffixDirective, selector: "[auiInputSuffix]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "component", type: ErrorsMapperComponent, selector: "acl-errors-mapper", inputs: ["errors", "errorsMapper", "errorsMapperFn", "controlName", "ignoreUnknownError"] }, { kind: "directive", type: ErrorsMapperDirective, selector: "[aclErrorsMapper]", inputs: ["aclErrorsMapper", "aclErrorsMapperFn", "aclErrorsMapperDisabled", "aclErrorsMapperOutlet", "aclErrorsMapperControlName"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FunctionValidatorDirective, selector: "[aclValidateFn][ngModel],[aclValidateFn][formControl],[aclValidateFn][formControlName]", inputs: ["aclValidateFn"] }, { kind: "directive", type: StrongPasswordDirective, selector: "input[aclStrongPassword][ngModel],input[aclStrongPassword][formControl],input[aclStrongPassword][formControlName]", inputs: ["aclStrongPassword", "required", "specialChars", "minlength", "maxlength", "notStartsWith"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: PurePipe, name: "pure" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7174
7117
  }
7175
7118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PasswordInputComponent, decorators: [{
7176
7119
  type: Component,
@@ -7197,7 +7140,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
7197
7140
  useExisting: forwardRef(() => PasswordInputComponent),
7198
7141
  multi: true,
7199
7142
  },
7200
- ], template: "<aui-form-item [width]=\"width\">\n <label auiFormItemLabel>{{ label || ('password' | translate) }}</label>\n @if (showInput) {\n <aui-input-group\n class=\"tw-flex-1\"\n auiFormItemControl\n [required]=\"required\"\n >\n <input\n aui-input\n [type]=\"showPassword ? 'text' : 'password'\"\n name=\"password\"\n #password=\"ngModel\"\n [ngModel]=\"model\"\n (ngModelChange)=\"emitModel($event)\"\n autocomplete=\"new-password\"\n [required]=\"required\"\n [aclStrongPassword]=\"strongPassword\"\n [specialChars]=\"specialChars\"\n [pattern]=\"strongPassword ? null : pattern\"\n [placeholder]=\"placeholder\"\n [aclErrorsMapperOutlet]=\"passwordError\"\n [aclErrorsMapper]=\"{\n pattern: strongPassword\n ? ('strong_password_pattern_tip'\n | translate\n : {\n chars: specialChars.split('').join(', '),\n })\n : ('invalid_pattern' | translate),\n }\"\n />\n @if (toggleable) {\n <aui-icon\n auiInputSuffix\n class=\"tw-icon-m tw-cursor-pointer hover:tw-text-primary\"\n [icon]=\"showPassword ? 'eye_s' : 'eye_slash_s'\"\n (click)=\"showPassword = !showPassword\"\n ></aui-icon>\n }\n </aui-input-group>\n }\n @if (hint) {\n <div auiFormItemHint>\n @if (isTemplateRef(hint)) {\n <ng-container *ngTemplateOutlet=\"hint\"></ng-container>\n } @else {\n {{ hint }}\n }\n </div>\n }\n <div\n #passwordError\n auiFormItemError\n ></div>\n @if (!showInput) {\n <span>******</span>\n @if (!readonly) {\n <button\n aui-button=\"text\"\n (click)=\"updatePasswd()\"\n >\n <aui-icon icon=\"pencil\"></aui-icon>\n </button>\n }\n }\n</aui-form-item>\n@if (showInput && enableConfirm) {\n <aui-form-item [width]=\"width\">\n <label auiFormItemLabel>{{ 'confirm_password' | translate }}</label>\n <aui-input-group\n class=\"tw-flex-1\"\n auiFormItemControl\n [required]=\"required\"\n >\n <input\n aui-input\n [type]=\"showPassword ? 'text' : 'password'\"\n name=\"confirmPassword\"\n #confirm=\"ngModel\"\n [(ngModel)]=\"confirmPassword\"\n autocomplete=\"new-password\"\n [required]=\"required\"\n [aclValidateFn]=\"model | pure: validateConfirmPassword\"\n />\n @if (toggleable) {\n <aui-icon\n auiInputSuffix\n class=\"tw-icon-m tw-cursor-pointer hover:tw-text-primary\"\n [icon]=\"showPassword ? 'eye_s' : 'eye_slash_s'\"\n (click)=\"showPassword = !showPassword\"\n ></aui-icon>\n }\n </aui-input-group>\n <acl-errors-mapper\n auiFormItemError\n [errors]=\"confirm?.errors\"\n [errorsMapper]=\"{\n notMatch: 'confirm_password_not_match' | translate,\n }\"\n ></acl-errors-mapper>\n </aui-form-item>\n}\n" }]
7143
+ ], template: "<aui-form-item [width]=\"width\">\n <label auiFormItemLabel>{{ label || ('password' | translate) }}</label>\n @if (showInput) {\n <aui-input-group\n class=\"flex-1\"\n auiFormItemControl\n [required]=\"required\"\n >\n <input\n aui-input\n [type]=\"showPassword ? 'text' : 'password'\"\n name=\"password\"\n #password=\"ngModel\"\n [ngModel]=\"model\"\n (ngModelChange)=\"emitModel($event)\"\n autocomplete=\"new-password\"\n [required]=\"required\"\n [aclStrongPassword]=\"strongPassword\"\n [specialChars]=\"specialChars\"\n [pattern]=\"strongPassword ? null : pattern\"\n [placeholder]=\"placeholder\"\n [aclErrorsMapperOutlet]=\"passwordError\"\n [aclErrorsMapper]=\"{\n pattern: strongPassword\n ? ('strong_password_pattern_tip'\n | translate\n : {\n chars: specialChars.split('').join(', '),\n })\n : ('invalid_pattern' | translate),\n }\"\n />\n @if (toggleable) {\n <aui-icon\n auiInputSuffix\n class=\"toggle-icon\"\n [icon]=\"showPassword ? 'eye_s' : 'eye_slash_s'\"\n (click)=\"showPassword = !showPassword\"\n ></aui-icon>\n }\n </aui-input-group>\n }\n @if (hint) {\n <div auiFormItemHint>\n @if (isTemplateRef(hint)) {\n <ng-container *ngTemplateOutlet=\"hint\"></ng-container>\n } @else {\n {{ hint }}\n }\n </div>\n }\n <div\n #passwordError\n auiFormItemError\n ></div>\n @if (!showInput) {\n <span>******</span>\n @if (!readonly) {\n <button\n aui-button=\"text\"\n (click)=\"updatePasswd()\"\n >\n <aui-icon icon=\"pencil\"></aui-icon>\n </button>\n }\n }\n</aui-form-item>\n@if (showInput && enableConfirm) {\n <aui-form-item [width]=\"width\">\n <label auiFormItemLabel>{{ 'confirm_password' | translate }}</label>\n <aui-input-group\n class=\"flex-1\"\n auiFormItemControl\n [required]=\"required\"\n >\n <input\n aui-input\n [type]=\"showPassword ? 'text' : 'password'\"\n name=\"confirmPassword\"\n #confirm=\"ngModel\"\n [(ngModel)]=\"confirmPassword\"\n autocomplete=\"new-password\"\n [required]=\"required\"\n [aclValidateFn]=\"model | pure: validateConfirmPassword\"\n />\n @if (toggleable) {\n <aui-icon\n auiInputSuffix\n class=\"toggle-icon\"\n [icon]=\"showPassword ? 'eye_s' : 'eye_slash_s'\"\n (click)=\"showPassword = !showPassword\"\n ></aui-icon>\n }\n </aui-input-group>\n <acl-errors-mapper\n auiFormItemError\n [errors]=\"confirm?.errors\"\n [errorsMapper]=\"{\n notMatch: 'confirm_password_not_match' | translate,\n }\"\n ></acl-errors-mapper>\n </aui-form-item>\n}\n", styles: [".flex-1{flex:1 1 0%}.toggle-icon{font-size:14px;cursor:pointer}.toggle-icon:hover{color:rgb(var(--aui-color-primary))}\n"] }]
7201
7144
  }], propDecorators: { initPassword: [{
7202
7145
  type: Input
7203
7146
  }], label: [{
@@ -7522,11 +7465,11 @@ class SearchPanelComponent {
7522
7465
  return panels?.length % 3 === 0;
7523
7466
  }
7524
7467
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SearchPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7525
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: SearchPanelComponent, isStandalone: true, selector: "acl-search-panel", inputs: { enableEnterHandler: "enableEnterHandler" }, outputs: { searchEvent: "searchEvent", resetSearch: "resetSearch" }, host: { listeners: { "document:keydown.enter": "enter()" } }, queries: [{ propertyName: "items", predicate: SearchItemComponent, descendants: true }], ngImport: i0, template: "<div class=\"search-panel\">\n <ng-content></ng-content>\n <acl-search-item [style.width]=\"(isFulWidth$$ | async) ? '100%' : ''\">\n <div class=\"tw-justify-end tw-w-full search\">\n <button\n type=\"button\"\n aui-button=\"primary\"\n (click)=\"searchEvent.emit()\"\n >\n {{ 'search' | translate }}\n </button>\n <button\n type=\"button\"\n aui-button\n (click)=\"resetSearch.emit()\"\n >\n {{ 'reset' | translate }}\n </button>\n\n <ng-content select=\"[additional]\"></ng-content>\n </div>\n </acl-search-item>\n</div>\n", styles: [":host::ng-deep aui-select{width:100%}:host::ng-deep .search-panel{display:flex;justify-content:space-between;flex-wrap:wrap;margin-bottom:-16px}:host::ng-deep .search-panel acl-search-item{width:33.33%}:host::ng-deep .search-panel acl-search-item .search-panel__item{width:100%;margin-bottom:16px;display:inline-flex}:host::ng-deep .search-panel acl-search-item .search-panel__item>*{display:inline-flex}:host::ng-deep .search-panel acl-search-item .search-panel__item>label{padding-right:8px;justify-content:flex-end;text-align:right;line-height:var(--aui-line-height-s);align-items:center;min-width:70px;margin-left:20px}html:not([lang|=zh]) :host::ng-deep .search-panel acl-search-item .search-panel__item>label{min-width:110px}:host::ng-deep .search-panel acl-search-item .search-panel__item>label:after{content:\":\";margin-left:2px}:host::ng-deep .search-panel acl-search-item .search-panel__item>aui-select{flex:1}:host::ng-deep .search-panel acl-search-item:nth-of-type(3n+1) .search-panel__item label{margin-left:0}\n"], dependencies: [{ kind: "component", type: SearchItemComponent, selector: "acl-search-item" }, { kind: "component", type: ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7468
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: SearchPanelComponent, isStandalone: true, selector: "acl-search-panel", inputs: { enableEnterHandler: "enableEnterHandler" }, outputs: { searchEvent: "searchEvent", resetSearch: "resetSearch" }, host: { listeners: { "document:keydown.enter": "enter()" } }, queries: [{ propertyName: "items", predicate: SearchItemComponent, descendants: true }], ngImport: i0, template: "<div class=\"search-panel\">\n <ng-content></ng-content>\n <acl-search-item [style.width]=\"(isFulWidth$$ | async) ? '100%' : ''\">\n <div class=\"search-actions search\">\n <button\n type=\"button\"\n aui-button=\"primary\"\n (click)=\"searchEvent.emit()\"\n >\n {{ 'search' | translate }}\n </button>\n <button\n type=\"button\"\n aui-button\n (click)=\"resetSearch.emit()\"\n >\n {{ 'reset' | translate }}\n </button>\n\n <ng-content select=\"[additional]\"></ng-content>\n </div>\n </acl-search-item>\n</div>\n", styles: [":host::ng-deep aui-select{width:100%}:host::ng-deep .search-panel{display:flex;justify-content:space-between;flex-wrap:wrap;margin-bottom:-16px}:host::ng-deep .search-panel acl-search-item{width:33.33%}:host::ng-deep .search-panel acl-search-item .search-panel__item{width:100%;margin-bottom:16px;display:inline-flex}:host::ng-deep .search-panel acl-search-item .search-panel__item>*{display:inline-flex}:host::ng-deep .search-panel acl-search-item .search-panel__item>label{padding-right:8px;justify-content:flex-end;text-align:right;line-height:var(--aui-line-height-s);align-items:center;min-width:70px;margin-left:20px}html:not([lang|=zh]) :host::ng-deep .search-panel acl-search-item .search-panel__item>label{min-width:110px}:host::ng-deep .search-panel acl-search-item .search-panel__item>label:after{content:\":\";margin-left:2px}:host::ng-deep .search-panel acl-search-item .search-panel__item>aui-select{flex:1}:host::ng-deep .search-panel acl-search-item:nth-of-type(3n+1) .search-panel__item label{margin-left:0}.search-actions{display:flex;justify-content:flex-end;width:100%}\n"], dependencies: [{ kind: "component", type: SearchItemComponent, selector: "acl-search-item" }, { kind: "component", type: ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7526
7469
  }
7527
7470
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SearchPanelComponent, decorators: [{
7528
7471
  type: Component,
7529
- args: [{ selector: 'acl-search-panel', changeDetection: ChangeDetectionStrategy.OnPush, imports: [SearchItemComponent, ButtonComponent, TranslatePipe, AsyncPipe], standalone: true, template: "<div class=\"search-panel\">\n <ng-content></ng-content>\n <acl-search-item [style.width]=\"(isFulWidth$$ | async) ? '100%' : ''\">\n <div class=\"tw-justify-end tw-w-full search\">\n <button\n type=\"button\"\n aui-button=\"primary\"\n (click)=\"searchEvent.emit()\"\n >\n {{ 'search' | translate }}\n </button>\n <button\n type=\"button\"\n aui-button\n (click)=\"resetSearch.emit()\"\n >\n {{ 'reset' | translate }}\n </button>\n\n <ng-content select=\"[additional]\"></ng-content>\n </div>\n </acl-search-item>\n</div>\n", styles: [":host::ng-deep aui-select{width:100%}:host::ng-deep .search-panel{display:flex;justify-content:space-between;flex-wrap:wrap;margin-bottom:-16px}:host::ng-deep .search-panel acl-search-item{width:33.33%}:host::ng-deep .search-panel acl-search-item .search-panel__item{width:100%;margin-bottom:16px;display:inline-flex}:host::ng-deep .search-panel acl-search-item .search-panel__item>*{display:inline-flex}:host::ng-deep .search-panel acl-search-item .search-panel__item>label{padding-right:8px;justify-content:flex-end;text-align:right;line-height:var(--aui-line-height-s);align-items:center;min-width:70px;margin-left:20px}html:not([lang|=zh]) :host::ng-deep .search-panel acl-search-item .search-panel__item>label{min-width:110px}:host::ng-deep .search-panel acl-search-item .search-panel__item>label:after{content:\":\";margin-left:2px}:host::ng-deep .search-panel acl-search-item .search-panel__item>aui-select{flex:1}:host::ng-deep .search-panel acl-search-item:nth-of-type(3n+1) .search-panel__item label{margin-left:0}\n"] }]
7472
+ args: [{ selector: 'acl-search-panel', changeDetection: ChangeDetectionStrategy.OnPush, imports: [SearchItemComponent, ButtonComponent, TranslatePipe, AsyncPipe], standalone: true, template: "<div class=\"search-panel\">\n <ng-content></ng-content>\n <acl-search-item [style.width]=\"(isFulWidth$$ | async) ? '100%' : ''\">\n <div class=\"search-actions search\">\n <button\n type=\"button\"\n aui-button=\"primary\"\n (click)=\"searchEvent.emit()\"\n >\n {{ 'search' | translate }}\n </button>\n <button\n type=\"button\"\n aui-button\n (click)=\"resetSearch.emit()\"\n >\n {{ 'reset' | translate }}\n </button>\n\n <ng-content select=\"[additional]\"></ng-content>\n </div>\n </acl-search-item>\n</div>\n", styles: [":host::ng-deep aui-select{width:100%}:host::ng-deep .search-panel{display:flex;justify-content:space-between;flex-wrap:wrap;margin-bottom:-16px}:host::ng-deep .search-panel acl-search-item{width:33.33%}:host::ng-deep .search-panel acl-search-item .search-panel__item{width:100%;margin-bottom:16px;display:inline-flex}:host::ng-deep .search-panel acl-search-item .search-panel__item>*{display:inline-flex}:host::ng-deep .search-panel acl-search-item .search-panel__item>label{padding-right:8px;justify-content:flex-end;text-align:right;line-height:var(--aui-line-height-s);align-items:center;min-width:70px;margin-left:20px}html:not([lang|=zh]) :host::ng-deep .search-panel acl-search-item .search-panel__item>label{min-width:110px}:host::ng-deep .search-panel acl-search-item .search-panel__item>label:after{content:\":\";margin-left:2px}:host::ng-deep .search-panel acl-search-item .search-panel__item>aui-select{flex:1}:host::ng-deep .search-panel acl-search-item:nth-of-type(3n+1) .search-panel__item label{margin-left:0}.search-actions{display:flex;justify-content:flex-end;width:100%}\n"] }]
7530
7473
  }], propDecorators: { enableEnterHandler: [{
7531
7474
  type: Input
7532
7475
  }], searchEvent: [{
@@ -7727,7 +7670,7 @@ class PodStatusComponent {
7727
7670
  };
7728
7671
  }
7729
7672
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PodStatusComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7730
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: PodStatusComponent, isStandalone: true, selector: "acl-pod-status", inputs: { pod: "pod", disableMessageOverview: "disableMessageOverview" }, ngImport: i0, template: "@if (pod | pure: getPodStatus; as status) {\n <div class=\"status-wrapper\">\n <acl-status-icon\n [status]=\"status | pure: getPodAggregatedStatus\"\n [colorMapper]=\"PodStatusColorMapper\"\n [iconMapper]=\"PodStatusIconMapper\"\n [withText]=\"false\"\n [ngStyle]=\"{ 'margin-right': 0 }\"\n ></acl-status-icon>\n <div class=\"tw-flex\">\n {{ status }}\n <ng-container\n [ngTemplateOutlet]=\"readyContainerTmpl\"\n [ngTemplateOutletContext]=\"{\n $implicit: pod | pure: getReadyContainer,\n }\"\n ></ng-container>\n <ng-template\n #readyContainerTmpl\n let-data\n >\n ({{ data.ready }}/{{ data.all }})\n </ng-template>\n @if (pod | pure: getPodErrorMessages; as messages) {\n @if (messages?.length && !disableMessageOverview) {\n <aui-icon\n icon=\"file_magnifier\"\n class=\"message-tip-icon\"\n [auiTooltip]=\"\n messages.length === 1 ? onlyOnePodMessage : podMessages\n \"\n [auiTooltipContext]=\"{ messages: messages }\"\n size=\"14\"\n auiTooltipClass=\"condition-message-tip\"\n ></aui-icon>\n }\n }\n </div>\n </div>\n} @else {\n -\n}\n<ng-template\n #podMessages\n let-messages=\"messages\"\n>\n <ul class=\"pod-messages\">\n @for (msg of messages; track msg) {\n <li><em>&bull;</em>{{ msg }}</li>\n }\n </ul>\n</ng-template>\n<ng-template\n #onlyOnePodMessage\n let-messages=\"messages\"\n>\n {{ messages[0] }}\n</ng-template>\n", styles: [":host ::ng-deep .condition-message-tip{white-space:pre-line}:host{display:flex}:host .message-tip-icon{margin-left:6px}:host .status-wrapper{display:flex;overflow:hidden;text-overflow:ellipsis}.pod-messages li{padding-left:8px}.pod-messages li em{color:rgb(var(--aui-color-n-4));margin-right:4px;margin-left:-8px;font-size:14px}\n"], dependencies: [{ kind: "component", type: StatusIconComponent, selector: "acl-status-icon", inputs: ["status", "withText", "colorMapper", "iconMapper", "disabled", "iconSize"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i1.IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1.TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: PurePipe, name: "pure" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7673
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: PodStatusComponent, isStandalone: true, selector: "acl-pod-status", inputs: { pod: "pod", disableMessageOverview: "disableMessageOverview" }, ngImport: i0, template: "@if (pod | pure: getPodStatus; as status) {\n <div class=\"status-wrapper\">\n <acl-status-icon\n [status]=\"status | pure: getPodAggregatedStatus\"\n [colorMapper]=\"PodStatusColorMapper\"\n [iconMapper]=\"PodStatusIconMapper\"\n [withText]=\"false\"\n [ngStyle]=\"{ 'margin-right': 0 }\"\n ></acl-status-icon>\n <div class=\"status-flex\">\n {{ status }}\n <ng-container\n [ngTemplateOutlet]=\"readyContainerTmpl\"\n [ngTemplateOutletContext]=\"{\n $implicit: pod | pure: getReadyContainer,\n }\"\n ></ng-container>\n <ng-template\n #readyContainerTmpl\n let-data\n >\n ({{ data.ready }}/{{ data.all }})\n </ng-template>\n @if (pod | pure: getPodErrorMessages; as messages) {\n @if (messages?.length && !disableMessageOverview) {\n <aui-icon\n icon=\"file_magnifier\"\n class=\"message-tip-icon\"\n [auiTooltip]=\"\n messages.length === 1 ? onlyOnePodMessage : podMessages\n \"\n [auiTooltipContext]=\"{ messages: messages }\"\n size=\"14\"\n auiTooltipClass=\"condition-message-tip\"\n ></aui-icon>\n }\n }\n </div>\n </div>\n} @else {\n -\n}\n<ng-template\n #podMessages\n let-messages=\"messages\"\n>\n <ul class=\"pod-messages\">\n @for (msg of messages; track msg) {\n <li><em>&bull;</em>{{ msg }}</li>\n }\n </ul>\n</ng-template>\n<ng-template\n #onlyOnePodMessage\n let-messages=\"messages\"\n>\n {{ messages[0] }}\n</ng-template>\n", styles: [":host ::ng-deep .condition-message-tip{white-space:pre-line}:host{display:flex}:host .message-tip-icon{margin-left:6px}:host .status-wrapper{display:flex;overflow:hidden;text-overflow:ellipsis}.pod-messages li{padding-left:8px}.pod-messages li em{color:rgb(var(--aui-color-n-4));margin-right:4px;margin-left:-8px;font-size:14px}.status-flex{display:flex}\n"], dependencies: [{ kind: "component", type: StatusIconComponent, selector: "acl-status-icon", inputs: ["status", "withText", "colorMapper", "iconMapper", "disabled", "iconSize"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i1.IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1.TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: PurePipe, name: "pure" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7731
7674
  }
7732
7675
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PodStatusComponent, decorators: [{
7733
7676
  type: Component,
@@ -7738,7 +7681,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
7738
7681
  NgStyle,
7739
7682
  NgTemplateOutlet,
7740
7683
  PurePipe,
7741
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (pod | pure: getPodStatus; as status) {\n <div class=\"status-wrapper\">\n <acl-status-icon\n [status]=\"status | pure: getPodAggregatedStatus\"\n [colorMapper]=\"PodStatusColorMapper\"\n [iconMapper]=\"PodStatusIconMapper\"\n [withText]=\"false\"\n [ngStyle]=\"{ 'margin-right': 0 }\"\n ></acl-status-icon>\n <div class=\"tw-flex\">\n {{ status }}\n <ng-container\n [ngTemplateOutlet]=\"readyContainerTmpl\"\n [ngTemplateOutletContext]=\"{\n $implicit: pod | pure: getReadyContainer,\n }\"\n ></ng-container>\n <ng-template\n #readyContainerTmpl\n let-data\n >\n ({{ data.ready }}/{{ data.all }})\n </ng-template>\n @if (pod | pure: getPodErrorMessages; as messages) {\n @if (messages?.length && !disableMessageOverview) {\n <aui-icon\n icon=\"file_magnifier\"\n class=\"message-tip-icon\"\n [auiTooltip]=\"\n messages.length === 1 ? onlyOnePodMessage : podMessages\n \"\n [auiTooltipContext]=\"{ messages: messages }\"\n size=\"14\"\n auiTooltipClass=\"condition-message-tip\"\n ></aui-icon>\n }\n }\n </div>\n </div>\n} @else {\n -\n}\n<ng-template\n #podMessages\n let-messages=\"messages\"\n>\n <ul class=\"pod-messages\">\n @for (msg of messages; track msg) {\n <li><em>&bull;</em>{{ msg }}</li>\n }\n </ul>\n</ng-template>\n<ng-template\n #onlyOnePodMessage\n let-messages=\"messages\"\n>\n {{ messages[0] }}\n</ng-template>\n", styles: [":host ::ng-deep .condition-message-tip{white-space:pre-line}:host{display:flex}:host .message-tip-icon{margin-left:6px}:host .status-wrapper{display:flex;overflow:hidden;text-overflow:ellipsis}.pod-messages li{padding-left:8px}.pod-messages li em{color:rgb(var(--aui-color-n-4));margin-right:4px;margin-left:-8px;font-size:14px}\n"] }]
7684
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (pod | pure: getPodStatus; as status) {\n <div class=\"status-wrapper\">\n <acl-status-icon\n [status]=\"status | pure: getPodAggregatedStatus\"\n [colorMapper]=\"PodStatusColorMapper\"\n [iconMapper]=\"PodStatusIconMapper\"\n [withText]=\"false\"\n [ngStyle]=\"{ 'margin-right': 0 }\"\n ></acl-status-icon>\n <div class=\"status-flex\">\n {{ status }}\n <ng-container\n [ngTemplateOutlet]=\"readyContainerTmpl\"\n [ngTemplateOutletContext]=\"{\n $implicit: pod | pure: getReadyContainer,\n }\"\n ></ng-container>\n <ng-template\n #readyContainerTmpl\n let-data\n >\n ({{ data.ready }}/{{ data.all }})\n </ng-template>\n @if (pod | pure: getPodErrorMessages; as messages) {\n @if (messages?.length && !disableMessageOverview) {\n <aui-icon\n icon=\"file_magnifier\"\n class=\"message-tip-icon\"\n [auiTooltip]=\"\n messages.length === 1 ? onlyOnePodMessage : podMessages\n \"\n [auiTooltipContext]=\"{ messages: messages }\"\n size=\"14\"\n auiTooltipClass=\"condition-message-tip\"\n ></aui-icon>\n }\n }\n </div>\n </div>\n} @else {\n -\n}\n<ng-template\n #podMessages\n let-messages=\"messages\"\n>\n <ul class=\"pod-messages\">\n @for (msg of messages; track msg) {\n <li><em>&bull;</em>{{ msg }}</li>\n }\n </ul>\n</ng-template>\n<ng-template\n #onlyOnePodMessage\n let-messages=\"messages\"\n>\n {{ messages[0] }}\n</ng-template>\n", styles: [":host ::ng-deep .condition-message-tip{white-space:pre-line}:host{display:flex}:host .message-tip-icon{margin-left:6px}:host .status-wrapper{display:flex;overflow:hidden;text-overflow:ellipsis}.pod-messages li{padding-left:8px}.pod-messages li em{color:rgb(var(--aui-color-n-4));margin-right:4px;margin-left:-8px;font-size:14px}.status-flex{display:flex}\n"] }]
7742
7685
  }], propDecorators: { pod: [{
7743
7686
  type: Input
7744
7687
  }], disableMessageOverview: [{
@@ -7779,9 +7722,9 @@ const FileResultType = {
7779
7722
  TEXT: 'Text',
7780
7723
  };
7781
7724
  class UploadFileComponent {
7782
- constructor(notification, translate) {
7783
- this.notification = notification;
7784
- this.translate = translate;
7725
+ constructor() {
7726
+ this.notification = inject(NotificationService);
7727
+ this.translate = inject(TranslateService);
7785
7728
  this.resultType = FileResultType.TEXT;
7786
7729
  }
7787
7730
  onClick() {
@@ -7824,7 +7767,7 @@ class UploadFileComponent {
7824
7767
  registerOnTouched() {
7825
7768
  //
7826
7769
  }
7827
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UploadFileComponent, deps: [{ token: i1.NotificationService }, { token: i2$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
7770
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UploadFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7828
7771
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: UploadFileComponent, isStandalone: true, selector: "acl-upload-file", inputs: { disabled: "disabled", accept: "accept", multiple: "multiple", resultType: "resultType" }, host: { listeners: { "click": "onClick()" } }, providers: [
7829
7772
  {
7830
7773
  provide: NG_VALUE_ACCESSOR,
@@ -7842,7 +7785,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
7842
7785
  multi: true,
7843
7786
  },
7844
7787
  ], standalone: true, imports: [EFFECT_DIRECTIVE_MODULE], template: "<ng-content></ng-content>\n<input\n #fileInput\n class=\"file-input\"\n type=\"file\"\n [attr.accept]=\"accept\"\n [multiple]=\"multiple\"\n (change)=\"onChange($event)\"\n/>\n", styles: [":host{position:relative;display:inline-flex;overflow:hidden}.file-input{position:absolute;inset:0;opacity:0;z-index:-1}\n"] }]
7845
- }], ctorParameters: () => [{ type: i1.NotificationService }, { type: i2$1.TranslateService }], propDecorators: { disabled: [{
7788
+ }], propDecorators: { disabled: [{
7846
7789
  type: Input
7847
7790
  }], accept: [{
7848
7791
  type: Input
@@ -8157,7 +8100,7 @@ class PageGuardComponent {
8157
8100
  this.reasonSrc$ = combineLatest([
8158
8101
  this.theme.currentTheme$,
8159
8102
  this.reasonModel$,
8160
- ]).pipe(map(([theme, reasonModel]) => `assets/images/${theme}/${reasonModel.src}`), publishRef());
8103
+ ]).pipe(map(([theme, reasonModel]) => `/console-assets/images/${theme}/${reasonModel.src}`), publishRef());
8161
8104
  }
8162
8105
  get allowed() {
8163
8106
  return this.status === GuardStatus.Available;
@@ -8254,11 +8197,11 @@ class ListDisplayComponent {
8254
8197
  };
8255
8198
  }
8256
8199
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ListDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8257
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: ListDisplayComponent, isStandalone: true, selector: "acl-list-display", inputs: { data: "data", threshold: "threshold", mode: "mode", direction: "direction", template: "template" }, queries: [{ propertyName: "childTemplate", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: "<div\n class=\"tw-flex\"\n [class]=\"{ 'tw-flex-col': direction === 'column' }\"\n>\n <ul>\n @for (item of threshold ? data.slice(0, threshold) : data; track item) {\n <li>\n <ng-container\n *ngTemplateOutlet=\"\n childTemplate || template;\n context: item | pure: templateContext\n \"\n ></ng-container>\n </li>\n }\n </ul>\n @if (threshold && data.length > threshold) {\n <div [class]=\"{ 'tw-ml-8': direction === 'row' }\">\n @if (mode === 'total') {\n {{ 'in_total' | translate }}\n <a\n [auiTooltip]=\"total\"\n auiTooltipType=\"info\"\n auiTooltipPosition=\"bottom center\"\n >\n {{ data.length }}\n </a>\n {{ 'ge' | translate }}\n }\n @if (mode === 'more') {\n {{ 'more' | translate }}\n <a\n [auiTooltip]=\"more\"\n [auiTooltipContext]=\"{ data: data.slice(threshold) }\"\n auiTooltipType=\"info\"\n auiTooltipPosition=\"bottom center\"\n >\n {{ data.slice(threshold).length }}\n </a>\n {{ 'tiao' | translate }}\n }\n </div>\n }\n</div>\n\n<ng-template #total>\n <acl-list-display\n [data]=\"data\"\n [template]=\"childTemplate || template\"\n ></acl-list-display>\n</ng-template>\n\n<ng-template\n #more\n let-data=\"data\"\n>\n <acl-list-display\n [data]=\"data\"\n [template]=\"childTemplate || template\"\n ></acl-list-display>\n</ng-template>\n", styles: ["li{line-height:20px}\n"], dependencies: [{ kind: "component", type: ListDisplayComponent, selector: "acl-list-display", inputs: ["data", "threshold", "mode", "direction", "template"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }, { kind: "pipe", type: PurePipe, name: "pure" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8200
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: ListDisplayComponent, isStandalone: true, selector: "acl-list-display", inputs: { data: "data", threshold: "threshold", mode: "mode", direction: "direction", template: "template" }, queries: [{ propertyName: "childTemplate", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: "<div\n class=\"list-display-container\"\n [class.flex-col]=\"direction === 'column'\"\n>\n <ul>\n @for (item of threshold ? data.slice(0, threshold) : data; track item) {\n <li>\n <ng-container\n *ngTemplateOutlet=\"\n childTemplate || template;\n context: item | pure: templateContext\n \"\n ></ng-container>\n </li>\n }\n </ul>\n @if (threshold && data.length > threshold) {\n <div [class.ml-8]=\"direction === 'row'\">\n @if (mode === 'total') {\n {{ 'in_total' | translate }}\n <a\n [auiTooltip]=\"total\"\n auiTooltipType=\"info\"\n auiTooltipPosition=\"bottom center\"\n >\n {{ data.length }}\n </a>\n {{ 'ge' | translate }}\n }\n @if (mode === 'more') {\n {{ 'more' | translate }}\n <a\n [auiTooltip]=\"more\"\n [auiTooltipContext]=\"{ data: data.slice(threshold) }\"\n auiTooltipType=\"info\"\n auiTooltipPosition=\"bottom center\"\n >\n {{ data.slice(threshold).length }}\n </a>\n {{ 'tiao' | translate }}\n }\n </div>\n }\n</div>\n\n<ng-template #total>\n <acl-list-display\n [data]=\"data\"\n [template]=\"childTemplate || template\"\n ></acl-list-display>\n</ng-template>\n\n<ng-template\n #more\n let-data=\"data\"\n>\n <acl-list-display\n [data]=\"data\"\n [template]=\"childTemplate || template\"\n ></acl-list-display>\n</ng-template>\n", styles: ["li{line-height:20px}.list-display-container{display:flex}.flex-col{flex-direction:column}.ml-8{margin-left:8px}\n"], dependencies: [{ kind: "component", type: ListDisplayComponent, selector: "acl-list-display", inputs: ["data", "threshold", "mode", "direction", "template"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }, { kind: "pipe", type: PurePipe, name: "pure" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8258
8201
  }
8259
8202
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ListDisplayComponent, decorators: [{
8260
8203
  type: Component,
8261
- args: [{ standalone: true, selector: 'acl-list-display', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet, PurePipe, TranslatePipe, TOOLTIP_MODULE], template: "<div\n class=\"tw-flex\"\n [class]=\"{ 'tw-flex-col': direction === 'column' }\"\n>\n <ul>\n @for (item of threshold ? data.slice(0, threshold) : data; track item) {\n <li>\n <ng-container\n *ngTemplateOutlet=\"\n childTemplate || template;\n context: item | pure: templateContext\n \"\n ></ng-container>\n </li>\n }\n </ul>\n @if (threshold && data.length > threshold) {\n <div [class]=\"{ 'tw-ml-8': direction === 'row' }\">\n @if (mode === 'total') {\n {{ 'in_total' | translate }}\n <a\n [auiTooltip]=\"total\"\n auiTooltipType=\"info\"\n auiTooltipPosition=\"bottom center\"\n >\n {{ data.length }}\n </a>\n {{ 'ge' | translate }}\n }\n @if (mode === 'more') {\n {{ 'more' | translate }}\n <a\n [auiTooltip]=\"more\"\n [auiTooltipContext]=\"{ data: data.slice(threshold) }\"\n auiTooltipType=\"info\"\n auiTooltipPosition=\"bottom center\"\n >\n {{ data.slice(threshold).length }}\n </a>\n {{ 'tiao' | translate }}\n }\n </div>\n }\n</div>\n\n<ng-template #total>\n <acl-list-display\n [data]=\"data\"\n [template]=\"childTemplate || template\"\n ></acl-list-display>\n</ng-template>\n\n<ng-template\n #more\n let-data=\"data\"\n>\n <acl-list-display\n [data]=\"data\"\n [template]=\"childTemplate || template\"\n ></acl-list-display>\n</ng-template>\n", styles: ["li{line-height:20px}\n"] }]
8204
+ args: [{ standalone: true, selector: 'acl-list-display', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet, PurePipe, TranslatePipe, TOOLTIP_MODULE], template: "<div\n class=\"list-display-container\"\n [class.flex-col]=\"direction === 'column'\"\n>\n <ul>\n @for (item of threshold ? data.slice(0, threshold) : data; track item) {\n <li>\n <ng-container\n *ngTemplateOutlet=\"\n childTemplate || template;\n context: item | pure: templateContext\n \"\n ></ng-container>\n </li>\n }\n </ul>\n @if (threshold && data.length > threshold) {\n <div [class.ml-8]=\"direction === 'row'\">\n @if (mode === 'total') {\n {{ 'in_total' | translate }}\n <a\n [auiTooltip]=\"total\"\n auiTooltipType=\"info\"\n auiTooltipPosition=\"bottom center\"\n >\n {{ data.length }}\n </a>\n {{ 'ge' | translate }}\n }\n @if (mode === 'more') {\n {{ 'more' | translate }}\n <a\n [auiTooltip]=\"more\"\n [auiTooltipContext]=\"{ data: data.slice(threshold) }\"\n auiTooltipType=\"info\"\n auiTooltipPosition=\"bottom center\"\n >\n {{ data.slice(threshold).length }}\n </a>\n {{ 'tiao' | translate }}\n }\n </div>\n }\n</div>\n\n<ng-template #total>\n <acl-list-display\n [data]=\"data\"\n [template]=\"childTemplate || template\"\n ></acl-list-display>\n</ng-template>\n\n<ng-template\n #more\n let-data=\"data\"\n>\n <acl-list-display\n [data]=\"data\"\n [template]=\"childTemplate || template\"\n ></acl-list-display>\n</ng-template>\n", styles: ["li{line-height:20px}.list-display-container{display:flex}.flex-col{flex-direction:column}.ml-8{margin-left:8px}\n"] }]
8262
8205
  }], propDecorators: { data: [{
8263
8206
  type: Input
8264
8207
  }], threshold: [{
@@ -8279,11 +8222,11 @@ class OverviewBannerComponent {
8279
8222
  this.option = {};
8280
8223
  }
8281
8224
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: OverviewBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8282
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: OverviewBannerComponent, isStandalone: true, selector: "acl-overview-banner", inputs: { option: "option" }, ngImport: i0, template: "<div class=\"overview-banner--wrapper\">\n <div class=\"overview-banner\">\n <div class=\"overview-banner__icon\">\n <aui-icon\n class=\"acl-colorful-icon highlight\"\n [icon]=\"'bicolor:' + option?.icon\"\n ></aui-icon>\n </div>\n <div class=\"overview-banner__content\">\n <div class=\"overview-banner__title\">\n {{ option?.title }}\n </div>\n <div class=\"overview-banner__description\">\n {{ option?.description }}\n </div>\n </div>\n </div>\n</div>\n", styles: [".overview-banner--wrapper{border-radius:use-var(border-radius-l);margin-bottom:use-var(spacing-xl);background-color:use-rgb(primary);background-image:url(/assets/images/overview-banner.svg);background-size:cover;background-position:center}.overview-banner{display:flex;align-items:center;padding:24px}.overview-banner__icon{margin-right:20px}.overview-banner__icon aui-icon{display:flex;font-size:56px;width:1em;height:1em}.overview-banner__content{color:#fff}.overview-banner__title{font-size:24px;line-height:36px;font-weight:use-var(font-weight-bolder)}.overview-banner__description{margin-top:4px;font-size:use-var(font-size-m)}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8225
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: OverviewBannerComponent, isStandalone: true, selector: "acl-overview-banner", inputs: { option: "option" }, ngImport: i0, template: "<div class=\"overview-banner--wrapper\">\n <div class=\"overview-banner\">\n <div class=\"overview-banner__icon\">\n <aui-icon\n class=\"acl-colorful-icon highlight\"\n [icon]=\"'bicolor:' + option?.icon\"\n ></aui-icon>\n </div>\n <div class=\"overview-banner__content\">\n <div class=\"overview-banner__title\">\n {{ option?.title }}\n </div>\n <div class=\"overview-banner__description\">\n {{ option?.description }}\n </div>\n </div>\n </div>\n</div>\n", styles: [".overview-banner--wrapper{border-radius:use-var(border-radius-l);margin-bottom:use-var(spacing-xl);background-color:use-rgb(primary);background-image:url(/console-assets/images/overview-banner.svg);background-size:cover;background-position:center}.overview-banner{display:flex;align-items:center;padding:24px}.overview-banner__icon{margin-right:20px}.overview-banner__icon aui-icon{display:flex;font-size:56px;width:1em;height:1em}.overview-banner__content{color:#fff}.overview-banner__title{font-size:24px;line-height:36px;font-weight:use-var(font-weight-bolder)}.overview-banner__description{margin-top:4px;font-size:use-var(font-size-m)}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8283
8226
  }
8284
8227
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: OverviewBannerComponent, decorators: [{
8285
8228
  type: Component,
8286
- args: [{ selector: 'acl-overview-banner', preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [IconComponent], template: "<div class=\"overview-banner--wrapper\">\n <div class=\"overview-banner\">\n <div class=\"overview-banner__icon\">\n <aui-icon\n class=\"acl-colorful-icon highlight\"\n [icon]=\"'bicolor:' + option?.icon\"\n ></aui-icon>\n </div>\n <div class=\"overview-banner__content\">\n <div class=\"overview-banner__title\">\n {{ option?.title }}\n </div>\n <div class=\"overview-banner__description\">\n {{ option?.description }}\n </div>\n </div>\n </div>\n</div>\n", styles: [".overview-banner--wrapper{border-radius:use-var(border-radius-l);margin-bottom:use-var(spacing-xl);background-color:use-rgb(primary);background-image:url(/assets/images/overview-banner.svg);background-size:cover;background-position:center}.overview-banner{display:flex;align-items:center;padding:24px}.overview-banner__icon{margin-right:20px}.overview-banner__icon aui-icon{display:flex;font-size:56px;width:1em;height:1em}.overview-banner__content{color:#fff}.overview-banner__title{font-size:24px;line-height:36px;font-weight:use-var(font-weight-bolder)}.overview-banner__description{margin-top:4px;font-size:use-var(font-size-m)}\n"] }]
8229
+ args: [{ selector: 'acl-overview-banner', preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [IconComponent], template: "<div class=\"overview-banner--wrapper\">\n <div class=\"overview-banner\">\n <div class=\"overview-banner__icon\">\n <aui-icon\n class=\"acl-colorful-icon highlight\"\n [icon]=\"'bicolor:' + option?.icon\"\n ></aui-icon>\n </div>\n <div class=\"overview-banner__content\">\n <div class=\"overview-banner__title\">\n {{ option?.title }}\n </div>\n <div class=\"overview-banner__description\">\n {{ option?.description }}\n </div>\n </div>\n </div>\n</div>\n", styles: [".overview-banner--wrapper{border-radius:use-var(border-radius-l);margin-bottom:use-var(spacing-xl);background-color:use-rgb(primary);background-image:url(/console-assets/images/overview-banner.svg);background-size:cover;background-position:center}.overview-banner{display:flex;align-items:center;padding:24px}.overview-banner__icon{margin-right:20px}.overview-banner__icon aui-icon{display:flex;font-size:56px;width:1em;height:1em}.overview-banner__content{color:#fff}.overview-banner__title{font-size:24px;line-height:36px;font-weight:use-var(font-weight-bolder)}.overview-banner__description{margin-top:4px;font-size:use-var(font-size-m)}\n"] }]
8287
8230
  }], propDecorators: { option: [{
8288
8231
  type: Input
8289
8232
  }] } });
@@ -8420,7 +8363,7 @@ class MultiSearchActionInputComponent extends BaseResourceFormComponent {
8420
8363
  // 键盘delete事件。
8421
8364
  this.delete = new EventEmitter();
8422
8365
  // 键盘enter事件
8423
- this.searchEvent = new EventEmitter();
8366
+ this.search = new EventEmitter();
8424
8367
  this._conditionsModel = '';
8425
8368
  this.conditionsModel$$ = new BehaviorSubject('');
8426
8369
  this.hasFilteredConditions$ = combineLatest([
@@ -8622,7 +8565,7 @@ class MultiSearchActionInputComponent extends BaseResourceFormComponent {
8622
8565
  this.conditionsModel = currentLabel;
8623
8566
  // 如果是单选,则需要在选中时抛出complete事件,并抛出search事件
8624
8567
  this.ifComplete(false, true);
8625
- this.searchEvent.emit();
8568
+ this.search.emit();
8626
8569
  }
8627
8570
  }
8628
8571
  // 多选
@@ -8813,7 +8756,7 @@ class MultiSearchActionInputComponent extends BaseResourceFormComponent {
8813
8756
  else {
8814
8757
  // 当前操作内容已完成,,则会抛出enter事件
8815
8758
  if (this.ifComplete(false, true)) {
8816
- this.searchEvent.emit();
8759
+ this.search.emit();
8817
8760
  }
8818
8761
  else if (this.conditionCreatable && this.isConditionSelecting) {
8819
8762
  this.setConditionByModel();
@@ -8931,7 +8874,7 @@ class MultiSearchActionInputComponent extends BaseResourceFormComponent {
8931
8874
  return conditionsModel === current;
8932
8875
  }
8933
8876
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: MultiSearchActionInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8934
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: MultiSearchActionInputComponent, isStandalone: true, selector: "acl-multi-search-action-input", inputs: { placeholder: "placeholder", conditionCreatable: "conditionCreatable", isEditing: "isEditing", hidden: "hidden", autoScroll: "autoScroll", conditionConfig: "conditionConfig", showFootAction: "showFootAction", existingConditions: "existingConditions" }, outputs: { completed: "completed", editing: "editing", delete: "delete", searchEvent: "searchEvent" }, host: { properties: { "hidden": "this.hiddenState" } }, viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "toolTipRef", first: true, predicate: ["toolTipRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"tw-flex tw-items-center tw-text-m\">\n @if (form.value; as activeCondition) {\n <span\n class=\"tw-ml-6 tw-max-w-[45%] tw-flex-shrink-0 tw-text-ellipsis tw-overflow-hidden\"\n (click)=\"activeConditionClick(); $event.stopPropagation()\"\n >\n {{ activeCondition | pure: getConditionLabel }}\n </span>\n @if (activeCondition.operator) {\n <span\n class=\"tw-ml-6\"\n (click)=\"activeOperatorClick(); $event.stopPropagation()\"\n >\n {{ activeCondition.operator }}\n </span>\n }\n @if (!isEditing) {\n <span\n class=\"tw-ml-6 tw-max-w-[45%] tw-flex-shrink-0 tw-text-ellipsis tw-overflow-hidden\"\n (click)=\"activeValueClick(); $event.stopPropagation()\"\n >\n {{ getValueContent(activeCondition) }}\n </span>\n }\n }\n <input\n class=\"search-input\"\n [ngClass]=\"{\n 'mock-input':\n (!isEditing && !isConditionSelecting) || isOperatorSelecting,\n }\"\n [maxlength]=\"isOperatorSelecting ? 0 : MAX_SAFE_INTEGER\"\n aui-input\n #inputRef\n #toolTipRef=\"auiTooltip\"\n [placeholder]=\"isConditionSelecting ? placeholder : ''\"\n [(ngModel)]=\"conditionsModel\"\n (ngModelChange)=\"conditionsModel$$.next($event)\"\n (keydown)=\"inputKeydown($event)\"\n (focus)=\"inputFocus()\"\n [auiTooltip]=\"templateRef\"\n auiTooltipAnimType=\"none\"\n auiTooltipTrigger=\"manual\"\n auiTooltipType=\"info\"\n auiTooltipClass=\"multi-search-dropdown\"\n auiTooltipPosition=\"bottom start\"\n />\n</div>\n\n<ng-template #templateRef>\n <div\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- \u7C7B\u76EE\u9009\u62E9 -->\n @if (isConditionSelecting && (conditionsShouldShow$ | async)) {\n @if (hasFilteredConditions$ | async) {\n <ul class=\"tw-min-w-[260px] tw-max-w-[400px]\">\n <ng-container\n [ngTemplateOutlet]=\"categoriesTemp\"\n [ngTemplateOutletContext]=\"{\n normal: (normalConditions$ | async),\n groups: groupConditions$ | async,\n }\"\n ></ng-container>\n </ul>\n } @else {\n <ul class=\"tw-min-w-[260px] tw-max-w-[400px]\">\n <div class=\"no-match-categories-tip\">\n {{ 'no_match_categories_tip' | translate }}\n </div>\n <ng-container\n [ngTemplateOutlet]=\"categoriesTemp\"\n [ngTemplateOutletContext]=\"{\n normal: normalConditionsResource$ | async,\n groups: groupConditionsResource$ | async,\n }\"\n ></ng-container>\n </ul>\n }\n <ng-template\n #categoriesTemp\n let-normal=\"normal\"\n let-groups=\"groups\"\n >\n <ng-container\n [ngTemplateOutlet]=\"liConditionTemp\"\n [ngTemplateOutletContext]=\"{ conditions: normal }\"\n ></ng-container>\n @for (group of groups; track group) {\n @if (group.member?.length) {\n <div\n [title]=\"group.group\"\n class=\"dropdown-group-label dropdown-content\"\n >\n {{ group.group }}\n </div>\n <ng-container\n [ngTemplateOutlet]=\"liConditionTemp\"\n [ngTemplateOutletContext]=\"{ conditions: group.member }\"\n ></ng-container>\n }\n }\n </ng-template>\n }\n\n @if (form.value; as activeCondition) {\n <!-- operator\u9009\u62E9 -->\n @if (isOperatorSelecting) {\n <ul class=\"tw-min-w-[160px]\">\n @for (\n operator of activeCondition.operators || [DEFAULT_OPERATOR];\n track operator\n ) {\n <li (click)=\"selectActiveOperator($any(operator))\">\n <ng-container\n [ngTemplateOutlet]=\"basicLiContentTemp\"\n [ngTemplateOutletContext]=\"{\n isSelect: operator === conditionsModel,\n label: operator,\n }\"\n >\n </ng-container>\n </li>\n }\n </ul>\n }\n <!-- \u5177\u4F53\u6761\u4EF6\u9009\u62E9 -->\n @if (isValueSelecting) {\n @if (\n activeCondition\n | pure\n : hasFilteredValues\n : conditionsModel\n : activeCondition.isMulti\n ) {\n <ul class=\"tw-min-w-[260px] tw-max-w-[400px]\">\n @if (activeCondition.allowSelectAll && activeCondition.isMulti) {\n <li class=\"dropdown-content select-all\">\n <div\n class=\"search-dropdown-item\"\n [ngClass]=\"{\n 'tw-text-p-2': isSelectAll,\n 'tw-bg-p-6': isSelectAll,\n }\"\n (click)=\"selectAllClick()\"\n >\n <div class=\"multi-item\">\n <aui-checkbox\n [value]=\"isSelectAll\"\n [indeterminate]=\"isIndeterminate\"\n ></aui-checkbox>\n <div class=\"search-dropdown-item-label\">\n {{ 'all' | translate }}\n </div>\n </div>\n </div>\n </li>\n }\n <ng-container\n [ngTemplateOutlet]=\"liValueTemp\"\n [ngTemplateOutletContext]=\"{\n values:\n activeCondition\n | pure\n : getNormalValues\n : conditionsModel\n : activeCondition.isMulti,\n activeCondition: activeCondition,\n }\"\n >\n </ng-container>\n @for (\n group of activeCondition\n | pure\n : getValuesGroup\n : conditionsModel\n : activeCondition.isMulti;\n track group\n ) {\n @if (group.member?.length) {\n <div\n [title]=\"group.group\"\n class=\"dropdown-group-label dropdown-content\"\n >\n {{ group.group }}\n </div>\n <ng-container\n [ngTemplateOutlet]=\"liValueTemp\"\n [ngTemplateOutletContext]=\"{\n values: group.member,\n activeCondition: activeCondition,\n }\"\n ></ng-container>\n }\n }\n </ul>\n }\n }\n }\n @if (showFootAction && form?.value?.isMulti) {\n <div class=\"footer\">\n <button\n aui-button=\"text\"\n size=\"mini\"\n (click)=\"confirmSelection()\"\n >\n {{ 'confirm' | translate }}\n </button>\n <button\n aui-button=\"text\"\n size=\"mini\"\n class=\"cancel\"\n (click)=\"toolTipHide()\"\n >\n {{ 'cancel' | translate }}\n </button>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template\n #liConditionTemp\n let-conditions=\"conditions\"\n>\n @for (condition of conditions; track condition) {\n <li\n class=\"dropdown-content\"\n (click)=\"selectActiveCondition(condition)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"basicLiContentTemp\"\n [ngTemplateOutletContext]=\"{\n isSelect:\n condition\n | pure: getConditionLabel\n | pure: isConditionSelected : conditionsModel,\n label: condition | pure: getConditionLabel,\n }\"\n >\n </ng-container>\n </li>\n }\n</ng-template>\n\n<ng-template\n #liValueTemp\n let-values=\"values\"\n let-activeCondition=\"activeCondition\"\n>\n @for (value of values; track value) {\n <li\n class=\"dropdown-content\"\n (click)=\"\n selectValue(value, activeCondition.isMulti);\n $event.stopPropagation();\n $event.preventDefault()\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"basicLiContentTemp\"\n [ngTemplateOutletContext]=\"{\n isSelect:\n value\n | pure: getValueLabel\n | pure\n : isValueSelected\n : conditionsModel || (form.value | pure: getValueContent)\n : activeCondition,\n label: value | pure: getValueLabel,\n isMulti: activeCondition.isMulti,\n }\"\n >\n </ng-container>\n </li>\n }\n</ng-template>\n\n<ng-template\n #basicLiContentTemp\n let-isSelect=\"isSelect\"\n let-label=\"label\"\n let-isMulti=\"isMulti\"\n>\n <div\n [class]=\"DROPDOWN_ITEM_CLASS\"\n [ngClass]=\"{\n 'is-multi-value-select': isSelect,\n }\"\n >\n @if (isMulti) {\n <div class=\"multi-item\">\n <aui-checkbox [value]=\"isSelect\"></aui-checkbox>\n <div\n [title]=\"label\"\n class=\"search-dropdown-item-label\"\n >\n {{ label }}\n </div>\n </div>\n }\n @if (!isMulti) {\n <div\n [title]=\"label\"\n class=\"search-dropdown-item-label\"\n >\n {{ label }}\n </div>\n }\n </div>\n</ng-template>\n", styles: [":host{display:block;padding-top:5px}.search-input{border:none;box-shadow:none!important;height:22px}.mock-input{width:1px!important;flex-shrink:0;padding:0;margin-left:7px}::ng-deep .multi-search-dropdown{padding:0!important;margin-top:8px!important;cursor:pointer;max-height:284px;overflow-y:auto}::ng-deep .multi-search-dropdown ul .dropdown-content:first-child{border:none;padding-top:0;margin-top:0}::ng-deep .multi-search-dropdown .cursor-light{background-color:rgb(var(--aui-color-p-6))}::ng-deep .multi-search-dropdown .is-multi-value-select{background-color:rgb(var(--aui-color-p-6));color:rgb(var(--aui-color-p-2))}::ng-deep .multi-search-dropdown .search-dropdown-item{padding:0 8px}::ng-deep .multi-search-dropdown .search-dropdown-item:hover{background-color:rgb(var(--aui-color-p-6))}::ng-deep .multi-search-dropdown .search-dropdown-item .multi-item{display:flex;height:28px;align-items:center}::ng-deep .multi-search-dropdown .search-dropdown-item .multi-item aui-checkbox{width:24px}::ng-deep .multi-search-dropdown .search-dropdown-item-label{height:28px;line-height:28px;white-space:nowrap;word-break:break-all;overflow:hidden;text-overflow:ellipsis;font-size:var(--aui-font-size-m)}::ng-deep .multi-search-dropdown .dropdown-group-label{font-size:12px;color:rgb(var(--aui-color-n-4));padding-bottom:8px;padding-top:12px;margin-top:12px;margin-left:8px;margin-right:8px;border-top:1px solid rgb(var(--aui-color-n-8));white-space:nowrap;word-break:break-all;overflow:hidden;text-overflow:ellipsis}::ng-deep .multi-search-dropdown .no-match-categories-tip{text-align:center;font-size:12px;color:rgb(var(--aui-color-n-4));border-bottom:1px solid rgb(var(--aui-color-n-8));margin-left:8px;margin-right:8px;margin-bottom:8px;padding-top:4px;padding-bottom:12px}::ng-deep .multi-search-dropdown .select-all{border-bottom:1px solid rgb(var(--aui-color-n-8))!important;margin-bottom:8px}::ng-deep .multi-search-dropdown .footer{display:flex;background:rgb(var(--aui-color-n-10));justify-content:flex-end;border-top:1px solid rgb(var(--aui-color-n-8));position:sticky;bottom:0;height:30px;padding:0 8px;align-items:center}::ng-deep .multi-search-dropdown .footer .cancel{color:rgb(var(--aui-color-n-1))!important}\n"], dependencies: [{ kind: "component", type: InputComponent, selector: "input[aui-input],textarea[aui-input]", inputs: ["size", "disabled"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }, { kind: "component", type: CheckboxComponent, selector: "aui-checkbox", inputs: ["name", "type", "label", "indeterminate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "pipe", type: PurePipe, name: "pure" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8877
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: MultiSearchActionInputComponent, isStandalone: true, selector: "acl-multi-search-action-input", inputs: { placeholder: "placeholder", conditionCreatable: "conditionCreatable", isEditing: "isEditing", hidden: "hidden", autoScroll: "autoScroll", conditionConfig: "conditionConfig", showFootAction: "showFootAction", existingConditions: "existingConditions" }, outputs: { completed: "completed", editing: "editing", delete: "delete", search: "search" }, host: { properties: { "hidden": "this.hiddenState" } }, viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "toolTipRef", first: true, predicate: ["toolTipRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"action-input-container\">\n @if (form.value; as activeCondition) {\n <span\n class=\"condition-label\"\n (click)=\"activeConditionClick(); $event.stopPropagation()\"\n >\n {{ activeCondition | pure: getConditionLabel }}\n </span>\n @if (activeCondition.operator) {\n <span\n class=\"operator-label\"\n (click)=\"activeOperatorClick(); $event.stopPropagation()\"\n >\n {{ activeCondition.operator }}\n </span>\n }\n @if (!isEditing) {\n <span\n class=\"value-label\"\n (click)=\"activeValueClick(); $event.stopPropagation()\"\n >\n {{ getValueContent(activeCondition) }}\n </span>\n }\n }\n <input\n class=\"search-input\"\n [ngClass]=\"{\n 'mock-input':\n (!isEditing && !isConditionSelecting) || isOperatorSelecting,\n }\"\n [maxlength]=\"isOperatorSelecting ? 0 : MAX_SAFE_INTEGER\"\n aui-input\n #inputRef\n #toolTipRef=\"auiTooltip\"\n [placeholder]=\"isConditionSelecting ? placeholder : ''\"\n [(ngModel)]=\"conditionsModel\"\n (ngModelChange)=\"conditionsModel$$.next($event)\"\n (keydown)=\"inputKeydown($event)\"\n (focus)=\"inputFocus()\"\n [auiTooltip]=\"templateRef\"\n auiTooltipAnimType=\"none\"\n auiTooltipTrigger=\"manual\"\n auiTooltipType=\"info\"\n auiTooltipClass=\"multi-search-dropdown\"\n auiTooltipPosition=\"bottom start\"\n />\n</div>\n\n<ng-template #templateRef>\n <div\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- \u7C7B\u76EE\u9009\u62E9 -->\n @if (isConditionSelecting && (conditionsShouldShow$ | async)) {\n @if (hasFilteredConditions$ | async) {\n <ul class=\"dropdown-list\">\n <ng-container\n [ngTemplateOutlet]=\"categoriesTemp\"\n [ngTemplateOutletContext]=\"{\n normal: (normalConditions$ | async),\n groups: groupConditions$ | async,\n }\"\n ></ng-container>\n </ul>\n } @else {\n <ul class=\"dropdown-list\">\n <div class=\"no-match-categories-tip\">\n {{ 'no_match_categories_tip' | translate }}\n </div>\n <ng-container\n [ngTemplateOutlet]=\"categoriesTemp\"\n [ngTemplateOutletContext]=\"{\n normal: normalConditionsResource$ | async,\n groups: groupConditionsResource$ | async,\n }\"\n ></ng-container>\n </ul>\n }\n <ng-template\n #categoriesTemp\n let-normal=\"normal\"\n let-groups=\"groups\"\n >\n <ng-container\n [ngTemplateOutlet]=\"liConditionTemp\"\n [ngTemplateOutletContext]=\"{ conditions: normal }\"\n ></ng-container>\n @for (group of groups; track group) {\n @if (group.member?.length) {\n <div\n [title]=\"group.group\"\n class=\"dropdown-group-label dropdown-content\"\n >\n {{ group.group }}\n </div>\n <ng-container\n [ngTemplateOutlet]=\"liConditionTemp\"\n [ngTemplateOutletContext]=\"{ conditions: group.member }\"\n ></ng-container>\n }\n }\n </ng-template>\n }\n\n @if (form.value; as activeCondition) {\n <!-- operator\u9009\u62E9 -->\n @if (isOperatorSelecting) {\n <ul class=\"operator-list\">\n @for (\n operator of activeCondition.operators || [DEFAULT_OPERATOR];\n track operator\n ) {\n <li (click)=\"selectActiveOperator($any(operator))\">\n <ng-container\n [ngTemplateOutlet]=\"basicLiContentTemp\"\n [ngTemplateOutletContext]=\"{\n isSelect: operator === conditionsModel,\n label: operator,\n }\"\n >\n </ng-container>\n </li>\n }\n </ul>\n }\n <!-- \u5177\u4F53\u6761\u4EF6\u9009\u62E9 -->\n @if (isValueSelecting) {\n @if (\n activeCondition\n | pure\n : hasFilteredValues\n : conditionsModel\n : activeCondition.isMulti\n ) {\n <ul class=\"dropdown-list\">\n @if (activeCondition.allowSelectAll && activeCondition.isMulti) {\n <li class=\"dropdown-content select-all\">\n <div\n class=\"search-dropdown-item\"\n [ngClass]=\"{\n 'active-item': isSelectAll,\n }\"\n (click)=\"selectAllClick()\"\n >\n <div class=\"multi-item\">\n <aui-checkbox\n [value]=\"isSelectAll\"\n [indeterminate]=\"isIndeterminate\"\n ></aui-checkbox>\n <div class=\"search-dropdown-item-label\">\n {{ 'all' | translate }}\n </div>\n </div>\n </div>\n </li>\n }\n <ng-container\n [ngTemplateOutlet]=\"liValueTemp\"\n [ngTemplateOutletContext]=\"{\n values:\n activeCondition\n | pure\n : getNormalValues\n : conditionsModel\n : activeCondition.isMulti,\n activeCondition: activeCondition,\n }\"\n >\n </ng-container>\n @for (\n group of activeCondition\n | pure\n : getValuesGroup\n : conditionsModel\n : activeCondition.isMulti;\n track group\n ) {\n @if (group.member?.length) {\n <div\n [title]=\"group.group\"\n class=\"dropdown-group-label dropdown-content\"\n >\n {{ group.group }}\n </div>\n <ng-container\n [ngTemplateOutlet]=\"liValueTemp\"\n [ngTemplateOutletContext]=\"{\n values: group.member,\n activeCondition: activeCondition,\n }\"\n ></ng-container>\n }\n }\n </ul>\n }\n }\n }\n @if (showFootAction && form?.value?.isMulti) {\n <div class=\"footer\">\n <button\n aui-button=\"text\"\n size=\"mini\"\n (click)=\"confirmSelection()\"\n >\n {{ 'confirm' | translate }}\n </button>\n <button\n aui-button=\"text\"\n size=\"mini\"\n class=\"cancel\"\n (click)=\"toolTipHide()\"\n >\n {{ 'cancel' | translate }}\n </button>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template\n #liConditionTemp\n let-conditions=\"conditions\"\n>\n @for (condition of conditions; track condition) {\n <li\n class=\"dropdown-content\"\n (click)=\"selectActiveCondition(condition)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"basicLiContentTemp\"\n [ngTemplateOutletContext]=\"{\n isSelect:\n condition\n | pure: getConditionLabel\n | pure: isConditionSelected : conditionsModel,\n label: condition | pure: getConditionLabel,\n }\"\n >\n </ng-container>\n </li>\n }\n</ng-template>\n\n<ng-template\n #liValueTemp\n let-values=\"values\"\n let-activeCondition=\"activeCondition\"\n>\n @for (value of values; track value) {\n <li\n class=\"dropdown-content\"\n (click)=\"\n selectValue(value, activeCondition.isMulti);\n $event.stopPropagation();\n $event.preventDefault()\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"basicLiContentTemp\"\n [ngTemplateOutletContext]=\"{\n isSelect:\n value\n | pure: getValueLabel\n | pure\n : isValueSelected\n : conditionsModel || (form.value | pure: getValueContent)\n : activeCondition,\n label: value | pure: getValueLabel,\n isMulti: activeCondition.isMulti,\n }\"\n >\n </ng-container>\n </li>\n }\n</ng-template>\n\n<ng-template\n #basicLiContentTemp\n let-isSelect=\"isSelect\"\n let-label=\"label\"\n let-isMulti=\"isMulti\"\n>\n <div\n [class]=\"DROPDOWN_ITEM_CLASS\"\n [ngClass]=\"{\n 'is-multi-value-select': isSelect,\n }\"\n >\n @if (isMulti) {\n <div class=\"multi-item\">\n <aui-checkbox [value]=\"isSelect\"></aui-checkbox>\n <div\n [title]=\"label\"\n class=\"search-dropdown-item-label\"\n >\n {{ label }}\n </div>\n </div>\n }\n @if (!isMulti) {\n <div\n [title]=\"label\"\n class=\"search-dropdown-item-label\"\n >\n {{ label }}\n </div>\n }\n </div>\n</ng-template>\n", styles: [":host{display:block;padding-top:5px}.search-input{border:none;box-shadow:none!important;height:22px}.mock-input{width:1px!important;flex-shrink:0;padding:0;margin-left:7px}::ng-deep .multi-search-dropdown{padding:0!important;margin-top:8px!important;cursor:pointer;max-height:284px;overflow-y:auto}::ng-deep .multi-search-dropdown ul .dropdown-content:first-child{border:none;padding-top:0;margin-top:0}::ng-deep .multi-search-dropdown .cursor-light{background-color:rgb(var(--aui-color-p-6))}::ng-deep .multi-search-dropdown .is-multi-value-select{background-color:rgb(var(--aui-color-p-6));color:rgb(var(--aui-color-p-2))}::ng-deep .multi-search-dropdown .search-dropdown-item{padding:0 8px}::ng-deep .multi-search-dropdown .search-dropdown-item:hover{background-color:rgb(var(--aui-color-p-6))}::ng-deep .multi-search-dropdown .search-dropdown-item .multi-item{display:flex;height:28px;align-items:center}::ng-deep .multi-search-dropdown .search-dropdown-item .multi-item aui-checkbox{width:24px}::ng-deep .multi-search-dropdown .search-dropdown-item-label{height:28px;line-height:28px;white-space:nowrap;word-break:break-all;overflow:hidden;text-overflow:ellipsis;font-size:var(--aui-font-size-m)}::ng-deep .multi-search-dropdown .dropdown-group-label{font-size:12px;color:rgb(var(--aui-color-n-4));padding-bottom:8px;padding-top:12px;margin-top:12px;margin-left:8px;margin-right:8px;border-top:1px solid rgb(var(--aui-color-n-8));white-space:nowrap;word-break:break-all;overflow:hidden;text-overflow:ellipsis}::ng-deep .multi-search-dropdown .no-match-categories-tip{text-align:center;font-size:12px;color:rgb(var(--aui-color-n-4));border-bottom:1px solid rgb(var(--aui-color-n-8));margin-left:8px;margin-right:8px;margin-bottom:8px;padding-top:4px;padding-bottom:12px}::ng-deep .multi-search-dropdown .select-all{border-bottom:1px solid rgb(var(--aui-color-n-8))!important;margin-bottom:8px}::ng-deep .multi-search-dropdown .footer{display:flex;background:rgb(var(--aui-color-n-10));justify-content:flex-end;border-top:1px solid rgb(var(--aui-color-n-8));position:sticky;bottom:0;height:30px;padding:0 8px;align-items:center}::ng-deep .multi-search-dropdown .footer .cancel{color:rgb(var(--aui-color-n-1))!important}.action-input-container{display:flex;align-items:center;font-size:14px}.condition-label,.value-label{margin-left:6px;max-width:45%;flex-shrink:0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.operator-label{margin-left:6px}.dropdown-list{min-width:260px;max-width:400px}.operator-list{min-width:160px}.active-item{color:rgb(var(--aui-color-p-2));background-color:rgb(var(--aui-color-p-6))}\n"], dependencies: [{ kind: "component", type: InputComponent, selector: "input[aui-input],textarea[aui-input]", inputs: ["size", "disabled"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }, { kind: "component", type: CheckboxComponent, selector: "aui-checkbox", inputs: ["name", "type", "label", "indeterminate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "pipe", type: PurePipe, name: "pure" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8935
8878
  }
8936
8879
  __decorate([
8937
8880
  ObservableInput(),
@@ -8958,7 +8901,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
8958
8901
  NgTemplateOutlet,
8959
8902
  FormsModule,
8960
8903
  ButtonComponent,
8961
- ], template: "<div class=\"tw-flex tw-items-center tw-text-m\">\n @if (form.value; as activeCondition) {\n <span\n class=\"tw-ml-6 tw-max-w-[45%] tw-flex-shrink-0 tw-text-ellipsis tw-overflow-hidden\"\n (click)=\"activeConditionClick(); $event.stopPropagation()\"\n >\n {{ activeCondition | pure: getConditionLabel }}\n </span>\n @if (activeCondition.operator) {\n <span\n class=\"tw-ml-6\"\n (click)=\"activeOperatorClick(); $event.stopPropagation()\"\n >\n {{ activeCondition.operator }}\n </span>\n }\n @if (!isEditing) {\n <span\n class=\"tw-ml-6 tw-max-w-[45%] tw-flex-shrink-0 tw-text-ellipsis tw-overflow-hidden\"\n (click)=\"activeValueClick(); $event.stopPropagation()\"\n >\n {{ getValueContent(activeCondition) }}\n </span>\n }\n }\n <input\n class=\"search-input\"\n [ngClass]=\"{\n 'mock-input':\n (!isEditing && !isConditionSelecting) || isOperatorSelecting,\n }\"\n [maxlength]=\"isOperatorSelecting ? 0 : MAX_SAFE_INTEGER\"\n aui-input\n #inputRef\n #toolTipRef=\"auiTooltip\"\n [placeholder]=\"isConditionSelecting ? placeholder : ''\"\n [(ngModel)]=\"conditionsModel\"\n (ngModelChange)=\"conditionsModel$$.next($event)\"\n (keydown)=\"inputKeydown($event)\"\n (focus)=\"inputFocus()\"\n [auiTooltip]=\"templateRef\"\n auiTooltipAnimType=\"none\"\n auiTooltipTrigger=\"manual\"\n auiTooltipType=\"info\"\n auiTooltipClass=\"multi-search-dropdown\"\n auiTooltipPosition=\"bottom start\"\n />\n</div>\n\n<ng-template #templateRef>\n <div\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- \u7C7B\u76EE\u9009\u62E9 -->\n @if (isConditionSelecting && (conditionsShouldShow$ | async)) {\n @if (hasFilteredConditions$ | async) {\n <ul class=\"tw-min-w-[260px] tw-max-w-[400px]\">\n <ng-container\n [ngTemplateOutlet]=\"categoriesTemp\"\n [ngTemplateOutletContext]=\"{\n normal: (normalConditions$ | async),\n groups: groupConditions$ | async,\n }\"\n ></ng-container>\n </ul>\n } @else {\n <ul class=\"tw-min-w-[260px] tw-max-w-[400px]\">\n <div class=\"no-match-categories-tip\">\n {{ 'no_match_categories_tip' | translate }}\n </div>\n <ng-container\n [ngTemplateOutlet]=\"categoriesTemp\"\n [ngTemplateOutletContext]=\"{\n normal: normalConditionsResource$ | async,\n groups: groupConditionsResource$ | async,\n }\"\n ></ng-container>\n </ul>\n }\n <ng-template\n #categoriesTemp\n let-normal=\"normal\"\n let-groups=\"groups\"\n >\n <ng-container\n [ngTemplateOutlet]=\"liConditionTemp\"\n [ngTemplateOutletContext]=\"{ conditions: normal }\"\n ></ng-container>\n @for (group of groups; track group) {\n @if (group.member?.length) {\n <div\n [title]=\"group.group\"\n class=\"dropdown-group-label dropdown-content\"\n >\n {{ group.group }}\n </div>\n <ng-container\n [ngTemplateOutlet]=\"liConditionTemp\"\n [ngTemplateOutletContext]=\"{ conditions: group.member }\"\n ></ng-container>\n }\n }\n </ng-template>\n }\n\n @if (form.value; as activeCondition) {\n <!-- operator\u9009\u62E9 -->\n @if (isOperatorSelecting) {\n <ul class=\"tw-min-w-[160px]\">\n @for (\n operator of activeCondition.operators || [DEFAULT_OPERATOR];\n track operator\n ) {\n <li (click)=\"selectActiveOperator($any(operator))\">\n <ng-container\n [ngTemplateOutlet]=\"basicLiContentTemp\"\n [ngTemplateOutletContext]=\"{\n isSelect: operator === conditionsModel,\n label: operator,\n }\"\n >\n </ng-container>\n </li>\n }\n </ul>\n }\n <!-- \u5177\u4F53\u6761\u4EF6\u9009\u62E9 -->\n @if (isValueSelecting) {\n @if (\n activeCondition\n | pure\n : hasFilteredValues\n : conditionsModel\n : activeCondition.isMulti\n ) {\n <ul class=\"tw-min-w-[260px] tw-max-w-[400px]\">\n @if (activeCondition.allowSelectAll && activeCondition.isMulti) {\n <li class=\"dropdown-content select-all\">\n <div\n class=\"search-dropdown-item\"\n [ngClass]=\"{\n 'tw-text-p-2': isSelectAll,\n 'tw-bg-p-6': isSelectAll,\n }\"\n (click)=\"selectAllClick()\"\n >\n <div class=\"multi-item\">\n <aui-checkbox\n [value]=\"isSelectAll\"\n [indeterminate]=\"isIndeterminate\"\n ></aui-checkbox>\n <div class=\"search-dropdown-item-label\">\n {{ 'all' | translate }}\n </div>\n </div>\n </div>\n </li>\n }\n <ng-container\n [ngTemplateOutlet]=\"liValueTemp\"\n [ngTemplateOutletContext]=\"{\n values:\n activeCondition\n | pure\n : getNormalValues\n : conditionsModel\n : activeCondition.isMulti,\n activeCondition: activeCondition,\n }\"\n >\n </ng-container>\n @for (\n group of activeCondition\n | pure\n : getValuesGroup\n : conditionsModel\n : activeCondition.isMulti;\n track group\n ) {\n @if (group.member?.length) {\n <div\n [title]=\"group.group\"\n class=\"dropdown-group-label dropdown-content\"\n >\n {{ group.group }}\n </div>\n <ng-container\n [ngTemplateOutlet]=\"liValueTemp\"\n [ngTemplateOutletContext]=\"{\n values: group.member,\n activeCondition: activeCondition,\n }\"\n ></ng-container>\n }\n }\n </ul>\n }\n }\n }\n @if (showFootAction && form?.value?.isMulti) {\n <div class=\"footer\">\n <button\n aui-button=\"text\"\n size=\"mini\"\n (click)=\"confirmSelection()\"\n >\n {{ 'confirm' | translate }}\n </button>\n <button\n aui-button=\"text\"\n size=\"mini\"\n class=\"cancel\"\n (click)=\"toolTipHide()\"\n >\n {{ 'cancel' | translate }}\n </button>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template\n #liConditionTemp\n let-conditions=\"conditions\"\n>\n @for (condition of conditions; track condition) {\n <li\n class=\"dropdown-content\"\n (click)=\"selectActiveCondition(condition)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"basicLiContentTemp\"\n [ngTemplateOutletContext]=\"{\n isSelect:\n condition\n | pure: getConditionLabel\n | pure: isConditionSelected : conditionsModel,\n label: condition | pure: getConditionLabel,\n }\"\n >\n </ng-container>\n </li>\n }\n</ng-template>\n\n<ng-template\n #liValueTemp\n let-values=\"values\"\n let-activeCondition=\"activeCondition\"\n>\n @for (value of values; track value) {\n <li\n class=\"dropdown-content\"\n (click)=\"\n selectValue(value, activeCondition.isMulti);\n $event.stopPropagation();\n $event.preventDefault()\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"basicLiContentTemp\"\n [ngTemplateOutletContext]=\"{\n isSelect:\n value\n | pure: getValueLabel\n | pure\n : isValueSelected\n : conditionsModel || (form.value | pure: getValueContent)\n : activeCondition,\n label: value | pure: getValueLabel,\n isMulti: activeCondition.isMulti,\n }\"\n >\n </ng-container>\n </li>\n }\n</ng-template>\n\n<ng-template\n #basicLiContentTemp\n let-isSelect=\"isSelect\"\n let-label=\"label\"\n let-isMulti=\"isMulti\"\n>\n <div\n [class]=\"DROPDOWN_ITEM_CLASS\"\n [ngClass]=\"{\n 'is-multi-value-select': isSelect,\n }\"\n >\n @if (isMulti) {\n <div class=\"multi-item\">\n <aui-checkbox [value]=\"isSelect\"></aui-checkbox>\n <div\n [title]=\"label\"\n class=\"search-dropdown-item-label\"\n >\n {{ label }}\n </div>\n </div>\n }\n @if (!isMulti) {\n <div\n [title]=\"label\"\n class=\"search-dropdown-item-label\"\n >\n {{ label }}\n </div>\n }\n </div>\n</ng-template>\n", styles: [":host{display:block;padding-top:5px}.search-input{border:none;box-shadow:none!important;height:22px}.mock-input{width:1px!important;flex-shrink:0;padding:0;margin-left:7px}::ng-deep .multi-search-dropdown{padding:0!important;margin-top:8px!important;cursor:pointer;max-height:284px;overflow-y:auto}::ng-deep .multi-search-dropdown ul .dropdown-content:first-child{border:none;padding-top:0;margin-top:0}::ng-deep .multi-search-dropdown .cursor-light{background-color:rgb(var(--aui-color-p-6))}::ng-deep .multi-search-dropdown .is-multi-value-select{background-color:rgb(var(--aui-color-p-6));color:rgb(var(--aui-color-p-2))}::ng-deep .multi-search-dropdown .search-dropdown-item{padding:0 8px}::ng-deep .multi-search-dropdown .search-dropdown-item:hover{background-color:rgb(var(--aui-color-p-6))}::ng-deep .multi-search-dropdown .search-dropdown-item .multi-item{display:flex;height:28px;align-items:center}::ng-deep .multi-search-dropdown .search-dropdown-item .multi-item aui-checkbox{width:24px}::ng-deep .multi-search-dropdown .search-dropdown-item-label{height:28px;line-height:28px;white-space:nowrap;word-break:break-all;overflow:hidden;text-overflow:ellipsis;font-size:var(--aui-font-size-m)}::ng-deep .multi-search-dropdown .dropdown-group-label{font-size:12px;color:rgb(var(--aui-color-n-4));padding-bottom:8px;padding-top:12px;margin-top:12px;margin-left:8px;margin-right:8px;border-top:1px solid rgb(var(--aui-color-n-8));white-space:nowrap;word-break:break-all;overflow:hidden;text-overflow:ellipsis}::ng-deep .multi-search-dropdown .no-match-categories-tip{text-align:center;font-size:12px;color:rgb(var(--aui-color-n-4));border-bottom:1px solid rgb(var(--aui-color-n-8));margin-left:8px;margin-right:8px;margin-bottom:8px;padding-top:4px;padding-bottom:12px}::ng-deep .multi-search-dropdown .select-all{border-bottom:1px solid rgb(var(--aui-color-n-8))!important;margin-bottom:8px}::ng-deep .multi-search-dropdown .footer{display:flex;background:rgb(var(--aui-color-n-10));justify-content:flex-end;border-top:1px solid rgb(var(--aui-color-n-8));position:sticky;bottom:0;height:30px;padding:0 8px;align-items:center}::ng-deep .multi-search-dropdown .footer .cancel{color:rgb(var(--aui-color-n-1))!important}\n"] }]
8904
+ ], template: "<div class=\"action-input-container\">\n @if (form.value; as activeCondition) {\n <span\n class=\"condition-label\"\n (click)=\"activeConditionClick(); $event.stopPropagation()\"\n >\n {{ activeCondition | pure: getConditionLabel }}\n </span>\n @if (activeCondition.operator) {\n <span\n class=\"operator-label\"\n (click)=\"activeOperatorClick(); $event.stopPropagation()\"\n >\n {{ activeCondition.operator }}\n </span>\n }\n @if (!isEditing) {\n <span\n class=\"value-label\"\n (click)=\"activeValueClick(); $event.stopPropagation()\"\n >\n {{ getValueContent(activeCondition) }}\n </span>\n }\n }\n <input\n class=\"search-input\"\n [ngClass]=\"{\n 'mock-input':\n (!isEditing && !isConditionSelecting) || isOperatorSelecting,\n }\"\n [maxlength]=\"isOperatorSelecting ? 0 : MAX_SAFE_INTEGER\"\n aui-input\n #inputRef\n #toolTipRef=\"auiTooltip\"\n [placeholder]=\"isConditionSelecting ? placeholder : ''\"\n [(ngModel)]=\"conditionsModel\"\n (ngModelChange)=\"conditionsModel$$.next($event)\"\n (keydown)=\"inputKeydown($event)\"\n (focus)=\"inputFocus()\"\n [auiTooltip]=\"templateRef\"\n auiTooltipAnimType=\"none\"\n auiTooltipTrigger=\"manual\"\n auiTooltipType=\"info\"\n auiTooltipClass=\"multi-search-dropdown\"\n auiTooltipPosition=\"bottom start\"\n />\n</div>\n\n<ng-template #templateRef>\n <div\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- \u7C7B\u76EE\u9009\u62E9 -->\n @if (isConditionSelecting && (conditionsShouldShow$ | async)) {\n @if (hasFilteredConditions$ | async) {\n <ul class=\"dropdown-list\">\n <ng-container\n [ngTemplateOutlet]=\"categoriesTemp\"\n [ngTemplateOutletContext]=\"{\n normal: (normalConditions$ | async),\n groups: groupConditions$ | async,\n }\"\n ></ng-container>\n </ul>\n } @else {\n <ul class=\"dropdown-list\">\n <div class=\"no-match-categories-tip\">\n {{ 'no_match_categories_tip' | translate }}\n </div>\n <ng-container\n [ngTemplateOutlet]=\"categoriesTemp\"\n [ngTemplateOutletContext]=\"{\n normal: normalConditionsResource$ | async,\n groups: groupConditionsResource$ | async,\n }\"\n ></ng-container>\n </ul>\n }\n <ng-template\n #categoriesTemp\n let-normal=\"normal\"\n let-groups=\"groups\"\n >\n <ng-container\n [ngTemplateOutlet]=\"liConditionTemp\"\n [ngTemplateOutletContext]=\"{ conditions: normal }\"\n ></ng-container>\n @for (group of groups; track group) {\n @if (group.member?.length) {\n <div\n [title]=\"group.group\"\n class=\"dropdown-group-label dropdown-content\"\n >\n {{ group.group }}\n </div>\n <ng-container\n [ngTemplateOutlet]=\"liConditionTemp\"\n [ngTemplateOutletContext]=\"{ conditions: group.member }\"\n ></ng-container>\n }\n }\n </ng-template>\n }\n\n @if (form.value; as activeCondition) {\n <!-- operator\u9009\u62E9 -->\n @if (isOperatorSelecting) {\n <ul class=\"operator-list\">\n @for (\n operator of activeCondition.operators || [DEFAULT_OPERATOR];\n track operator\n ) {\n <li (click)=\"selectActiveOperator($any(operator))\">\n <ng-container\n [ngTemplateOutlet]=\"basicLiContentTemp\"\n [ngTemplateOutletContext]=\"{\n isSelect: operator === conditionsModel,\n label: operator,\n }\"\n >\n </ng-container>\n </li>\n }\n </ul>\n }\n <!-- \u5177\u4F53\u6761\u4EF6\u9009\u62E9 -->\n @if (isValueSelecting) {\n @if (\n activeCondition\n | pure\n : hasFilteredValues\n : conditionsModel\n : activeCondition.isMulti\n ) {\n <ul class=\"dropdown-list\">\n @if (activeCondition.allowSelectAll && activeCondition.isMulti) {\n <li class=\"dropdown-content select-all\">\n <div\n class=\"search-dropdown-item\"\n [ngClass]=\"{\n 'active-item': isSelectAll,\n }\"\n (click)=\"selectAllClick()\"\n >\n <div class=\"multi-item\">\n <aui-checkbox\n [value]=\"isSelectAll\"\n [indeterminate]=\"isIndeterminate\"\n ></aui-checkbox>\n <div class=\"search-dropdown-item-label\">\n {{ 'all' | translate }}\n </div>\n </div>\n </div>\n </li>\n }\n <ng-container\n [ngTemplateOutlet]=\"liValueTemp\"\n [ngTemplateOutletContext]=\"{\n values:\n activeCondition\n | pure\n : getNormalValues\n : conditionsModel\n : activeCondition.isMulti,\n activeCondition: activeCondition,\n }\"\n >\n </ng-container>\n @for (\n group of activeCondition\n | pure\n : getValuesGroup\n : conditionsModel\n : activeCondition.isMulti;\n track group\n ) {\n @if (group.member?.length) {\n <div\n [title]=\"group.group\"\n class=\"dropdown-group-label dropdown-content\"\n >\n {{ group.group }}\n </div>\n <ng-container\n [ngTemplateOutlet]=\"liValueTemp\"\n [ngTemplateOutletContext]=\"{\n values: group.member,\n activeCondition: activeCondition,\n }\"\n ></ng-container>\n }\n }\n </ul>\n }\n }\n }\n @if (showFootAction && form?.value?.isMulti) {\n <div class=\"footer\">\n <button\n aui-button=\"text\"\n size=\"mini\"\n (click)=\"confirmSelection()\"\n >\n {{ 'confirm' | translate }}\n </button>\n <button\n aui-button=\"text\"\n size=\"mini\"\n class=\"cancel\"\n (click)=\"toolTipHide()\"\n >\n {{ 'cancel' | translate }}\n </button>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template\n #liConditionTemp\n let-conditions=\"conditions\"\n>\n @for (condition of conditions; track condition) {\n <li\n class=\"dropdown-content\"\n (click)=\"selectActiveCondition(condition)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"basicLiContentTemp\"\n [ngTemplateOutletContext]=\"{\n isSelect:\n condition\n | pure: getConditionLabel\n | pure: isConditionSelected : conditionsModel,\n label: condition | pure: getConditionLabel,\n }\"\n >\n </ng-container>\n </li>\n }\n</ng-template>\n\n<ng-template\n #liValueTemp\n let-values=\"values\"\n let-activeCondition=\"activeCondition\"\n>\n @for (value of values; track value) {\n <li\n class=\"dropdown-content\"\n (click)=\"\n selectValue(value, activeCondition.isMulti);\n $event.stopPropagation();\n $event.preventDefault()\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"basicLiContentTemp\"\n [ngTemplateOutletContext]=\"{\n isSelect:\n value\n | pure: getValueLabel\n | pure\n : isValueSelected\n : conditionsModel || (form.value | pure: getValueContent)\n : activeCondition,\n label: value | pure: getValueLabel,\n isMulti: activeCondition.isMulti,\n }\"\n >\n </ng-container>\n </li>\n }\n</ng-template>\n\n<ng-template\n #basicLiContentTemp\n let-isSelect=\"isSelect\"\n let-label=\"label\"\n let-isMulti=\"isMulti\"\n>\n <div\n [class]=\"DROPDOWN_ITEM_CLASS\"\n [ngClass]=\"{\n 'is-multi-value-select': isSelect,\n }\"\n >\n @if (isMulti) {\n <div class=\"multi-item\">\n <aui-checkbox [value]=\"isSelect\"></aui-checkbox>\n <div\n [title]=\"label\"\n class=\"search-dropdown-item-label\"\n >\n {{ label }}\n </div>\n </div>\n }\n @if (!isMulti) {\n <div\n [title]=\"label\"\n class=\"search-dropdown-item-label\"\n >\n {{ label }}\n </div>\n }\n </div>\n</ng-template>\n", styles: [":host{display:block;padding-top:5px}.search-input{border:none;box-shadow:none!important;height:22px}.mock-input{width:1px!important;flex-shrink:0;padding:0;margin-left:7px}::ng-deep .multi-search-dropdown{padding:0!important;margin-top:8px!important;cursor:pointer;max-height:284px;overflow-y:auto}::ng-deep .multi-search-dropdown ul .dropdown-content:first-child{border:none;padding-top:0;margin-top:0}::ng-deep .multi-search-dropdown .cursor-light{background-color:rgb(var(--aui-color-p-6))}::ng-deep .multi-search-dropdown .is-multi-value-select{background-color:rgb(var(--aui-color-p-6));color:rgb(var(--aui-color-p-2))}::ng-deep .multi-search-dropdown .search-dropdown-item{padding:0 8px}::ng-deep .multi-search-dropdown .search-dropdown-item:hover{background-color:rgb(var(--aui-color-p-6))}::ng-deep .multi-search-dropdown .search-dropdown-item .multi-item{display:flex;height:28px;align-items:center}::ng-deep .multi-search-dropdown .search-dropdown-item .multi-item aui-checkbox{width:24px}::ng-deep .multi-search-dropdown .search-dropdown-item-label{height:28px;line-height:28px;white-space:nowrap;word-break:break-all;overflow:hidden;text-overflow:ellipsis;font-size:var(--aui-font-size-m)}::ng-deep .multi-search-dropdown .dropdown-group-label{font-size:12px;color:rgb(var(--aui-color-n-4));padding-bottom:8px;padding-top:12px;margin-top:12px;margin-left:8px;margin-right:8px;border-top:1px solid rgb(var(--aui-color-n-8));white-space:nowrap;word-break:break-all;overflow:hidden;text-overflow:ellipsis}::ng-deep .multi-search-dropdown .no-match-categories-tip{text-align:center;font-size:12px;color:rgb(var(--aui-color-n-4));border-bottom:1px solid rgb(var(--aui-color-n-8));margin-left:8px;margin-right:8px;margin-bottom:8px;padding-top:4px;padding-bottom:12px}::ng-deep .multi-search-dropdown .select-all{border-bottom:1px solid rgb(var(--aui-color-n-8))!important;margin-bottom:8px}::ng-deep .multi-search-dropdown .footer{display:flex;background:rgb(var(--aui-color-n-10));justify-content:flex-end;border-top:1px solid rgb(var(--aui-color-n-8));position:sticky;bottom:0;height:30px;padding:0 8px;align-items:center}::ng-deep .multi-search-dropdown .footer .cancel{color:rgb(var(--aui-color-n-1))!important}.action-input-container{display:flex;align-items:center;font-size:14px}.condition-label,.value-label{margin-left:6px;max-width:45%;flex-shrink:0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.operator-label{margin-left:6px}.dropdown-list{min-width:260px;max-width:400px}.operator-list{min-width:160px}.active-item{color:rgb(var(--aui-color-p-2));background-color:rgb(var(--aui-color-p-6))}\n"] }]
8962
8905
  }], ctorParameters: () => [], propDecorators: { placeholder: [{
8963
8906
  type: Input
8964
8907
  }], conditionCreatable: [{
@@ -8981,7 +8924,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
8981
8924
  type: Output
8982
8925
  }], delete: [{
8983
8926
  type: Output
8984
- }], searchEvent: [{
8927
+ }], search: [{
8985
8928
  type: Output
8986
8929
  }], inputRef: [{
8987
8930
  type: ViewChild,
@@ -8999,7 +8942,7 @@ class MultiSearchTagsComponent {
8999
8942
  this.removeCondition = new EventEmitter();
9000
8943
  this.setConditionEditing = new EventEmitter();
9001
8944
  this.setConditionDeleting = new EventEmitter();
9002
- this.searchEvent = new EventEmitter();
8945
+ this.search = new EventEmitter();
9003
8946
  this.completed = new EventEmitter();
9004
8947
  }
9005
8948
  conditionInAction(condition) {
@@ -9014,7 +8957,7 @@ class MultiSearchTagsComponent {
9014
8957
  ?.join(condition.separator ?? ' | ');
9015
8958
  }
9016
8959
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: MultiSearchTagsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9017
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: MultiSearchTagsComponent, isStandalone: true, selector: "acl-multi-search-tags", inputs: { placeholder: "placeholder", conditionCreatable: "conditionCreatable", conditionConfig: "conditionConfig", existingConditions: "existingConditions", showFootAction: "showFootAction" }, outputs: { removeCondition: "removeCondition", setConditionEditing: "setConditionEditing", setConditionDeleting: "setConditionDeleting", searchEvent: "searchEvent", completed: "completed" }, viewQueries: [{ propertyName: "inputComponent", first: true, predicate: ["inputRef"], descendants: true }], ngImport: i0, template: "<div class=\"search-content\">\n @for (condition of existingConditions; track condition; let index = $index) {\n @if (!conditionInAction(condition)) {\n <aui-tag\n class=\"tw-ml-6 tw-h-[22px] tw-mb-4\"\n [ngClass]=\"condition.tagClass\"\n [type]=\"condition.tagType || 'info'\"\n [border]=\"true\"\n [closeable]=\"true\"\n (close)=\"removeCondition.emit(condition); searchEvent.emit()\"\n (click)=\"setConditionEditing.emit(condition)\"\n size=\"mini\"\n >\n <span\n [title]=\"\n (condition | pure: getConditionLabel) +\n ' ' +\n condition.operator +\n ' ' +\n (condition | pure: getValueContent)\n \"\n >\n {{ condition | pure: getConditionLabel }}\n {{ condition.operator }}\n {{ condition | pure: getValueContent }}\n </span>\n </aui-tag>\n } @else {\n <acl-multi-search-action-input\n #inputRef\n class=\"input-wrapper\"\n [ngClass]=\"{ 'deleting-input': condition.isDeleting }\"\n [isEditing]=\"condition.isEditing\"\n [conditionCreatable]=\"conditionCreatable\"\n [placeholder]=\"placeholder\"\n [conditionConfig]=\"conditionConfig\"\n [existingConditions]=\"existingConditions\"\n [showFootAction]=\"showFootAction\"\n [(ngModel)]=\"condition.actionModel\"\n (completed)=\"\n completed.emit({\n activeCondition: $event.activeCondition,\n toContinue: $event.toContinue,\n manualFocus: $event.manualFocus,\n index: index,\n })\n \"\n (delete)=\"setConditionDeleting.emit(index - 1)\"\n (editing)=\"setConditionEditing.emit(condition)\"\n (search)=\"searchEvent.emit()\"\n ></acl-multi-search-action-input>\n }\n }\n <ng-content></ng-content>\n</div>\n", styles: [":host{display:block}:host .search-content{width:100%;min-height:30px;max-height:160px;flex:1;display:flex;flex-wrap:wrap;align-items:center}:host .search-content ::ng-deep aui-tag{max-width:calc(100% - 8px)}:host .search-content ::ng-deep .aui-tag{margin-left:0;max-width:100%}:host .search-content ::ng-deep .input-wrapper{padding-bottom:4px;max-width:100%;width:max-content;min-width:180px;white-space:nowrap;word-break:break-all;overflow:hidden;text-overflow:ellipsis;flex-grow:1;flex-shrink:0}\n"], dependencies: [{ kind: "ngmodule", type: TagModule }, { kind: "component", type: i1.TagComponent, selector: "aui-tag", inputs: ["type", "size", "closeable", "border", "solid", "invalid", "round", "color", "allowClick"], outputs: ["close"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MultiSearchActionInputComponent, selector: "acl-multi-search-action-input", inputs: ["placeholder", "conditionCreatable", "isEditing", "hidden", "autoScroll", "conditionConfig", "showFootAction", "existingConditions"], outputs: ["completed", "editing", "delete", "searchEvent"] }, { 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: "pipe", type: PurePipe, name: "pure" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8960
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: MultiSearchTagsComponent, isStandalone: true, selector: "acl-multi-search-tags", inputs: { placeholder: "placeholder", conditionCreatable: "conditionCreatable", conditionConfig: "conditionConfig", existingConditions: "existingConditions", showFootAction: "showFootAction" }, outputs: { removeCondition: "removeCondition", setConditionEditing: "setConditionEditing", setConditionDeleting: "setConditionDeleting", search: "search", completed: "completed" }, viewQueries: [{ propertyName: "inputComponent", first: true, predicate: ["inputRef"], descendants: true }], ngImport: i0, template: "<div class=\"search-content\">\n @for (condition of existingConditions; track condition; let index = $index) {\n @if (!conditionInAction(condition)) {\n <aui-tag\n class=\"tag-item\"\n [ngClass]=\"condition.tagClass\"\n [type]=\"condition.tagType || 'info'\"\n [border]=\"true\"\n [closeable]=\"true\"\n (close)=\"removeCondition.emit(condition); search.emit()\"\n (click)=\"setConditionEditing.emit(condition)\"\n size=\"mini\"\n >\n <span\n [title]=\"\n (condition | pure: getConditionLabel) +\n ' ' +\n condition.operator +\n ' ' +\n (condition | pure: getValueContent)\n \"\n >\n {{ condition | pure: getConditionLabel }}\n {{ condition.operator }}\n {{ condition | pure: getValueContent }}\n </span>\n </aui-tag>\n } @else {\n <acl-multi-search-action-input\n #inputRef\n class=\"input-wrapper\"\n [ngClass]=\"{ 'deleting-input': condition.isDeleting }\"\n [isEditing]=\"condition.isEditing\"\n [conditionCreatable]=\"conditionCreatable\"\n [placeholder]=\"placeholder\"\n [conditionConfig]=\"conditionConfig\"\n [existingConditions]=\"existingConditions\"\n [showFootAction]=\"showFootAction\"\n [(ngModel)]=\"condition.actionModel\"\n (completed)=\"\n completed.emit({\n activeCondition: $event.activeCondition,\n toContinue: $event.toContinue,\n manualFocus: $event.manualFocus,\n index: index,\n })\n \"\n (delete)=\"setConditionDeleting.emit(index - 1)\"\n (editing)=\"setConditionEditing.emit(condition)\"\n (search)=\"search.emit()\"\n ></acl-multi-search-action-input>\n }\n }\n <ng-content></ng-content>\n</div>\n", styles: [":host{display:block}:host .search-content{width:100%;min-height:30px;max-height:160px;flex:1;display:flex;flex-wrap:wrap;align-items:center}:host .search-content ::ng-deep aui-tag{max-width:calc(100% - 8px)}:host .search-content ::ng-deep .aui-tag{margin-left:0;max-width:100%}:host .search-content ::ng-deep .input-wrapper{padding-bottom:4px;max-width:100%;width:max-content;min-width:180px;white-space:nowrap;word-break:break-all;overflow:hidden;text-overflow:ellipsis;flex-grow:1;flex-shrink:0}:host .tag-item{margin-left:6px;height:22px;margin-bottom:4px}\n"], dependencies: [{ kind: "ngmodule", type: TagModule }, { kind: "component", type: i1.TagComponent, selector: "aui-tag", inputs: ["type", "size", "closeable", "border", "solid", "invalid", "round", "color", "allowClick"], outputs: ["close"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MultiSearchActionInputComponent, selector: "acl-multi-search-action-input", inputs: ["placeholder", "conditionCreatable", "isEditing", "hidden", "autoScroll", "conditionConfig", "showFootAction", "existingConditions"], outputs: ["completed", "editing", "delete", "search"] }, { 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: "pipe", type: PurePipe, name: "pure" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
9018
8961
  }
9019
8962
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: MultiSearchTagsComponent, decorators: [{
9020
8963
  type: Component,
@@ -9024,7 +8967,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
9024
8967
  PurePipe,
9025
8968
  MultiSearchActionInputComponent,
9026
8969
  FormsModule,
9027
- ], template: "<div class=\"search-content\">\n @for (condition of existingConditions; track condition; let index = $index) {\n @if (!conditionInAction(condition)) {\n <aui-tag\n class=\"tw-ml-6 tw-h-[22px] tw-mb-4\"\n [ngClass]=\"condition.tagClass\"\n [type]=\"condition.tagType || 'info'\"\n [border]=\"true\"\n [closeable]=\"true\"\n (close)=\"removeCondition.emit(condition); searchEvent.emit()\"\n (click)=\"setConditionEditing.emit(condition)\"\n size=\"mini\"\n >\n <span\n [title]=\"\n (condition | pure: getConditionLabel) +\n ' ' +\n condition.operator +\n ' ' +\n (condition | pure: getValueContent)\n \"\n >\n {{ condition | pure: getConditionLabel }}\n {{ condition.operator }}\n {{ condition | pure: getValueContent }}\n </span>\n </aui-tag>\n } @else {\n <acl-multi-search-action-input\n #inputRef\n class=\"input-wrapper\"\n [ngClass]=\"{ 'deleting-input': condition.isDeleting }\"\n [isEditing]=\"condition.isEditing\"\n [conditionCreatable]=\"conditionCreatable\"\n [placeholder]=\"placeholder\"\n [conditionConfig]=\"conditionConfig\"\n [existingConditions]=\"existingConditions\"\n [showFootAction]=\"showFootAction\"\n [(ngModel)]=\"condition.actionModel\"\n (completed)=\"\n completed.emit({\n activeCondition: $event.activeCondition,\n toContinue: $event.toContinue,\n manualFocus: $event.manualFocus,\n index: index,\n })\n \"\n (delete)=\"setConditionDeleting.emit(index - 1)\"\n (editing)=\"setConditionEditing.emit(condition)\"\n (search)=\"searchEvent.emit()\"\n ></acl-multi-search-action-input>\n }\n }\n <ng-content></ng-content>\n</div>\n", styles: [":host{display:block}:host .search-content{width:100%;min-height:30px;max-height:160px;flex:1;display:flex;flex-wrap:wrap;align-items:center}:host .search-content ::ng-deep aui-tag{max-width:calc(100% - 8px)}:host .search-content ::ng-deep .aui-tag{margin-left:0;max-width:100%}:host .search-content ::ng-deep .input-wrapper{padding-bottom:4px;max-width:100%;width:max-content;min-width:180px;white-space:nowrap;word-break:break-all;overflow:hidden;text-overflow:ellipsis;flex-grow:1;flex-shrink:0}\n"] }]
8970
+ ], template: "<div class=\"search-content\">\n @for (condition of existingConditions; track condition; let index = $index) {\n @if (!conditionInAction(condition)) {\n <aui-tag\n class=\"tag-item\"\n [ngClass]=\"condition.tagClass\"\n [type]=\"condition.tagType || 'info'\"\n [border]=\"true\"\n [closeable]=\"true\"\n (close)=\"removeCondition.emit(condition); search.emit()\"\n (click)=\"setConditionEditing.emit(condition)\"\n size=\"mini\"\n >\n <span\n [title]=\"\n (condition | pure: getConditionLabel) +\n ' ' +\n condition.operator +\n ' ' +\n (condition | pure: getValueContent)\n \"\n >\n {{ condition | pure: getConditionLabel }}\n {{ condition.operator }}\n {{ condition | pure: getValueContent }}\n </span>\n </aui-tag>\n } @else {\n <acl-multi-search-action-input\n #inputRef\n class=\"input-wrapper\"\n [ngClass]=\"{ 'deleting-input': condition.isDeleting }\"\n [isEditing]=\"condition.isEditing\"\n [conditionCreatable]=\"conditionCreatable\"\n [placeholder]=\"placeholder\"\n [conditionConfig]=\"conditionConfig\"\n [existingConditions]=\"existingConditions\"\n [showFootAction]=\"showFootAction\"\n [(ngModel)]=\"condition.actionModel\"\n (completed)=\"\n completed.emit({\n activeCondition: $event.activeCondition,\n toContinue: $event.toContinue,\n manualFocus: $event.manualFocus,\n index: index,\n })\n \"\n (delete)=\"setConditionDeleting.emit(index - 1)\"\n (editing)=\"setConditionEditing.emit(condition)\"\n (search)=\"search.emit()\"\n ></acl-multi-search-action-input>\n }\n }\n <ng-content></ng-content>\n</div>\n", styles: [":host{display:block}:host .search-content{width:100%;min-height:30px;max-height:160px;flex:1;display:flex;flex-wrap:wrap;align-items:center}:host .search-content ::ng-deep aui-tag{max-width:calc(100% - 8px)}:host .search-content ::ng-deep .aui-tag{margin-left:0;max-width:100%}:host .search-content ::ng-deep .input-wrapper{padding-bottom:4px;max-width:100%;width:max-content;min-width:180px;white-space:nowrap;word-break:break-all;overflow:hidden;text-overflow:ellipsis;flex-grow:1;flex-shrink:0}:host .tag-item{margin-left:6px;height:22px;margin-bottom:4px}\n"] }]
9028
8971
  }], propDecorators: { placeholder: [{
9029
8972
  type: Input
9030
8973
  }], conditionCreatable: [{
@@ -9041,7 +8984,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
9041
8984
  type: Output
9042
8985
  }], setConditionDeleting: [{
9043
8986
  type: Output
9044
- }], searchEvent: [{
8987
+ }], search: [{
9045
8988
  type: Output
9046
8989
  }], completed: [{
9047
8990
  type: Output
@@ -9063,7 +9006,7 @@ class MultiSearchComponent {
9063
9006
  this.autoScroll = true;
9064
9007
  this.searchSuffix = true;
9065
9008
  // 搜索操作
9066
- this.searchEvent = new EventEmitter();
9009
+ this.search = new EventEmitter();
9067
9010
  // 条件变化
9068
9011
  this.conditionsChange = new EventEmitter();
9069
9012
  // 当前multi-search组件是否focus
@@ -9195,7 +9138,7 @@ class MultiSearchComponent {
9195
9138
  this.existingConditions$
9196
9139
  .pipe(take(1), takeUntil(this.destroy$$))
9197
9140
  .subscribe(exists => {
9198
- this.searchEvent.emit(this.getConditionModel(exists?.filter(exist => !this.conditionInAction(exist))));
9141
+ this.search.emit(this.getConditionModel(exists?.filter(exist => !this.conditionInAction(exist))));
9199
9142
  });
9200
9143
  }
9201
9144
  // 清除所有已选条件
@@ -9310,7 +9253,7 @@ class MultiSearchComponent {
9310
9253
  this.destroy$$.next();
9311
9254
  }
9312
9255
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: MultiSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9313
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: MultiSearchComponent, isStandalone: true, selector: "acl-multi-search", inputs: { placeholder: "placeholder", conditionCreatable: "conditionCreatable", conditions: "conditions", conditionConfig: "conditionConfig", autoScroll: "autoScroll", searchSuffix: "searchSuffix", showFootAction: "showFootAction" }, outputs: { searchEvent: "searchEvent", conditionsChange: "conditionsChange" }, viewQueries: [{ propertyName: "normalInputComponent", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "tagsComponent", first: true, predicate: ["tagsRef"], descendants: true }, { propertyName: "multiSearchRef", first: true, predicate: ["multiSearch"], descendants: true, static: true }], ngImport: i0, template: "<div\n class=\"aui-input multi-search\"\n #multiSearch\n [ngClass]=\"{\n 'search-focus': focus$$ | async,\n }\"\n>\n <!-- \u5DF2\u9009\u62E9\u7C7B\u76EEtags -->\n <acl-multi-search-tags\n #tagsRef\n [ngClass]=\"{\n 'tags-width-with-delete': $any(existingConditions$ | async)?.length,\n 'tags-width': !$any(existingConditions$ | async)?.length,\n }\"\n [placeholder]=\"placeholder\"\n [conditionCreatable]=\"conditionCreatable\"\n [existingConditions]=\"existingConditions\"\n [conditionConfig]=\"conditionConfig\"\n (removeCondition)=\"removeCondition($event)\"\n (setConditionEditing)=\"setConditionEditing($event)\"\n (setConditionDeleting)=\"setConditionDeleting($event)\"\n [showFootAction]=\"showFootAction\"\n (search)=\"doSearch()\"\n (completed)=\"complete($event)\"\n >\n <!-- \u672B\u5C3E\u8F93\u5165\u6846 -->\n <acl-multi-search-action-input\n #inputRef\n class=\"input-wrapper\"\n [isEditing]=\"true\"\n [hidden]=\"addedInputShouldHidden$ | async\"\n [placeholder]=\"placeholder\"\n [conditionCreatable]=\"conditionCreatable\"\n [conditionConfig]=\"conditionConfig\"\n [existingConditions]=\"existingConditions$ | async\"\n [autoScroll]=\"autoScroll\"\n [(ngModel)]=\"addedCondition\"\n [showFootAction]=\"showFootAction\"\n (completed)=\"complete($event)\"\n (delete)=\"setConditionDeleting()\"\n (search)=\"doSearch()\"\n ></acl-multi-search-action-input>\n </acl-multi-search-tags>\n\n <div class=\"search-suffix\">\n @if ($any(existingConditions$ | async)?.length) {\n <div class=\"search-clear\">\n <aui-icon\n class=\"tw-text-n-4 tw-cursor-pointer\"\n [ngClass]=\"CLEAR_ICON_CLASS\"\n icon=\"xmark_small\"\n size=\"14\"\n (click)=\"clearConditions(); doSearch(); $event.stopPropagation()\"\n ></aui-icon>\n </div>\n }\n @if (searchSuffix) {\n <div class=\"search-suffix\">\n <div class=\"suffix-wrapper\">\n <aui-icon\n class=\"tw-text-n-4 tw-cursor-pointer\"\n [ngClass]=\"SEARCH_ICON_CLASS\"\n icon=\"magnifier\"\n (click)=\"doSearch(); $event.stopPropagation()\"\n ></aui-icon>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [":host{min-width:0}.multi-search{min-width:240px;height:max-content;display:flex;align-items:stretch;padding:0;overflow-y:auto}.multi-search .tags-width{width:calc(100% - 30px)}.multi-search .tags-width-with-delete{width:calc(100% - 48px)}.multi-search .search-clear{width:18px;display:flex;align-items:center}.multi-search .search-clear-icon ::ng-deep .aui-icon{border-radius:50%}.multi-search .search-clear-icon ::ng-deep .aui-icon:hover{color:rgb(var(--aui-color-n-10));background-color:rgb(var(--aui-color-n-5))!important}.multi-search .search-suffix{display:flex;text-align:center}.multi-search .search-suffix .suffix-wrapper{margin-top:4px;margin-bottom:4px;height:calc(100% - 8px);border-left:solid 1px rgb(var(--aui-color-n-7));min-width:30px;display:flex;align-items:center;justify-content:center}.multi-search .search-suffix .suffix-wrapper aui-icon:hover{color:rgb(var(--aui-color-blue))}.search-focus{border-color:rgb(var(--aui-color-primary));box-shadow:0 0 0 2px rgba(var(--aui-color-primary),.16)}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MultiSearchActionInputComponent, selector: "acl-multi-search-action-input", inputs: ["placeholder", "conditionCreatable", "isEditing", "hidden", "autoScroll", "conditionConfig", "showFootAction", "existingConditions"], outputs: ["completed", "editing", "delete", "searchEvent"] }, { kind: "component", type: MultiSearchTagsComponent, selector: "acl-multi-search-tags", inputs: ["placeholder", "conditionCreatable", "conditionConfig", "existingConditions", "showFootAction"], outputs: ["removeCondition", "setConditionEditing", "setConditionDeleting", "searchEvent", "completed"] }, { 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: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
9256
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: MultiSearchComponent, isStandalone: true, selector: "acl-multi-search", inputs: { placeholder: "placeholder", conditionCreatable: "conditionCreatable", conditions: "conditions", conditionConfig: "conditionConfig", autoScroll: "autoScroll", searchSuffix: "searchSuffix", showFootAction: "showFootAction" }, outputs: { search: "search", conditionsChange: "conditionsChange" }, viewQueries: [{ propertyName: "normalInputComponent", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "tagsComponent", first: true, predicate: ["tagsRef"], descendants: true }, { propertyName: "multiSearchRef", first: true, predicate: ["multiSearch"], descendants: true, static: true }], ngImport: i0, template: "<div\n class=\"aui-input multi-search\"\n #multiSearch\n [ngClass]=\"{\n 'search-focus': focus$$ | async,\n }\"\n>\n <!-- \u5DF2\u9009\u62E9\u7C7B\u76EEtags -->\n <acl-multi-search-tags\n #tagsRef\n [ngClass]=\"{\n 'tags-width-with-delete': $any(existingConditions$ | async)?.length,\n 'tags-width': !$any(existingConditions$ | async)?.length,\n }\"\n [placeholder]=\"placeholder\"\n [conditionCreatable]=\"conditionCreatable\"\n [existingConditions]=\"existingConditions\"\n [conditionConfig]=\"conditionConfig\"\n (removeCondition)=\"removeCondition($event)\"\n (setConditionEditing)=\"setConditionEditing($event)\"\n (setConditionDeleting)=\"setConditionDeleting($event)\"\n [showFootAction]=\"showFootAction\"\n (search)=\"doSearch()\"\n (completed)=\"complete($event)\"\n >\n <!-- \u672B\u5C3E\u8F93\u5165\u6846 -->\n <acl-multi-search-action-input\n #inputRef\n class=\"input-wrapper\"\n [isEditing]=\"true\"\n [hidden]=\"addedInputShouldHidden$ | async\"\n [placeholder]=\"placeholder\"\n [conditionCreatable]=\"conditionCreatable\"\n [conditionConfig]=\"conditionConfig\"\n [existingConditions]=\"existingConditions$ | async\"\n [autoScroll]=\"autoScroll\"\n [(ngModel)]=\"addedCondition\"\n [showFootAction]=\"showFootAction\"\n (completed)=\"complete($event)\"\n (delete)=\"setConditionDeleting()\"\n (search)=\"doSearch()\"\n ></acl-multi-search-action-input>\n </acl-multi-search-tags>\n\n <div class=\"search-suffix\">\n @if ($any(existingConditions$ | async)?.length) {\n <div class=\"search-clear\">\n <aui-icon\n class=\"clear-icon\"\n [ngClass]=\"CLEAR_ICON_CLASS\"\n icon=\"xmark_small\"\n size=\"14\"\n (click)=\"clearConditions(); doSearch(); $event.stopPropagation()\"\n ></aui-icon>\n </div>\n }\n @if (searchSuffix) {\n <div class=\"search-suffix\">\n <div class=\"suffix-wrapper\">\n <aui-icon\n class=\"search-icon\"\n [ngClass]=\"SEARCH_ICON_CLASS\"\n icon=\"magnifier\"\n (click)=\"doSearch(); $event.stopPropagation()\"\n ></aui-icon>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [":host{min-width:0}.multi-search{min-width:240px;height:max-content;display:flex;align-items:stretch;padding:0;overflow-y:auto}.multi-search .tags-width{width:calc(100% - 30px)}.multi-search .tags-width-with-delete{width:calc(100% - 48px)}.multi-search .search-clear{width:18px;display:flex;align-items:center}.multi-search .search-clear-icon ::ng-deep .aui-icon{border-radius:50%}.multi-search .search-clear-icon ::ng-deep .aui-icon:hover{color:rgb(var(--aui-color-n-10));background-color:rgb(var(--aui-color-n-5))!important}.multi-search .search-suffix{display:flex;text-align:center}.multi-search .search-suffix .suffix-wrapper{margin-top:4px;margin-bottom:4px;height:calc(100% - 8px);border-left:solid 1px rgb(var(--aui-color-n-7));min-width:30px;display:flex;align-items:center;justify-content:center}.multi-search .search-suffix .suffix-wrapper aui-icon:hover{color:rgb(var(--aui-color-blue))}.clear-icon,.search-icon{color:rgb(var(--aui-color-n-4));cursor:pointer}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MultiSearchActionInputComponent, selector: "acl-multi-search-action-input", inputs: ["placeholder", "conditionCreatable", "isEditing", "hidden", "autoScroll", "conditionConfig", "showFootAction", "existingConditions"], outputs: ["completed", "editing", "delete", "search"] }, { kind: "component", type: MultiSearchTagsComponent, selector: "acl-multi-search-tags", inputs: ["placeholder", "conditionCreatable", "conditionConfig", "existingConditions", "showFootAction"], outputs: ["removeCondition", "setConditionEditing", "setConditionDeleting", "search", "completed"] }, { 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: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
9314
9257
  }
9315
9258
  __decorate([
9316
9259
  ObservableInput(),
@@ -9329,7 +9272,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
9329
9272
  MultiSearchTagsComponent,
9330
9273
  FormsModule,
9331
9274
  IconComponent,
9332
- ], template: "<div\n class=\"aui-input multi-search\"\n #multiSearch\n [ngClass]=\"{\n 'search-focus': focus$$ | async,\n }\"\n>\n <!-- \u5DF2\u9009\u62E9\u7C7B\u76EEtags -->\n <acl-multi-search-tags\n #tagsRef\n [ngClass]=\"{\n 'tags-width-with-delete': $any(existingConditions$ | async)?.length,\n 'tags-width': !$any(existingConditions$ | async)?.length,\n }\"\n [placeholder]=\"placeholder\"\n [conditionCreatable]=\"conditionCreatable\"\n [existingConditions]=\"existingConditions\"\n [conditionConfig]=\"conditionConfig\"\n (removeCondition)=\"removeCondition($event)\"\n (setConditionEditing)=\"setConditionEditing($event)\"\n (setConditionDeleting)=\"setConditionDeleting($event)\"\n [showFootAction]=\"showFootAction\"\n (search)=\"doSearch()\"\n (completed)=\"complete($event)\"\n >\n <!-- \u672B\u5C3E\u8F93\u5165\u6846 -->\n <acl-multi-search-action-input\n #inputRef\n class=\"input-wrapper\"\n [isEditing]=\"true\"\n [hidden]=\"addedInputShouldHidden$ | async\"\n [placeholder]=\"placeholder\"\n [conditionCreatable]=\"conditionCreatable\"\n [conditionConfig]=\"conditionConfig\"\n [existingConditions]=\"existingConditions$ | async\"\n [autoScroll]=\"autoScroll\"\n [(ngModel)]=\"addedCondition\"\n [showFootAction]=\"showFootAction\"\n (completed)=\"complete($event)\"\n (delete)=\"setConditionDeleting()\"\n (search)=\"doSearch()\"\n ></acl-multi-search-action-input>\n </acl-multi-search-tags>\n\n <div class=\"search-suffix\">\n @if ($any(existingConditions$ | async)?.length) {\n <div class=\"search-clear\">\n <aui-icon\n class=\"tw-text-n-4 tw-cursor-pointer\"\n [ngClass]=\"CLEAR_ICON_CLASS\"\n icon=\"xmark_small\"\n size=\"14\"\n (click)=\"clearConditions(); doSearch(); $event.stopPropagation()\"\n ></aui-icon>\n </div>\n }\n @if (searchSuffix) {\n <div class=\"search-suffix\">\n <div class=\"suffix-wrapper\">\n <aui-icon\n class=\"tw-text-n-4 tw-cursor-pointer\"\n [ngClass]=\"SEARCH_ICON_CLASS\"\n icon=\"magnifier\"\n (click)=\"doSearch(); $event.stopPropagation()\"\n ></aui-icon>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [":host{min-width:0}.multi-search{min-width:240px;height:max-content;display:flex;align-items:stretch;padding:0;overflow-y:auto}.multi-search .tags-width{width:calc(100% - 30px)}.multi-search .tags-width-with-delete{width:calc(100% - 48px)}.multi-search .search-clear{width:18px;display:flex;align-items:center}.multi-search .search-clear-icon ::ng-deep .aui-icon{border-radius:50%}.multi-search .search-clear-icon ::ng-deep .aui-icon:hover{color:rgb(var(--aui-color-n-10));background-color:rgb(var(--aui-color-n-5))!important}.multi-search .search-suffix{display:flex;text-align:center}.multi-search .search-suffix .suffix-wrapper{margin-top:4px;margin-bottom:4px;height:calc(100% - 8px);border-left:solid 1px rgb(var(--aui-color-n-7));min-width:30px;display:flex;align-items:center;justify-content:center}.multi-search .search-suffix .suffix-wrapper aui-icon:hover{color:rgb(var(--aui-color-blue))}.search-focus{border-color:rgb(var(--aui-color-primary));box-shadow:0 0 0 2px rgba(var(--aui-color-primary),.16)}\n"] }]
9275
+ ], template: "<div\n class=\"aui-input multi-search\"\n #multiSearch\n [ngClass]=\"{\n 'search-focus': focus$$ | async,\n }\"\n>\n <!-- \u5DF2\u9009\u62E9\u7C7B\u76EEtags -->\n <acl-multi-search-tags\n #tagsRef\n [ngClass]=\"{\n 'tags-width-with-delete': $any(existingConditions$ | async)?.length,\n 'tags-width': !$any(existingConditions$ | async)?.length,\n }\"\n [placeholder]=\"placeholder\"\n [conditionCreatable]=\"conditionCreatable\"\n [existingConditions]=\"existingConditions\"\n [conditionConfig]=\"conditionConfig\"\n (removeCondition)=\"removeCondition($event)\"\n (setConditionEditing)=\"setConditionEditing($event)\"\n (setConditionDeleting)=\"setConditionDeleting($event)\"\n [showFootAction]=\"showFootAction\"\n (search)=\"doSearch()\"\n (completed)=\"complete($event)\"\n >\n <!-- \u672B\u5C3E\u8F93\u5165\u6846 -->\n <acl-multi-search-action-input\n #inputRef\n class=\"input-wrapper\"\n [isEditing]=\"true\"\n [hidden]=\"addedInputShouldHidden$ | async\"\n [placeholder]=\"placeholder\"\n [conditionCreatable]=\"conditionCreatable\"\n [conditionConfig]=\"conditionConfig\"\n [existingConditions]=\"existingConditions$ | async\"\n [autoScroll]=\"autoScroll\"\n [(ngModel)]=\"addedCondition\"\n [showFootAction]=\"showFootAction\"\n (completed)=\"complete($event)\"\n (delete)=\"setConditionDeleting()\"\n (search)=\"doSearch()\"\n ></acl-multi-search-action-input>\n </acl-multi-search-tags>\n\n <div class=\"search-suffix\">\n @if ($any(existingConditions$ | async)?.length) {\n <div class=\"search-clear\">\n <aui-icon\n class=\"clear-icon\"\n [ngClass]=\"CLEAR_ICON_CLASS\"\n icon=\"xmark_small\"\n size=\"14\"\n (click)=\"clearConditions(); doSearch(); $event.stopPropagation()\"\n ></aui-icon>\n </div>\n }\n @if (searchSuffix) {\n <div class=\"search-suffix\">\n <div class=\"suffix-wrapper\">\n <aui-icon\n class=\"search-icon\"\n [ngClass]=\"SEARCH_ICON_CLASS\"\n icon=\"magnifier\"\n (click)=\"doSearch(); $event.stopPropagation()\"\n ></aui-icon>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [":host{min-width:0}.multi-search{min-width:240px;height:max-content;display:flex;align-items:stretch;padding:0;overflow-y:auto}.multi-search .tags-width{width:calc(100% - 30px)}.multi-search .tags-width-with-delete{width:calc(100% - 48px)}.multi-search .search-clear{width:18px;display:flex;align-items:center}.multi-search .search-clear-icon ::ng-deep .aui-icon{border-radius:50%}.multi-search .search-clear-icon ::ng-deep .aui-icon:hover{color:rgb(var(--aui-color-n-10));background-color:rgb(var(--aui-color-n-5))!important}.multi-search .search-suffix{display:flex;text-align:center}.multi-search .search-suffix .suffix-wrapper{margin-top:4px;margin-bottom:4px;height:calc(100% - 8px);border-left:solid 1px rgb(var(--aui-color-n-7));min-width:30px;display:flex;align-items:center;justify-content:center}.multi-search .search-suffix .suffix-wrapper aui-icon:hover{color:rgb(var(--aui-color-blue))}.clear-icon,.search-icon{color:rgb(var(--aui-color-n-4));cursor:pointer}\n"] }]
9333
9276
  }], ctorParameters: () => [], propDecorators: { placeholder: [{
9334
9277
  type: Input
9335
9278
  }], conditionCreatable: [{
@@ -9342,7 +9285,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
9342
9285
  type: Input
9343
9286
  }], searchSuffix: [{
9344
9287
  type: Input
9345
- }], searchEvent: [{
9288
+ }], search: [{
9346
9289
  type: Output
9347
9290
  }], showFootAction: [{
9348
9291
  type: Input
@@ -9359,22 +9302,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
9359
9302
  args: ['multiSearch', { static: true }]
9360
9303
  }] } });
9361
9304
 
9362
- const removeSuffix = (str) => str.replace('-resize', '');
9363
- /** 如果cursor存在类似 n-resize、ne-resize,都代表是top 方向 */
9364
- const isT = (cursor) => removeSuffix(cursor).includes('n');
9365
- /** 是否是right */
9366
- const isR = (cursor) => removeSuffix(cursor).includes('e');
9367
- /** 是否是bottom */
9368
- const isB = (cursor) => removeSuffix(cursor).includes('s');
9369
- /** 是否是left */
9370
- const isL = (cursor) => removeSuffix(cursor).includes('w');
9371
- const toPx = (num) => num + 'px';
9372
- const toPercent = (num, base = 1) => num * base + '%';
9373
- const toNumber = (str) => {
9374
- const p = parseFloat(str);
9375
- return isNaN(p) ? 0 : p;
9376
- };
9377
-
9378
9305
  /**
9379
9306
  * To judge whether the parent element
9380
9307
  */
@@ -9397,6 +9324,22 @@ function coerceElement(elementOrRef) {
9397
9324
  : elementOrRef;
9398
9325
  }
9399
9326
 
9327
+ const removeSuffix = (str) => str.replace('-resize', '');
9328
+ /** 如果cursor存在类似 n-resize、ne-resize,都代表是top 方向 */
9329
+ const isT = (cursor) => removeSuffix(cursor).includes('n');
9330
+ /** 是否是right */
9331
+ const isR = (cursor) => removeSuffix(cursor).includes('e');
9332
+ /** 是否是bottom */
9333
+ const isB = (cursor) => removeSuffix(cursor).includes('s');
9334
+ /** 是否是left */
9335
+ const isL = (cursor) => removeSuffix(cursor).includes('w');
9336
+ const toPx = (num) => num + 'px';
9337
+ const toPercent = (num, base = 1) => num * base + '%';
9338
+ const toNumber = (str) => {
9339
+ const p = parseFloat(str);
9340
+ return isNaN(p) ? 0 : p;
9341
+ };
9342
+
9400
9343
  const MUTABLE_BASIC_OPTIONS = {
9401
9344
  directions: [true, true, true, true],
9402
9345
  resizeThreshold: 5,
@@ -9891,8 +9834,8 @@ class K8SResourceListFooterComponent extends ScrollBorderObserverDirective {
9891
9834
  this.bottomDistance = 60;
9892
9835
  this.window = window;
9893
9836
  this.image = [
9894
- 'assets/images/light/no-data-for-list-or-card.svg',
9895
- 'assets/images/dark/no-data-for-list-or-card.svg',
9837
+ '/console-assets/images/light/no-data-for-list-or-card.svg',
9838
+ '/console-assets/images/dark/no-data-for-list-or-card.svg',
9896
9839
  ];
9897
9840
  this.translate = inject(TranslateService);
9898
9841
  this.option = this.autoLoad ? '' : false;
@@ -10483,11 +10426,26 @@ const DEFAULT_PAGE_SIZE = 10;
10483
10426
  const DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];
10484
10427
  const DEFAULT_PAGINATION_LAYOUT = 'total,pager,sizes,jumper';
10485
10428
 
10429
+ class TableHeaderCellDefDirective {
10430
+ constructor() {
10431
+ this.templateRef = inject((TemplateRef));
10432
+ }
10433
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableHeaderCellDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
10434
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TableHeaderCellDefDirective, isStandalone: true, selector: "[aclTableHeaderCellDef]", inputs: { aclTableHeaderCellDef: "aclTableHeaderCellDef" }, ngImport: i0 }); }
10435
+ }
10436
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableHeaderCellDefDirective, decorators: [{
10437
+ type: Directive,
10438
+ args: [{
10439
+ selector: '[aclTableHeaderCellDef]',
10440
+ }]
10441
+ }], propDecorators: { aclTableHeaderCellDef: [{
10442
+ type: Input
10443
+ }] } });
10486
10444
  class TableCellDefDirective {
10487
- constructor(templateRef) {
10488
- this.templateRef = templateRef;
10445
+ constructor() {
10446
+ this.templateRef = inject((TemplateRef));
10489
10447
  }
10490
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableCellDefDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
10448
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableCellDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
10491
10449
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TableCellDefDirective, isStandalone: true, selector: "[aclTableCellDef]", inputs: { aclTableCellDef: "aclTableCellDef" }, ngImport: i0 }); }
10492
10450
  }
10493
10451
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableCellDefDirective, decorators: [{
@@ -10496,7 +10454,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
10496
10454
  selector: '[aclTableCellDef]',
10497
10455
  standalone: true,
10498
10456
  }]
10499
- }], ctorParameters: () => [{ type: i0.TemplateRef }], propDecorators: { aclTableCellDef: [{
10457
+ }], propDecorators: { aclTableCellDef: [{
10500
10458
  type: Input
10501
10459
  }] } });
10502
10460
 
@@ -10517,8 +10475,8 @@ function defaultSorter(a, b) {
10517
10475
 
10518
10476
  const KNOWN_COLUMNS = new Set([NAME, CREATOR, CREATED_AT]);
10519
10477
  class TableUtilService {
10520
- constructor(k8sUtil) {
10521
- this.k8sUtil = k8sUtil;
10478
+ constructor() {
10479
+ this.k8sUtil = inject(K8sUtilService);
10522
10480
  this.getValueFromPath = this.getValueFromPath.bind(this);
10523
10481
  this.defaultFilterFn = this.defaultFilterFn.bind(this);
10524
10482
  }
@@ -10542,6 +10500,11 @@ class TableUtilService {
10542
10500
  ? this.k8sUtil.getName(item)
10543
10501
  : get(item, NAME);
10544
10502
  }
10503
+ case NAMESPACE$1: {
10504
+ return isK8s
10505
+ ? this.k8sUtil.getNamespace(item)
10506
+ : get(item, NAMESPACE$1);
10507
+ }
10545
10508
  case CREATOR: {
10546
10509
  return isK8s
10547
10510
  ? this.k8sUtil.getCreator(item)
@@ -10554,7 +10517,6 @@ class TableUtilService {
10554
10517
  }
10555
10518
  }
10556
10519
  }
10557
- // eslint-disable-next-line sonarjs/cognitive-complexity
10558
10520
  defaultFilterFn(items, columnDefs, activeSort, filterParams, context) {
10559
10521
  context = context ?? this;
10560
10522
  if (items && filterParams) {
@@ -10576,7 +10538,7 @@ class TableUtilService {
10576
10538
  }
10577
10539
  return items;
10578
10540
  }
10579
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableUtilService, deps: [{ token: K8sUtilService }], target: i0.ɵɵFactoryTarget.Injectable }); }
10541
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableUtilService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
10580
10542
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableUtilService, providedIn: 'root' }); }
10581
10543
  }
10582
10544
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableUtilService, decorators: [{
@@ -10584,10 +10546,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
10584
10546
  args: [{
10585
10547
  providedIn: 'root',
10586
10548
  }]
10587
- }], ctorParameters: () => [{ type: undefined, decorators: [{
10588
- type: Inject,
10589
- args: [K8sUtilService]
10590
- }] }] });
10549
+ }], ctorParameters: () => [] });
10591
10550
 
10592
10551
  class TableComponent {
10593
10552
  get finalContext() {
@@ -10779,7 +10738,7 @@ class TableComponent {
10779
10738
  : functionOrValue;
10780
10739
  }
10781
10740
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10782
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: TableComponent, isStandalone: true, selector: "acl-table", inputs: { list: "list", dataSource: "dataSource", resourceName: "resourceName", resourceNameTranslated: "resourceNameTranslated", sticky: "sticky", permissions: "permissions", columns: "columns", filterParams: "filterParams", context: "context", filterFn: "filterFn", trackBy: "trackBy", noDataHint: "noDataHint", loadingErrorTemplate: "loadingErrorTemplate", enablePagination: "enablePagination", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", paginationLayout: "paginationLayout", firstScrollLoad: "firstScrollLoad" }, outputs: { update: "update", delete: "delete", sortChange: "sortChange" }, host: { properties: { "class.aui-table__scroll-wrapper": "this.scrollWrapper", "style.max-height": "this.scrollWrapperHeight" } }, queries: [{ propertyName: "tableCellDefs", predicate: TableCellDefDirective }], ngImport: i0, template: "<aui-table\n auiSort\n [active]=\"(activeSort$ | async)?.active\"\n [direction]=\"(activeSort$ | async)?.direction\"\n [dataSource]=\"pagedItems$\"\n [trackBy]=\"trackBy\"\n (sortChange)=\"onSortChange($event)\"\n [auiTableScrollable]=\"!!sticky\"\n>\n @for (\n columnDef of columnDefs$ | async;\n track trackByName($index, columnDef)\n ) {\n <ng-container\n [auiTableColumnDef]=\"columnDef.name\"\n [sticky]=\"columnDef.sticky\"\n [stickyEnd]=\"columnDef.stickyEnd\"\n >\n <aui-table-header-cell\n *auiTableHeaderCellDef\n [style]=\"columnDef.style\"\n >\n @if (columnDef.name !== ACTION) {\n @if (columnDef.sort) {\n <span\n aui-sort-header\n [start]=\"columnDef.sort.direction\"\n >{{ columnDef.label || columnDef.name | translate }}</span\n >\n }\n @if (!columnDef.sort) {\n <span>{{ columnDef.label || columnDef.name | translate }}</span>\n }\n }\n </aui-table-header-cell>\n <aui-table-cell\n *auiTableCellDef=\"\n let data;\n let index = index;\n let even = even;\n let odd = odd;\n let last = last\n \"\n [direction]=\"columnDef.direction\"\n [ngClass]=\"columnDef.class\"\n [style]=\"columnDef.style\"\n >\n @if (columnDef.name | pure: getColumnTemplate; as template) {\n <ng-container\n *ngTemplateOutlet=\"\n template;\n context: {\n $implicit: data,\n index: index,\n even: even,\n odd: odd,\n last: last,\n }\n \"\n ></ng-container>\n } @else {\n @if (\n columnDef.path != null &&\n (data | pure: getValueFromPath : columnDef.name : columnDef.path);\n as value\n ) {\n <ng-container\n *ngTemplateOutlet=\"\n tableCellContent;\n context: { columnDef: columnDef, value: value }\n \"\n ></ng-container>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n defaultTableCell;\n context: { data: data, columnDef: columnDef }\n \"\n ></ng-container>\n }\n }\n </aui-table-cell>\n </ng-container>\n }\n\n <aui-table-header-row\n *auiTableHeaderRowDef=\"columnNames$ | async; sticky: !!sticky\"\n ></aui-table-header-row>\n <aui-table-row\n *auiTableRowDef=\"let row; columns: columnNames$ | async\"\n ></aui-table-row>\n\n <ng-container *auiTablePlaceholderDef>\n @if (list) {\n <div\n [hidden]=\"\n (pagedItems$ | async)?.length || !(list.items$ | async)?.length\n \"\n class=\"empty-placeholder\"\n >\n @if (finalResourceName$ | async; as finalResourceName) {\n {{\n 'no_named_data_hint'\n | translate\n : {\n name:\n resourceNameTranslated || (finalResourceName | translate),\n }\n }}\n } @else {\n {{ 'no_data' | translate }}\n }\n </div>\n <acl-k8s-resource-list-footer\n [hidden]=\"\n !(pagedItems$ | async)?.length && (list.items$ | async)?.length\n \"\n [list]=\"list\"\n [resourceName]=\"finalResourceName$ | async\"\n [resourceNameTranslated]=\"resourceNameTranslated\"\n [firstScrollLoad]=\"firstScrollLoad\"\n >\n @if (loadingErrorTemplate) {\n <ng-container\n *aclK8sListFooterLoadingError\n [ngTemplateOutlet]=\"loadingErrorTemplate\"\n ></ng-container>\n }\n </acl-k8s-resource-list-footer>\n }\n @if (!list && !(pagedItems$ | async)?.length) {\n <div class=\"empty-placeholder\">\n @if (finalDataSource$ | async) {\n {{\n noDataHint ||\n ('no_named_data_hint'\n | translate\n : {\n name:\n resourceNameTranslated || (resourceName | translate),\n })\n }}\n } @else {\n <aui-icon\n class=\"acl-loading-mask__icon\"\n size=\"16px\"\n icon=\"spinner\"\n ></aui-icon>\n {{ 'loading_please_wait' | translate }}\n }\n </div>\n }\n </ng-container>\n</aui-table>\n\n@if (enablePagination) {\n <aui-paginator\n [layout]=\"paginationLayout\"\n [currentPage]=\"currentPage$ | async\"\n [pageSize]=\"pageSize$ | async\"\n [total]=\"pagination.total\"\n (currentPageChange)=\"currentPage$.next($event)\"\n (pageSizeChange)=\"pageSize$.next($event)\"\n [pageSizeOptions]=\"pageSizeOptions\"\n ></aui-paginator>\n}\n\n<ng-template\n #defaultTableCell\n let-data=\"data\"\n let-columnDef=\"columnDef\"\n>\n @switch (columnDef.name) {\n @case (NAME) {\n @if (data | pure: getValueFromPath : columnDef.name; as name) {\n <div class=\"aui-table__cell__name\">\n @if (columnDef.extra?.link !== false && !(data | aclIsDeleting)) {\n <a\n [routerLink]=\"[\n (isListPage$ | async) ? '..' : '.',\n 'detail',\n name,\n ]\"\n [auiTooltip]=\"name\"\n >\n {{ name }}\n </a>\n } @else {\n <span\n [auiTooltip]=\"name\"\n [class.deleting-text]=\"data | aclIsDeleting\"\n >{{ name }}</span\n >\n }\n @if (data | pure: isK8sResource) {\n <acl-deleting-tag [resource]=\"data\"></acl-deleting-tag>\n }\n </div>\n }\n @if (\n (data | pure: isK8sResource)\n ? (data | aclDisplayName)\n : data.displayName;\n as displayName\n ) {\n <div\n class=\"aui-table__cell__display-name\"\n [class.deleting-text]=\"data | aclIsDeleting\"\n >\n {{ displayName }}\n </div>\n }\n }\n @case (CREATED_AT) {\n <acl-relative-time\n [time]=\"data | pure: getValueFromPath : columnDef.name\"\n ></acl-relative-time>\n }\n @case (ACTION) {\n <button\n aui-button=\"text\"\n [square]=\"true\"\n size=\"small\"\n [auiDropdown]=\"menu\"\n [auiDropdownContext]=\"{ $implicit: data, columnDef: columnDef }\"\n >\n <aui-icon icon=\"ellipsis_v_s\"></aui-icon>\n </button>\n }\n @default {\n @if (data | pure: getValueFromPath : columnDef.name; as value) {\n <ng-container\n *ngTemplateOutlet=\"\n tableCellContent;\n context: { columnDef: columnDef, value: value }\n \"\n ></ng-container>\n } @else {\n {{ null | aclFieldNotAvailable }}\n }\n }\n }\n</ng-template>\n\n<ng-template\n #tableCellContent\n let-columnDef=\"columnDef\"\n let-value=\"value\"\n>\n @if (\n columnDef.translate == null\n ? value\n : columnDef.translate === true\n ? (value | translate)\n : (value | pure: columnDef.translate : finalContext | translate);\n as text\n ) {\n @if (columnDef.ellipsis) {\n <div\n class=\"text-overflow\"\n [auiTooltip]=\"text\"\n >\n {{ text }}\n </div>\n } @else {\n {{ text }}\n }\n } @else {\n {{ null | aclFieldNotAvailable }}\n }\n</ng-template>\n\n<ng-template\n #menu\n let-data\n let-columnDef=\"columnDef\"\n ><aui-menu>\n @if (columnDef.extra?.update !== false) {\n <acl-disabled-container\n [isAllowed]=\"!permissions || permissions.update\"\n [isDisabled]=\"\n (columnDef.extra?.update?.disabled.handler | pure: isFunction) &&\n (data | pure: columnDef.extra.update.disabled.handler : finalContext)\n \"\n [tooltip]=\"\n columnDef.extra?.update?.disabled.tooltip\n | pure: getValue : data : finalContext\n | translate\n \"\n (click)=\"onUpdate(data, columnDef)\"\n >\n <aui-menu-item>{{ 'update' | translate }}</aui-menu-item>\n </acl-disabled-container>\n }\n @if (columnDef.extra?.delete !== false) {\n <acl-disabled-container\n [isAllowed]=\"!permissions || permissions.delete\"\n [isDisabled]=\"\n (columnDef.extra?.delete?.disabled.handler | pure: isFunction) &&\n (data | pure: columnDef.extra.delete.disabled.handler : finalContext)\n \"\n [tooltip]=\"\n columnDef.extra?.delete?.disabled.tooltip\n | pure: getValue : data : finalContext\n | translate\n \"\n (click)=\"delete.emit(data)\"\n >\n <aui-menu-item>{{ 'delete' | translate }}</aui-menu-item>\n </acl-disabled-container>\n }\n </aui-menu></ng-template\n>\n", styles: [".deleting-text{color:rgb(var(--aui-color-disabled-text))}:host{display:block}:host.aui-table__scroll-wrapper{display:flex}:host ::ng-deep+acl-table{margin-top:12px}html:not([lang|=zh]) :host ::ng-deep .aui-table__column-created_at{flex:0 0 140px}\n"], dependencies: [{ kind: "component", type: i1.TableComponent, selector: "aui-table", inputs: ["enableScrollWrapper"], exportAs: ["auiTable"] }, { kind: "component", type: i1.TableRowComponent, selector: "aui-table-row", inputs: ["disabled"], exportAs: ["auiTableRow"] }, { kind: "component", type: i1.TableHeaderRowComponent, selector: "aui-table-header-row", exportAs: ["auiTableHeaderRow"] }, { kind: "directive", type: i1.TableCellDirective, selector: "aui-table-cell", inputs: ["direction"] }, { kind: "directive", type: i1.TableCellDefDirective, selector: "[auiTableCellDef]" }, { kind: "directive", type: i1.TableHeaderCellDirective, selector: "aui-table-header-cell" }, { kind: "directive", type: i1.TableRowDefDirective, selector: "[auiTableRowDef]", inputs: ["auiTableRowDefColumns", "auiTableRowDefWhen"] }, { kind: "directive", type: i1.TableHeaderRowDefDirective, selector: "[auiTableHeaderRowDef]", inputs: ["auiTableHeaderRowDef", "auiTableHeaderRowDefSticky"] }, { kind: "directive", type: i1.TableHeaderCellDefDirective, selector: "[auiTableHeaderCellDef]" }, { kind: "directive", type: i1.TableColumnDefDirective, selector: "[auiTableColumnDef]", inputs: ["sticky", "auiTableColumnDef"] }, { kind: "directive", type: i1.TablePlaceholderDefDirective, selector: "ng-template[auiTablePlaceholderDef]" }, { kind: "directive", type: i1.TableScrollableDirective, selector: "[auiTableScrollable]", inputs: ["auiTableScrollable"] }, { kind: "directive", type: SortDirective, selector: "[auiSort]", inputs: ["active", "start", "direction"], outputs: ["sortChange"], exportAs: ["auiSort"] }, { kind: "component", type: SortHeaderComponent, selector: "[aui-sort-header]", inputs: ["aui-sort-header", "start"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "component", type: K8SResourceListFooterComponent, selector: "acl-k8s-resource-list-footer", inputs: ["list", "autoLoad", "backTop", "bottomDistance", "resourceNameTranslated", "firstScrollLoad", "resourceName"] }, { kind: "component", type: PaginatorComponent, selector: "aui-paginator", inputs: ["pageIndex", "currentPage", "pageSize", "pageSizeOptions", "total", "layout", "disabled"], outputs: ["pageIndexChange", "currentPageChange", "pageSizeChange"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }, { kind: "component", type: DeletingTagComponent, selector: "acl-deleting-tag", inputs: ["resource"] }, { kind: "component", type: RelativeTimeComponent, selector: "acl-relative-time", inputs: ["time"] }, { kind: "directive", type: i1.DropdownDirective, selector: "[auiDropdown]", inputs: ["auiDropdownClass", "auiDropdownDisabled", "auiDropdownPosition", "auiDropdownTrigger", "auiDropdownContext", "auiDropdown", "auiDropdownHideOnClick"], outputs: ["auiDropdownVisibleChange"], exportAs: ["auiDropdown"] }, { kind: "component", type: i1.MenuComponent, selector: "aui-menu", inputs: ["size"] }, { kind: "component", type: i1.MenuItemComponent, selector: "aui-menu-item", inputs: ["disabled", "divide", "type", "actived"] }, { kind: "component", type: DisabledContainerComponent, selector: "acl-disabled-container", inputs: ["tooltip", "tooltipPosition", "tooltipType", "isAllowed", "isDisabled"] }, { kind: "component", type: ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "directive", type: K8sListFooterLoadingErrorDirective, selector: "[aclK8sListFooterLoadingError]" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: PurePipe, name: "pure" }, { kind: "pipe", type: i2$1.K8sDisplayNamePipe, name: "aclDisplayName" }, { kind: "pipe", type: i2$1.K8sIsDeletingPipe, name: "aclIsDeleting" }, { kind: "pipe", type: FieldNotAvailablePipe, name: "aclFieldNotAvailable" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10741
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: TableComponent, isStandalone: true, selector: "acl-table", inputs: { list: "list", dataSource: "dataSource", resourceName: "resourceName", resourceNameTranslated: "resourceNameTranslated", sticky: "sticky", permissions: "permissions", columns: "columns", filterParams: "filterParams", context: "context", filterFn: "filterFn", trackBy: "trackBy", noDataHint: "noDataHint", loadingErrorTemplate: "loadingErrorTemplate", enablePagination: "enablePagination", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", paginationLayout: "paginationLayout", firstScrollLoad: "firstScrollLoad" }, outputs: { update: "update", delete: "delete", sortChange: "sortChange" }, host: { properties: { "class.aui-table__scroll-wrapper": "this.scrollWrapper", "style.max-height": "this.scrollWrapperHeight" } }, queries: [{ propertyName: "tableCellDefs", predicate: TableCellDefDirective }], ngImport: i0, template: "<aui-table\n auiSort\n [active]=\"(activeSort$ | async)?.active\"\n [direction]=\"(activeSort$ | async)?.direction\"\n [dataSource]=\"pagedItems$\"\n [trackBy]=\"trackBy\"\n (sortChange)=\"onSortChange($event)\"\n [auiTableScrollable]=\"!!sticky\"\n>\n @for (\n columnDef of columnDefs$ | async;\n track trackByName($index, columnDef)\n ) {\n <ng-container\n [auiTableColumnDef]=\"columnDef.name\"\n [sticky]=\"columnDef.sticky\"\n [stickyEnd]=\"columnDef.stickyEnd\"\n >\n <aui-table-header-cell\n *auiTableHeaderCellDef\n [style]=\"columnDef.style\"\n >\n @if (columnDef.name !== ACTION) {\n @if (columnDef.sort) {\n <span\n aui-sort-header\n [start]=\"columnDef.sort.direction\"\n >{{ columnDef.label || columnDef.name | translate }}</span\n >\n }\n @if (!columnDef.sort) {\n <span>{{ columnDef.label || columnDef.name | translate }}</span>\n }\n }\n </aui-table-header-cell>\n <aui-table-cell\n *auiTableCellDef=\"\n let data;\n let index = index;\n let even = even;\n let odd = odd;\n let last = last\n \"\n [direction]=\"columnDef.direction\"\n [ngClass]=\"columnDef.class\"\n [style]=\"columnDef.style\"\n >\n @if (columnDef.name | pure: getColumnTemplate; as template) {\n <ng-container\n *ngTemplateOutlet=\"\n template;\n context: {\n $implicit: data,\n index: index,\n even: even,\n odd: odd,\n last: last,\n }\n \"\n ></ng-container>\n } @else {\n @if (\n columnDef.path != null &&\n (data | pure: getValueFromPath : columnDef.name : columnDef.path);\n as value\n ) {\n <ng-container\n *ngTemplateOutlet=\"\n tableCellContent;\n context: { columnDef: columnDef, value: value }\n \"\n ></ng-container>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n defaultTableCell;\n context: { data: data, columnDef: columnDef }\n \"\n ></ng-container>\n }\n }\n </aui-table-cell>\n </ng-container>\n }\n\n <aui-table-header-row\n *auiTableHeaderRowDef=\"columnNames$ | async; sticky: !!sticky\"\n ></aui-table-header-row>\n <aui-table-row\n *auiTableRowDef=\"let row; columns: columnNames$ | async\"\n ></aui-table-row>\n\n <ng-container *auiTablePlaceholderDef>\n @if (list) {\n <div\n [hidden]=\"\n (pagedItems$ | async)?.length || !(list.items$ | async)?.length\n \"\n class=\"empty-placeholder\"\n >\n @if (finalResourceName$ | async; as finalResourceName) {\n {{\n 'no_named_data_hint'\n | translate\n : {\n name:\n resourceNameTranslated || (finalResourceName | translate),\n }\n }}\n } @else {\n {{ 'no_data' | translate }}\n }\n </div>\n <acl-k8s-resource-list-footer\n [hidden]=\"\n !(pagedItems$ | async)?.length && (list.items$ | async)?.length\n \"\n [list]=\"list\"\n [resourceName]=\"finalResourceName$ | async\"\n [resourceNameTranslated]=\"resourceNameTranslated\"\n [firstScrollLoad]=\"firstScrollLoad\"\n >\n @if (loadingErrorTemplate) {\n <ng-container\n *aclK8sListFooterLoadingError\n [ngTemplateOutlet]=\"loadingErrorTemplate\"\n ></ng-container>\n }\n </acl-k8s-resource-list-footer>\n }\n @if (!list && !(pagedItems$ | async)?.length) {\n <div class=\"empty-placeholder\">\n @if (finalDataSource$ | async) {\n {{\n noDataHint ||\n ('no_named_data_hint'\n | translate\n : {\n name:\n resourceNameTranslated || (resourceName | translate),\n })\n }}\n } @else {\n <aui-icon\n class=\"acl-loading-mask__icon\"\n size=\"16px\"\n icon=\"spinner\"\n ></aui-icon>\n {{ 'loading_please_wait' | translate }}\n }\n </div>\n }\n </ng-container>\n</aui-table>\n\n@if (enablePagination) {\n <aui-paginator\n [layout]=\"paginationLayout\"\n [currentPage]=\"currentPage$ | async\"\n [pageSize]=\"pageSize$ | async\"\n [total]=\"pagination.total\"\n (currentPageChange)=\"currentPage$.next($event)\"\n (pageSizeChange)=\"pageSize$.next($event)\"\n [pageSizeOptions]=\"pageSizeOptions\"\n ></aui-paginator>\n}\n\n<ng-template\n #defaultTableCell\n let-data=\"data\"\n let-columnDef=\"columnDef\"\n>\n @switch (columnDef.name) {\n @case (NAME) {\n @if (data | pure: getValueFromPath : columnDef.name; as name) {\n <div class=\"aui-table__cell__name\">\n @if (columnDef.extra?.link !== false && !(data | aclIsDeleting)) {\n <a\n [routerLink]=\"[\n (isListPage$ | async) ? '..' : '.',\n 'detail',\n name,\n ]\"\n [auiTooltip]=\"name\"\n >\n {{ name }}\n </a>\n } @else {\n <span\n [auiTooltip]=\"name\"\n [class.deleting-text]=\"data | aclIsDeleting\"\n >{{ name }}</span\n >\n }\n @if (data | pure: isK8sResource) {\n <acl-deleting-tag [resource]=\"data\"></acl-deleting-tag>\n }\n </div>\n }\n @if (\n (data | pure: isK8sResource)\n ? (data | aclDisplayName)\n : data.displayName;\n as displayName\n ) {\n <div\n class=\"aui-table__cell__display-name\"\n [class.deleting-text]=\"data | aclIsDeleting\"\n >\n {{ displayName }}\n </div>\n }\n }\n @case (CREATED_AT) {\n <acl-relative-time\n [time]=\"data | pure: getValueFromPath : columnDef.name\"\n ></acl-relative-time>\n }\n @case (ACTION) {\n <button\n aui-button=\"text\"\n [square]=\"true\"\n size=\"small\"\n [auiDropdown]=\"menu\"\n [auiDropdownContext]=\"{ $implicit: data, columnDef: columnDef }\"\n >\n <aui-icon icon=\"ellipsis_v_s\"></aui-icon>\n </button>\n }\n @default {\n @if (data | pure: getValueFromPath : columnDef.name; as value) {\n <ng-container\n *ngTemplateOutlet=\"\n tableCellContent;\n context: { columnDef: columnDef, value: value }\n \"\n ></ng-container>\n } @else {\n {{ null | aclFieldNotAvailable }}\n }\n }\n }\n</ng-template>\n\n<ng-template\n #tableCellContent\n let-columnDef=\"columnDef\"\n let-value=\"value\"\n>\n @if (\n columnDef.translate == null\n ? value\n : columnDef.translate === true\n ? (value | translate)\n : (value | pure: columnDef.translate : finalContext | translate);\n as text\n ) {\n @if (columnDef.ellipsis) {\n <div\n class=\"text-overflow\"\n [auiTooltip]=\"text\"\n >\n {{ text }}\n </div>\n } @else {\n {{ text }}\n }\n } @else {\n {{ null | aclFieldNotAvailable }}\n }\n</ng-template>\n\n<ng-template\n #menu\n let-data\n let-columnDef=\"columnDef\"\n ><aui-menu>\n @if (columnDef.extra?.update !== false) {\n <acl-disabled-container\n [isAllowed]=\"!permissions || permissions.update\"\n [isDisabled]=\"\n (columnDef.extra?.update?.disabled.handler | pure: isFunction) &&\n (data | pure: columnDef.extra.update.disabled.handler : finalContext)\n \"\n [tooltip]=\"\n columnDef.extra?.update?.disabled.tooltip\n | pure: getValue : data : finalContext\n | translate\n \"\n (click)=\"onUpdate(data, columnDef)\"\n >\n <aui-menu-item>{{ 'update' | translate }}</aui-menu-item>\n </acl-disabled-container>\n }\n @if (columnDef.extra?.delete !== false) {\n <acl-disabled-container\n [isAllowed]=\"!permissions || permissions.delete\"\n [isDisabled]=\"\n (columnDef.extra?.delete?.disabled.handler | pure: isFunction) &&\n (data | pure: columnDef.extra.delete.disabled.handler : finalContext)\n \"\n [tooltip]=\"\n columnDef.extra?.delete?.disabled.tooltip\n | pure: getValue : data : finalContext\n | translate\n \"\n (click)=\"delete.emit(data)\"\n >\n <aui-menu-item>{{ 'delete' | translate }}</aui-menu-item>\n </acl-disabled-container>\n }\n </aui-menu></ng-template\n>\n", styles: [".deleting-text{color:rgb(var(--aui-color-disabled-text))}:host{display:block}:host.aui-table__scroll-wrapper{display:flex}:host ::ng-deep+acl-table{margin-top:12px}html:not([lang|=zh]) :host ::ng-deep .aui-table__column-created_at{flex:0 0 140px}\n"], dependencies: [{ kind: "component", type: i1.TableComponent, selector: "aui-table", inputs: ["enableScrollWrapper"], exportAs: ["auiTable"] }, { kind: "component", type: i1.TableRowComponent, selector: "aui-table-row", inputs: ["disabled"], exportAs: ["auiTableRow"] }, { kind: "component", type: i1.TableHeaderRowComponent, selector: "aui-table-header-row", exportAs: ["auiTableHeaderRow"] }, { kind: "directive", type: i1.TableCellDirective, selector: "aui-table-cell", inputs: ["direction"] }, { kind: "directive", type: i1.TableCellDefDirective, selector: "[auiTableCellDef]" }, { kind: "directive", type: i1.TableHeaderCellDirective, selector: "aui-table-header-cell" }, { kind: "directive", type: i1.TableRowDefDirective, selector: "[auiTableRowDef]", inputs: ["auiTableRowDefColumns", "auiTableRowDefWhen"] }, { kind: "directive", type: i1.TableHeaderRowDefDirective, selector: "[auiTableHeaderRowDef]", inputs: ["auiTableHeaderRowDef", "auiTableHeaderRowDefSticky"] }, { kind: "directive", type: i1.TableHeaderCellDefDirective, selector: "[auiTableHeaderCellDef]" }, { kind: "directive", type: i1.TableColumnDefDirective, selector: "[auiTableColumnDef]", inputs: ["sticky", "auiTableColumnDef"] }, { kind: "directive", type: i1.TablePlaceholderDefDirective, selector: "ng-template[auiTablePlaceholderDef]" }, { kind: "directive", type: i1.TableScrollableDirective, selector: "[auiTableScrollable]", inputs: ["auiTableScrollable"] }, { kind: "directive", type: SortDirective, selector: "[auiSort]", inputs: ["active", "start", "direction"], outputs: ["sortChange"], exportAs: ["auiSort"] }, { kind: "component", type: SortHeaderComponent, selector: "[aui-sort-header]", inputs: ["aui-sort-header", "start"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "component", type: K8SResourceListFooterComponent, selector: "acl-k8s-resource-list-footer", inputs: ["list", "autoLoad", "backTop", "bottomDistance", "resourceNameTranslated", "firstScrollLoad", "resourceName"] }, { kind: "component", type: PaginatorComponent, selector: "aui-paginator", inputs: ["pageIndex", "currentPage", "pageSize", "pageSizeOptions", "total", "layout", "disabled"], outputs: ["pageIndexChange", "currentPageChange", "pageSizeChange"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }, { kind: "component", type: DeletingTagComponent, selector: "acl-deleting-tag", inputs: ["resource"] }, { kind: "component", type: RelativeTimeComponent, selector: "acl-relative-time", inputs: ["time"] }, { kind: "directive", type: i1.DropdownDirective, selector: "[auiDropdown]", inputs: ["auiDropdownClass", "auiDropdownDisabled", "auiDropdownPosition", "auiDropdownTrigger", "auiDropdownContext", "auiDropdown", "auiDropdownHideOnClick"], outputs: ["auiDropdownVisibleChange"], exportAs: ["auiDropdown"] }, { kind: "component", type: i1.MenuComponent, selector: "aui-menu", inputs: ["size"] }, { kind: "component", type: i1.MenuItemComponent, selector: "aui-menu-item", inputs: ["disabled", "divide", "type", "actived"] }, { kind: "component", type: DisabledContainerComponent, selector: "acl-disabled-container", inputs: ["tooltip", "tooltipPosition", "tooltipType", "isAllowed", "isDisabled"] }, { kind: "component", type: ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "directive", type: K8sListFooterLoadingErrorDirective, selector: "[aclK8sListFooterLoadingError]" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: PurePipe, name: "pure" }, { kind: "pipe", type: i3.K8sDisplayNamePipe, name: "aclDisplayName" }, { kind: "pipe", type: i3.K8sIsDeletingPipe, name: "aclIsDeleting" }, { kind: "pipe", type: FieldNotAvailablePipe, name: "aclFieldNotAvailable" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10783
10742
  }
10784
10743
  __decorate([
10785
10744
  ObservableInput(),
@@ -10885,11 +10844,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
10885
10844
 
10886
10845
  class NamespaceBadgeComponent {
10887
10846
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NamespaceBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10888
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: NamespaceBadgeComponent, isStandalone: true, selector: "acl-namespace-badge", inputs: { name: "name" }, ngImport: i0, template: "<div>\n <aui-icon\n icon=\"prod:namespace\"\n class=\"tw-mr-4\"\n ></aui-icon>\n <span\n class=\"text-truncate\"\n [attr.title]=\"name\"\n >{{ name }}</span\n >\n</div>\n", styles: [":host{display:flex;max-width:220px}.with-colon{display:inline-flex;word-break:keep-all;flex-shrink:0;font-weight:500}.with-colon:after{content:\":\";margin-right:8px}.text-truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10847
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: NamespaceBadgeComponent, isStandalone: true, selector: "acl-namespace-badge", inputs: { name: "name" }, ngImport: i0, template: "<div>\n <aui-icon\n icon=\"prod:namespace\"\n class=\"icon\"\n ></aui-icon>\n <span\n class=\"text-truncate\"\n [attr.title]=\"name\"\n >{{ name }}</span\n >\n</div>\n", styles: [":host{display:flex;max-width:220px}.with-colon{display:inline-flex;word-break:keep-all;flex-shrink:0;font-weight:500}.with-colon:after{content:\":\";margin-right:8px}.icon{margin-right:4px}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10889
10848
  }
10890
10849
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NamespaceBadgeComponent, decorators: [{
10891
10850
  type: Component,
10892
- args: [{ selector: 'acl-namespace-badge', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [IconComponent], template: "<div>\n <aui-icon\n icon=\"prod:namespace\"\n class=\"tw-mr-4\"\n ></aui-icon>\n <span\n class=\"text-truncate\"\n [attr.title]=\"name\"\n >{{ name }}</span\n >\n</div>\n", styles: [":host{display:flex;max-width:220px}.with-colon{display:inline-flex;word-break:keep-all;flex-shrink:0;font-weight:500}.with-colon:after{content:\":\";margin-right:8px}.text-truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}\n"] }]
10851
+ args: [{ selector: 'acl-namespace-badge', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [IconComponent], template: "<div>\n <aui-icon\n icon=\"prod:namespace\"\n class=\"icon\"\n ></aui-icon>\n <span\n class=\"text-truncate\"\n [attr.title]=\"name\"\n >{{ name }}</span\n >\n</div>\n", styles: [":host{display:flex;max-width:220px}.with-colon{display:inline-flex;word-break:keep-all;flex-shrink:0;font-weight:500}.with-colon:after{content:\":\";margin-right:8px}.icon{margin-right:4px}\n"] }]
10893
10852
  }], propDecorators: { name: [{
10894
10853
  type: Input
10895
10854
  }] } });
@@ -10968,9 +10927,10 @@ class AclTableVirtualComponent {
10968
10927
  this.height = '400px';
10969
10928
  this.trackBy = (index) => index;
10970
10929
  this.placeholderActive = false;
10930
+ this.checked$ = new Subject();
10971
10931
  this.destroy$ = new Subject();
10972
10932
  }
10973
- ngAfterViewInit() {
10933
+ ngAfterViewChecked() {
10974
10934
  // 如果有虚拟滚动视口,优先监听其滚动;否则退回到外层容器滚动。
10975
10935
  const container = this.scrollContainerRef?.nativeElement;
10976
10936
  const viewportEl = this.viewport?.elementRef?.nativeElement ?? null;
@@ -10978,17 +10938,26 @@ class AclTableVirtualComponent {
10978
10938
  fromEvent(viewportEl ?? container, 'scroll');
10979
10939
  const containerScrolled$ = fromEvent(container, 'scroll');
10980
10940
  const resized$ = fromEvent(window, 'resize');
10941
+ this.checked$.next();
10981
10942
  merge(viewportScrolled$, containerScrolled$, resized$)
10982
- .pipe(startWith(null), takeUntil(this.destroy$))
10943
+ .pipe(startWith(null), takeUntil(this.checked$))
10983
10944
  .subscribe(() => {
10984
10945
  this.mutateVerticalScroll();
10985
10946
  this.mutateHorizontalScroll();
10947
+ if (this.headerRow && viewportEl) {
10948
+ this.headerRow.nativeElement.scrollLeft = viewportEl.scrollLeft;
10949
+ }
10986
10950
  });
10987
- // 初始化一次,以便首次渲染即得到正确的阴影状态。
10988
- this.mutateVerticalScroll();
10989
- this.mutateHorizontalScroll();
10951
+ }
10952
+ onHeaderRowScroll(ev) {
10953
+ if (!this.viewport) {
10954
+ return;
10955
+ }
10956
+ this.viewport.elementRef.nativeElement.scrollLeft = ev.target.scrollLeft;
10990
10957
  }
10991
10958
  ngOnDestroy() {
10959
+ this.checked$.next();
10960
+ this.checked$.complete();
10992
10961
  this.destroy$.next();
10993
10962
  this.destroy$.complete();
10994
10963
  }
@@ -11022,13 +10991,17 @@ class AclTableVirtualComponent {
11022
10991
  this.placeClass(scrollLeft < scrollDisX && scrollDisX > 0, 'aui-table__scroll-shadow--before-end');
11023
10992
  }
11024
10993
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11025
- 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: `
11026
10995
  <div
11027
10996
  #scrollContainer
11028
10997
  class="aui-table aui-table__scroll-shadow"
11029
10998
  >
11030
10999
  @if (headerTemplate) {
11031
- <div class="aui-table__header-row">
11000
+ <div
11001
+ class="aui-table__header-row"
11002
+ #headerRow
11003
+ (scroll)="onHeaderRowScroll($event)"
11004
+ >
11032
11005
  <ng-template [ngTemplateOutlet]="headerTemplate"></ng-template>
11033
11006
  </div>
11034
11007
  }
@@ -11067,7 +11040,7 @@ class AclTableVirtualComponent {
11067
11040
  </cdk-virtual-scroll-viewport>
11068
11041
  }
11069
11042
  </div>
11070
- `, 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$3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1$3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1$3.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}.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 }); }
11071
11044
  }
11072
11045
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualComponent, decorators: [{
11073
11046
  type: Component,
@@ -11077,7 +11050,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
11077
11050
  class="aui-table aui-table__scroll-shadow"
11078
11051
  >
11079
11052
  @if (headerTemplate) {
11080
- <div class="aui-table__header-row">
11053
+ <div
11054
+ class="aui-table__header-row"
11055
+ #headerRow
11056
+ (scroll)="onHeaderRowScroll($event)"
11057
+ >
11081
11058
  <ng-template [ngTemplateOutlet]="headerTemplate"></ng-template>
11082
11059
  </div>
11083
11060
  }
@@ -11116,7 +11093,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
11116
11093
  </cdk-virtual-scroll-viewport>
11117
11094
  }
11118
11095
  </div>
11119
- `, 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}.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"] }]
11120
11097
  }], propDecorators: { dataSource: [{
11121
11098
  type: Input
11122
11099
  }], itemSize: [{
@@ -11146,43 +11123,134 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
11146
11123
  }], scrollContainerRef: [{
11147
11124
  type: ViewChild,
11148
11125
  args: ['scrollContainer', { static: true }]
11126
+ }], headerRow: [{
11127
+ type: ViewChild,
11128
+ args: ['headerRow', { static: false }]
11149
11129
  }] } });
11150
11130
 
11151
- class AclTableVirtualModule {
11152
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11153
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualModule, imports: [AclTableVirtualComponent,
11154
- AclTableVirtualHeaderDefDirective,
11155
- AclTableVirtualRowDefDirective,
11156
- AclTableVirtualPlaceholderDefDirective], exports: [AclTableVirtualComponent,
11157
- AclTableVirtualHeaderDefDirective,
11158
- AclTableVirtualRowDefDirective,
11159
- AclTableVirtualPlaceholderDefDirective] }); }
11160
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualModule, imports: [AclTableVirtualComponent] }); }
11161
- }
11162
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualModule, decorators: [{
11163
- type: NgModule,
11164
- args: [{
11165
- imports: [
11166
- AclTableVirtualComponent,
11167
- AclTableVirtualHeaderDefDirective,
11168
- AclTableVirtualRowDefDirective,
11169
- AclTableVirtualPlaceholderDefDirective,
11170
- ],
11171
- exports: [
11172
- AclTableVirtualComponent,
11173
- AclTableVirtualHeaderDefDirective,
11174
- AclTableVirtualRowDefDirective,
11175
- AclTableVirtualPlaceholderDefDirective,
11176
- ],
11177
- }]
11178
- }] });
11131
+ const TABLE_VIRTUAL_MODULE = [
11132
+ AclTableVirtualComponent,
11133
+ AclTableVirtualHeaderDefDirective,
11134
+ AclTableVirtualRowDefDirective,
11135
+ AclTableVirtualPlaceholderDefDirective,
11136
+ ];
11137
+
11138
+ class TerminatingTagComponent {
11139
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TerminatingTagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11140
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: TerminatingTagComponent, isStandalone: true, selector: "acl-deleting-tag", inputs: { resource: "resource" }, ngImport: i0, template: "@if (resource?.metadata?.deletionTimestamp) {\n <aui-tag\n type=\"error\"\n size=\"mini\"\n [border]=\"true\"\n >\n {{ 'deleting' | translate }}\n </aui-tag>\n}\n", styles: ["aui-tag{display:inline-block;margin-left:8px;vertical-align:2px}\n"], dependencies: [{ kind: "component", type: TagComponent, selector: "aui-tag", inputs: ["type", "size", "closeable", "border", "solid", "invalid", "round", "color", "allowClick"], outputs: ["close"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11141
+ }
11142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TerminatingTagComponent, decorators: [{
11143
+ type: Component,
11144
+ args: [{ selector: 'acl-deleting-tag', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [TagComponent, TranslatePipe], template: "@if (resource?.metadata?.deletionTimestamp) {\n <aui-tag\n type=\"error\"\n size=\"mini\"\n [border]=\"true\"\n >\n {{ 'deleting' | translate }}\n </aui-tag>\n}\n", styles: ["aui-tag{display:inline-block;margin-left:8px;vertical-align:2px}\n"] }]
11145
+ }], propDecorators: { resource: [{
11146
+ type: Input
11147
+ }] } });
11148
+
11149
+ class PluginClusterSelectorComponent {
11150
+ constructor() {
11151
+ this.valueChange = new EventEmitter();
11152
+ this.isActive = false;
11153
+ this.popupService = inject(ResourceSelectorPopupService);
11154
+ this.cdr = inject(ChangeDetectorRef);
11155
+ this.elementRef = inject(ElementRef);
11156
+ this.http = inject(HttpClient);
11157
+ this.projectApi = inject(ProjectService);
11158
+ this.displayFields = [
11159
+ ConfigurableField.Status,
11160
+ ConfigurableField.Time,
11161
+ ];
11162
+ this.filterClusters$ = this.disabled$.pipe(distinctUntilChanged(isEqual), switchMap(disabled => disabled
11163
+ ? EMPTY$1
11164
+ : this.projectApi
11165
+ .getProjects()
11166
+ .pipe(map(projects => projects
11167
+ ?.find(p => p.metadata.name === this.projectName)
11168
+ ?.spec?.clusters?.map(r => r.name)))), publishRef());
11169
+ }
11170
+ getFilterFn(filterClusters) {
11171
+ return (clusters) => {
11172
+ if (!filterClusters?.length) {
11173
+ return clusters;
11174
+ }
11175
+ return clusters.filter(c => filterClusters.includes(c.name));
11176
+ };
11177
+ }
11178
+ ngAfterViewInit() {
11179
+ this.http
11180
+ .get(`${API_GATEWAY$1}/auth/v1/clusters`)
11181
+ .pipe(map(list => list.items), catchError(() => of([])))
11182
+ .subscribe(clusters => {
11183
+ this.onSelect({ name: clusters[0].metadata.name });
11184
+ });
11185
+ }
11186
+ openPopup() {
11187
+ if (this.disabled) {
11188
+ return;
11189
+ }
11190
+ if (this.isActive) {
11191
+ this.closePopup();
11192
+ }
11193
+ else {
11194
+ this.isActive = true;
11195
+ this.popupRef = this.popupService.open({
11196
+ origin: this.elementRef,
11197
+ content: this.popupTemplate,
11198
+ });
11199
+ this.popupRef.afterClosed().subscribe(() => {
11200
+ this.isActive = false;
11201
+ this.cdr.markForCheck();
11202
+ });
11203
+ }
11204
+ }
11205
+ closePopup() {
11206
+ if (this.isActive) {
11207
+ this.isActive = false;
11208
+ this.popupRef.close();
11209
+ }
11210
+ }
11211
+ onSelect(item) {
11212
+ this.value = item.name;
11213
+ this.valueChange.emit(item.name);
11214
+ this.closePopup();
11215
+ }
11216
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PluginClusterSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11217
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "21.1.1", type: PluginClusterSelectorComponent, isStandalone: true, selector: "acl-plugin-cluster-selector", inputs: { value: "value", disabled: ["disabled", "disabled", booleanAttribute], projectName: "projectName", fields: "fields" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "popupTemplate", first: true, predicate: ["popup"], descendants: true, static: true }], ngImport: i0, template: "<div\n class=\"acl-resource-selector acl-resource-selector--bg\"\n [ngClass]=\"{\n 'acl-resource-selector--active': isActive,\n 'acl-resource-selector--disabled': disabled,\n }\"\n (click)=\"openPopup()\"\n>\n <div class=\"acl-resource-selector__item project\">\n <span class=\"icon-wrapper\">\n <aui-icon icon=\"bicolor:server\"></aui-icon>\n </span>\n <span class=\"with-colon\">\n {{ 'cluster' | translate }}\n </span>\n <span class=\"selected-name text-truncate\">{{ value }}</span>\n </div>\n <div class=\"acl-resource-selector__arrow\">\n <aui-icon icon=\"caret_down_s\"></aui-icon>\n </div>\n</div>\n\n<ng-template #popup>\n <acl-cluster-list\n context=\"popup\"\n [fields]=\"fields || displayFields\"\n [filterFn]=\"getFilterFn(filterClusters$ | async)\"\n [value]=\"value\"\n (selectItem)=\"onSelect($event)\"\n ></acl-cluster-list>\n</ng-template>\n", styles: [":host{display:flex}:host::ng-deep .icon-wrapper{position:relative;display:flex;justify-content:center;align-items:center;width:16px;height:16px;flex-shrink:0;font-size:var(--aui-icon-size-m)}:root :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}html[aui-theme-mode=light] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}}html[aui-theme-mode=dark] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}:host::ng-deep .with-colon{display:inline-flex;word-break:keep-all;flex-shrink:0;font-weight:500}:host::ng-deep .with-colon:after{content:\":\";margin-right:8px}:host::ng-deep .text-truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host::ng-deep .acl-resource-selector{-webkit-user-select:none;user-select:none;display:flex;color:var(--acl-page-header-title-color);cursor:pointer;padding:0 8px}:host::ng-deep .acl-resource-selector .selected-name{color:var(--acl-page-header-text-color)}:host::ng-deep .acl-resource-selector--active,:host::ng-deep .acl-resource-selector:not(.acl-resource-selector--disabled):hover{background-color:rgb(var(--aui-color-primary));color:#fff;border-radius:2px}:root :host::ng-deep .acl-resource-selector--active .icon-wrapper,:root :host::ng-deep .acl-resource-selector:not(.acl-resource-selector--disabled):hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}html[aui-theme-mode=light] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=light] :host::ng-deep .acl-resource-selector:not(.acl-resource-selector--disabled):hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=system] :host::ng-deep .acl-resource-selector:not(.acl-resource-selector--disabled):hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}}html[aui-theme-mode=dark] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=dark] :host::ng-deep .acl-resource-selector:not(.acl-resource-selector--disabled):hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}:host::ng-deep .acl-resource-selector--active .selected-name,:host::ng-deep .acl-resource-selector:not(.acl-resource-selector--disabled):hover .selected-name{color:#fff}:host::ng-deep .acl-resource-selector--disabled{cursor:not-allowed}:host::ng-deep .acl-resource-selector--bg{background-color:rgb(var(--aui-color-p-6));flex:1}:host::ng-deep .acl-resource-selector__item{margin-right:20px;height:32px;display:inline-flex;align-items:center;font-size:12px;max-width:270px}@media screen and (width <= 1280px){:host::ng-deep .acl-resource-selector__item{max-width:178px;margin-right:8px}}:host::ng-deep .acl-resource-selector__item .icon-wrapper{margin-right:4px}:host::ng-deep .acl-resource-selector__arrow{margin-left:-16px;align-items:center;display:inline-flex;width:16px;justify-content:center}@media screen and (width <= 1280px){:host::ng-deep .acl-resource-selector__arrow{margin-left:-4px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ClusterListComponent, selector: "acl-cluster-list", inputs: ["value", "filterFn"] }, { kind: "component", type: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11218
+ }
11219
+ __decorate([
11220
+ ObservableInput(),
11221
+ __metadata("design:type", Observable)
11222
+ ], PluginClusterSelectorComponent.prototype, "disabled$", void 0);
11223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PluginClusterSelectorComponent, decorators: [{
11224
+ type: Component,
11225
+ args: [{ selector: 'acl-plugin-cluster-selector', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
11226
+ CommonModule,
11227
+ ClusterListComponent,
11228
+ NgClass,
11229
+ IconComponent,
11230
+ TranslatePipe,
11231
+ ], template: "<div\n class=\"acl-resource-selector acl-resource-selector--bg\"\n [ngClass]=\"{\n 'acl-resource-selector--active': isActive,\n 'acl-resource-selector--disabled': disabled,\n }\"\n (click)=\"openPopup()\"\n>\n <div class=\"acl-resource-selector__item project\">\n <span class=\"icon-wrapper\">\n <aui-icon icon=\"bicolor:server\"></aui-icon>\n </span>\n <span class=\"with-colon\">\n {{ 'cluster' | translate }}\n </span>\n <span class=\"selected-name text-truncate\">{{ value }}</span>\n </div>\n <div class=\"acl-resource-selector__arrow\">\n <aui-icon icon=\"caret_down_s\"></aui-icon>\n </div>\n</div>\n\n<ng-template #popup>\n <acl-cluster-list\n context=\"popup\"\n [fields]=\"fields || displayFields\"\n [filterFn]=\"getFilterFn(filterClusters$ | async)\"\n [value]=\"value\"\n (selectItem)=\"onSelect($event)\"\n ></acl-cluster-list>\n</ng-template>\n", styles: [":host{display:flex}:host::ng-deep .icon-wrapper{position:relative;display:flex;justify-content:center;align-items:center;width:16px;height:16px;flex-shrink:0;font-size:var(--aui-icon-size-m)}:root :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}html[aui-theme-mode=light] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}}html[aui-theme-mode=dark] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}:host::ng-deep .with-colon{display:inline-flex;word-break:keep-all;flex-shrink:0;font-weight:500}:host::ng-deep .with-colon:after{content:\":\";margin-right:8px}:host::ng-deep .text-truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host::ng-deep .acl-resource-selector{-webkit-user-select:none;user-select:none;display:flex;color:var(--acl-page-header-title-color);cursor:pointer;padding:0 8px}:host::ng-deep .acl-resource-selector .selected-name{color:var(--acl-page-header-text-color)}:host::ng-deep .acl-resource-selector--active,:host::ng-deep .acl-resource-selector:not(.acl-resource-selector--disabled):hover{background-color:rgb(var(--aui-color-primary));color:#fff;border-radius:2px}:root :host::ng-deep .acl-resource-selector--active .icon-wrapper,:root :host::ng-deep .acl-resource-selector:not(.acl-resource-selector--disabled):hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}html[aui-theme-mode=light] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=light] :host::ng-deep .acl-resource-selector:not(.acl-resource-selector--disabled):hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=system] :host::ng-deep .acl-resource-selector:not(.acl-resource-selector--disabled):hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}}html[aui-theme-mode=dark] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=dark] :host::ng-deep .acl-resource-selector:not(.acl-resource-selector--disabled):hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}:host::ng-deep .acl-resource-selector--active .selected-name,:host::ng-deep .acl-resource-selector:not(.acl-resource-selector--disabled):hover .selected-name{color:#fff}:host::ng-deep .acl-resource-selector--disabled{cursor:not-allowed}:host::ng-deep .acl-resource-selector--bg{background-color:rgb(var(--aui-color-p-6));flex:1}:host::ng-deep .acl-resource-selector__item{margin-right:20px;height:32px;display:inline-flex;align-items:center;font-size:12px;max-width:270px}@media screen and (width <= 1280px){:host::ng-deep .acl-resource-selector__item{max-width:178px;margin-right:8px}}:host::ng-deep .acl-resource-selector__item .icon-wrapper{margin-right:4px}:host::ng-deep .acl-resource-selector__arrow{margin-left:-16px;align-items:center;display:inline-flex;width:16px;justify-content:center}@media screen and (width <= 1280px){:host::ng-deep .acl-resource-selector__arrow{margin-left:-4px}}\n"] }]
11232
+ }], propDecorators: { value: [{
11233
+ type: Input
11234
+ }], valueChange: [{
11235
+ type: Output
11236
+ }], disabled: [{
11237
+ type: Input,
11238
+ args: [{ transform: booleanAttribute }]
11239
+ }], disabled$: [], projectName: [{
11240
+ type: Input
11241
+ }], popupTemplate: [{
11242
+ type: ViewChild,
11243
+ args: ['popup', { static: true }]
11244
+ }], fields: [{
11245
+ type: Input
11246
+ }] } });
11179
11247
 
11180
11248
  class UpdateDescriptionDialogComponent {
11181
- constructor(dialogRef, k8sApi, k8sUtil, data) {
11182
- this.dialogRef = dialogRef;
11183
- this.k8sApi = k8sApi;
11184
- this.k8sUtil = k8sUtil;
11185
- this.data = data;
11249
+ constructor() {
11250
+ this.dialogRef = inject(DialogRef);
11251
+ this.k8sApi = inject(K8sApiService);
11252
+ this.k8sUtil = inject(K8sUtilService);
11253
+ this.data = inject(DIALOG_DATA);
11186
11254
  this.description = this.k8sUtil.getDescription(this.data.resource);
11187
11255
  this.confirming$$ = new BehaviorSubject(false);
11188
11256
  }
@@ -11190,14 +11258,7 @@ class UpdateDescriptionDialogComponent {
11190
11258
  this.confirming$$.next(true);
11191
11259
  this.k8sApi
11192
11260
  .patchResource({
11193
- ...(this.data.definition
11194
- ? {
11195
- definition: this.data.definition,
11196
- }
11197
- : {
11198
- type: this.data.type ||
11199
- snakeCase(this.data.resource.kind).toUpperCase(),
11200
- }),
11261
+ definition: this.data.definition,
11201
11262
  cluster: this.data.cluster,
11202
11263
  resource: this.data.resource,
11203
11264
  part: {
@@ -11211,8 +11272,8 @@ class UpdateDescriptionDialogComponent {
11211
11272
  .pipe(finalize(() => this.confirming$$.next(false)))
11212
11273
  .subscribe(resource => this.dialogRef.close(resource));
11213
11274
  }
11214
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateDescriptionDialogComponent, deps: [{ token: i1.DialogRef }, { token: i2$1.K8sApiService }, { token: i2$1.K8sUtilService }, { token: DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
11215
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: UpdateDescriptionDialogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<aui-dialog-header>\n {{ 'update_description' | translate }}\n</aui-dialog-header>\n<aui-dialog-content>\n <aui-form-item>\n <label auiFormItemLabel>\n {{ 'name' | translate }}\n </label>\n {{ data.resource | aclName }}\n </aui-form-item>\n <aui-form-item class=\"last-form-item-no-margin\">\n <label auiFormItemLabel>\n {{ 'description' | translate }}\n </label>\n <textarea\n aui-input\n name=\"description\"\n [(ngModel)]=\"description\"\n ></textarea>\n </aui-form-item>\n</aui-dialog-content>\n<aui-dialog-footer>\n <button\n aui-button=\"primary\"\n [loading]=\"confirming$$ | async\"\n [disabled]=\"confirming$$ | async\"\n (click)=\"confirm()\"\n >\n {{ 'update' | translate }}\n </button>\n <button\n aui-button\n auiDialogClose\n >\n {{ 'cancel' | translate }}\n </button>\n</aui-dialog-footer>\n", dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "ngmodule", type: DialogModule }, { 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: i1.DialogFooterComponent, selector: "aui-dialog-footer" }, { kind: "directive", type: i1.DialogCloseDirective, selector: "[auiDialogClose]", inputs: ["auiDialogClose"], exportAs: ["auiDialogClose"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i1.InputComponent, selector: "input[aui-input],textarea[aui-input]", inputs: ["size", "disabled"] }, { kind: "ngmodule", type: FormModule }, { kind: "component", type: i1.FormItemComponent, selector: "aui-form-item", inputs: ["labelWidth", "width", "labelPosition", "emptyAddon", "plain"] }, { kind: "directive", type: i1.FormItemLabelDirective, selector: "label[auiFormItemLabel]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { 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: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: i2$1.K8sNamePipe, name: "aclName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11275
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateDescriptionDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11276
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: UpdateDescriptionDialogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<aui-dialog-header>\n {{ 'update_description' | translate }}\n</aui-dialog-header>\n<aui-dialog-content>\n <aui-form-item>\n <label auiFormItemLabel>\n {{ 'name' | translate }}\n </label>\n {{ data.resource | aclName }}\n </aui-form-item>\n <aui-form-item class=\"last-form-item-no-margin\">\n <label auiFormItemLabel>\n {{ 'description' | translate }}\n </label>\n <textarea\n aui-input\n name=\"description\"\n [(ngModel)]=\"description\"\n ></textarea>\n </aui-form-item>\n</aui-dialog-content>\n<aui-dialog-footer>\n <button\n aui-button=\"primary\"\n [loading]=\"confirming$$ | async\"\n [disabled]=\"confirming$$ | async\"\n (click)=\"confirm()\"\n >\n {{ 'update' | translate }}\n </button>\n <button\n aui-button\n auiDialogClose\n >\n {{ 'cancel' | translate }}\n </button>\n</aui-dialog-footer>\n", dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "ngmodule", type: DialogModule }, { 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: i1.DialogFooterComponent, selector: "aui-dialog-footer" }, { kind: "directive", type: i1.DialogCloseDirective, selector: "[auiDialogClose]", inputs: ["auiDialogClose"], exportAs: ["auiDialogClose"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i1.InputComponent, selector: "input[aui-input],textarea[aui-input]", inputs: ["size", "disabled"] }, { kind: "ngmodule", type: FormModule }, { kind: "component", type: i1.FormItemComponent, selector: "aui-form-item", inputs: ["labelWidth", "width", "labelPosition", "emptyAddon", "plain"] }, { kind: "directive", type: i1.FormItemLabelDirective, selector: "label[auiFormItemLabel]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { 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: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: i3.K8sNamePipe, name: "aclName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11216
11277
  }
11217
11278
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateDescriptionDialogComponent, decorators: [{
11218
11279
  type: Component,
@@ -11226,10 +11287,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
11226
11287
  TranslatePipe,
11227
11288
  K8S_UTIL_PIPES_MODULE,
11228
11289
  ], template: "<aui-dialog-header>\n {{ 'update_description' | translate }}\n</aui-dialog-header>\n<aui-dialog-content>\n <aui-form-item>\n <label auiFormItemLabel>\n {{ 'name' | translate }}\n </label>\n {{ data.resource | aclName }}\n </aui-form-item>\n <aui-form-item class=\"last-form-item-no-margin\">\n <label auiFormItemLabel>\n {{ 'description' | translate }}\n </label>\n <textarea\n aui-input\n name=\"description\"\n [(ngModel)]=\"description\"\n ></textarea>\n </aui-form-item>\n</aui-dialog-content>\n<aui-dialog-footer>\n <button\n aui-button=\"primary\"\n [loading]=\"confirming$$ | async\"\n [disabled]=\"confirming$$ | async\"\n (click)=\"confirm()\"\n >\n {{ 'update' | translate }}\n </button>\n <button\n aui-button\n auiDialogClose\n >\n {{ 'cancel' | translate }}\n </button>\n</aui-dialog-footer>\n" }]
11229
- }], ctorParameters: () => [{ type: i1.DialogRef }, { type: i2$1.K8sApiService }, { type: i2$1.K8sUtilService }, { type: undefined, decorators: [{
11230
- type: Inject,
11231
- args: [DIALOG_DATA]
11232
- }] }] });
11290
+ }] });
11233
11291
 
11234
11292
  class UpdateDisplayNameDialogComponent {
11235
11293
  constructor() {
@@ -11259,7 +11317,7 @@ class UpdateDisplayNameDialogComponent {
11259
11317
  .subscribe(resource => this.dialogRef.close(resource));
11260
11318
  }
11261
11319
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateDisplayNameDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11262
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: UpdateDisplayNameDialogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<aui-dialog-header>\n {{ 'update_display_name' | translate }}\n</aui-dialog-header>\n<aui-dialog-content>\n <aui-form-item>\n <label auiFormItemLabel>\n {{ 'name' | translate }}\n </label>\n {{ data.resource | aclName }}\n </aui-form-item>\n <aui-form-item class=\"last-form-item-no-margin\">\n <label auiFormItemLabel>\n {{ 'display_name' | translate }}\n </label>\n @if (!data.validateMaxLength) {\n <input\n aui-input\n name=\"displayName\"\n autocomplete=\"off\"\n [(ngModel)]=\"displayName\"\n />\n } @else {\n <input\n aui-input\n name=\"displayName\"\n autocomplete=\"off\"\n [(ngModel)]=\"displayName\"\n [maxlength]=\"64\"\n />\n }\n </aui-form-item>\n</aui-dialog-content>\n<aui-dialog-footer>\n <button\n aui-button=\"primary\"\n [loading]=\"confirming$$ | async\"\n [disabled]=\"confirming$$ | async\"\n (click)=\"confirm()\"\n >\n {{ 'update' | translate }}\n </button>\n <button\n aui-button\n auiDialogClose\n >\n {{ 'cancel' | translate }}\n </button>\n</aui-dialog-footer>\n", dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "ngmodule", type: DialogModule }, { 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: i1.DialogFooterComponent, selector: "aui-dialog-footer" }, { kind: "directive", type: i1.DialogCloseDirective, selector: "[auiDialogClose]", inputs: ["auiDialogClose"], exportAs: ["auiDialogClose"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i1.InputComponent, selector: "input[aui-input],textarea[aui-input]", inputs: ["size", "disabled"] }, { kind: "ngmodule", type: FormModule }, { kind: "component", type: i1.FormItemComponent, selector: "aui-form-item", inputs: ["labelWidth", "width", "labelPosition", "emptyAddon", "plain"] }, { kind: "directive", type: i1.FormItemLabelDirective, selector: "label[auiFormItemLabel]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i2$1.K8sNamePipe, name: "aclName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11320
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: UpdateDisplayNameDialogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<aui-dialog-header>\n {{ 'update_display_name' | translate }}\n</aui-dialog-header>\n<aui-dialog-content>\n <aui-form-item>\n <label auiFormItemLabel>\n {{ 'name' | translate }}\n </label>\n {{ data.resource | aclName }}\n </aui-form-item>\n <aui-form-item class=\"last-form-item-no-margin\">\n <label auiFormItemLabel>\n {{ 'display_name' | translate }}\n </label>\n @if (!data.validateMaxLength) {\n <input\n aui-input\n name=\"displayName\"\n autocomplete=\"off\"\n [(ngModel)]=\"displayName\"\n />\n } @else {\n <input\n aui-input\n name=\"displayName\"\n autocomplete=\"off\"\n [(ngModel)]=\"displayName\"\n [maxlength]=\"64\"\n />\n }\n </aui-form-item>\n</aui-dialog-content>\n<aui-dialog-footer>\n <button\n aui-button=\"primary\"\n [loading]=\"confirming$$ | async\"\n [disabled]=\"confirming$$ | async\"\n (click)=\"confirm()\"\n >\n {{ 'update' | translate }}\n </button>\n <button\n aui-button\n auiDialogClose\n >\n {{ 'cancel' | translate }}\n </button>\n</aui-dialog-footer>\n", dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "ngmodule", type: DialogModule }, { 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: i1.DialogFooterComponent, selector: "aui-dialog-footer" }, { kind: "directive", type: i1.DialogCloseDirective, selector: "[auiDialogClose]", inputs: ["auiDialogClose"], exportAs: ["auiDialogClose"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i1.InputComponent, selector: "input[aui-input],textarea[aui-input]", inputs: ["size", "disabled"] }, { kind: "ngmodule", type: FormModule }, { kind: "component", type: i1.FormItemComponent, selector: "aui-form-item", inputs: ["labelWidth", "width", "labelPosition", "emptyAddon", "plain"] }, { kind: "directive", type: i1.FormItemLabelDirective, selector: "label[auiFormItemLabel]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i3.K8sNamePipe, name: "aclName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11263
11321
  }
11264
11322
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateDisplayNameDialogComponent, decorators: [{
11265
11323
  type: Component,
@@ -11485,6 +11543,7 @@ class ArrayFormTableComponent {
11485
11543
  this.addDisabled = false;
11486
11544
  this.actionColumnDivider = false;
11487
11545
  this.showZeroState = true;
11546
+ this.injector = inject(Injector);
11488
11547
  this.minRow = 0;
11489
11548
  this.minRowTooltip = '';
11490
11549
  this.maxRow = Infinity;
@@ -11499,7 +11558,8 @@ class ArrayFormTableComponent {
11499
11558
  };
11500
11559
  }
11501
11560
  get formDirective() {
11502
- return inject(FormGroupDirective, null) || inject(NgForm, null);
11561
+ return (this.injector.get(FormGroupDirective, null) ||
11562
+ this.injector.get(NgForm, null));
11503
11563
  }
11504
11564
  /**
11505
11565
  * 自定义是否展示错误内容
@@ -11525,7 +11585,7 @@ class ArrayFormTableComponent {
11525
11585
  this.destroy$$.complete();
11526
11586
  }
11527
11587
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ArrayFormTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11528
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: ArrayFormTableComponent, isStandalone: true, selector: "acl-array-form-table", inputs: { rowSeparator: "rowSeparator", rows: "rows", resourceName: "resourceName", resourceNameTranslated: "resourceNameTranslated", readonly: "readonly", addDisabled: "addDisabled", actionColumnDivider: "actionColumnDivider", showZeroState: "showZeroState", showRowError: "showRowError", rowBackgroundColorFn: "rowBackgroundColorFn", minRow: "minRow", minRowTooltip: "minRowTooltip", maxRow: "maxRow", maxRowTooltip: "maxRowTooltip" }, outputs: { add: "add", remove: "remove" }, queries: [{ propertyName: "headerTemplate", first: true, predicate: ArrayFormTableHeaderDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "rowErrorTemplate", first: true, predicate: ArrayFormTableRowErrorDirective, descendants: true, read: TemplateRef }, { propertyName: "rowControlTemplate", first: true, predicate: ArrayFormTableRowControlDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "footerTemplate", first: true, predicate: ArrayFormTableFooterDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "zeroStateTemplate", first: true, predicate: ArrayFormTableZeroStateDirective, descendants: true, read: TemplateRef }, { propertyName: "separatorTemplate", first: true, predicate: ArrayFormTableRowSeparatorDirective, descendants: true, read: TemplateRef }, { propertyName: "ngFormGroupDirective", first: true, predicate: FormGroupDirective, descendants: true }, { propertyName: "rowTemplates", predicate: ArrayFormTableRowDirective, read: TemplateRef }], ngImport: i0, template: "<table\n class=\"acl-array-form-table\"\n [class.acl-array-form-table__readonly-mode]=\"readonly\"\n>\n @if (headerTemplate) {\n <thead>\n <tr>\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n @if (!readonly && minRow !== maxRow) {\n <th class=\"acl-array-form-table__action-col\"></th>\n }\n </tr>\n </thead>\n }\n <tbody>\n @for (row of rows; track row; let index = $index) {\n @for (\n rowTemplate of rowTemplates;\n track rowTemplate;\n let templateIndex = $index\n ) {\n <tr\n [class.acl-array-form-table__row-error]=\"\n row | pure: shouldShowRowError | async\n \"\n [attr.rowtemplateindex]=\"templateIndex\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n @if (templateIndex === 0 && !readonly && minRow !== maxRow) {\n <td\n class=\"acl-array-form-table__action-col\"\n [class.acl-array-form-table__action-col-divider]=\"\n actionColumnDivider\n \"\n >\n @if (rowControlTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n rowControlTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n }\n <div\n [auiTooltip]=\"minRowTooltip\"\n [auiTooltipDisabled]=\"rows?.length > minRow || !minRowTooltip\"\n >\n @if (!rowControlTemplate) {\n <button\n aui-button=\"text\"\n type=\"button\"\n [disabled]=\"rows?.length <= minRow\"\n [square]=\"true\"\n [plain]=\"true\"\n (click)=\"remove.emit(index)\"\n >\n <aui-icon icon=\"minus_circle\"></aui-icon>\n </button>\n }\n </div>\n </td>\n }\n </tr>\n }\n @if (rowErrorTemplate && !readonly) {\n <tr\n [class.acl-array-form-table__row-error]=\"\n row | pure: shouldShowRowError | async\n \"\n [hidden]=\"!(row | pure: shouldShowRowError | async)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowErrorTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n </tr>\n }\n @if (\n (rowSeparator || separatorTemplate) &&\n rows?.length > 1 &&\n index !== rows?.length - 1\n ) {\n <tr class=\"acl-array-form-table__separator\">\n <td colspan=\"100\">\n @if (separatorTemplate) {\n <ng-container\n *ngTemplateOutlet=\"separatorTemplate\"\n ></ng-container>\n } @else {\n <div class=\"tw-h-[8px]\"></div>\n }\n </td>\n </tr>\n }\n }\n\n @if ((!rows || rows.length === 0) && showZeroState) {\n <tr>\n <td\n colspan=\"100\"\n style=\"padding: unset\"\n >\n @if (!zeroStateTemplate) {\n <acl-zero-state\n [zeroState]=\"true\"\n [resourceName]=\"resourceName\"\n [resourceNameTranslated]=\"resourceNameTranslated\"\n [minHeight]=\"48\"\n ></acl-zero-state>\n }\n @if (zeroStateTemplate) {\n <ng-container *ngTemplateOutlet=\"zeroStateTemplate\"></ng-container>\n }\n </td>\n </tr>\n }\n\n @if (!readonly && minRow !== maxRow) {\n <tr class=\"acl-array-form-table--row-action\">\n <td colspan=\"100\">\n <div class=\"acl-array-form-table__bottom-control-buttons\">\n @if (footerTemplate) {\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n }\n @if (!footerTemplate) {\n <div\n class=\"tw-flex tw-w-full\"\n [auiTooltip]=\"maxRowTooltip\"\n [auiTooltipDisabled]=\"rows?.length < maxRow || !maxRowTooltip\"\n >\n <button\n aui-button=\"primary\"\n type=\"button\"\n [plain]=\"true\"\n size=\"mini\"\n (click)=\"add.emit()\"\n [disabled]=\"rows?.length >= maxRow || addDisabled\"\n >\n <aui-icon icon=\"plus_circle\"></aui-icon>\n {{ 'add' | translate }}\n </button>\n </div>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n</table>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1.TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }, { kind: "component", type: ZeroStateComponent, selector: "acl-zero-state", inputs: ["resourceName", "resourceNameTranslated", "customPlaceholder", "zeroState", "fetching", "context", "minHeight"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i1.IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "directive", type: E2eAttributeBindingDirective, selector: "[click],[routerLink],a[href],[auiTooltip],[auiDropdown]" }, { kind: "pipe", type: PurePipe, name: "pure" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
11588
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: ArrayFormTableComponent, isStandalone: true, selector: "acl-array-form-table", inputs: { rowSeparator: "rowSeparator", rows: "rows", resourceName: "resourceName", resourceNameTranslated: "resourceNameTranslated", readonly: "readonly", addDisabled: "addDisabled", actionColumnDivider: "actionColumnDivider", showZeroState: "showZeroState", showRowError: "showRowError", rowBackgroundColorFn: "rowBackgroundColorFn", minRow: "minRow", minRowTooltip: "minRowTooltip", maxRow: "maxRow", maxRowTooltip: "maxRowTooltip" }, outputs: { add: "add", remove: "remove" }, queries: [{ propertyName: "headerTemplate", first: true, predicate: ArrayFormTableHeaderDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "rowErrorTemplate", first: true, predicate: ArrayFormTableRowErrorDirective, descendants: true, read: TemplateRef }, { propertyName: "rowControlTemplate", first: true, predicate: ArrayFormTableRowControlDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "footerTemplate", first: true, predicate: ArrayFormTableFooterDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "zeroStateTemplate", first: true, predicate: ArrayFormTableZeroStateDirective, descendants: true, read: TemplateRef }, { propertyName: "separatorTemplate", first: true, predicate: ArrayFormTableRowSeparatorDirective, descendants: true, read: TemplateRef }, { propertyName: "ngFormGroupDirective", first: true, predicate: FormGroupDirective, descendants: true }, { propertyName: "rowTemplates", predicate: ArrayFormTableRowDirective, read: TemplateRef }], ngImport: i0, template: "<table\n class=\"acl-array-form-table\"\n [class.acl-array-form-table__readonly-mode]=\"readonly\"\n>\n @if (headerTemplate) {\n <thead>\n <tr>\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n @if (!readonly && minRow !== maxRow) {\n <th class=\"acl-array-form-table__action-col\"></th>\n }\n </tr>\n </thead>\n }\n <tbody>\n @for (row of rows; track row; let index = $index) {\n @for (\n rowTemplate of rowTemplates;\n track rowTemplate;\n let templateIndex = $index\n ) {\n <tr\n [class.acl-array-form-table__row-error]=\"\n row | pure: shouldShowRowError | async\n \"\n [attr.rowtemplateindex]=\"templateIndex\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n @if (templateIndex === 0 && !readonly && minRow !== maxRow) {\n <td\n class=\"acl-array-form-table__action-col\"\n [class.acl-array-form-table__action-col-divider]=\"\n actionColumnDivider\n \"\n >\n @if (rowControlTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n rowControlTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n }\n <div\n [auiTooltip]=\"minRowTooltip\"\n [auiTooltipDisabled]=\"rows?.length > minRow || !minRowTooltip\"\n >\n @if (!rowControlTemplate) {\n <button\n aui-button=\"text\"\n type=\"button\"\n [disabled]=\"rows?.length <= minRow\"\n [square]=\"true\"\n [plain]=\"true\"\n (click)=\"remove.emit(index)\"\n >\n <aui-icon icon=\"minus_circle\"></aui-icon>\n </button>\n }\n </div>\n </td>\n }\n </tr>\n }\n @if (rowErrorTemplate && !readonly) {\n <tr\n [class.acl-array-form-table__row-error]=\"\n row | pure: shouldShowRowError | async\n \"\n [hidden]=\"!(row | pure: shouldShowRowError | async)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowErrorTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n </tr>\n }\n @if (\n (rowSeparator || separatorTemplate) &&\n rows?.length > 1 &&\n index !== rows?.length - 1\n ) {\n <tr class=\"acl-array-form-table__separator\">\n <td colspan=\"100\">\n @if (separatorTemplate) {\n <ng-container\n *ngTemplateOutlet=\"separatorTemplate\"\n ></ng-container>\n } @else {\n <div class=\"separator-spacer\"></div>\n }\n </td>\n </tr>\n }\n }\n\n @if ((!rows || rows.length === 0) && showZeroState) {\n <tr>\n <td\n colspan=\"100\"\n style=\"padding: unset\"\n >\n @if (!zeroStateTemplate) {\n <acl-zero-state\n [zeroState]=\"true\"\n [resourceName]=\"resourceName\"\n [resourceNameTranslated]=\"resourceNameTranslated\"\n [minHeight]=\"48\"\n ></acl-zero-state>\n }\n @if (zeroStateTemplate) {\n <ng-container *ngTemplateOutlet=\"zeroStateTemplate\"></ng-container>\n }\n </td>\n </tr>\n }\n\n @if (!readonly && minRow !== maxRow) {\n <tr class=\"acl-array-form-table--row-action\">\n <td colspan=\"100\">\n <div class=\"acl-array-form-table__bottom-control-buttons\">\n @if (footerTemplate) {\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n }\n @if (!footerTemplate) {\n <div\n class=\"add-button-wrapper\"\n [auiTooltip]=\"maxRowTooltip\"\n [auiTooltipDisabled]=\"rows?.length < maxRow || !maxRowTooltip\"\n >\n <button\n aui-button=\"primary\"\n type=\"button\"\n [plain]=\"true\"\n size=\"mini\"\n (click)=\"add.emit()\"\n [disabled]=\"rows?.length >= maxRow || addDisabled\"\n >\n <aui-icon icon=\"plus_circle\"></aui-icon>\n {{ 'add' | translate }}\n </button>\n </div>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n</table>\n", styles: [":host::ng-deep .acl-array-form-table{flex:1;width:100%;border-spacing:0;border:12px solid rgb(var(--aui-color-n-9));border-radius:var(--aui-border-radius-l);border-collapse:unset}:host::ng-deep .acl-array-form-table thead{background-color:rgb(var(--aui-color-n-9))}:host::ng-deep .acl-array-form-table thead th,:host::ng-deep .acl-array-form-table thead td{line-height:20px;color:rgb(var(--aui-color-n-1));text-align:left;font-weight:500;padding:0 0 12px 8px}:host::ng-deep .acl-array-form-table thead th[required]:before,:host::ng-deep .acl-array-form-table thead td[required]:before{content:\"*\";color:rgb(var(--aui-color-red));margin-right:4px}:host::ng-deep .acl-array-form-table tbody>tr{background-color:rgb(var(--aui-color-n-10));border-radius:2px}:host::ng-deep .acl-array-form-table tbody>tr:first-child>td{border-top:unset}:host::ng-deep .acl-array-form-table tbody td{padding:8px 0 8px 8px;vertical-align:middle}:host::ng-deep .acl-array-form-table tbody td:last-child{padding:8px}:host::ng-deep .acl-array-form-table tr.acl-array-form-table__row-error:not(:has(+.acl-array-form-table__row-error:empty)){background-color:rgb(var(--aui-color-r-6))}:host::ng-deep .acl-array-form-table tr.acl-array-form-table--row-action td{padding:unset;border-bottom:unset;padding-bottom:unset;border-top:8px solid rgb(var(--aui-color-n-9))}:host::ng-deep .acl-array-form-table tr.acl-array-form-table__separator td{padding:0;background-color:rgb(var(--aui-color-n-9))}:host::ng-deep .acl-array-form-table th.acl-array-form-table__action-col{min-width:48px}:host::ng-deep .acl-array-form-table td.acl-array-form-table__action-col{padding:8px;text-align:center;white-space:nowrap;vertical-align:middle;width:24px}:host::ng-deep .acl-array-form-table td.acl-array-form-table__action-col .aui-button--text.isPlain{font-size:16px}:host::ng-deep .acl-array-form-table td.acl-array-form-table__action-col .action-col__vertical{display:flex;flex-direction:column;align-items:center;justify-content:center}:host::ng-deep .acl-array-form-table tbody td.acl-table-form-error-hint{margin-top:-4px;border-top:none;padding-top:0;color:rgb(var(--aui-color-red));font-size:12px}:host::ng-deep .acl-array-form-table tbody td.acl-table-form-error-hint acl-errors-mapper .acl-error-hint{margin-top:0}:host::ng-deep .acl-array-form-table__bottom-control-buttons{display:flex;width:100%;background-color:rgb(var(--aui-color-n-9))}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button{flex:1}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button--default{color:rgb(var(--aui-color-secondary-text))}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button:not([disabled]){background-color:rgb(var(--aui-color-n-10))}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button:not([disabled]):hover{background-color:rgb(var(--aui-color-p-6))}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button:not([disabled]):active{background-color:rgb(var(--aui-color-p-5))}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button.aui-button--primary.isPlain[disabled]{background-color:rgb(var(--aui-color-n-8));color:rgb(var(--aui-color-n-6))}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button{border-style:unset;font-size:14px;height:28px;border-radius:2px}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button aui-icon{font-size:16px}:host::ng-deep .acl-array-form-table__readonly-mode{border-radius:var(--aui-border-radius-l);border-collapse:separate}:host::ng-deep .acl-array-form-table__readonly-mode th .aui-checkbox,:host::ng-deep .acl-array-form-table__readonly-mode td .aui-checkbox{margin:unset}:host::ng-deep .acl-array-form-table__readonly-mode thead tr th,:host::ng-deep .acl-array-form-table__readonly-mode thead tr td{padding:0 10px 12px;border-top:none}:host::ng-deep .acl-array-form-table__readonly-mode thead tr th:first-child,:host::ng-deep .acl-array-form-table__readonly-mode thead tr td:first-child{padding-left:20px}:host::ng-deep .acl-array-form-table__readonly-mode thead tr th:last-child,:host::ng-deep .acl-array-form-table__readonly-mode thead tr td:last-child{padding-right:20px}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr{height:58px}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr td{padding:15px 10px;border:1px solid rgb(var(--aui-color-n-8));border-bottom-width:0}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr td:not(:last-child){border-right:none}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr td:not(:first-child){border-left:none}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr td:first-child{padding-left:19px}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr td:last-child{padding:15px 19px 15px 10px}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr:last-child td{border-bottom-width:1px}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr:last-child td:first-child{border-bottom-left-radius:var(--aui-border-radius-l)}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr:last-child td:last-child{border-bottom-right-radius:var(--aui-border-radius-l)}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr:first-child td{border-top:1px solid rgb(var(--aui-color-n-8))}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr:first-child td:first-child{border-top-left-radius:var(--aui-border-radius-l)}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr:first-child td:last-child{border-top-right-radius:var(--aui-border-radius-l)}:host::ng-deep .acl-array-form-table__action-col-divider{border-left:1px solid rgb(var(--aui-color-n-8))}.separator-spacer{height:8px}.add-button-wrapper{display:flex;width:100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1.TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }, { kind: "component", type: ZeroStateComponent, selector: "acl-zero-state", inputs: ["resourceName", "resourceNameTranslated", "customPlaceholder", "zeroState", "fetching", "context", "minHeight"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i1.IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "directive", type: E2eAttributeBindingDirective, selector: "[click],[routerLink],a[href],[auiTooltip],[auiDropdown]" }, { kind: "pipe", type: PurePipe, name: "pure" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
11529
11589
  }
11530
11590
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ArrayFormTableComponent, decorators: [{
11531
11591
  type: Component,
@@ -11539,7 +11599,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
11539
11599
  AsyncPipe,
11540
11600
  TranslatePipe,
11541
11601
  EFFECT_DIRECTIVE_MODULE,
11542
- ], standalone: true, template: "<table\n class=\"acl-array-form-table\"\n [class.acl-array-form-table__readonly-mode]=\"readonly\"\n>\n @if (headerTemplate) {\n <thead>\n <tr>\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n @if (!readonly && minRow !== maxRow) {\n <th class=\"acl-array-form-table__action-col\"></th>\n }\n </tr>\n </thead>\n }\n <tbody>\n @for (row of rows; track row; let index = $index) {\n @for (\n rowTemplate of rowTemplates;\n track rowTemplate;\n let templateIndex = $index\n ) {\n <tr\n [class.acl-array-form-table__row-error]=\"\n row | pure: shouldShowRowError | async\n \"\n [attr.rowtemplateindex]=\"templateIndex\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n @if (templateIndex === 0 && !readonly && minRow !== maxRow) {\n <td\n class=\"acl-array-form-table__action-col\"\n [class.acl-array-form-table__action-col-divider]=\"\n actionColumnDivider\n \"\n >\n @if (rowControlTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n rowControlTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n }\n <div\n [auiTooltip]=\"minRowTooltip\"\n [auiTooltipDisabled]=\"rows?.length > minRow || !minRowTooltip\"\n >\n @if (!rowControlTemplate) {\n <button\n aui-button=\"text\"\n type=\"button\"\n [disabled]=\"rows?.length <= minRow\"\n [square]=\"true\"\n [plain]=\"true\"\n (click)=\"remove.emit(index)\"\n >\n <aui-icon icon=\"minus_circle\"></aui-icon>\n </button>\n }\n </div>\n </td>\n }\n </tr>\n }\n @if (rowErrorTemplate && !readonly) {\n <tr\n [class.acl-array-form-table__row-error]=\"\n row | pure: shouldShowRowError | async\n \"\n [hidden]=\"!(row | pure: shouldShowRowError | async)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowErrorTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n </tr>\n }\n @if (\n (rowSeparator || separatorTemplate) &&\n rows?.length > 1 &&\n index !== rows?.length - 1\n ) {\n <tr class=\"acl-array-form-table__separator\">\n <td colspan=\"100\">\n @if (separatorTemplate) {\n <ng-container\n *ngTemplateOutlet=\"separatorTemplate\"\n ></ng-container>\n } @else {\n <div class=\"tw-h-[8px]\"></div>\n }\n </td>\n </tr>\n }\n }\n\n @if ((!rows || rows.length === 0) && showZeroState) {\n <tr>\n <td\n colspan=\"100\"\n style=\"padding: unset\"\n >\n @if (!zeroStateTemplate) {\n <acl-zero-state\n [zeroState]=\"true\"\n [resourceName]=\"resourceName\"\n [resourceNameTranslated]=\"resourceNameTranslated\"\n [minHeight]=\"48\"\n ></acl-zero-state>\n }\n @if (zeroStateTemplate) {\n <ng-container *ngTemplateOutlet=\"zeroStateTemplate\"></ng-container>\n }\n </td>\n </tr>\n }\n\n @if (!readonly && minRow !== maxRow) {\n <tr class=\"acl-array-form-table--row-action\">\n <td colspan=\"100\">\n <div class=\"acl-array-form-table__bottom-control-buttons\">\n @if (footerTemplate) {\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n }\n @if (!footerTemplate) {\n <div\n class=\"tw-flex tw-w-full\"\n [auiTooltip]=\"maxRowTooltip\"\n [auiTooltipDisabled]=\"rows?.length < maxRow || !maxRowTooltip\"\n >\n <button\n aui-button=\"primary\"\n type=\"button\"\n [plain]=\"true\"\n size=\"mini\"\n (click)=\"add.emit()\"\n [disabled]=\"rows?.length >= maxRow || addDisabled\"\n >\n <aui-icon icon=\"plus_circle\"></aui-icon>\n {{ 'add' | translate }}\n </button>\n </div>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n</table>\n" }]
11602
+ ], standalone: true, template: "<table\n class=\"acl-array-form-table\"\n [class.acl-array-form-table__readonly-mode]=\"readonly\"\n>\n @if (headerTemplate) {\n <thead>\n <tr>\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n @if (!readonly && minRow !== maxRow) {\n <th class=\"acl-array-form-table__action-col\"></th>\n }\n </tr>\n </thead>\n }\n <tbody>\n @for (row of rows; track row; let index = $index) {\n @for (\n rowTemplate of rowTemplates;\n track rowTemplate;\n let templateIndex = $index\n ) {\n <tr\n [class.acl-array-form-table__row-error]=\"\n row | pure: shouldShowRowError | async\n \"\n [attr.rowtemplateindex]=\"templateIndex\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n @if (templateIndex === 0 && !readonly && minRow !== maxRow) {\n <td\n class=\"acl-array-form-table__action-col\"\n [class.acl-array-form-table__action-col-divider]=\"\n actionColumnDivider\n \"\n >\n @if (rowControlTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n rowControlTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n }\n <div\n [auiTooltip]=\"minRowTooltip\"\n [auiTooltipDisabled]=\"rows?.length > minRow || !minRowTooltip\"\n >\n @if (!rowControlTemplate) {\n <button\n aui-button=\"text\"\n type=\"button\"\n [disabled]=\"rows?.length <= minRow\"\n [square]=\"true\"\n [plain]=\"true\"\n (click)=\"remove.emit(index)\"\n >\n <aui-icon icon=\"minus_circle\"></aui-icon>\n </button>\n }\n </div>\n </td>\n }\n </tr>\n }\n @if (rowErrorTemplate && !readonly) {\n <tr\n [class.acl-array-form-table__row-error]=\"\n row | pure: shouldShowRowError | async\n \"\n [hidden]=\"!(row | pure: shouldShowRowError | async)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowErrorTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n </tr>\n }\n @if (\n (rowSeparator || separatorTemplate) &&\n rows?.length > 1 &&\n index !== rows?.length - 1\n ) {\n <tr class=\"acl-array-form-table__separator\">\n <td colspan=\"100\">\n @if (separatorTemplate) {\n <ng-container\n *ngTemplateOutlet=\"separatorTemplate\"\n ></ng-container>\n } @else {\n <div class=\"separator-spacer\"></div>\n }\n </td>\n </tr>\n }\n }\n\n @if ((!rows || rows.length === 0) && showZeroState) {\n <tr>\n <td\n colspan=\"100\"\n style=\"padding: unset\"\n >\n @if (!zeroStateTemplate) {\n <acl-zero-state\n [zeroState]=\"true\"\n [resourceName]=\"resourceName\"\n [resourceNameTranslated]=\"resourceNameTranslated\"\n [minHeight]=\"48\"\n ></acl-zero-state>\n }\n @if (zeroStateTemplate) {\n <ng-container *ngTemplateOutlet=\"zeroStateTemplate\"></ng-container>\n }\n </td>\n </tr>\n }\n\n @if (!readonly && minRow !== maxRow) {\n <tr class=\"acl-array-form-table--row-action\">\n <td colspan=\"100\">\n <div class=\"acl-array-form-table__bottom-control-buttons\">\n @if (footerTemplate) {\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n }\n @if (!footerTemplate) {\n <div\n class=\"add-button-wrapper\"\n [auiTooltip]=\"maxRowTooltip\"\n [auiTooltipDisabled]=\"rows?.length < maxRow || !maxRowTooltip\"\n >\n <button\n aui-button=\"primary\"\n type=\"button\"\n [plain]=\"true\"\n size=\"mini\"\n (click)=\"add.emit()\"\n [disabled]=\"rows?.length >= maxRow || addDisabled\"\n >\n <aui-icon icon=\"plus_circle\"></aui-icon>\n {{ 'add' | translate }}\n </button>\n </div>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n</table>\n", styles: [":host::ng-deep .acl-array-form-table{flex:1;width:100%;border-spacing:0;border:12px solid rgb(var(--aui-color-n-9));border-radius:var(--aui-border-radius-l);border-collapse:unset}:host::ng-deep .acl-array-form-table thead{background-color:rgb(var(--aui-color-n-9))}:host::ng-deep .acl-array-form-table thead th,:host::ng-deep .acl-array-form-table thead td{line-height:20px;color:rgb(var(--aui-color-n-1));text-align:left;font-weight:500;padding:0 0 12px 8px}:host::ng-deep .acl-array-form-table thead th[required]:before,:host::ng-deep .acl-array-form-table thead td[required]:before{content:\"*\";color:rgb(var(--aui-color-red));margin-right:4px}:host::ng-deep .acl-array-form-table tbody>tr{background-color:rgb(var(--aui-color-n-10));border-radius:2px}:host::ng-deep .acl-array-form-table tbody>tr:first-child>td{border-top:unset}:host::ng-deep .acl-array-form-table tbody td{padding:8px 0 8px 8px;vertical-align:middle}:host::ng-deep .acl-array-form-table tbody td:last-child{padding:8px}:host::ng-deep .acl-array-form-table tr.acl-array-form-table__row-error:not(:has(+.acl-array-form-table__row-error:empty)){background-color:rgb(var(--aui-color-r-6))}:host::ng-deep .acl-array-form-table tr.acl-array-form-table--row-action td{padding:unset;border-bottom:unset;padding-bottom:unset;border-top:8px solid rgb(var(--aui-color-n-9))}:host::ng-deep .acl-array-form-table tr.acl-array-form-table__separator td{padding:0;background-color:rgb(var(--aui-color-n-9))}:host::ng-deep .acl-array-form-table th.acl-array-form-table__action-col{min-width:48px}:host::ng-deep .acl-array-form-table td.acl-array-form-table__action-col{padding:8px;text-align:center;white-space:nowrap;vertical-align:middle;width:24px}:host::ng-deep .acl-array-form-table td.acl-array-form-table__action-col .aui-button--text.isPlain{font-size:16px}:host::ng-deep .acl-array-form-table td.acl-array-form-table__action-col .action-col__vertical{display:flex;flex-direction:column;align-items:center;justify-content:center}:host::ng-deep .acl-array-form-table tbody td.acl-table-form-error-hint{margin-top:-4px;border-top:none;padding-top:0;color:rgb(var(--aui-color-red));font-size:12px}:host::ng-deep .acl-array-form-table tbody td.acl-table-form-error-hint acl-errors-mapper .acl-error-hint{margin-top:0}:host::ng-deep .acl-array-form-table__bottom-control-buttons{display:flex;width:100%;background-color:rgb(var(--aui-color-n-9))}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button{flex:1}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button--default{color:rgb(var(--aui-color-secondary-text))}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button:not([disabled]){background-color:rgb(var(--aui-color-n-10))}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button:not([disabled]):hover{background-color:rgb(var(--aui-color-p-6))}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button:not([disabled]):active{background-color:rgb(var(--aui-color-p-5))}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button.aui-button--primary.isPlain[disabled]{background-color:rgb(var(--aui-color-n-8));color:rgb(var(--aui-color-n-6))}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button{border-style:unset;font-size:14px;height:28px;border-radius:2px}:host::ng-deep .acl-array-form-table__bottom-control-buttons .aui-button aui-icon{font-size:16px}:host::ng-deep .acl-array-form-table__readonly-mode{border-radius:var(--aui-border-radius-l);border-collapse:separate}:host::ng-deep .acl-array-form-table__readonly-mode th .aui-checkbox,:host::ng-deep .acl-array-form-table__readonly-mode td .aui-checkbox{margin:unset}:host::ng-deep .acl-array-form-table__readonly-mode thead tr th,:host::ng-deep .acl-array-form-table__readonly-mode thead tr td{padding:0 10px 12px;border-top:none}:host::ng-deep .acl-array-form-table__readonly-mode thead tr th:first-child,:host::ng-deep .acl-array-form-table__readonly-mode thead tr td:first-child{padding-left:20px}:host::ng-deep .acl-array-form-table__readonly-mode thead tr th:last-child,:host::ng-deep .acl-array-form-table__readonly-mode thead tr td:last-child{padding-right:20px}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr{height:58px}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr td{padding:15px 10px;border:1px solid rgb(var(--aui-color-n-8));border-bottom-width:0}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr td:not(:last-child){border-right:none}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr td:not(:first-child){border-left:none}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr td:first-child{padding-left:19px}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr td:last-child{padding:15px 19px 15px 10px}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr:last-child td{border-bottom-width:1px}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr:last-child td:first-child{border-bottom-left-radius:var(--aui-border-radius-l)}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr:last-child td:last-child{border-bottom-right-radius:var(--aui-border-radius-l)}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr:first-child td{border-top:1px solid rgb(var(--aui-color-n-8))}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr:first-child td:first-child{border-top-left-radius:var(--aui-border-radius-l)}:host::ng-deep .acl-array-form-table__readonly-mode tbody tr:first-child td:last-child{border-top-right-radius:var(--aui-border-radius-l)}:host::ng-deep .acl-array-form-table__action-col-divider{border-left:1px solid rgb(var(--aui-color-n-8))}.separator-spacer{height:8px}.add-button-wrapper{display:flex;width:100%}\n"] }]
11543
11603
  }], propDecorators: { headerTemplate: [{
11544
11604
  type: ContentChild,
11545
11605
  args: [ArrayFormTableHeaderDirective, {
@@ -11739,11 +11799,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
11739
11799
  }] } });
11740
11800
 
11741
11801
  class UpdateKeyValueDialogComponent {
11742
- constructor(dialogRef, message, translate, data = {}) {
11743
- this.dialogRef = dialogRef;
11744
- this.message = message;
11745
- this.translate = translate;
11746
- this.data = data;
11802
+ constructor() {
11803
+ this.dialogRef = inject(DialogRef);
11804
+ this.message = inject(MessageService);
11805
+ this.translate = inject(TranslateService);
11806
+ this.data = inject(DIALOG_DATA, {
11807
+ optional: true,
11808
+ }) ?? {};
11747
11809
  this.onUpdate$$ = new Subject();
11748
11810
  this.submitting$$ = new BehaviorSubject(false);
11749
11811
  this.destroy$$ = new Subject();
@@ -11782,7 +11844,7 @@ class UpdateKeyValueDialogComponent {
11782
11844
  this.destroy$$.next();
11783
11845
  this.destroy$$.complete();
11784
11846
  }
11785
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateKeyValueDialogComponent, deps: [{ token: i1.DialogRef }, { token: i1.MessageService }, { token: i2$1.TranslateService }, { token: DIALOG_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
11847
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateKeyValueDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11786
11848
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: UpdateKeyValueDialogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<aui-dialog-header>\n {{ data.title || 'update' | translate }}\n</aui-dialog-header>\n<aui-dialog-content>\n <form\n #ngForm=\"ngForm\"\n (ngSubmit)=\"ngForm.valid && onUpdate$$.next()\"\n >\n <acl-key-value-form-table\n [(ngModel)]=\"keyValues\"\n [readonlyKeys]=\"data.readonlyKeys\"\n [validator]=\"data.validator\"\n [errorMapper]=\"data.errorMapper\"\n name=\"key-values\"\n ></acl-key-value-form-table>\n </form>\n</aui-dialog-content>\n<aui-dialog-footer>\n <button\n aui-button=\"primary\"\n [loading]=\"submitting$$ | async\"\n [disabled]=\"submitting$$ | async\"\n (click)=\"ngForm.onSubmit(null)\"\n >\n {{ data.confirmButton || 'update' | translate }}\n </button>\n <button\n aui-button\n type=\"button\"\n auiDialogClose\n >\n {{ 'cancel' | translate }}\n </button>\n</aui-dialog-footer>\n", dependencies: [{ kind: "ngmodule", type: DialogModule }, { 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: i1.DialogFooterComponent, selector: "aui-dialog-footer" }, { kind: "directive", type: i1.DialogCloseDirective, selector: "[auiDialogClose]", inputs: ["auiDialogClose"], exportAs: ["auiDialogClose"] }, { kind: "component", type: KeyValueFormTableComponent, selector: "acl-key-value-form-table", inputs: ["resourceName", "resourceNameTranslated", "multiLineValue", "validator", "errorMapper", "placeholder", "readonly", "textKey", "maxRow", "minRow", "readonlyKeys", "zeroStateTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11787
11849
  }
11788
11850
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateKeyValueDialogComponent, decorators: [{
@@ -11795,12 +11857,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
11795
11857
  ButtonComponent,
11796
11858
  AsyncPipe,
11797
11859
  ], template: "<aui-dialog-header>\n {{ data.title || 'update' | translate }}\n</aui-dialog-header>\n<aui-dialog-content>\n <form\n #ngForm=\"ngForm\"\n (ngSubmit)=\"ngForm.valid && onUpdate$$.next()\"\n >\n <acl-key-value-form-table\n [(ngModel)]=\"keyValues\"\n [readonlyKeys]=\"data.readonlyKeys\"\n [validator]=\"data.validator\"\n [errorMapper]=\"data.errorMapper\"\n name=\"key-values\"\n ></acl-key-value-form-table>\n </form>\n</aui-dialog-content>\n<aui-dialog-footer>\n <button\n aui-button=\"primary\"\n [loading]=\"submitting$$ | async\"\n [disabled]=\"submitting$$ | async\"\n (click)=\"ngForm.onSubmit(null)\"\n >\n {{ data.confirmButton || 'update' | translate }}\n </button>\n <button\n aui-button\n type=\"button\"\n auiDialogClose\n >\n {{ 'cancel' | translate }}\n </button>\n</aui-dialog-footer>\n" }]
11798
- }], ctorParameters: () => [{ type: i1.DialogRef }, { type: i1.MessageService }, { type: i2$1.TranslateService }, { type: undefined, decorators: [{
11799
- type: Optional
11800
- }, {
11801
- type: Inject,
11802
- args: [DIALOG_DATA]
11803
- }] }] });
11860
+ }], ctorParameters: () => [] });
11804
11861
 
11805
11862
  class K8sSharedUtilService extends K8sUtilService {
11806
11863
  constructor() {
@@ -12190,7 +12247,7 @@ class K8sResourceMarkComponent {
12190
12247
  >
12191
12248
  {{ mark() }}
12192
12249
  </aui-tag>
12193
- `, isInline: true, styles: [":host aui-tag{margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: TagModule }, { kind: "component", type: i1.TagComponent, selector: "aui-tag", inputs: ["type", "size", "closeable", "border", "solid", "invalid", "round", "color", "allowClick"], outputs: ["close"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1.TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12250
+ `, isInline: true, styles: [":host aui-tag{margin-right:8px}:is() .aui-tag{min-width:24px;justify-content:center}\n"], dependencies: [{ kind: "ngmodule", type: TagModule }, { kind: "component", type: i1.TagComponent, selector: "aui-tag", inputs: ["type", "size", "closeable", "border", "solid", "invalid", "round", "color", "allowClick"], outputs: ["close"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1.TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12194
12251
  }
12195
12252
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: K8sResourceMarkComponent, decorators: [{
12196
12253
  type: Component,
@@ -12203,7 +12260,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
12203
12260
  >
12204
12261
  {{ mark() }}
12205
12262
  </aui-tag>
12206
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host aui-tag{margin-right:8px}\n"] }]
12263
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host aui-tag{margin-right:8px}:is() .aui-tag{min-width:24px;justify-content:center}\n"] }]
12207
12264
  }], propDecorators: { size: [{
12208
12265
  type: Input
12209
12266
  }], kind: [{ type: i0.Input, args: [{ isSignal: true, alias: "kind", required: false }] }], apiVersion: [{ type: i0.Input, args: [{ isSignal: true, alias: "apiVersion", required: false }] }], resource: [{ type: i0.Input, args: [{ isSignal: true, alias: "resource", required: false }] }] } });
@@ -12228,80 +12285,1379 @@ class CodeDisplayDialogComponent {
12228
12285
  };
12229
12286
  }
12230
12287
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: CodeDisplayDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12231
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: CodeDisplayDialogComponent, 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 <aui-code-editor\n style=\"display: block; height: 65vh\"\n [ngModel]=\"data.code || ''\"\n [options]=\"codeEditorOptions\"\n [actionsConfig]=\"editorActions\"\n ></aui-code-editor>\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: "ngmodule", type: CodeEditorModule }, { kind: "component", type: i2$3.CodeEditorComponent, selector: "aui-code-editor", inputs: ["options", "plain", "showLanguageLabel", "value", "originalValue", "actionsConfig", "previewMode", "diffMode", "modelUri"], outputs: ["editorChange", "editorBlur"] }, { 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: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12288
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: CodeDisplayDialogComponent, 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 <aui-code-editor\n style=\"display: block; height: 65vh\"\n [ngModel]=\"data.code || ''\"\n [options]=\"codeEditorOptions\"\n [actionsConfig]=\"editorActions\"\n ></aui-code-editor>\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: CodeEditorComponent, selector: "aui-code-editor", inputs: ["options", "plain", "showLanguageLabel", "value", "originalValue", "actionsConfig", "previewMode", "diffMode", "modelUri"], outputs: ["editorChange", "editorBlur"] }, { 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: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12232
12289
  }
12233
12290
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: CodeDisplayDialogComponent, decorators: [{
12234
12291
  type: Component,
12235
- args: [{ preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [DIALOG_MODULE, CodeEditorModule, FormsModule, TranslatePipe], 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 <aui-code-editor\n style=\"display: block; height: 65vh\"\n [ngModel]=\"data.code || ''\"\n [options]=\"codeEditorOptions\"\n [actionsConfig]=\"editorActions\"\n ></aui-code-editor>\n</aui-dialog-content>\n" }]
12292
+ args: [{ preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [DIALOG_MODULE, CodeEditorComponent, FormsModule, TranslatePipe], 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 <aui-code-editor\n style=\"display: block; height: 65vh\"\n [ngModel]=\"data.code || ''\"\n [options]=\"codeEditorOptions\"\n [actionsConfig]=\"editorActions\"\n ></aui-code-editor>\n</aui-dialog-content>\n" }]
12236
12293
  }], ctorParameters: () => [] });
12237
12294
 
12238
- class ResourceYamlDisplayComponent {
12239
- constructor() {
12240
- this.concise$$ = new BehaviorSubject(false);
12241
- this.reduce$$ = new BehaviorSubject(true);
12242
- this.hasWrapper = true;
12243
- this.conciseEnable = true;
12244
- this.manageFieldActionEnable = true;
12245
- this.yamlUtil = inject(YamlUtilService);
12246
- this.yaml$ = combineLatest([
12247
- this.resource$,
12248
- this.concise$$,
12249
- this.reduce$$.pipe(distinctUntilChanged()),
12250
- ]).pipe(map(([resource, concise, reduce]) => this.yamlUtil.generateFilteredYamlResource(resource, concise, reduce)));
12251
- this.editorOptions = yamlReadOptions;
12252
- this.viewActions = viewActions;
12253
- }
12254
- conciseChange(value) {
12255
- this.concise$$.next(value);
12256
- if (value) {
12257
- this.reduce$$.next(true);
12258
- }
12259
- }
12260
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceYamlDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12261
- 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: "ngmodule", type: CodeEditorModule }, { kind: "component", type: i2$3.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 }); }
12262
- }
12263
- __decorate([
12264
- ObservableInput(),
12265
- __metadata("design:type", Observable)
12266
- ], ResourceYamlDisplayComponent.prototype, "resource$", void 0);
12267
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceYamlDisplayComponent, decorators: [{
12268
- type: Component,
12269
- args: [{ selector: 'acl-resource-yaml-display', preserveWhitespaces: false, standalone: true, imports: [
12270
- CARD_MODULE,
12271
- FormsModule,
12272
- CHECKBOX_MODULE,
12273
- CodeEditorModule,
12274
- TranslatePipe,
12275
- AsyncPipe,
12276
- NgTemplateOutlet,
12277
- ], 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"] }]
12278
- }], propDecorators: { hasWrapper: [{
12279
- type: Input
12280
- }], conciseEnable: [{
12281
- type: Input
12282
- }], manageFieldActionEnable: [{
12283
- type: Input
12284
- }], resource: [{
12285
- type: Input
12286
- }], resource$: [] } });
12287
-
12288
12295
  /**
12289
12296
  * @packageDocumentation
12290
12297
  * @module code
12291
12298
  */
12292
- class K8sYamlDisplayDialogComponent {
12293
- constructor() {
12294
- this.data = inject(DIALOG_DATA);
12295
- }
12296
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: K8sYamlDisplayDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12297
- 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 }); }
12298
- }
12299
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: K8sYamlDisplayDialogComponent, decorators: [{
12300
- type: Component,
12301
- 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" }]
12302
- }] });
12303
-
12304
- /**
12299
+ // for logs
12300
+ const logsReadOptions = {
12301
+ wordWrap: 'on',
12302
+ readOnly: true,
12303
+ renderLineHighlight: 'none',
12304
+ };
12305
+
12306
+ /**
12307
+ * 自动折叠 managedFields 字段
12308
+ * @param monacoEditor Monaco 编辑器实例
12309
+ */
12310
+ function foldManagedFields(monacoEditor) {
12311
+ if (!monacoEditor) {
12312
+ return;
12313
+ }
12314
+ const model = monacoEditor.getModel();
12315
+ if (!model) {
12316
+ return;
12317
+ }
12318
+ try {
12319
+ // 查找所有 managedFields 字段(只在 metadata 下的)
12320
+ const managedFieldsMatches = model.findMatches('^(\\s+)managedFields:', false, true, false, null, true);
12321
+ if (managedFieldsMatches && managedFieldsMatches.length > 0) {
12322
+ const foldingRanges = [];
12323
+ for (const match of managedFieldsMatches) {
12324
+ const startLine = match.range.startLineNumber;
12325
+ const endLine = findManagedFieldsEndLine(model, startLine);
12326
+ if (endLine > startLine) {
12327
+ foldingRanges.push({
12328
+ startLineNumber: startLine,
12329
+ startColumn: 1,
12330
+ endLineNumber: endLine,
12331
+ endColumn: model.getLineMaxColumn(endLine),
12332
+ });
12333
+ }
12334
+ }
12335
+ if (foldingRanges.length > 0) {
12336
+ // 递归折叠每个 managedFields 区域,确保每次折叠完成后再进行下一次
12337
+ foldRangesSequentially(monacoEditor, foldingRanges?.reverse(), 0);
12338
+ }
12339
+ }
12340
+ }
12341
+ catch (error) {
12342
+ console.warn('Failed to fold managedFields:', error);
12343
+ }
12344
+ }
12345
+ /**
12346
+ * 递归折叠多个区域,确保每次折叠完成后再进行下一次
12347
+ * @param monacoEditor Monaco 编辑器实例
12348
+ * @param foldingRanges 折叠区域数组
12349
+ * @param index 当前折叠的索引
12350
+ */
12351
+ async function foldRangesSequentially(monacoEditor, foldingRanges, index) {
12352
+ if (index >= foldingRanges.length) {
12353
+ return;
12354
+ }
12355
+ const range = foldingRanges[index];
12356
+ monacoEditor.setSelection(range);
12357
+ await Promise.resolve(monacoEditor.getAction('editor.fold')?.run());
12358
+ return foldRangesSequentially(monacoEditor, foldingRanges, index + 1);
12359
+ }
12360
+ /**
12361
+ * 查找 managedFields 字段的结束行
12362
+ * @param model Monaco 编辑器模型
12363
+ * @param startLine 起始行号
12364
+ * @returns 结束行号
12365
+ */
12366
+ function findManagedFieldsEndLine(model, startLine) {
12367
+ const totalLines = model.getLineCount();
12368
+ const startIndent = getLineIndentation(model, startLine);
12369
+ // 从下一行开始查找
12370
+ for (let line = startLine + 1; line <= totalLines; line++) {
12371
+ const lineContent = model.getLineContent(line).trim();
12372
+ // 跳过空行
12373
+ if (!lineContent) {
12374
+ continue;
12375
+ }
12376
+ const currentIndent = getLineIndentation(model, line);
12377
+ // 如果缩进小于等于起始行,说明 managedFields 字段结束
12378
+ if (currentIndent <= startIndent) {
12379
+ return line - 1;
12380
+ }
12381
+ }
12382
+ return totalLines;
12383
+ }
12384
+ /**
12385
+ * 获取行的缩进级别
12386
+ * @param model Monaco 编辑器模型
12387
+ * @param lineNumber 行号
12388
+ * @returns 缩进级别(空格数)
12389
+ */
12390
+ function getLineIndentation(model, lineNumber) {
12391
+ const lineContent = model.getLineContent(lineNumber);
12392
+ const match = lineContent.match(/^(\s*)/);
12393
+ return match ? match[1].length : 0;
12394
+ }
12395
+ /**
12396
+ * ManagedFields 自动折叠器
12397
+ * 用于在内容变化时自动折叠 managedFields 字段
12398
+ */
12399
+ class ManagedFieldsAutoFolder {
12400
+ constructor() {
12401
+ this.lastFoldedContent = '';
12402
+ }
12403
+ /**
12404
+ * 开始监听内容变化并自动折叠
12405
+ * @param editorProvider 编辑器实例提供者
12406
+ * @param contentObservable 内容变化的 Observable
12407
+ */
12408
+ startAutoFold(editorProvider, contentObservable) {
12409
+ this.stopAutoFold();
12410
+ this.subscription = contentObservable.subscribe(() => {
12411
+ setTimeout(() => {
12412
+ const editor = editorProvider.getEditorInstance();
12413
+ if (editor) {
12414
+ const model = editor.getModel();
12415
+ if (model) {
12416
+ const currentContent = model.getValue();
12417
+ // 只有当内容真正发生变化时才执行折叠
12418
+ if (currentContent.includes('managedFields:') &&
12419
+ currentContent !== this.lastFoldedContent) {
12420
+ foldManagedFields(editor);
12421
+ this.lastFoldedContent = currentContent;
12422
+ }
12423
+ }
12424
+ }
12425
+ }, 100);
12426
+ });
12427
+ }
12428
+ /**
12429
+ * 停止自动折叠
12430
+ */
12431
+ stopAutoFold() {
12432
+ if (this.subscription) {
12433
+ this.subscription.unsubscribe();
12434
+ this.subscription = undefined;
12435
+ }
12436
+ }
12437
+ /**
12438
+ * 手动执行一次折叠
12439
+ * @param editorProvider 编辑器实例提供者
12440
+ */
12441
+ foldOnce(editorProvider) {
12442
+ const editor = editorProvider.getEditorInstance();
12443
+ if (editor) {
12444
+ foldManagedFields(editor);
12445
+ const model = editor.getModel();
12446
+ if (model) {
12447
+ this.lastFoldedContent = model.getValue();
12448
+ }
12449
+ }
12450
+ }
12451
+ }
12452
+
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 [clusterName]=\"data.clusterName\"\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 [clusterName]=\"data.clusterName\"\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
12877
+ volumeMounts:
12878
+ - name: varlog
12879
+ mountPath: /var/log
12880
+ securityContext:
12881
+ allowPrivilegeEscalation: false
12882
+ capabilities:
12883
+ drop:
12884
+ - ALL
12885
+ runAsNonRoot: true
12886
+ runAsUser: 1000
12887
+ runAsGroup: 1000
12888
+ seccompProfile:
12889
+ type: RuntimeDefault
12890
+ securityContext:
12891
+ runAsNonRoot: true
12892
+ seccompProfile:
12893
+ type: RuntimeDefault
12894
+ terminationGracePeriodSeconds: 30
12895
+ volumes:
12896
+ - name: varlog
12897
+ emptyDir: {}`,
12898
+ },
12899
+ ],
12900
+ 'v1.PersistentVolumeClaim': [
12901
+ {
12902
+ title: 'Basic PersistentVolumeClaim',
12903
+ description: 'A basic PVC example requesting 1Gi storage',
12904
+ yaml: `apiVersion: v1
12905
+ kind: PersistentVolumeClaim
12906
+ metadata:
12907
+ name: example
12908
+ namespace:: ''
12909
+ spec:
12910
+ accessModes:
12911
+ - ReadWriteOnce
12912
+ volumeMode: Filesystem
12913
+ resources:
12914
+ requests:
12915
+ storage: 1Gi`,
12916
+ },
12917
+ ],
12918
+ 'v1.ResourceQuota': [
12919
+ {
12920
+ title: 'Compute ResourceQuota',
12921
+ description: 'A ResourceQuota example for compute resources',
12922
+ yaml: `apiVersion: v1
12923
+ kind: ResourceQuota
12924
+ metadata:
12925
+ name: compute-quota
12926
+ namespace: ''
12927
+ spec:
12928
+ hard:
12929
+ requests.cpu: '1'
12930
+ requests.memory: 1Gi
12931
+ limits.cpu: '2'
12932
+ limits.memory: 2Gi`,
12933
+ },
12934
+ {
12935
+ title: 'Storage Class ResourceQuota',
12936
+ description: 'A ResourceQuota example for storage class specific quotas',
12937
+ yaml: `apiVersion: v1
12938
+ kind: ResourceQuota
12939
+ metadata:
12940
+ name: storage-class-quota
12941
+ namespace: ''
12942
+ spec:
12943
+ hard:
12944
+ requests.storage: 100Gi
12945
+ persistentvolumeclaims: '100'
12946
+ # For quota specific to a storage class, the storage class must have the same name
12947
+ gold.storage-class.kubernetes.io/requests.storage: 3Gi
12948
+ gold.storage-class.kubernetes.io/persistentvolumeclaims: '5'
12949
+ silver.storage-class.kubernetes.io/requests.storage: 2Gi
12950
+ silver.storage-class.kubernetes.io/persistentvolumeclaims: '3'
12951
+ bronze.storage-class.kubernetes.io/requests.storage: 1Gi
12952
+ bronze.storage-class.kubernetes.io/persistentvolumeclaims: '1'`,
12953
+ },
12954
+ {
12955
+ title: 'Object Counts ResourceQuota',
12956
+ description: 'A ResourceQuota example for object count limits',
12957
+ yaml: `apiVersion: v1
12958
+ kind: ResourceQuota
12959
+ metadata:
12960
+ name: object-counts
12961
+ namespace: ''
12962
+ spec:
12963
+ hard:
12964
+ configmaps: "10"
12965
+ persistentvolumeclaims: "4"
12966
+ replicationcontrollers: "20"
12967
+ secrets: "10"
12968
+ services: "10"
12969
+ services.loadbalancers: "2"`,
12970
+ },
12971
+ ],
12972
+ 'v1.LimitRange': [
12973
+ {
12974
+ title: 'Memory LimitRange',
12975
+ description: 'A LimitRange example for container memory limits',
12976
+ yaml: `apiVersion: v1
12977
+ kind: LimitRange
12978
+ metadata:
12979
+ name: mem-limit-range
12980
+ namespace: ''
12981
+ spec:
12982
+ limits:
12983
+ - default:
12984
+ memory: 512Mi
12985
+ defaultRequest:
12986
+ memory: 256Mi
12987
+ type: Container`,
12988
+ },
12989
+ ],
12990
+ 'apps/v1.StatefulSet': [
12991
+ {
12992
+ title: 'Basic StatefulSet',
12993
+ description: 'A basic StatefulSet example with persistent storage',
12994
+ yaml: `apiVersion: apps/v1
12995
+ kind: StatefulSet
12996
+ metadata:
12997
+ name: example
12998
+ namespace: ''
12999
+ spec:
13000
+ replicas: 3
13001
+ selector:
13002
+ matchLabels:
13003
+ app: httpd
13004
+ serviceName: httpd
13005
+ template:
13006
+ metadata:
13007
+ labels:
13008
+ app: httpd
13009
+ spec:
13010
+ containers:
13011
+ - image: nginx:1.7.9
13012
+ name: httpd
13013
+ ports:
13014
+ - containerPort: 8080
13015
+ name: web
13016
+ volumeMounts:
13017
+ - mountPath: /var/www/html
13018
+ name: www
13019
+ securityContext:
13020
+ allowPrivilegeEscalation: false
13021
+ capabilities:
13022
+ drop:
13023
+ - ALL
13024
+ runAsNonRoot: true
13025
+ seccompProfile:
13026
+ type: RuntimeDefault
13027
+ securityContext:
13028
+ runAsNonRoot: true
13029
+ seccompProfile:
13030
+ type: RuntimeDefault
13031
+ terminationGracePeriodSeconds: 10
13032
+ volumeClaimTemplates:
13033
+ - metadata:
13034
+ name: www
13035
+ spec:
13036
+ accessModes:
13037
+ - ReadWriteOnce
13038
+ resources:
13039
+ requests:
13040
+ storage: 1Gi`,
13041
+ },
13042
+ ],
13043
+ 'storage.k8s.io/v1.StorageClass': [
13044
+ {
13045
+ title: 'Fast StorageClass',
13046
+ description: 'Ceph fast storage class example',
13047
+ yaml: `apiVersion: storage.k8s.io/v1
13048
+ kind: StorageClass
13049
+ metadata:
13050
+ name: example
13051
+ namespace: ''
13052
+ provisioner: my-provisioner
13053
+ reclaimPolicy: Delete
13054
+ `,
13055
+ },
13056
+ ],
13057
+ 'v1.Secret': [
13058
+ {
13059
+ title: 'Basic Secret',
13060
+ description: 'A basic Secret example with username and password',
13061
+ yaml: `apiVersion: v1
13062
+ kind: Secret
13063
+ metadata:
13064
+ name: example
13065
+ namespace: ''
13066
+ type: Opaque
13067
+ stringData:
13068
+ username: admin
13069
+ password: opensec`,
13070
+ },
13071
+ ],
13072
+ 'app.k8s.io/v1beta1.Application': [
13073
+ {
13074
+ title: 'Basic Application',
13075
+ description: 'A basic Application example with Deployment and Service',
13076
+ yaml: `apiVersion: apps/v1
13077
+ kind: Deployment
13078
+ metadata:
13079
+ labels:
13080
+ app: nginx
13081
+ name: nginx-deployment
13082
+ namespace: ''
13083
+ spec:
13084
+ replicas: 1
13085
+ selector:
13086
+ matchLabels:
13087
+ app: nginx
13088
+ template:
13089
+ metadata:
13090
+ labels:
13091
+ app: nginx
13092
+ spec:
13093
+ containers:
13094
+ - image: nginx:1.7.9
13095
+ name: nginx
13096
+ ports:
13097
+ - containerPort: 80
13098
+ securityContext:
13099
+ allowPrivilegeEscalation: false
13100
+ capabilities:
13101
+ drop:
13102
+ - ALL
13103
+ runAsNonRoot: true
13104
+ seccompProfile:
13105
+ type: RuntimeDefault
13106
+ securityContext:
13107
+ runAsNonRoot: true
13108
+ seccompProfile:
13109
+ type: RuntimeDefault
13110
+ ---
13111
+ apiVersion: v1
13112
+ kind: Service
13113
+ metadata:
13114
+ labels:
13115
+ app: nginx
13116
+ name: nginx
13117
+ spec:
13118
+ ports:
13119
+ - port: 80
13120
+ protocol: TCP
13121
+ targetPort: 80
13122
+ selector:
13123
+ app: nginx
13124
+ type: ClusterIP`,
13125
+ },
13126
+ ],
13127
+ };
13128
+
13129
+ class ResourceYamlSidebarComponent {
13130
+ constructor() {
13131
+ this.close = new EventEmitter();
13132
+ this.tryYaml = new EventEmitter();
13133
+ this.schemaEnable = true;
13134
+ this.exampleEnable = true;
13135
+ this.DEFINITIONS_PREFIX = '#/definitions/';
13136
+ this.path = [];
13137
+ this.examples = [];
13138
+ this.hasSchema = false;
13139
+ this.hasExamples = false;
13140
+ this.http = inject(HttpClient);
13141
+ this.cdr = inject(ChangeDetectorRef);
13142
+ this.host = inject((ElementRef));
13143
+ }
13144
+ ngOnInit() {
13145
+ this.refresh();
13146
+ this.loadExamples();
13147
+ }
13148
+ ngOnChanges(changes) {
13149
+ if (changes.schema || changes.resource) {
13150
+ this.refresh();
13151
+ this.loadExamples();
13152
+ }
13153
+ }
13154
+ refresh() {
13155
+ if (this.schema) {
13156
+ this.currentSchema = this.schema;
13157
+ this.currentSchemaDescription = this.schema.description;
13158
+ this.properties = this.schema.properties || {};
13159
+ this.path = [];
13160
+ this.hasSchema = true;
13161
+ }
13162
+ else {
13163
+ this.hasSchema = false;
13164
+ }
13165
+ if (this.resource) {
13166
+ this.resourceKind = this.resource.kind || 'Resource';
13167
+ }
13168
+ }
13169
+ loadExamples() {
13170
+ if (!this.resource) {
13171
+ this.examples = [];
13172
+ this.hasExamples = false;
13173
+ this.cdr.markForCheck();
13174
+ return;
13175
+ }
13176
+ const resourceKey = `${this.resource.apiVersion}.${this.resource.kind}`;
13177
+ const builtInExamples = BUILT_IN_YAML_EXAMPLES[resourceKey] || [];
13178
+ // 加载 ConsoleYAMLSample CRD 中的示例
13179
+ this.loadConsoleYAMLSamples().subscribe({
13180
+ next: crdExamples => {
13181
+ this.examples = [
13182
+ ...builtInExamples,
13183
+ ...(this.extraExamples || []),
13184
+ ...crdExamples,
13185
+ ];
13186
+ this.hasExamples = this.examples.length > 0;
13187
+ this.cdr.markForCheck();
13188
+ },
13189
+ error: () => {
13190
+ // 如果加载 CRD 示例失败,只使用内置示例
13191
+ this.examples = builtInExamples;
13192
+ this.hasExamples = this.examples.length > 0;
13193
+ this.cdr.markForCheck();
13194
+ },
13195
+ });
13196
+ }
13197
+ loadConsoleYAMLSamples() {
13198
+ if (!this.resource) {
13199
+ return of([]);
13200
+ }
13201
+ // 构建查询 ConsoleYAMLSample 的 API 路径
13202
+ const apiPath = '{{API_GATEWAY}}/kubernetes/business-1/apis/console.alauda.io/v1/consoleyamlsamples';
13203
+ return this.http.get(apiPath).pipe(map(response => {
13204
+ return response.items
13205
+ .filter(sample => {
13206
+ const target = sample.spec.targetResource;
13207
+ return (target.apiVersion === this.resource.apiVersion &&
13208
+ target.kind === this.resource.kind);
13209
+ })
13210
+ .map(sample => ({
13211
+ title: sample.spec.title,
13212
+ description: sample.spec.description,
13213
+ yaml: sample.spec.yaml,
13214
+ snippet: sample.spec.snippet,
13215
+ }));
13216
+ }), catchError(() => of([])));
13217
+ }
13218
+ drillDownToProperty(name) {
13219
+ const property = this.currentSchema.properties?.[name];
13220
+ if (property) {
13221
+ this.currentSchemaDescription = property.description;
13222
+ let targetSchema = null;
13223
+ // 处理 $ref 引用
13224
+ if (property.$ref || property.items?.$ref) {
13225
+ const ref = property.$ref || property.items?.$ref;
13226
+ if (ref.startsWith(this.DEFINITIONS_PREFIX)) {
13227
+ // const definitionName = ref.replace(this.DEFINITIONS_PREFIX, '');
13228
+ // 从根 schema 的 definitions 中获取定义
13229
+ // todo: 书勋
13230
+ // const rootDefinitions = this.schemaService.definitions;
13231
+ // targetSchema = rootDefinitions?.[definitionName] || null;
13232
+ }
13233
+ }
13234
+ // 处理普通的嵌套属性
13235
+ else if (property.properties || property.items?.properties) {
13236
+ targetSchema = property.items?.properties ? property.items : property;
13237
+ }
13238
+ if (targetSchema) {
13239
+ this.currentSchema = targetSchema;
13240
+ this.path.push(name);
13241
+ this.properties = targetSchema.properties || {};
13242
+ this.scrollTop();
13243
+ }
13244
+ }
13245
+ }
13246
+ navigateToPath(index) {
13247
+ const targetPath = this.path.slice(0, index + 1);
13248
+ this.path = [...targetPath];
13249
+ let currentObj = this.schema;
13250
+ for (const pathSegment of targetPath) {
13251
+ const property = currentObj.properties?.[pathSegment];
13252
+ if (property) {
13253
+ this.currentSchemaDescription = property.description;
13254
+ // 处理 $ref 引用
13255
+ if (property.$ref || property.items?.$ref) {
13256
+ const ref = property.$ref || property.items?.$ref;
13257
+ if (ref.startsWith(this.DEFINITIONS_PREFIX)) {
13258
+ // const definitionName = ref.replace(this.DEFINITIONS_PREFIX, '');
13259
+ // todo: 书勋
13260
+ // const rootDefinitions = this.schemaService.definitions;
13261
+ // const definition = rootDefinitions?.[definitionName];
13262
+ // if (definition) {
13263
+ // currentObj = definition;
13264
+ // }
13265
+ }
13266
+ }
13267
+ // 处理普通的嵌套属性
13268
+ else {
13269
+ currentObj = property.items?.properties ? property.items : property;
13270
+ }
13271
+ }
13272
+ }
13273
+ this.currentSchema = currentObj;
13274
+ this.properties = currentObj.properties || {};
13275
+ }
13276
+ /**
13277
+ * 检查属性是否有 $ref 引用或嵌套属性
13278
+ */
13279
+ hasViewableContent(property) {
13280
+ return (
13281
+ // 有 properties 的对象
13282
+ (property.type === 'object' &&
13283
+ property.properties &&
13284
+ Object.keys(property.properties).length > 0) ||
13285
+ // 有 properties 的数组项
13286
+ (property.type === 'array' &&
13287
+ property.items &&
13288
+ typeof property.items === 'object' &&
13289
+ property.items.properties &&
13290
+ Object.keys(property.items.properties || {})
13291
+ .length > 0) ||
13292
+ // 有 $ref 引用
13293
+ !!property.$ref ||
13294
+ !!property?.items?.$ref);
13295
+ }
13296
+ // Examples 相关方法
13297
+ tryExample(example) {
13298
+ // 触发事件,让父组件处理 try it 功能,将 YAML 内容发送给父组件
13299
+ this.tryYaml.emit(example.yaml);
13300
+ }
13301
+ downloadYaml(example) {
13302
+ const blob = new Blob([example.yaml], { type: 'text/yaml' });
13303
+ const url = window.URL.createObjectURL(blob);
13304
+ const link = document.createElement('a');
13305
+ link.href = url;
13306
+ link.download = `${example.title.toLowerCase().replace(/\s+/g, '-')}.yaml`;
13307
+ document.body.appendChild(link);
13308
+ link.click();
13309
+ document.body.removeChild(link);
13310
+ window.URL.revokeObjectURL(url);
13311
+ }
13312
+ // 处理描述中的链接
13313
+ processDescription(description) {
13314
+ if (!description)
13315
+ return '';
13316
+ // 将 URL 转换为可点击的链接
13317
+ const urlRegex = /(https?:\/\/[^\s]+)/g;
13318
+ return description
13319
+ .replace(urlRegex, '<a href="$1" target="_blank" rel="noopener noreferrer">$1</a>')
13320
+ .replace(/\n/g, '<br>'); // 保留换行符
13321
+ }
13322
+ scrollTop() {
13323
+ this.host.nativeElement.scrollTo({
13324
+ top: 0,
13325
+ });
13326
+ }
13327
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceYamlSidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13328
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: ResourceYamlSidebarComponent, isStandalone: true, selector: "acl-resource-yaml-sidebar", inputs: { resource: "resource", schema: "schema", schemaEnable: "schemaEnable", exampleEnable: "exampleEnable", extraExamples: "extraExamples" }, outputs: { close: "close", tryYaml: "tryYaml" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"schema-header\">\n <span>{{ resourceKind }}</span>\n <aui-icon\n icon=\"xmark\"\n (click)=\"close.next()\"\n ></aui-icon>\n</div>\n<aui-tab-group type=\"card\">\n @if (schemaEnable && hasSchema) {\n <aui-tab>\n <ng-container *auiTabLabel> Schema </ng-container>\n <ng-container *auiTabContent>\n @if (schema) {\n <div class=\"schema-content\">\n <div class=\"schema-path\">\n @if (path.length) {\n <a\n href=\"javascript:\"\n (click)=\"refresh()\"\n >{{ resourceKind }}</a\n >\n }\n @for (p of path; track p; let i = $index; let isLast = $last) {\n @if (!isLast) {\n <span class=\"path-mark\">></span>\n <a\n href=\"javascript:\"\n (click)=\"navigateToPath(i)\"\n >{{ p }}</a\n >\n }\n @if (isLast) {\n <span class=\"path-mark\">></span>\n <span>{{ p }}</span>\n }\n }\n </div>\n @if (currentSchemaDescription) {\n <div\n class=\"schema-desc\"\n [innerHTML]=\"\n currentSchemaDescription\n | aclParseJsonTranslate\n | pure: processDescription\n \"\n ></div>\n }\n <div class=\"schema-list\">\n @for (item of properties | keyvalue; track item) {\n <div class=\"schema-item\">\n <h3>\n <span>{{ item.key }}</span>\n <span class=\"obj-type\">{{ item.value.type }}</span>\n </h3>\n <p\n [innerHTML]=\"\n item.value.description | pure: processDescription\n \"\n ></p>\n @if (item.value | pure: hasViewableContent) {\n <p>\n <a\n href=\"javascript:\"\n (click)=\"drillDownToProperty(item.key)\"\n >\n {{ 'view_detail' | translate }}\n </a>\n </p>\n }\n </div>\n }\n </div>\n </div>\n }\n </ng-container>\n </aui-tab>\n }\n @if (exampleEnable && hasExamples) {\n <aui-tab>\n <ng-container *auiTabLabel> Examples </ng-container>\n <ng-container *auiTabContent>\n <div class=\"example-list\">\n @for (example of examples; track example; let i = $index) {\n <div class=\"example-item\">\n <h3>\n {{ i + 1 }}. <span>{{ example.title }}</span>\n </h3>\n <p\n [innerHTML]=\"example.description | pure: processDescription\"\n ></p>\n <p class=\"example-actions\">\n <a\n href=\"javascript:\"\n (click)=\"tryExample(example)\"\n >\n <aui-icon\n icon=\"arrow_turn_up\"\n size=\"14\"\n margin=\"right\"\n ></aui-icon>\n <span>Try it</span>\n </a>\n <a\n href=\"javascript:\"\n (click)=\"downloadYaml(example)\"\n >\n <aui-icon\n icon=\"download\"\n size=\"14\"\n margin=\"right\"\n ></aui-icon>\n <span>Download YAML</span>\n </a>\n </p>\n </div>\n }\n </div>\n </ng-container>\n </aui-tab>\n }\n</aui-tab-group>\n", styles: [":host{display:block;box-sizing:border-box;min-width:360px;padding:16px;background-color:rgb(var(--aui-color-n-10));box-shadow:0 0 4px rgba(var(--aui-color-n-1),.16);margin-left:12px;overflow-y:scroll}:host::-webkit-scrollbar{width:8px;height:4px}:host::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}:host::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}:host::-webkit-scrollbar-corner{background-color:transparent}aui-tab-group{display:block;margin-top:5px}.schema-header{height:40px;display:flex;justify-content:space-between;align-items:center;font-size:18px}.schema-header aui-icon{font-size:16px;color:rgb(var(--aui-color-n-6));cursor:pointer}.schema-header aui-icon:hover{color:rgb(var(--aui-color-primary))}.schema-content{line-height:20px;overflow-y:auto;height:calc(100% - 40px)}.schema-content::-webkit-scrollbar{width:8px;height:4px}.schema-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.schema-content::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.schema-content::-webkit-scrollbar-corner{background-color:transparent}.schema-desc{margin-bottom:12px}.schema-desc a{color:#007bff;text-decoration:none}.schema-desc a:hover{text-decoration:underline}.schema-path{display:flex;flex-wrap:wrap}.schema-path *{margin-left:2px;word-break:break-all}.schema-path span:first-child{margin-right:2px}.schema-path .path-mark{margin:0 4px;color:rgb(var(--aui-color-n-6))}.schema-path{margin-bottom:12px}.schema-list .schema-item:not(:last-of-type),.schema-list .example-item:not(:last-of-type),.example-list .schema-item:not(:last-of-type),.example-list .example-item:not(:last-of-type){border-bottom:1px solid rgb(var(--aui-color-border));margin-bottom:12px}.schema-list .schema-item,.schema-list .example-item,.example-list .schema-item,.example-list .example-item{padding-left:16px}.schema-list .schema-item h3:before,.example-list .schema-item h3:before{content:\"\";display:block;width:6px;height:6px;border-radius:50%;background-color:rgb(var(--aui-color-n-6));position:absolute;left:-12px;top:8px}.schema-list .example-actions,.example-list .example-actions{display:flex;justify-content:space-between}.schema-list h3,.example-list h3{position:relative;font-weight:500;margin-bottom:12px;word-break:break-word}.schema-list h3 span,.example-list h3 span{margin-right:4px}.schema-list h3 .obj-type,.example-list h3 .obj-type{color:rgb(var(--aui-color-n-4))}.schema-list p,.example-list p{margin-bottom:12px;word-break:break-word}.schema-list p a,.example-list p a{color:#007bff;text-decoration:none}.schema-list p a:hover,.example-list p a:hover{text-decoration:underline}.schema-examples{padding:16px}.examples-header{margin-bottom:16px}.examples-header h3{margin:0;font-size:18px;font-weight:600;color:#333}.examples-content .examples-list .example-item{margin-bottom:24px;border:1px solid #e1e5e9;border-radius:6px;overflow:hidden}.examples-content .examples-list .example-item:last-child{margin-bottom:0}.examples-content .examples-list .example-item .example-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background-color:#f8f9fa;border-bottom:1px solid #e1e5e9}.examples-content .examples-list .example-item .example-header .example-title{margin:0;font-size:16px;font-weight:600;color:#333}.examples-content .examples-list .example-item .example-header .example-actions{display:flex;gap:8px}.examples-content .examples-list .example-item .example-header .example-actions .btn{padding:4px 12px;font-size:12px;border-radius:4px;cursor:pointer;transition:all .2s ease}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-primary{color:#007bff;border:1px solid #007bff;background-color:transparent}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-primary:hover{color:#fff;background-color:#007bff}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-secondary{color:#6c757d;border:1px solid #6c757d;background-color:transparent}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-secondary:hover{color:#fff;background-color:#6c757d}.examples-content .examples-list .example-item .example-header .example-list .example-item .example-actions{display:flex;justify-content:space-between}.examples-content .examples-list .example-item .example-description{padding:12px 16px;color:#666;font-size:14px;line-height:1.5;border-bottom:1px solid #e1e5e9}.examples-content .examples-list .example-item .example-description a{color:#007bff;text-decoration:none}.examples-content .examples-list .example-item .example-description a:hover{text-decoration:underline}.examples-content .examples-list .example-item .example-yaml{background-color:#f8f9fa}.examples-content .examples-list .example-item .example-yaml pre{margin:0;padding:16px;background-color:transparent;border:none;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:13px;line-height:1.4;color:#333;overflow-x:auto}.examples-content .examples-list .example-item .example-yaml pre code{background-color:transparent;padding:0;color:inherit}\n"], dependencies: [{ kind: "ngmodule", type: IconModule }, { kind: "component", type: i1.IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i1.TabGroupComponent, selector: "aui-tab-group", inputs: ["selectedIndex", "tab", "type", "title", "size", "lazy"], outputs: ["selectedIndexChange", "tabChange", "selectedTabChange", "focusChange"], exportAs: ["auiTabGroup"] }, { kind: "component", type: i1.TabComponent, selector: "aui-tab", inputs: ["name", "label", "closeable", "disabled"], outputs: ["close"], exportAs: ["auiTab"] }, { kind: "directive", type: i1.TabLabelDirective, selector: "[auiTabLabel]" }, { kind: "directive", type: i1.TabContentDirective, selector: "[auiTabContent]" }, { kind: "ngmodule", type: ButtonModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: ParseJsonTranslatePipe, name: "aclParseJsonTranslate" }, { kind: "pipe", type: PurePipe, name: "pure" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13329
+ }
13330
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceYamlSidebarComponent, decorators: [{
13331
+ type: Component,
13332
+ args: [{ selector: 'acl-resource-yaml-sidebar', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
13333
+ TranslatePipe,
13334
+ KeyValuePipe,
13335
+ ParseJsonTranslatePipe,
13336
+ IconModule,
13337
+ TabsModule,
13338
+ ButtonModule,
13339
+ PurePipe,
13340
+ ], template: "<div class=\"schema-header\">\n <span>{{ resourceKind }}</span>\n <aui-icon\n icon=\"xmark\"\n (click)=\"close.next()\"\n ></aui-icon>\n</div>\n<aui-tab-group type=\"card\">\n @if (schemaEnable && hasSchema) {\n <aui-tab>\n <ng-container *auiTabLabel> Schema </ng-container>\n <ng-container *auiTabContent>\n @if (schema) {\n <div class=\"schema-content\">\n <div class=\"schema-path\">\n @if (path.length) {\n <a\n href=\"javascript:\"\n (click)=\"refresh()\"\n >{{ resourceKind }}</a\n >\n }\n @for (p of path; track p; let i = $index; let isLast = $last) {\n @if (!isLast) {\n <span class=\"path-mark\">></span>\n <a\n href=\"javascript:\"\n (click)=\"navigateToPath(i)\"\n >{{ p }}</a\n >\n }\n @if (isLast) {\n <span class=\"path-mark\">></span>\n <span>{{ p }}</span>\n }\n }\n </div>\n @if (currentSchemaDescription) {\n <div\n class=\"schema-desc\"\n [innerHTML]=\"\n currentSchemaDescription\n | aclParseJsonTranslate\n | pure: processDescription\n \"\n ></div>\n }\n <div class=\"schema-list\">\n @for (item of properties | keyvalue; track item) {\n <div class=\"schema-item\">\n <h3>\n <span>{{ item.key }}</span>\n <span class=\"obj-type\">{{ item.value.type }}</span>\n </h3>\n <p\n [innerHTML]=\"\n item.value.description | pure: processDescription\n \"\n ></p>\n @if (item.value | pure: hasViewableContent) {\n <p>\n <a\n href=\"javascript:\"\n (click)=\"drillDownToProperty(item.key)\"\n >\n {{ 'view_detail' | translate }}\n </a>\n </p>\n }\n </div>\n }\n </div>\n </div>\n }\n </ng-container>\n </aui-tab>\n }\n @if (exampleEnable && hasExamples) {\n <aui-tab>\n <ng-container *auiTabLabel> Examples </ng-container>\n <ng-container *auiTabContent>\n <div class=\"example-list\">\n @for (example of examples; track example; let i = $index) {\n <div class=\"example-item\">\n <h3>\n {{ i + 1 }}. <span>{{ example.title }}</span>\n </h3>\n <p\n [innerHTML]=\"example.description | pure: processDescription\"\n ></p>\n <p class=\"example-actions\">\n <a\n href=\"javascript:\"\n (click)=\"tryExample(example)\"\n >\n <aui-icon\n icon=\"arrow_turn_up\"\n size=\"14\"\n margin=\"right\"\n ></aui-icon>\n <span>Try it</span>\n </a>\n <a\n href=\"javascript:\"\n (click)=\"downloadYaml(example)\"\n >\n <aui-icon\n icon=\"download\"\n size=\"14\"\n margin=\"right\"\n ></aui-icon>\n <span>Download YAML</span>\n </a>\n </p>\n </div>\n }\n </div>\n </ng-container>\n </aui-tab>\n }\n</aui-tab-group>\n", styles: [":host{display:block;box-sizing:border-box;min-width:360px;padding:16px;background-color:rgb(var(--aui-color-n-10));box-shadow:0 0 4px rgba(var(--aui-color-n-1),.16);margin-left:12px;overflow-y:scroll}:host::-webkit-scrollbar{width:8px;height:4px}:host::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}:host::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}:host::-webkit-scrollbar-corner{background-color:transparent}aui-tab-group{display:block;margin-top:5px}.schema-header{height:40px;display:flex;justify-content:space-between;align-items:center;font-size:18px}.schema-header aui-icon{font-size:16px;color:rgb(var(--aui-color-n-6));cursor:pointer}.schema-header aui-icon:hover{color:rgb(var(--aui-color-primary))}.schema-content{line-height:20px;overflow-y:auto;height:calc(100% - 40px)}.schema-content::-webkit-scrollbar{width:8px;height:4px}.schema-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.schema-content::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.schema-content::-webkit-scrollbar-corner{background-color:transparent}.schema-desc{margin-bottom:12px}.schema-desc a{color:#007bff;text-decoration:none}.schema-desc a:hover{text-decoration:underline}.schema-path{display:flex;flex-wrap:wrap}.schema-path *{margin-left:2px;word-break:break-all}.schema-path span:first-child{margin-right:2px}.schema-path .path-mark{margin:0 4px;color:rgb(var(--aui-color-n-6))}.schema-path{margin-bottom:12px}.schema-list .schema-item:not(:last-of-type),.schema-list .example-item:not(:last-of-type),.example-list .schema-item:not(:last-of-type),.example-list .example-item:not(:last-of-type){border-bottom:1px solid rgb(var(--aui-color-border));margin-bottom:12px}.schema-list .schema-item,.schema-list .example-item,.example-list .schema-item,.example-list .example-item{padding-left:16px}.schema-list .schema-item h3:before,.example-list .schema-item h3:before{content:\"\";display:block;width:6px;height:6px;border-radius:50%;background-color:rgb(var(--aui-color-n-6));position:absolute;left:-12px;top:8px}.schema-list .example-actions,.example-list .example-actions{display:flex;justify-content:space-between}.schema-list h3,.example-list h3{position:relative;font-weight:500;margin-bottom:12px;word-break:break-word}.schema-list h3 span,.example-list h3 span{margin-right:4px}.schema-list h3 .obj-type,.example-list h3 .obj-type{color:rgb(var(--aui-color-n-4))}.schema-list p,.example-list p{margin-bottom:12px;word-break:break-word}.schema-list p a,.example-list p a{color:#007bff;text-decoration:none}.schema-list p a:hover,.example-list p a:hover{text-decoration:underline}.schema-examples{padding:16px}.examples-header{margin-bottom:16px}.examples-header h3{margin:0;font-size:18px;font-weight:600;color:#333}.examples-content .examples-list .example-item{margin-bottom:24px;border:1px solid #e1e5e9;border-radius:6px;overflow:hidden}.examples-content .examples-list .example-item:last-child{margin-bottom:0}.examples-content .examples-list .example-item .example-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background-color:#f8f9fa;border-bottom:1px solid #e1e5e9}.examples-content .examples-list .example-item .example-header .example-title{margin:0;font-size:16px;font-weight:600;color:#333}.examples-content .examples-list .example-item .example-header .example-actions{display:flex;gap:8px}.examples-content .examples-list .example-item .example-header .example-actions .btn{padding:4px 12px;font-size:12px;border-radius:4px;cursor:pointer;transition:all .2s ease}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-primary{color:#007bff;border:1px solid #007bff;background-color:transparent}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-primary:hover{color:#fff;background-color:#007bff}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-secondary{color:#6c757d;border:1px solid #6c757d;background-color:transparent}.examples-content .examples-list .example-item .example-header .example-actions .btn.btn-outline-secondary:hover{color:#fff;background-color:#6c757d}.examples-content .examples-list .example-item .example-header .example-list .example-item .example-actions{display:flex;justify-content:space-between}.examples-content .examples-list .example-item .example-description{padding:12px 16px;color:#666;font-size:14px;line-height:1.5;border-bottom:1px solid #e1e5e9}.examples-content .examples-list .example-item .example-description a{color:#007bff;text-decoration:none}.examples-content .examples-list .example-item .example-description a:hover{text-decoration:underline}.examples-content .examples-list .example-item .example-yaml{background-color:#f8f9fa}.examples-content .examples-list .example-item .example-yaml pre{margin:0;padding:16px;background-color:transparent;border:none;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:13px;line-height:1.4;color:#333;overflow-x:auto}.examples-content .examples-list .example-item .example-yaml pre code{background-color:transparent;padding:0;color:inherit}\n"] }]
13341
+ }], propDecorators: { resource: [{
13342
+ type: Input
13343
+ }], schema: [{
13344
+ type: Input
13345
+ }], close: [{
13346
+ type: Output
13347
+ }], tryYaml: [{
13348
+ type: Output
13349
+ }], schemaEnable: [{
13350
+ type: Input
13351
+ }], exampleEnable: [{
13352
+ type: Input
13353
+ }], extraExamples: [{
13354
+ type: Input
13355
+ }] } });
13356
+
13357
+ class ResourceYamlEditorComponent {
13358
+ set originalValue(value) {
13359
+ this._originalValue = value || '';
13360
+ }
13361
+ get originalValue() {
13362
+ return this._originalValue;
13363
+ }
13364
+ constructor() {
13365
+ this.destroy$ = new Subject();
13366
+ this._value = '';
13367
+ this._originalValue = '';
13368
+ this.onChange = (_value) => {
13369
+ // Placeholder for form control change callback
13370
+ };
13371
+ this.onTouched = () => {
13372
+ // Placeholder for form control touched callback
13373
+ };
13374
+ this.showSidebar$$ = new BehaviorSubject(true);
13375
+ this.showDebugPanel$$ = new BehaviorSubject(true);
13376
+ this.monacoEditor = null;
13377
+ this.registeredSchemas = new Set();
13378
+ this.pendingSchemas = new Set();
13379
+ this.schemaService = inject(KubernetesSchemaService);
13380
+ this.monacoLanguageService = inject(MonacoLanguageService);
13381
+ this.hasWrapper = true;
13382
+ this.showDebugInfo = false;
13383
+ this.sidebarEnable = true;
13384
+ this.schemaEnable = true;
13385
+ this.exampleEnable = true;
13386
+ this.autoFoldManagedFields = true;
13387
+ this.options = yamlWriteMinimapOptions;
13388
+ this.actionsConfig = updateActions;
13389
+ this.tryYaml = new EventEmitter();
13390
+ this.autoFillNamespace = true;
13391
+ this.hasFolded = false;
13392
+ /**
13393
+ * 自动获取的 schema,当没有手动提供 schema 时使用
13394
+ /**
13395
+ *
13396
+ *
13397
+ * @memberof ResourceYamlEditorComponent
13398
+ */
13399
+ this.autoSchema$ = combineLatest([this.resource$, this.clusterName$]).pipe(switchMap(([resource, clusterName]) => {
13400
+ if (!resource || !clusterName) {
13401
+ return of(null);
13402
+ }
13403
+ const firstResource = (Array.isArray(resource) ? resource[0] : resource);
13404
+ if (!firstResource?.apiVersion || !firstResource?.kind) {
13405
+ return of(null);
13406
+ }
13407
+ return this.schemaService.getResourceSchema(firstResource.apiVersion, firstResource.kind, clusterName);
13408
+ }), publishRef());
13409
+ /**
13410
+ * 最终使用的 schema,优先使用手动提供的,否则使用自动获取的
13411
+ */
13412
+ this.finalSchema$ = combineLatest([this.schema$, this.autoSchema$]).pipe(map(([manualSchema, autoSchema]) => manualSchema || autoSchema), distinctUntilChanged(), shareReplay(1));
13413
+ this.yamlSchemaService = this.monacoLanguageService.getYamlSchemaService();
13414
+ // 自动设置 schema
13415
+ combineLatest([this.resource$, this.finalSchema$])
13416
+ .pipe(takeUntil(this.destroy$))
13417
+ .subscribe(([resource, schema]) => {
13418
+ if (resource && schema) {
13419
+ const firstResource = Array.isArray(resource)
13420
+ ? resource[0]
13421
+ : resource;
13422
+ if (firstResource && !Array.isArray(firstResource)) {
13423
+ this.setYamlSchema(firstResource, schema);
13424
+ }
13425
+ }
13426
+ });
13427
+ this.autoSchema$.pipe(takeUntil(this.destroy$)).subscribe();
13428
+ }
13429
+ ngAfterViewInit() {
13430
+ // 监听 YAML 内容变化,自动折叠 managedFields
13431
+ // if (this.autoFoldManagedFields && this.schemaService.definitions) {
13432
+ // this.selfFoldManagedFields();
13433
+ // }
13434
+ if (this.autoFoldManagedFields) {
13435
+ this.selfFoldManagedFields();
13436
+ }
13437
+ }
13438
+ selfFoldManagedFields() {
13439
+ if (this.hasFolded) {
13440
+ return;
13441
+ }
13442
+ this.hasFolded = true;
13443
+ setTimeout(() => {
13444
+ const editor = this.getEditorInstance();
13445
+ if (editor) {
13446
+ foldManagedFields(editor);
13447
+ }
13448
+ }, 0);
13449
+ }
13450
+ get value() {
13451
+ return this._value;
13452
+ }
13453
+ set value(val) {
13454
+ this._value = val;
13455
+ this.onChange(val);
13456
+ this.onTouched();
13457
+ }
13458
+ // ControlValueAccessor implementation
13459
+ writeValue(value) {
13460
+ this._value = value || '';
13461
+ }
13462
+ registerOnChange(fn) {
13463
+ this.onChange = fn;
13464
+ }
13465
+ registerOnTouched(fn) {
13466
+ this.onTouched = fn;
13467
+ }
13468
+ toggleSidebar() {
13469
+ this.showSidebar$$.next(!this.showSidebar$$.value);
13470
+ }
13471
+ toggleDebugInfo() {
13472
+ this.showDebugPanel$$.next(!this.showDebugPanel$$.value);
13473
+ }
13474
+ getCurrentResource() {
13475
+ const resource = this.resource;
13476
+ if (Array.isArray(resource)) {
13477
+ return resource.length > 0 ? resource[0] : null;
13478
+ }
13479
+ return resource || null;
13480
+ }
13481
+ getCurrentSchema() {
13482
+ return this.schema || null;
13483
+ }
13484
+ getDebugInfo() {
13485
+ const resource = this.getCurrentResource();
13486
+ return {
13487
+ hasResource: !!resource,
13488
+ resourceApiVersion: resource?.apiVersion,
13489
+ resourceKind: resource?.kind,
13490
+ hasManualSchema: !!this.schema,
13491
+ };
13492
+ }
13493
+ onTryYaml(yamlContent) {
13494
+ let targetYaml = yamlContent;
13495
+ if (this.autoFillNamespace && this.namespace) {
13496
+ targetYaml = parseAll(yamlContent)
13497
+ .filter(r => !!r)
13498
+ .map((r) => {
13499
+ if (!r?.metadata?.namespace) {
13500
+ return {
13501
+ ...r,
13502
+ metadata: {
13503
+ ...r.metadata,
13504
+ namespace: this.namespace,
13505
+ },
13506
+ };
13507
+ }
13508
+ return r;
13509
+ })
13510
+ .map(r => stringify$1(r, { sortMapEntries: true }))
13511
+ .join('---\r\n');
13512
+ }
13513
+ this.tryYaml.emit(targetYaml);
13514
+ }
13515
+ /**
13516
+ * 设置 YAML schema 以提供 hover 提示和自动完成
13517
+ */
13518
+ setYamlSchema(resource, schema) {
13519
+ if (!schema) {
13520
+ return;
13521
+ }
13522
+ // 使用 apiVersion + kind 组合作为标识
13523
+ const apiVersion = resource?.apiVersion || 'unknown';
13524
+ const kind = resource?.kind || 'unknown';
13525
+ const schemaKey = `${apiVersion}/${kind}`;
13526
+ this.modelUri = `${schemaKey}.yaml`;
13527
+ this.selfFoldManagedFields();
13528
+ // 检查是否已经注册过相同的 schema,避免重复注册
13529
+ if (this.registeredSchemas.has(schemaKey) ||
13530
+ this.pendingSchemas.has(schemaKey)) {
13531
+ return;
13532
+ }
13533
+ this.pendingSchemas.add(schemaKey);
13534
+ const registerSchema = (schemaToRegister) => {
13535
+ this.yamlSchemaService.addSchema({
13536
+ uri: `k8s://${schemaKey}.schema.json`,
13537
+ fileMatch: [this.modelUri],
13538
+ schema: schemaToRegister,
13539
+ });
13540
+ this.registeredSchemas.add(schemaKey);
13541
+ this.pendingSchemas.delete(schemaKey);
13542
+ };
13543
+ const schemaDefinitions = schema?.definitions;
13544
+ if (schemaDefinitions && Object.keys(schemaDefinitions).length > 0) {
13545
+ registerSchema(schema);
13546
+ return;
13547
+ }
13548
+ this.schemaService
13549
+ .getAllResourceDefinitionsCached(this.clusterName)
13550
+ .pipe(take(1), takeUntil(this.destroy$))
13551
+ .subscribe(definitions => {
13552
+ const fullSchema = {
13553
+ ...schema,
13554
+ definitions: definitions || schemaDefinitions || {},
13555
+ };
13556
+ registerSchema(fullSchema);
13557
+ });
13558
+ }
13559
+ /**
13560
+ * 获取 Monaco 编辑器实例
13561
+ */
13562
+ getEditorInstance() {
13563
+ if (!this.monacoEditor && this.codeEditorRef?.editor) {
13564
+ this.monacoEditor = this.codeEditorRef.editor;
13565
+ }
13566
+ return this.monacoEditor;
13567
+ }
13568
+ /**
13569
+ * 手动折叠 managedFields
13570
+ */
13571
+ foldManagedFields() {
13572
+ const editor = this.getEditorInstance();
13573
+ if (editor) {
13574
+ foldManagedFields(editor);
13575
+ }
13576
+ }
13577
+ ngOnDestroy() {
13578
+ this.destroy$.next();
13579
+ this.destroy$.complete();
13580
+ }
13581
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceYamlEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13582
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: ResourceYamlEditorComponent, isStandalone: true, selector: "acl-resource-yaml-editor", inputs: { hasWrapper: "hasWrapper", showDebugInfo: "showDebugInfo", sidebarEnable: "sidebarEnable", schema: "schema", schemaEnable: "schemaEnable", exampleEnable: "exampleEnable", resource: "resource", autoFoldManagedFields: "autoFoldManagedFields", originalValue: "originalValue", options: "options", actionsConfig: "actionsConfig", autoFillNamespace: "autoFillNamespace", extraExamples: "extraExamples", clusterName: "clusterName", namespace: "namespace" }, outputs: { tryYaml: "tryYaml" }, providers: [
13583
+ {
13584
+ provide: NG_VALUE_ACCESSOR,
13585
+ useExisting: forwardRef(() => ResourceYamlEditorComponent),
13586
+ multi: true,
13587
+ },
13588
+ ], viewQueries: [{ propertyName: "codeEditorRef", first: true, predicate: ["codeEditor"], descendants: true }], ngImport: i0, template: "@if (hasWrapper) {\n <aui-card>\n <ng-container *ngTemplateOutlet=\"content\" />\n </aui-card>\n} @else {\n <div\n class=\"yaml-editor-container\"\n [class.with-sidebar]=\"showSidebar$$ | async\"\n >\n <div class=\"yaml-editor-section\">\n <aui-code-editor\n #codeEditor\n name=\"yaml\"\n [originalValue]=\"originalValue\"\n [(ngModel)]=\"value\"\n [options]=\"options\"\n [actionsConfig]=\"actionsConfig\"\n [modelUri]=\"modelUri\"\n >\n <ng-container auiCodeEditorToolbarRightSide>\n <!-- Schema \u6309\u94AE\uFF1A\u5F53\u542F\u7528\u4FA7\u8FB9\u680F\u65F6\u663E\u793A -->\n @if (sidebarEnable && !!(resource$ | async)) {\n <button\n [hidden]=\"!!codeEditor.fullscreenDialog\"\n class=\"aui-code-editor-toolbar__control-button\"\n type=\"button\"\n [disabled]=\"!(finalSchema$ | async) && !exampleEnable\"\n (click)=\"toggleSidebar()\"\n [auiTooltip]=\"\n ((showSidebar$$ | async) ? 'hide_sidebar' : 'view_sidebar')\n | translate\n \"\n >\n <aui-icon\n [icon]=\"\n (showSidebar$$ | async)\n ? 'prod:expand_sidebar'\n : 'prod:collapse_sidebar'\n \"\n ></aui-icon>\n </button>\n }\n </ng-container>\n </aui-code-editor>\n </div>\n @if ((showSidebar$$ | async) && (resource$ | async)) {\n <div class=\"yaml-sidebar-section\">\n <acl-resource-yaml-sidebar\n [resource]=\"getCurrentResource()\"\n [schema]=\"finalSchema$ | async\"\n [schemaEnable]=\"schemaEnable\"\n [exampleEnable]=\"exampleEnable\"\n [extraExamples]=\"extraExamples\"\n (close)=\"toggleSidebar()\"\n (tryYaml)=\"onTryYaml($event)\"\n ></acl-resource-yaml-sidebar>\n </div>\n }\n </div>\n}\n<ng-template #content>\n <div\n class=\"yaml-editor-container\"\n [class.with-sidebar]=\"showSidebar$$ | async\"\n >\n <div class=\"yaml-editor-section\">\n <aui-code-editor\n #codeEditor\n name=\"yaml\"\n [originalValue]=\"originalValue\"\n [(ngModel)]=\"value\"\n [options]=\"options\"\n [actionsConfig]=\"actionsConfig\"\n [modelUri]=\"modelUri\"\n >\n <ng-container auiCodeEditorToolbarRightSide>\n <!-- Schema \u6309\u94AE\uFF1A\u5F53\u542F\u7528\u4FA7\u8FB9\u680F\u65F6\u663E\u793A -->\n @if (sidebarEnable && !!(resource$ | async)) {\n <button\n [hidden]=\"!!codeEditor.fullscreenDialog\"\n class=\"aui-code-editor-toolbar__control-button\"\n type=\"button\"\n [disabled]=\"!(finalSchema$ | async) && !exampleEnable\"\n (click)=\"toggleSidebar()\"\n [auiTooltip]=\"\n ((showSidebar$$ | async) ? 'hide_sidebar' : 'view_sidebar')\n | translate\n \"\n >\n <aui-icon\n [icon]=\"\n (showSidebar$$ | async)\n ? 'prod:expand_sidebar'\n : 'prod:collapse_sidebar'\n \"\n ></aui-icon>\n </button>\n }\n </ng-container>\n </aui-code-editor>\n </div>\n @if ((showSidebar$$ | async) && (resource$ | async)) {\n <div class=\"yaml-sidebar-section\">\n <acl-resource-yaml-sidebar\n [resource]=\"getCurrentResource()\"\n [schema]=\"finalSchema$ | async\"\n [schemaEnable]=\"schemaEnable\"\n [exampleEnable]=\"exampleEnable\"\n [extraExamples]=\"extraExamples\"\n (close)=\"toggleSidebar()\"\n (tryYaml)=\"onTryYaml($event)\"\n ></acl-resource-yaml-sidebar>\n </div>\n }\n </div>\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%}.yaml-editor-container{display:flex;height:100%}.yaml-editor-container.with-sidebar .yaml-editor-section{flex:2;min-width:0}.yaml-editor-container.with-sidebar .yaml-sidebar-section{flex:1 0 0%}.yaml-editor-container:not(.with-sidebar) .yaml-editor-section{flex:1}.yaml-editor-section{display:flex;flex-direction:column;height:100%}.yaml-editor-section aui-code-editor{flex:1;height:100%}.yaml-sidebar-section{display:flex;flex-direction:column;height:100%}.yaml-sidebar-section acl-resource-yaml-sidebar{flex:1;height:100%}.yaml-debug-section{position:absolute;top:0;right:0;width:350px;height:100%;background:var(--aui-color-bg-container);border-left:1px solid var(--aui-color-border-default);z-index:1000;overflow-y:auto}.debug-panel{padding:16px;font-size:12px}.debug-panel h4{margin:0 0 12px;font-size:14px;color:var(--aui-color-text-primary)}.debug-panel .debug-item{margin-bottom:16px}.debug-panel .debug-item strong{color:var(--aui-color-text-primary);display:block;margin-bottom:4px}.debug-panel .debug-item ul{margin:0;padding-left:16px}.debug-panel .debug-item ul li{margin-bottom:2px;color:var(--aui-color-text-secondary)}.debug-panel .debug-actions{border-top:1px solid var(--aui-color-border-default);padding-top:12px;text-align:right}@media (width <= 1200px){.yaml-editor-container.with-sidebar .yaml-sidebar-section{width:350px}}@media (width <= 992px){.yaml-editor-container.with-sidebar{flex-direction:column}.yaml-editor-container.with-sidebar .yaml-editor-section{flex:1;min-height:50%}.yaml-editor-container.with-sidebar .yaml-sidebar-section{width:100%;height:50%;border-top:1px solid var(--aui-color-border, #e0e0e0);border-left:none}}\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: "ngmodule", type: ButtonModule }, { 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: "component", type: ResourceYamlSidebarComponent, selector: "acl-resource-yaml-sidebar", inputs: ["resource", "schema", "schemaEnable", "exampleEnable", "extraExamples"], outputs: ["close", "tryYaml"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i1.IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1.TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13589
+ }
13590
+ __decorate([
13591
+ ObservableInput(),
13592
+ __metadata("design:type", Observable)
13593
+ ], ResourceYamlEditorComponent.prototype, "resource$", void 0);
13594
+ __decorate([
13595
+ ObservableInput(),
13596
+ __metadata("design:type", Observable)
13597
+ ], ResourceYamlEditorComponent.prototype, "schema$", void 0);
13598
+ __decorate([
13599
+ ObservableInput(),
13600
+ __metadata("design:type", Observable)
13601
+ ], ResourceYamlEditorComponent.prototype, "clusterName$", void 0);
13602
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceYamlEditorComponent, decorators: [{
13603
+ type: Component,
13604
+ args: [{ selector: 'acl-resource-yaml-editor', preserveWhitespaces: false, standalone: true, imports: [
13605
+ CARD_MODULE,
13606
+ FormsModule,
13607
+ CHECKBOX_MODULE,
13608
+ ButtonModule,
13609
+ CodeEditorComponent,
13610
+ AsyncPipe,
13611
+ NgTemplateOutlet,
13612
+ ResourceYamlSidebarComponent,
13613
+ IconModule,
13614
+ TooltipModule,
13615
+ TranslatePipe,
13616
+ ], providers: [
13617
+ {
13618
+ provide: NG_VALUE_ACCESSOR,
13619
+ useExisting: forwardRef(() => ResourceYamlEditorComponent),
13620
+ multi: true,
13621
+ },
13622
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (hasWrapper) {\n <aui-card>\n <ng-container *ngTemplateOutlet=\"content\" />\n </aui-card>\n} @else {\n <div\n class=\"yaml-editor-container\"\n [class.with-sidebar]=\"showSidebar$$ | async\"\n >\n <div class=\"yaml-editor-section\">\n <aui-code-editor\n #codeEditor\n name=\"yaml\"\n [originalValue]=\"originalValue\"\n [(ngModel)]=\"value\"\n [options]=\"options\"\n [actionsConfig]=\"actionsConfig\"\n [modelUri]=\"modelUri\"\n >\n <ng-container auiCodeEditorToolbarRightSide>\n <!-- Schema \u6309\u94AE\uFF1A\u5F53\u542F\u7528\u4FA7\u8FB9\u680F\u65F6\u663E\u793A -->\n @if (sidebarEnable && !!(resource$ | async)) {\n <button\n [hidden]=\"!!codeEditor.fullscreenDialog\"\n class=\"aui-code-editor-toolbar__control-button\"\n type=\"button\"\n [disabled]=\"!(finalSchema$ | async) && !exampleEnable\"\n (click)=\"toggleSidebar()\"\n [auiTooltip]=\"\n ((showSidebar$$ | async) ? 'hide_sidebar' : 'view_sidebar')\n | translate\n \"\n >\n <aui-icon\n [icon]=\"\n (showSidebar$$ | async)\n ? 'prod:expand_sidebar'\n : 'prod:collapse_sidebar'\n \"\n ></aui-icon>\n </button>\n }\n </ng-container>\n </aui-code-editor>\n </div>\n @if ((showSidebar$$ | async) && (resource$ | async)) {\n <div class=\"yaml-sidebar-section\">\n <acl-resource-yaml-sidebar\n [resource]=\"getCurrentResource()\"\n [schema]=\"finalSchema$ | async\"\n [schemaEnable]=\"schemaEnable\"\n [exampleEnable]=\"exampleEnable\"\n [extraExamples]=\"extraExamples\"\n (close)=\"toggleSidebar()\"\n (tryYaml)=\"onTryYaml($event)\"\n ></acl-resource-yaml-sidebar>\n </div>\n }\n </div>\n}\n<ng-template #content>\n <div\n class=\"yaml-editor-container\"\n [class.with-sidebar]=\"showSidebar$$ | async\"\n >\n <div class=\"yaml-editor-section\">\n <aui-code-editor\n #codeEditor\n name=\"yaml\"\n [originalValue]=\"originalValue\"\n [(ngModel)]=\"value\"\n [options]=\"options\"\n [actionsConfig]=\"actionsConfig\"\n [modelUri]=\"modelUri\"\n >\n <ng-container auiCodeEditorToolbarRightSide>\n <!-- Schema \u6309\u94AE\uFF1A\u5F53\u542F\u7528\u4FA7\u8FB9\u680F\u65F6\u663E\u793A -->\n @if (sidebarEnable && !!(resource$ | async)) {\n <button\n [hidden]=\"!!codeEditor.fullscreenDialog\"\n class=\"aui-code-editor-toolbar__control-button\"\n type=\"button\"\n [disabled]=\"!(finalSchema$ | async) && !exampleEnable\"\n (click)=\"toggleSidebar()\"\n [auiTooltip]=\"\n ((showSidebar$$ | async) ? 'hide_sidebar' : 'view_sidebar')\n | translate\n \"\n >\n <aui-icon\n [icon]=\"\n (showSidebar$$ | async)\n ? 'prod:expand_sidebar'\n : 'prod:collapse_sidebar'\n \"\n ></aui-icon>\n </button>\n }\n </ng-container>\n </aui-code-editor>\n </div>\n @if ((showSidebar$$ | async) && (resource$ | async)) {\n <div class=\"yaml-sidebar-section\">\n <acl-resource-yaml-sidebar\n [resource]=\"getCurrentResource()\"\n [schema]=\"finalSchema$ | async\"\n [schemaEnable]=\"schemaEnable\"\n [exampleEnable]=\"exampleEnable\"\n [extraExamples]=\"extraExamples\"\n (close)=\"toggleSidebar()\"\n (tryYaml)=\"onTryYaml($event)\"\n ></acl-resource-yaml-sidebar>\n </div>\n }\n </div>\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%}.yaml-editor-container{display:flex;height:100%}.yaml-editor-container.with-sidebar .yaml-editor-section{flex:2;min-width:0}.yaml-editor-container.with-sidebar .yaml-sidebar-section{flex:1 0 0%}.yaml-editor-container:not(.with-sidebar) .yaml-editor-section{flex:1}.yaml-editor-section{display:flex;flex-direction:column;height:100%}.yaml-editor-section aui-code-editor{flex:1;height:100%}.yaml-sidebar-section{display:flex;flex-direction:column;height:100%}.yaml-sidebar-section acl-resource-yaml-sidebar{flex:1;height:100%}.yaml-debug-section{position:absolute;top:0;right:0;width:350px;height:100%;background:var(--aui-color-bg-container);border-left:1px solid var(--aui-color-border-default);z-index:1000;overflow-y:auto}.debug-panel{padding:16px;font-size:12px}.debug-panel h4{margin:0 0 12px;font-size:14px;color:var(--aui-color-text-primary)}.debug-panel .debug-item{margin-bottom:16px}.debug-panel .debug-item strong{color:var(--aui-color-text-primary);display:block;margin-bottom:4px}.debug-panel .debug-item ul{margin:0;padding-left:16px}.debug-panel .debug-item ul li{margin-bottom:2px;color:var(--aui-color-text-secondary)}.debug-panel .debug-actions{border-top:1px solid var(--aui-color-border-default);padding-top:12px;text-align:right}@media (width <= 1200px){.yaml-editor-container.with-sidebar .yaml-sidebar-section{width:350px}}@media (width <= 992px){.yaml-editor-container.with-sidebar{flex-direction:column}.yaml-editor-container.with-sidebar .yaml-editor-section{flex:1;min-height:50%}.yaml-editor-container.with-sidebar .yaml-sidebar-section{width:100%;height:50%;border-top:1px solid var(--aui-color-border, #e0e0e0);border-left:none}}\n"] }]
13623
+ }], ctorParameters: () => [], propDecorators: { codeEditorRef: [{
13624
+ type: ViewChild,
13625
+ args: ['codeEditor', { static: false }]
13626
+ }], hasWrapper: [{
13627
+ type: Input
13628
+ }], showDebugInfo: [{
13629
+ type: Input
13630
+ }], sidebarEnable: [{
13631
+ type: Input
13632
+ }], schema: [{
13633
+ type: Input
13634
+ }], schemaEnable: [{
13635
+ type: Input
13636
+ }], exampleEnable: [{
13637
+ type: Input
13638
+ }], resource: [{
13639
+ type: Input
13640
+ }], autoFoldManagedFields: [{
13641
+ type: Input
13642
+ }], originalValue: [{
13643
+ type: Input
13644
+ }], options: [{
13645
+ type: Input
13646
+ }], actionsConfig: [{
13647
+ type: Input
13648
+ }], tryYaml: [{
13649
+ type: Output
13650
+ }], resource$: [], schema$: [], autoFillNamespace: [{
13651
+ type: Input
13652
+ }], extraExamples: [{
13653
+ type: Input
13654
+ }], clusterName: [{
13655
+ type: Input
13656
+ }], clusterName$: [], namespace: [{
13657
+ type: Input
13658
+ }] } });
13659
+
13660
+ /**
12305
13661
  * [[include:code/README.md]]
12306
13662
  * @module code
12307
13663
  * @preferred
@@ -12652,9 +14008,773 @@ const ASYNC_DATA_MODULE = [
12652
14008
  ErrorStateComponent,
12653
14009
  ];
12654
14010
 
14011
+ /**
14012
+ * @packageDocumentation
14013
+ * @module notification
14014
+ */
14015
+ const ZH_ERRORS = {
14016
+ Unknown: '未知错误',
14017
+ Unauthorized: '授权不足',
14018
+ Forbidden: '资源不可用',
14019
+ NotFound: '找不到资源',
14020
+ AlreadyExists: '资源已存在',
14021
+ Conflict: '资源版本冲突,请重新获取资源',
14022
+ Gone: '资源位置已变更',
14023
+ Invalid: '数据错误',
14024
+ ServerTimeout: '响应超时',
14025
+ Timeout: '请求超时',
14026
+ TooManyRequests: '请求太多,超过服务能力',
14027
+ BadRequest: '无效的请求',
14028
+ MethodNotAllowed: '请求的操作不被允许',
14029
+ NotAcceptable: '接收的数据类型不被支持',
14030
+ RequestEntityTooLarge: '请求实体太大',
14031
+ UnsupportedMediaType: '发送的数据类型不被支持',
14032
+ InternalError: '内部错误',
14033
+ Expired: '请求内容已过期',
14034
+ ServiceUnavailable: '当前请求的服务不可用,可稍后重试',
14035
+ ProjectNamespaceConflict: '平台级命名空间已存在,请处理',
14036
+ };
14037
+ const DEFAULT_ZH_ERROR = '网络错误';
14038
+
14039
+ /**
14040
+ * @packageDocumentation
14041
+ * @module notification
14042
+ */
14043
+ class FeedbackNotificationComponent {
14044
+ constructor() {
14045
+ this.onPrimary = new EventEmitter();
14046
+ this.onSecondary = new EventEmitter();
14047
+ }
14048
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: FeedbackNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14049
+ 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 }); }
14050
+ }
14051
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: FeedbackNotificationComponent, decorators: [{
14052
+ type: Component,
14053
+ 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"] }]
14054
+ }], propDecorators: { primary: [{
14055
+ type: Input
14056
+ }], secondary: [{
14057
+ type: Input
14058
+ }], content: [{
14059
+ type: Input
14060
+ }], pre: [{
14061
+ type: Input
14062
+ }], onPrimary: [{
14063
+ type: Output
14064
+ }], onSecondary: [{
14065
+ type: Output
14066
+ }] } });
14067
+
14068
+ function isK8sErrorStatus(e) {
14069
+ return e?.metadata && e.apiVersion && e.kind === 'Status' && e.status;
14070
+ }
14071
+
14072
+ /**
14073
+ * @packageDocumentation
14074
+ * @module notification
14075
+ */
14076
+ class NotificationUtilService {
14077
+ constructor() {
14078
+ this.injector = inject(Injector);
14079
+ this.dialog = inject(DialogService);
14080
+ this.time = inject(TimeService);
14081
+ this.notification = inject(NotificationService);
14082
+ }
14083
+ viewDetail(json, title, notificationId) {
14084
+ this.dialog.open(CodeDisplayDialogComponent, {
14085
+ data: {
14086
+ code: this.normalizeJson(json),
14087
+ language: 'json',
14088
+ title: title || 'view_detail',
14089
+ ellipsis: true,
14090
+ },
14091
+ size: DialogSize.Big,
14092
+ });
14093
+ if (notificationId) {
14094
+ this.notification.remove(notificationId);
14095
+ }
14096
+ }
14097
+ createFeedback(config, { content, onPrimary, onSecondary, pre, primary, secondary, summary, } = {}) {
14098
+ const { instance } = this.notification.create({
14099
+ type: MessageType.Error,
14100
+ ...config,
14101
+ content: null,
14102
+ contentRef: FeedbackNotificationComponent,
14103
+ });
14104
+ const feedback = instance.childComponentInstance;
14105
+ if (primary === true) {
14106
+ primary = 'view_detail';
14107
+ }
14108
+ else if (secondary === true) {
14109
+ secondary = 'view_detail';
14110
+ }
14111
+ content = this.normalizeJson(content || config.content);
14112
+ const viewDetail = this.viewDetail.bind(this, content, config.title, instance.uniqueId);
14113
+ if (primary && !onPrimary) {
14114
+ onPrimary = viewDetail;
14115
+ }
14116
+ if (onPrimary) {
14117
+ feedback.onPrimary.pipe(take(1)).subscribe(onPrimary);
14118
+ }
14119
+ else if (secondary && !onSecondary) {
14120
+ onSecondary = viewDetail;
14121
+ }
14122
+ if (onSecondary) {
14123
+ feedback.onSecondary.pipe(take(1)).subscribe(onSecondary);
14124
+ }
14125
+ Object.assign(feedback, {
14126
+ content: this.normalizeJson(summary),
14127
+ pre,
14128
+ primary,
14129
+ secondary,
14130
+ });
14131
+ }
14132
+ normalizeJson(json) {
14133
+ return typeof json === 'string'
14134
+ ? json
14135
+ : json && JSON.stringify(json, null, 2);
14136
+ }
14137
+ async notify(reqOrStatus, res) {
14138
+ // we stored original req in `err.__req__`
14139
+ const req = ('__req__' in reqOrStatus ? get(reqOrStatus, '__req__') : reqOrStatus);
14140
+ if (isK8sErrorStatus(reqOrStatus)) {
14141
+ res = reqOrStatus?.['__origin__'];
14142
+ }
14143
+ const duration = Math.round(numberAttribute(req.headers.get(NOTIFY_DURATION_HEADER$1), NOTIFICATION_DEFAULT_CONFIG.duration));
14144
+ let reason;
14145
+ let resError = res.error;
14146
+ if (resError instanceof Blob && resError.type === 'application/json') {
14147
+ try {
14148
+ resError = JSON.parse(await resError.text());
14149
+ }
14150
+ catch { }
14151
+ }
14152
+ if (isK8sErrorStatus(resError)) {
14153
+ reason = resError.reason;
14154
+ reason =
14155
+ this.injector.get(TranslateService).locale === 'zh'
14156
+ ? ZH_ERRORS[reason] || DEFAULT_ZH_ERROR
14157
+ : reason;
14158
+ }
14159
+ this.createFeedback({
14160
+ title: reason || this.getResErrorMessage(res),
14161
+ duration,
14162
+ }, {
14163
+ content: {
14164
+ apiVersion: 'v1',
14165
+ RequestURI: req.urlWithParams,
14166
+ Method: req.method,
14167
+ RequestObject: {
14168
+ Time: this.time.format(req.requestAt),
14169
+ Header: this.getAllHeaders(req.headers),
14170
+ Body: req.body,
14171
+ },
14172
+ ResponseObject: {
14173
+ Time: this.time.format(),
14174
+ RelativeTime: this.time.distance(req.requestAt),
14175
+ StatusCode: res.status,
14176
+ Header: this.getAllHeaders(res.headers),
14177
+ Body: resError,
14178
+ },
14179
+ },
14180
+ secondary: true,
14181
+ });
14182
+ }
14183
+ getResErrorMessage(res) {
14184
+ return typeof res.error === 'string'
14185
+ ? res.error
14186
+ : (res.statusText === 'OK' && res.error.message) ||
14187
+ // compatible with legacy ACE API
14188
+ get(res.error, 'errors[0].message') ||
14189
+ res.statusText;
14190
+ }
14191
+ getAllHeaders(headers) {
14192
+ return headers
14193
+ .keys()
14194
+ .reduce((acc, key) => {
14195
+ let values = headers.getAll(key);
14196
+ if (Array.isArray(values) && values.length === 1) {
14197
+ values = values[0];
14198
+ }
14199
+ acc[key] = values;
14200
+ return acc;
14201
+ }, {});
14202
+ }
14203
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NotificationUtilService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14204
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NotificationUtilService, providedIn: 'root' }); }
14205
+ }
14206
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NotificationUtilService, decorators: [{
14207
+ type: Injectable,
14208
+ args: [{
14209
+ providedIn: 'root',
14210
+ }]
14211
+ }] });
14212
+
14213
+ /**
14214
+ * @packageDocumentation
14215
+ * @module notification
14216
+ */
14217
+ const WRITABLE_METHODS = ['delete', 'patch', 'post', 'put'];
14218
+ class ResourceErrorInterceptor {
14219
+ constructor() {
14220
+ this.notificationUtil = inject(NotificationUtilService);
14221
+ }
14222
+ intercept(req, next) {
14223
+ // Maybe used later in custom `catchError`
14224
+ req.requestAt = Date.now();
14225
+ let notifyOnError = this.notifyOnError(req);
14226
+ if (notifyOnError || req.headers.has(NOTIFY_ON_ERROR_HEADER)) {
14227
+ const notifyOnErrorHeader = req.headers.get(NOTIFY_ON_ERROR_HEADER);
14228
+ req = req.clone({
14229
+ headers: req.headers.delete(NOTIFY_ON_ERROR_HEADER),
14230
+ });
14231
+ const skipNotifyOnError = notifyOnErrorHeader != null &&
14232
+ [EMPTY$2, FALSE$1].includes(notifyOnErrorHeader);
14233
+ if (skipNotifyOnError) {
14234
+ notifyOnError = false;
14235
+ }
14236
+ else {
14237
+ if (!notifyOnError) {
14238
+ notifyOnError = true;
14239
+ }
14240
+ }
14241
+ }
14242
+ return next.handle(req).pipe(catchError((err) => {
14243
+ console.error(err);
14244
+ if (notifyOnError) {
14245
+ this.notificationUtil.notify(req, err);
14246
+ }
14247
+ return throwError(() => isK8sErrorStatus(err.error)
14248
+ ? {
14249
+ ...err.error,
14250
+ __origin__: err,
14251
+ __req__: req,
14252
+ }
14253
+ : {
14254
+ ...err,
14255
+ __req__: req,
14256
+ });
14257
+ }));
14258
+ }
14259
+ notifyOnError(req) {
14260
+ return (WRITABLE_METHODS.includes(req.method.toLowerCase()) &&
14261
+ !req.url.endsWith('/v1/selfsubjectaccessreviews'));
14262
+ }
14263
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceErrorInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14264
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceErrorInterceptor }); }
14265
+ }
14266
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceErrorInterceptor, decorators: [{
14267
+ type: Injectable
14268
+ }] });
14269
+
14270
+ /**
14271
+ * [[include:notification/README.md]]
14272
+ * @module notification
14273
+ * @preferred
14274
+ */
14275
+ /** imports */
14276
+
14277
+ class GraphActionsComponent {
14278
+ constructor() {
14279
+ this.position = 'right top';
14280
+ }
14281
+ get positionClass() {
14282
+ return this.position
14283
+ .split(' ')
14284
+ .reduce((acc, v) => (v ? { ...acc, [v]: true } : acc), {});
14285
+ }
14286
+ handleMouseDown(e) {
14287
+ e.stopPropagation();
14288
+ }
14289
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14290
+ 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
14291
+ class="acl-graph-canvas__action-wrapper"
14292
+ [ngClass]="positionClass"
14293
+ >
14294
+ <ng-content></ng-content>
14295
+ </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 }); }
14296
+ }
14297
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphActionsComponent, decorators: [{
14298
+ type: Component,
14299
+ args: [{
14300
+ selector: 'acl-graph-actions',
14301
+ template: `<div
14302
+ class="acl-graph-canvas__action-wrapper"
14303
+ [ngClass]="positionClass"
14304
+ >
14305
+ <ng-content></ng-content>
14306
+ </div>`,
14307
+ changeDetection: ChangeDetectionStrategy.OnPush,
14308
+ encapsulation: ViewEncapsulation.None,
14309
+ standalone: true,
14310
+ imports: [CommonModule],
14311
+ }]
14312
+ }], propDecorators: { position: [{
14313
+ type: Input
14314
+ }], handleMouseDown: [{
14315
+ type: HostListener,
14316
+ args: ['mousedown', ['$event']]
14317
+ }] } });
14318
+
14319
+ class GraphStoreService {
14320
+ constructor() {
14321
+ this.nodeStore = {};
14322
+ this.scale = 1;
14323
+ this.nodeChanged$$ = new ReplaySubject(1);
14324
+ this.nodeChanged$ = this.nodeChanged$$
14325
+ .asObservable()
14326
+ .pipe(debounceTime(0));
14327
+ this.resizeObserver = new ResizeObserver(throttle(() => this.nodeChanged$$.next(), 100));
14328
+ }
14329
+ registerSurfaceNode(surface) {
14330
+ this.surfaceNode = surface;
14331
+ }
14332
+ registerNode(id, node) {
14333
+ if (id) {
14334
+ this.resizeObserver.observe(node.el.nativeElement);
14335
+ }
14336
+ this.nodeStore[id] = node;
14337
+ this.nodeChanged$$.next();
14338
+ }
14339
+ unregisterNode(id) {
14340
+ if (id && this.getNode(id)) {
14341
+ this.resizeObserver.unobserve(this.nodeStore[id].el.nativeElement);
14342
+ }
14343
+ this.nodeStore[id] = null;
14344
+ this.nodeChanged$$.next();
14345
+ }
14346
+ getNode(id) {
14347
+ return this.nodeStore[id];
14348
+ }
14349
+ getSurfaceNode() {
14350
+ return this.surfaceNode;
14351
+ }
14352
+ nodeChanged() {
14353
+ return this.nodeChanged$;
14354
+ }
14355
+ getScale() {
14356
+ return this.scale;
14357
+ }
14358
+ setScale(scale) {
14359
+ return (this.scale = scale);
14360
+ }
14361
+ disconnectObserver() {
14362
+ this.resizeObserver.disconnect();
14363
+ }
14364
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphStoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14365
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphStoreService }); }
14366
+ }
14367
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphStoreService, decorators: [{
14368
+ type: Injectable
14369
+ }] });
14370
+
14371
+ function getRect(el) {
14372
+ const r = el.getBoundingClientRect();
14373
+ return {
14374
+ top: r.top,
14375
+ bottom: r.bottom,
14376
+ left: r.left,
14377
+ right: r.right,
14378
+ width: r.width,
14379
+ height: r.height,
14380
+ offsetTop: el.offsetTop,
14381
+ offsetLeft: el.offsetLeft,
14382
+ offsetWidth: el.offsetWidth,
14383
+ offsetHeight: el.offsetHeight,
14384
+ };
14385
+ }
14386
+
14387
+ const isMacSystem = isMac();
14388
+ class GraphCanvasComponent {
14389
+ constructor() {
14390
+ this.minScale = 0.25;
14391
+ this.maxScale = 2;
14392
+ this.originX = 'center';
14393
+ this.originY = 'top';
14394
+ this.boundary = 60;
14395
+ this.loading = false;
14396
+ this.loadFailed = false;
14397
+ this.retry = new EventEmitter();
14398
+ this.getCanvasRect = () => getRect(this.canvasRef.nativeElement);
14399
+ this.graphStore = inject(GraphStoreService);
14400
+ this.getSurfaceRect = () => getRect(this.surfaceRef.nativeElement);
14401
+ }
14402
+ get dragging() {
14403
+ return !!this.dragStartPoint;
14404
+ }
14405
+ get canvasStyle() {
14406
+ return {
14407
+ padding: this.boundary + 'px',
14408
+ justifyContent: xSelector(this.transformState.origin[0], [
14409
+ 'flex-start',
14410
+ 'center',
14411
+ 'flex-end',
14412
+ ]),
14413
+ alignItems: ySelector(this.transformState.origin[1], [
14414
+ 'flex-start',
14415
+ 'center',
14416
+ 'flex-end',
14417
+ ]),
14418
+ cursor: this.dragging ? 'grabbing' : 'grab',
14419
+ };
14420
+ }
14421
+ get surfaceStyle() {
14422
+ return {
14423
+ transformOrigin: this.transformState.origin.join(' '),
14424
+ transform: `translate(${this.transformState.translate[0]}px, ${this.transformState.translate[1]}px) scale(${this.transformState.scale})`,
14425
+ };
14426
+ }
14427
+ ngOnInit() {
14428
+ this.transformState = {
14429
+ origin: [this.originX, this.originY],
14430
+ translate: [0, 0],
14431
+ scale: this.graphStore.getScale(),
14432
+ };
14433
+ }
14434
+ ngAfterViewInit() {
14435
+ this.graphStore.registerSurfaceNode({ getRect: this.getSurfaceRect });
14436
+ }
14437
+ ngOnDestroy() {
14438
+ this.graphStore.disconnectObserver();
14439
+ }
14440
+ handleWheelEvent(e) {
14441
+ e.preventDefault();
14442
+ e.stopPropagation();
14443
+ const { deltaX, deltaY, ctrlKey, shiftKey, clientX, clientY } = e;
14444
+ if (ctrlKey) {
14445
+ this.zoomByWheel(-deltaY, [clientX, clientY]);
14446
+ }
14447
+ else if (shiftKey && !isMacSystem) {
14448
+ this.move(-deltaY, -deltaX);
14449
+ }
14450
+ else {
14451
+ this.move(-deltaX, -deltaY);
14452
+ }
14453
+ }
14454
+ handleMouseDown(e) {
14455
+ this.dragStartPoint = [e.clientX, e.clientY];
14456
+ }
14457
+ handleMouseMove(e) {
14458
+ if (!this.dragStartPoint) {
14459
+ return;
14460
+ }
14461
+ this.move(e.clientX - this.dragStartPoint[0], e.clientY - this.dragStartPoint[1]);
14462
+ this.dragStartPoint = [e.clientX, e.clientY];
14463
+ }
14464
+ handleMouseUp() {
14465
+ this.dragStartPoint = null;
14466
+ }
14467
+ zoomByWheel(v, pointerPosition) {
14468
+ this.dispatchTransform((transform, rects) => {
14469
+ const { scale, translate } = transform;
14470
+ const nextScale = scaleLimit(scale + v / 500);
14471
+ const origin = originCoordinatePoint(transform, rects);
14472
+ const pointer = coordinate(rects.canvasRect, pointerPosition);
14473
+ const deltaX = ((pointer[0] - origin[0]) / scale) * nextScale -
14474
+ (pointer[0] - origin[0]);
14475
+ const deltaY = ((pointer[1] - origin[1]) / scale) * nextScale -
14476
+ (pointer[1] - origin[1]);
14477
+ return {
14478
+ translate: [translate[0] - deltaX, translate[1] - deltaY],
14479
+ scale: nextScale,
14480
+ };
14481
+ });
14482
+ }
14483
+ zoomByDefaultStep(direction) {
14484
+ this.dispatchTransform(({ scale }) => ({
14485
+ scale: scaleLimit(scale + (direction === 'in' ? 0.25 : -0.25)),
14486
+ }));
14487
+ }
14488
+ zoomOriginal() {
14489
+ this.dispatchTransform(() => ({
14490
+ origin: [this.originX, this.originY],
14491
+ translate: [0, 0],
14492
+ scale: 1,
14493
+ }));
14494
+ }
14495
+ zoomOverview() {
14496
+ this.dispatchTransform((_, { canvasRect, surfaceRect }) => {
14497
+ const scaleX = (canvasRect.offsetWidth - this.boundary * 2) / surfaceRect.offsetWidth;
14498
+ const scaleY = (canvasRect.offsetHeight - this.boundary * 2) /
14499
+ surfaceRect.offsetHeight;
14500
+ return {
14501
+ origin: ['center', 'center'],
14502
+ translate: [0, 0],
14503
+ scale: scaleLimit(min([scaleX, scaleY, 1])),
14504
+ };
14505
+ });
14506
+ }
14507
+ move(x, y) {
14508
+ this.dispatchTransform(({ translate }) => ({
14509
+ translate: [translate[0] + x, translate[1] + y],
14510
+ }));
14511
+ }
14512
+ dispatchTransform(action) {
14513
+ const rects = {
14514
+ canvasRect: this.getCanvasRect(),
14515
+ surfaceRect: this.getSurfaceRect(),
14516
+ };
14517
+ const nextTransform = mergeRight(this.transformState, action(this.transformState, rects));
14518
+ this.transformState = applyCanvasBoundaries({
14519
+ rects,
14520
+ transform: nextTransform,
14521
+ boundary: this.boundary,
14522
+ });
14523
+ this.graphStore.setScale(this.transformState.scale);
14524
+ }
14525
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphCanvasComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14526
+ 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: ["::ng-deep .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}::ng-deep .acl-graph-canvas:after{content:\"\";display:block;position:absolute;inset:0;border-radius:inherit;overflow:hidden;pointer-events:none}:root ::ng-deep .acl-graph-canvas:after{box-shadow:inset 0 0 4px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] ::ng-deep .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] ::ng-deep .acl-graph-canvas:after{box-shadow:inset 0 0 4px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] ::ng-deep .acl-graph-canvas:after{box-shadow:inset 0 0 4px rgba(var(--aui-color-origin-shadow),.75)}::ng-deep .acl-graph-canvas__surface{position:relative}::ng-deep .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}::ng-deep .acl-graph-canvas__links .acl-graph-link__line{fill:none;stroke:currentcolor;stroke-width:2px}::ng-deep .acl-graph-canvas__links .acl-graph-link__dot,::ng-deep .acl-graph-canvas__links .acl-graph-link__arrow{fill:currentcolor}::ng-deep .acl-graph-canvas__loading{padding:8px 16px;border-radius:var(--aui-border-radius-m)}::ng-deep .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 ::ng-deep .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.05)}html[aui-theme-mode=light] ::ng-deep .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.05)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] ::ng-deep .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.1)}}html[aui-theme-mode=dark] ::ng-deep .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.1)}::ng-deep .acl-graph-canvas__loading aui-icon{margin-right:8px;color:rgb(var(--aui-color-primary));font-size:var(--aui-icon-size-m)}::ng-deep .acl-graph-canvas__loading-mask{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;cursor:default}::ng-deep .acl-graph-canvas__action-wrapper{position:absolute;display:flex}::ng-deep .acl-graph-canvas__action-wrapper.top{top:var(--aui-spacing-m)}::ng-deep .acl-graph-canvas__action-wrapper.right{right:var(--aui-spacing-m)}::ng-deep .acl-graph-canvas__action-wrapper.left{left:var(--aui-spacing-m)}::ng-deep .acl-graph-canvas__action-wrapper.bottom{bottom:var(--aui-spacing-m)}::ng-deep .acl-graph-canvas acl-graph-actions .acl-graph-canvas__action-wrapper.bottom.right{right:168px}::ng-deep .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}::ng-deep .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 ::ng-deep .acl-graph-canvas__action{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] ::ng-deep .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] ::ng-deep .acl-graph-canvas__action{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] ::ng-deep .acl-graph-canvas__action{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}::ng-deep .acl-graph-canvas__action.square{width:24px}::ng-deep .acl-graph-canvas__action:hover,::ng-deep .acl-graph-canvas__action.active{color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6))}::ng-deep .acl-graph-canvas__action.disabled{color:rgb(var(--aui-color-disabled-text));background-color:rgb(var(--aui-color-n-10))}::ng-deep .acl-graph-canvas__action+::ng-deep .acl-graph-canvas__action{margin-left:4px}::ng-deep .acl-graph-canvas__scale-controller{display:flex;align-items:center;justify-content:center;margin:0 4px}::ng-deep .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))}::ng-deep .acl-graph-canvas__scale-controller{background-color:rgb(var(--aui-color-n-10));border-radius:var(--aui-border-radius-m)}:root ::ng-deep .acl-graph-canvas__scale-controller{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] ::ng-deep .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] ::ng-deep .acl-graph-canvas__scale-controller{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] ::ng-deep .acl-graph-canvas__scale-controller{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}::ng-deep .acl-graph-canvas__scale-controller{-webkit-user-select:none;user-select:none}::ng-deep .acl-graph-canvas__scale-controller aui-icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px;cursor:pointer}::ng-deep .acl-graph-canvas__scale-controller aui-icon:hover{color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6))}::ng-deep .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}::ng-deep .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 }); }
14527
+ }
14528
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphCanvasComponent, decorators: [{
14529
+ type: Component,
14530
+ 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: ["::ng-deep .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}::ng-deep .acl-graph-canvas:after{content:\"\";display:block;position:absolute;inset:0;border-radius:inherit;overflow:hidden;pointer-events:none}:root ::ng-deep .acl-graph-canvas:after{box-shadow:inset 0 0 4px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] ::ng-deep .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] ::ng-deep .acl-graph-canvas:after{box-shadow:inset 0 0 4px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] ::ng-deep .acl-graph-canvas:after{box-shadow:inset 0 0 4px rgba(var(--aui-color-origin-shadow),.75)}::ng-deep .acl-graph-canvas__surface{position:relative}::ng-deep .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}::ng-deep .acl-graph-canvas__links .acl-graph-link__line{fill:none;stroke:currentcolor;stroke-width:2px}::ng-deep .acl-graph-canvas__links .acl-graph-link__dot,::ng-deep .acl-graph-canvas__links .acl-graph-link__arrow{fill:currentcolor}::ng-deep .acl-graph-canvas__loading{padding:8px 16px;border-radius:var(--aui-border-radius-m)}::ng-deep .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 ::ng-deep .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.05)}html[aui-theme-mode=light] ::ng-deep .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.05)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] ::ng-deep .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.1)}}html[aui-theme-mode=dark] ::ng-deep .acl-graph-canvas__loading{background-color:rgba(var(--aui-color-n-1),.1)}::ng-deep .acl-graph-canvas__loading aui-icon{margin-right:8px;color:rgb(var(--aui-color-primary));font-size:var(--aui-icon-size-m)}::ng-deep .acl-graph-canvas__loading-mask{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;cursor:default}::ng-deep .acl-graph-canvas__action-wrapper{position:absolute;display:flex}::ng-deep .acl-graph-canvas__action-wrapper.top{top:var(--aui-spacing-m)}::ng-deep .acl-graph-canvas__action-wrapper.right{right:var(--aui-spacing-m)}::ng-deep .acl-graph-canvas__action-wrapper.left{left:var(--aui-spacing-m)}::ng-deep .acl-graph-canvas__action-wrapper.bottom{bottom:var(--aui-spacing-m)}::ng-deep .acl-graph-canvas acl-graph-actions .acl-graph-canvas__action-wrapper.bottom.right{right:168px}::ng-deep .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}::ng-deep .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 ::ng-deep .acl-graph-canvas__action{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] ::ng-deep .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] ::ng-deep .acl-graph-canvas__action{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] ::ng-deep .acl-graph-canvas__action{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}::ng-deep .acl-graph-canvas__action.square{width:24px}::ng-deep .acl-graph-canvas__action:hover,::ng-deep .acl-graph-canvas__action.active{color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6))}::ng-deep .acl-graph-canvas__action.disabled{color:rgb(var(--aui-color-disabled-text));background-color:rgb(var(--aui-color-n-10))}::ng-deep .acl-graph-canvas__action+::ng-deep .acl-graph-canvas__action{margin-left:4px}::ng-deep .acl-graph-canvas__scale-controller{display:flex;align-items:center;justify-content:center;margin:0 4px}::ng-deep .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))}::ng-deep .acl-graph-canvas__scale-controller{background-color:rgb(var(--aui-color-n-10));border-radius:var(--aui-border-radius-m)}:root ::ng-deep .acl-graph-canvas__scale-controller{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.2)}html[aui-theme-mode=light] ::ng-deep .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] ::ng-deep .acl-graph-canvas__scale-controller{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}}html[aui-theme-mode=dark] ::ng-deep .acl-graph-canvas__scale-controller{box-shadow:0 2px 8px rgba(var(--aui-color-origin-shadow),.75)}::ng-deep .acl-graph-canvas__scale-controller{-webkit-user-select:none;user-select:none}::ng-deep .acl-graph-canvas__scale-controller aui-icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px;cursor:pointer}::ng-deep .acl-graph-canvas__scale-controller aui-icon:hover{color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6))}::ng-deep .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}::ng-deep .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"] }]
14531
+ }], propDecorators: { minScale: [{
14532
+ type: Input
14533
+ }], maxScale: [{
14534
+ type: Input
14535
+ }], originX: [{
14536
+ type: Input
14537
+ }], originY: [{
14538
+ type: Input
14539
+ }], boundary: [{
14540
+ type: Input
14541
+ }], loading: [{
14542
+ type: Input
14543
+ }], loadFailed: [{
14544
+ type: Input
14545
+ }], retry: [{
14546
+ type: Output
14547
+ }], canvasRef: [{
14548
+ type: ViewChild,
14549
+ args: ['canvas', { static: true }]
14550
+ }], surfaceRef: [{
14551
+ type: ViewChild,
14552
+ args: ['surface', { static: true }]
14553
+ }], handleMouseMove: [{
14554
+ type: HostListener,
14555
+ args: ['document:mousemove', ['$event']]
14556
+ }], handleMouseUp: [{
14557
+ type: HostListener,
14558
+ args: ['document:mouseup', []]
14559
+ }] } });
14560
+ function scaleLimit(scale) {
14561
+ return clamp(round(scale, 2), 0.25, 2);
14562
+ }
14563
+ function applyCanvasBoundaries({ transform, rects, boundary, }) {
14564
+ const { origin: [originX, originY], scale, translate, } = transform;
14565
+ const { surfaceRect: { offsetWidth: surfaceWidth, offsetHeight: surfaceHeight }, canvasRect: { offsetWidth: canvasWidth, offsetHeight: canvasHeight }, } = rects;
14566
+ const x = xSelector(originX, [
14567
+ boundary,
14568
+ canvasWidth / 2,
14569
+ canvasWidth - boundary,
14570
+ ]);
14571
+ const x1 = x +
14572
+ xSelector(originX, [surfaceWidth * scale, (surfaceWidth * scale) / 2, 0]);
14573
+ const x2 = canvasWidth -
14574
+ (x -
14575
+ xSelector(originX, [
14576
+ 0,
14577
+ (surfaceWidth * scale) / 2,
14578
+ surfaceWidth * scale,
14579
+ ]));
14580
+ const y = ySelector(originY, [
14581
+ boundary,
14582
+ canvasHeight / 2,
14583
+ canvasHeight - boundary,
14584
+ ]);
14585
+ const y1 = y +
14586
+ ySelector(originY, [surfaceHeight * scale, (surfaceHeight * scale) / 2, 0]);
14587
+ const y2 = canvasHeight -
14588
+ (y -
14589
+ ySelector(originY, [
14590
+ 0,
14591
+ (surfaceHeight * scale) / 2,
14592
+ surfaceHeight * scale,
14593
+ ]));
14594
+ return mergeRight(transform, {
14595
+ translate: [
14596
+ clamp(translate[0], boundary - x1, x2 - boundary),
14597
+ clamp(translate[1], boundary - y1, y2 - boundary),
14598
+ ],
14599
+ });
14600
+ }
14601
+ function originCoordinatePoint({ origin: [originX, originY] }, { surfaceRect, canvasRect }) {
14602
+ const [left, top] = coordinate(canvasRect, [
14603
+ surfaceRect.left,
14604
+ surfaceRect.top,
14605
+ ]);
14606
+ const x = xSelector(originX, [
14607
+ left,
14608
+ left + surfaceRect.width / 2,
14609
+ left + surfaceRect.width,
14610
+ ]);
14611
+ const y = ySelector(originY, [
14612
+ top,
14613
+ top + surfaceRect.height / 2,
14614
+ top + surfaceRect.height,
14615
+ ]);
14616
+ return [x, y];
14617
+ }
14618
+ function xSelector(x, [l, c, r]) {
14619
+ return x === 'left' ? l : x === 'center' ? c : r;
14620
+ }
14621
+ function ySelector(y, [t, c, b]) {
14622
+ return y === 'top' ? t : y === 'center' ? c : b;
14623
+ }
14624
+ function coordinate(canvas, [left, top]) {
14625
+ return [left - canvas.left, top - canvas.top];
14626
+ }
14627
+
14628
+ class GraphLinkComponent {
14629
+ get arrowTransform() {
14630
+ const [[x1, y1], [x2, y2]] = this.points;
14631
+ const deg = this.direction === 'v' && y1 < y2
14632
+ ? -90
14633
+ : this.direction === 'v'
14634
+ ? 90
14635
+ : this.direction === 'h' && x1 < x2
14636
+ ? 180
14637
+ : 0;
14638
+ return `translate(${x2}px, ${y2}px) rotate(${deg}deg)`;
14639
+ }
14640
+ constructor() {
14641
+ this.direction = 'v';
14642
+ this.radius = 12;
14643
+ this.arrow = true;
14644
+ this.path = ([[x1, y1], [x2, y2]]) => {
14645
+ const mX = x1 + (x2 - x1) / 2;
14646
+ const mY = y1 + (y2 - y1) / 2;
14647
+ const r = Math.min(Math.abs(x1 - x2) / 2, Math.abs(y1 - y2) / 2, this.radius);
14648
+ return this.direction === 'h'
14649
+ ? `M ${x1} ${y1}
14650
+ L ${addOrMinus(x1 > x2, mX, r)} ${y1}
14651
+ Q ${mX} ${y1} ${mX} ${addOrMinus(y1 < y2, y1, r)}
14652
+ L ${mX} ${addOrMinus(y1 > y2, y2, r)}
14653
+ Q ${mX} ${y2} ${addOrMinus(x1 < x2, mX, r)} ${y2}
14654
+ L ${this.arrow ? addOrMinus(x1 > x2, x2, 8) : x2} ${y2}`
14655
+ : `M ${x1} ${y1}
14656
+ L ${x1} ${addOrMinus(y1 > y2, mY, r)}
14657
+ Q ${x1} ${mY} ${addOrMinus(x1 < x2, x1, r)} ${mY}
14658
+ L ${addOrMinus(x1 > x2, x2, r)} ${mY}
14659
+ Q ${x2} ${mY} ${x2} ${addOrMinus(y1 < y2, mY, r)}
14660
+ L ${x2} ${this.arrow ? addOrMinus(y1 > y2, y2, 8) : y2}`;
14661
+ };
14662
+ this.parallelDirection = (a, b, al, bl) => a + al < b ? [a + al, b] : [a, b + bl];
14663
+ this.verticalDirection = (a, b, al, bl) => [
14664
+ a + al / 2,
14665
+ b + bl / 2,
14666
+ ];
14667
+ this.onDestroy$$ = new Subject();
14668
+ this.store = inject(GraphStoreService);
14669
+ this.cdr = inject(ChangeDetectorRef);
14670
+ this.store
14671
+ .nodeChanged()
14672
+ .pipe(takeUntil(this.onDestroy$$))
14673
+ .subscribe(() => {
14674
+ const currentPoints = this.points;
14675
+ const nextPoints = this.findPoints();
14676
+ if (isEqual(currentPoints, nextPoints)) {
14677
+ return;
14678
+ }
14679
+ this.points = nextPoints;
14680
+ this.cdr.markForCheck();
14681
+ });
14682
+ }
14683
+ ngOnDestroy() {
14684
+ this.onDestroy$$.next();
14685
+ }
14686
+ findPoints() {
14687
+ const r1 = this.store.getNode(this.from)?.getRect();
14688
+ const r2 = this.store.getNode(this.to)?.getRect();
14689
+ if (!r1 || !r2) {
14690
+ return;
14691
+ }
14692
+ const s = this.store.getSurfaceNode().getRect();
14693
+ const [x1, x2] = (this.direction === 'h' ? this.parallelDirection : this.verticalDirection)(r1.left - s.left, r2.left - s.left, r1.width, r2.width);
14694
+ const [y1, y2] = (this.direction === 'h' ? this.verticalDirection : this.parallelDirection)(r1.top - s.top, r2.top - s.top, r1.height, r2.height);
14695
+ return this.unScale([
14696
+ [x1, y1],
14697
+ [x2, y2],
14698
+ ]);
14699
+ }
14700
+ unScale(points) {
14701
+ return points.map(p => p.map(n => n / this.store.getScale()));
14702
+ }
14703
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14704
+ 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" }, 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 }); }
14705
+ }
14706
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphLinkComponent, decorators: [{
14707
+ type: Component,
14708
+ args: [{ selector: 'g[aclGraphLink]', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], 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" }]
14709
+ }], ctorParameters: () => [], propDecorators: { from: [{
14710
+ type: Input
14711
+ }], to: [{
14712
+ type: Input
14713
+ }], direction: [{
14714
+ type: Input
14715
+ }], radius: [{
14716
+ type: Input
14717
+ }], arrow: [{
14718
+ type: Input
14719
+ }], color: [{
14720
+ type: Input
14721
+ }], path: [{
14722
+ type: Input
14723
+ }], parallelDirection: [{
14724
+ type: Input
14725
+ }], verticalDirection: [{
14726
+ type: Input
14727
+ }] } });
14728
+ function addOrMinus(condition, v1, v2) {
14729
+ return (condition ? add : subtract)(v1, v2);
14730
+ }
14731
+
14732
+ class GraphLinksComponent {
14733
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphLinksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14734
+ 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 }); }
14735
+ }
14736
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphLinksComponent, decorators: [{
14737
+ type: Component,
14738
+ 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" }]
14739
+ }] });
14740
+
14741
+ class GraphNodeDirective {
14742
+ constructor() {
14743
+ this.hostRect = () => getRect(this.el.nativeElement);
14744
+ this.el = inject(ElementRef);
14745
+ this.store = inject(GraphStoreService);
14746
+ }
14747
+ ngOnInit() {
14748
+ this.store.registerNode(this.id, { getRect: this.hostRect, el: this.el });
14749
+ }
14750
+ ngOnDestroy() {
14751
+ this.store.unregisterNode(this.id);
14752
+ }
14753
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphNodeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
14754
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: GraphNodeDirective, isStandalone: true, selector: "[aclGraphNode]", inputs: { id: ["aclGraphNode", "id"] }, ngImport: i0 }); }
14755
+ }
14756
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: GraphNodeDirective, decorators: [{
14757
+ type: Directive,
14758
+ args: [{
14759
+ selector: '[aclGraphNode]',
14760
+ standalone: true,
14761
+ }]
14762
+ }], propDecorators: { id: [{
14763
+ type: Input,
14764
+ args: ['aclGraphNode']
14765
+ }] } });
14766
+
14767
+ const GRAPH_COMPONENTS = [
14768
+ GraphActionsComponent,
14769
+ GraphCanvasComponent,
14770
+ GraphLinksComponent,
14771
+ GraphLinkComponent,
14772
+ GraphNodeDirective,
14773
+ ];
14774
+
12655
14775
  /**
12656
14776
  * Generated bundle index. Do not edit.
12657
14777
  */
12658
14778
 
12659
- 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, 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, PodStatusColorMapper, PodStatusComponent, PodStatusEnum, PodStatusIconMapper, PreventClipboardDirective, PreventDirective, PreventHandler, ProductKey, REASON_MAP, RESOURCE_MAC_TYPES, RESOURCE_REQUIREMENT_KEYS, ReadonlyFieldDirective, Reason, RelativeTimeComponent, RequestPool, ResizeDirective, ResourceLabelComponent, ResourceMultiSelectComponent, ResourceYamlDisplayComponent, 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, TableUtilService, TagsLabelComponent, TaintEffect, 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, commonOptions, compareMinorVersion, compareVersion, copyValue, createActions, 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, logsActions, logsReadOptions, mapTrees, matchExpressionsToString, matchLabelsToString, maxParallelByHttpVersion, noShowRowError, normalizeParams, numToStr, parseDaemonSetStatus, parseDeploymentStatus, parseImageAddress, parseRID, parseStatefulSetStatus, parseToWorkloadStatus, parseUrlInText, parseValidImageName, parseValueAndUnit, parseVersion, parseWorkspace, prefixFilterRuleFactory, primaryColor, queryListParams, randomPassword, readonlyOptions, reduceTrees, removeDirtyFieldsBeforeUpdate, resourceUnits, rowBackgroundColorFn, safeAssign, scrollIntoView, setNode, setupErrorMapper, shortNum, sortByCreationTimestamp, stringToMatchLabels, stringifyRID, stringifyWorkspace, successColor, tableSort, tableSortAdvance, tagRenderDefault, textWriteOptions, toLowerFirstLetter, toNumber, toPercent, toPx, toUnitGi, toUnitI, toUnitMi, toUnitNum, toUnitNumM, trackByName, trackByUid, transferResource, updateActions, versionRegex, viewActions, warnColor, withLoadState, workspaceToPath, yamlFilterField, yamlReadOptions, yamlWriteOptions };
14779
+ 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 };
12660
14780
  //# sourceMappingURL=alauda-fe-dynamic-plugin-shared.mjs.map