@alauda-fe/dynamic-plugin-shared 0.0.3-alpha.1 → 0.0.4-alpha.10
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.
- package/fesm2022/alauda-fe-dynamic-plugin-shared.mjs +1690 -257
- package/fesm2022/alauda-fe-dynamic-plugin-shared.mjs.map +1 -1
- package/package.json +31 -25
- package/types/alauda-fe-dynamic-plugin-shared.d.ts +274 -85
- package/styles/ansi-color.scss +0 -131
- package/styles/lib.scss +0 -1
- package/styles/markdown-body.scss +0 -107
- package/styles/mixins.scss +0 -504
- package/styles/var.scss +0 -5
|
@@ -1,41 +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
|
|
4
|
-
import * as
|
|
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 } from '@alauda/ui';
|
|
3
|
+
import { last, cloneDeep, has, unset, get, isBoolean, sortBy, set, trim, isFunction, range, debounce, uniq, identity, first, isString, isEmpty, isObjectLike } from 'lodash-es';
|
|
4
|
+
import * as i3 from '@alauda-fe/dynamic-plugin-sdk';
|
|
5
|
+
import { parseBase64Type, isBlank, publishRef, TOKEN_BASE_DOMAIN, stringify as stringify$1, isEqual, TimeService, TranslateService, isZhLang, FALLBACK_LANGUAGE, TranslatePipe, ObservableInput, FeatureGateService, FieldNotAvailablePipe, ValueHook, LoadingMaskComponent, PurePipe, StandardTimePipe, RelativeTimePipe, skipError, CURR_ESCAPE_DEACTIVATE_GUARD, ESCAPE_DEACTIVATE_GUARD, parseAll, FIELD_NOT_AVAILABLE_PLACEHOLDER, noop, SafePipe, WatchEvent, K8sUtilService, NAMESPACE as NAMESPACE$1, isFieldNotAvailable, K8S_UTIL_PIPES_MODULE, ResourceSelectorPopupService, ProjectService, ConfigurableField, API_GATEWAY as API_GATEWAY$1, ClusterListComponent, K8sApiService, TRANSLATE_MODULE, KubernetesSchemaService } from '@alauda-fe/dynamic-plugin-sdk';
|
|
6
|
+
import { Observable, finalize, map, startWith, catchError, of, isObservable, switchMap, animationFrameScheduler, fromEvent, auditTime, Subject, takeUntil, distinctUntilChanged, combineLatest, filter, debounceTime, take, merge, pairwise, tap, BehaviorSubject, from, timer, ReplaySubject, delay, withLatestFrom, scan, takeWhile, concat, exhaustMap, EMPTY as EMPTY$1, interval, NEVER, switchScan, shareReplay, mapTo } from 'rxjs';
|
|
8
7
|
import { ActivatedRoute, Router, RouterLink } from '@angular/router';
|
|
9
8
|
import { dissocPath, converge, mergeAll, mergeDeepRight, path, assocPath, identity as identity$1, equals } 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,
|
|
12
|
+
import { inject, Directive, NgZone, Injectable, IterableDiffers, isDevMode, Pipe, ChangeDetectorRef, Input, ViewContainerRef, TemplateRef, ɵstringify as _stringify, ElementRef, Injector, HostBinding, ChangeDetectionStrategy, Component, EventEmitter, Output, HostListener, booleanAttribute, forwardRef, ContentChild, Renderer2, ViewEncapsulation, ViewChild, ApplicationRef, ViewChildren, ContentChildren, InjectionToken, input, NgModule, computed } from '@angular/core';
|
|
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
|
|
29
|
-
import { CdkScrollable } from '@angular/cdk/scrolling';
|
|
30
|
-
import
|
|
31
|
-
import { ScrollDispatcher } from '@angular/cdk/overlay';
|
|
24
|
+
import * as i1$2 from '@angular/cdk/scrolling';
|
|
25
|
+
import { CdkScrollable, ScrollingModule, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
|
|
26
|
+
import { ScrollDispatcher, Overlay } from '@angular/cdk/overlay';
|
|
32
27
|
import { decode, encode } from 'ab64';
|
|
28
|
+
import { DomPortalOutlet, ComponentPortal } from '@angular/cdk/portal';
|
|
29
|
+
import { yamlWriteOptions, createActions, MonacoEditorConfig, viewActions, readonlyOptions, CodeEditorComponent, yamlReadOptions, MonacoLanguageService, yamlWriteMinimapOptions, updateActions } from '@alauda/code-editor';
|
|
33
30
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
34
31
|
import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
35
32
|
import { BaseResourceFormComponent } from 'ng-resource-form-util';
|
|
36
|
-
import {
|
|
37
|
-
import * as i2$3 from '@alauda/code-editor';
|
|
38
|
-
import { CodeEditorModule } from '@alauda/code-editor';
|
|
33
|
+
import { HttpClient } from '@angular/common/http';
|
|
39
34
|
|
|
40
35
|
/**
|
|
41
36
|
* @packageDocumentation
|
|
@@ -160,6 +155,7 @@ const AccessMode = {
|
|
|
160
155
|
RWO: 'ReadWriteOnce',
|
|
161
156
|
ROX: 'ReadOnlyMany',
|
|
162
157
|
RWX: 'ReadWriteMany',
|
|
158
|
+
RWOP: 'ReadWriteOncePod',
|
|
163
159
|
};
|
|
164
160
|
const AccessModes = [AccessMode.RWO, AccessMode.ROX, AccessMode.RWX];
|
|
165
161
|
var VolumeTypeEnum;
|
|
@@ -2912,8 +2908,6 @@ function fullStrategyCheck(keys, controls, _, mapFn, matchesFn, initData) {
|
|
|
2912
2908
|
return toRemoveError;
|
|
2913
2909
|
}
|
|
2914
2910
|
|
|
2915
|
-
dayjs.extend(utc);
|
|
2916
|
-
dayjs.extend(timezone);
|
|
2917
2911
|
class CrontabNextPipe {
|
|
2918
2912
|
constructor() {
|
|
2919
2913
|
this.time = inject(TimeService);
|
|
@@ -3133,7 +3127,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
3133
3127
|
}]
|
|
3134
3128
|
}] });
|
|
3135
3129
|
|
|
3136
|
-
dayjs.extend(duration);
|
|
3137
3130
|
class DurationPipe {
|
|
3138
3131
|
constructor() {
|
|
3139
3132
|
this.translate = inject(TranslateService);
|
|
@@ -3364,8 +3357,8 @@ class ReadonlyFieldDirective {
|
|
|
3364
3357
|
this.templateContext = {};
|
|
3365
3358
|
this.destroy$ = new Subject();
|
|
3366
3359
|
this.control = inject(NgControl);
|
|
3367
|
-
this.cfr = inject(ComponentFactoryResolver);
|
|
3368
3360
|
this.viewContainerRef = inject(ViewContainerRef);
|
|
3361
|
+
this.injector = inject(Injector);
|
|
3369
3362
|
// 仅考虑当前control,子control无法知晓父FormItemControl元素 ,包裹了多少个control,以及各自处于什么状态,该情况自行处理
|
|
3370
3363
|
this.controlDirective = inject(FormItemControlDirective, {
|
|
3371
3364
|
optional: true,
|
|
@@ -3381,9 +3374,10 @@ class ReadonlyFieldDirective {
|
|
|
3381
3374
|
$implicit: value,
|
|
3382
3375
|
...this.context,
|
|
3383
3376
|
});
|
|
3377
|
+
this.templateViewRef?.detectChanges();
|
|
3384
3378
|
}
|
|
3385
3379
|
else {
|
|
3386
|
-
this.spanComponentRef
|
|
3380
|
+
this.spanComponentRef?.instance.setData(value);
|
|
3387
3381
|
}
|
|
3388
3382
|
}
|
|
3389
3383
|
ngOnInit() {
|
|
@@ -3391,29 +3385,20 @@ class ReadonlyFieldDirective {
|
|
|
3391
3385
|
// formControl will compose multi validators to 1, no matter defined in template nor FormBuilder
|
|
3392
3386
|
const { validator, asyncValidator } = controlEntity;
|
|
3393
3387
|
this.isControlRequired = this.controlDirective?.required || false;
|
|
3394
|
-
const portalOutlet = new CdkPortalOutlet(this.cfr, this.viewContainerRef);
|
|
3395
|
-
const portal = this.template
|
|
3396
|
-
? new TemplatePortal(this.template, this.viewContainerRef, this.templateContext)
|
|
3397
|
-
: new ComponentPortal(SpanComponent, this.viewContainerRef);
|
|
3398
3388
|
const containerAttached$ = this.aclReadonlyField$.pipe(distinctUntilChanged(), map(isUpdate => {
|
|
3399
3389
|
if (!isUpdate) {
|
|
3400
3390
|
// 重置
|
|
3401
3391
|
if (this.controlDirective) {
|
|
3402
3392
|
this.controlDirective.required = this.isControlRequired;
|
|
3403
3393
|
}
|
|
3404
|
-
|
|
3405
|
-
portalOutlet.detach();
|
|
3406
|
-
}
|
|
3394
|
+
this.detachReadonlyView();
|
|
3407
3395
|
this.applyValidators(controlEntity, validator, asyncValidator);
|
|
3408
3396
|
return false;
|
|
3409
3397
|
}
|
|
3410
3398
|
if (this.controlDirective) {
|
|
3411
3399
|
this.controlDirective.required = false;
|
|
3412
3400
|
}
|
|
3413
|
-
|
|
3414
|
-
if (!this.template) {
|
|
3415
|
-
this.spanComponentRef = attachPoint;
|
|
3416
|
-
}
|
|
3401
|
+
this.attachReadonlyView();
|
|
3417
3402
|
this.clearValidators(controlEntity);
|
|
3418
3403
|
return true;
|
|
3419
3404
|
}));
|
|
@@ -3447,6 +3432,30 @@ class ReadonlyFieldDirective {
|
|
|
3447
3432
|
ngOnDestroy() {
|
|
3448
3433
|
this.destroy$.next();
|
|
3449
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
|
+
}
|
|
3450
3459
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ReadonlyFieldDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
3451
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 }); }
|
|
3452
3461
|
}
|
|
@@ -3821,6 +3830,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
3821
3830
|
*
|
|
3822
3831
|
*/
|
|
3823
3832
|
class ControlValueTraceDirective {
|
|
3833
|
+
constructor() {
|
|
3834
|
+
this.ngControl = inject(NgControl, { host: true });
|
|
3835
|
+
this.aclValueTrackSkipFirst = false;
|
|
3836
|
+
this.destroy$$ = new Subject();
|
|
3837
|
+
}
|
|
3824
3838
|
ngOnDestroy() {
|
|
3825
3839
|
this.destroy$$.next();
|
|
3826
3840
|
this.destroy$$.complete();
|
|
@@ -3833,12 +3847,7 @@ class ControlValueTraceDirective {
|
|
|
3833
3847
|
.pipe(takeUntil(this.destroy$$))
|
|
3834
3848
|
.subscribe(([value, changeFn]) => changeFn(value));
|
|
3835
3849
|
}
|
|
3836
|
-
|
|
3837
|
-
this.ngControl = ngControl;
|
|
3838
|
-
this.aclValueTrackSkipFirst = false;
|
|
3839
|
-
this.destroy$$ = new Subject();
|
|
3840
|
-
}
|
|
3841
|
-
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 }); }
|
|
3842
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 }); }
|
|
3843
3852
|
}
|
|
3844
3853
|
__decorate([
|
|
@@ -3851,12 +3860,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
3851
3860
|
selector: '[aclValueTrack]',
|
|
3852
3861
|
standalone: true,
|
|
3853
3862
|
}]
|
|
3854
|
-
}],
|
|
3855
|
-
type: Inject,
|
|
3856
|
-
args: [NgControl]
|
|
3857
|
-
}, {
|
|
3858
|
-
type: Host
|
|
3859
|
-
}] }], propDecorators: { aclValueTrackSkipFirst: [{
|
|
3863
|
+
}], propDecorators: { aclValueTrackSkipFirst: [{
|
|
3860
3864
|
type: Input
|
|
3861
3865
|
}], aclValueTrack: [{
|
|
3862
3866
|
type: Input
|
|
@@ -4401,7 +4405,7 @@ class ConfirmDeleteComponent {
|
|
|
4401
4405
|
});
|
|
4402
4406
|
}
|
|
4403
4407
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ConfirmDeleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4404
|
-
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=\"
|
|
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 }); }
|
|
4405
4409
|
}
|
|
4406
4410
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ConfirmDeleteComponent, decorators: [{
|
|
4407
4411
|
type: Component,
|
|
@@ -4416,7 +4420,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
4416
4420
|
FormModule,
|
|
4417
4421
|
AsyncPipe,
|
|
4418
4422
|
EFFECT_DIRECTIVE_MODULE,
|
|
4419
|
-
], 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=\"
|
|
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"] }]
|
|
4420
4424
|
}], ctorParameters: () => [], propDecorators: { context: [{
|
|
4421
4425
|
type: Input
|
|
4422
4426
|
}], type: [{
|
|
@@ -4553,6 +4557,14 @@ const AUI_MULTI_SELECT_PLACEHOLDER_CLASS = 'aui-multi-select__placeholder';
|
|
|
4553
4557
|
// NOTE: 提供此指令,是由于个人不支持此组件行为,不建议直接引入aui,希望作为业务上的尝试,因此提供指令以供删改
|
|
4554
4558
|
// 纯css无法提供本问题的完整解决方案,若有更优方案,请删除此部分代码,以及 acl-select-prefix mixin
|
|
4555
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
|
+
}
|
|
4556
4568
|
queryElementByClassName(className) {
|
|
4557
4569
|
return this.elementRef.nativeElement?.querySelector(`.${className}`);
|
|
4558
4570
|
}
|
|
@@ -4582,13 +4594,7 @@ class SelectPrefixLabelDirective {
|
|
|
4582
4594
|
placeholder.style.paddingLeft = `${inlineLabel.offsetWidth + PREFIX_LABEL_PLACEHOLDER_PADDING_LEFT_FIX}px`;
|
|
4583
4595
|
}
|
|
4584
4596
|
}
|
|
4585
|
-
|
|
4586
|
-
this.elementRef = elementRef;
|
|
4587
|
-
this.renderer = renderer;
|
|
4588
|
-
this.viewContainerRef = viewContainerRef;
|
|
4589
|
-
this.multiSelectComponent = multiSelectComponent;
|
|
4590
|
-
}
|
|
4591
|
-
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 }); }
|
|
4592
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 }); }
|
|
4593
4599
|
}
|
|
4594
4600
|
__decorate([
|
|
@@ -4619,9 +4625,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
4619
4625
|
selector: 'aui-select[aclPrefixLabel],aui-multi-select[aclPrefixLabel]',
|
|
4620
4626
|
standalone: true,
|
|
4621
4627
|
}]
|
|
4622
|
-
}],
|
|
4623
|
-
type: Optional
|
|
4624
|
-
}] }], propDecorators: { aclPrefixLabel: [{
|
|
4628
|
+
}], propDecorators: { aclPrefixLabel: [{
|
|
4625
4629
|
type: Input
|
|
4626
4630
|
}] } });
|
|
4627
4631
|
|
|
@@ -4631,8 +4635,8 @@ class ZeroStateComponent {
|
|
|
4631
4635
|
this.fetching = false;
|
|
4632
4636
|
this.context = 'form';
|
|
4633
4637
|
this.image = [
|
|
4634
|
-
'assets/images/light/no-data-for-list-or-card.svg',
|
|
4635
|
-
'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',
|
|
4636
4640
|
];
|
|
4637
4641
|
this.handlePixel = handlePixel;
|
|
4638
4642
|
this.isTemplateRef = isTemplateRef;
|
|
@@ -4674,9 +4678,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
4674
4678
|
}] } });
|
|
4675
4679
|
|
|
4676
4680
|
class RelativeTimeComponent {
|
|
4677
|
-
constructor(
|
|
4678
|
-
this.cdr =
|
|
4679
|
-
this.translate =
|
|
4681
|
+
constructor() {
|
|
4682
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
4683
|
+
this.translate = inject(TranslateService);
|
|
4680
4684
|
this.destroy$ = new Subject();
|
|
4681
4685
|
}
|
|
4682
4686
|
ngOnInit() {
|
|
@@ -4689,7 +4693,7 @@ class RelativeTimeComponent {
|
|
|
4689
4693
|
ngOnDestroy() {
|
|
4690
4694
|
this.destroy$.next();
|
|
4691
4695
|
}
|
|
4692
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: RelativeTimeComponent, deps: [
|
|
4696
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: RelativeTimeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4693
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: `
|
|
4694
4698
|
<span
|
|
4695
4699
|
[auiTooltip]="time | aclStandardTime"
|
|
@@ -4718,7 +4722,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
4718
4722
|
standalone: true,
|
|
4719
4723
|
imports: [TooltipModule, StandardTimePipe, RelativeTimePipe],
|
|
4720
4724
|
}]
|
|
4721
|
-
}],
|
|
4725
|
+
}], propDecorators: { time: [{
|
|
4722
4726
|
type: Input
|
|
4723
4727
|
}] } });
|
|
4724
4728
|
|
|
@@ -5006,7 +5010,7 @@ const CLONE_ELEMENT_BASE_STYLES = {
|
|
|
5006
5010
|
* 效果:
|
|
5007
5011
|
* 发生截取的文案会显示完整内容的 tooltip。未发生截取的文案不显示 tooltip。
|
|
5008
5012
|
* @example:
|
|
5009
|
-
* <span
|
|
5013
|
+
* <span aclTextTooltip>TEXT...</span>
|
|
5010
5014
|
*
|
|
5011
5015
|
* tooltip 的一些设置(位置、类型)可以使用 aui 相同设置。未传 tooltip content 则取元素 text content
|
|
5012
5016
|
*/
|
|
@@ -5276,7 +5280,7 @@ class DateRangePickerComponent {
|
|
|
5276
5280
|
useExisting: forwardRef(() => DateRangePickerComponent),
|
|
5277
5281
|
multi: true,
|
|
5278
5282
|
},
|
|
5279
|
-
], 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 '
|
|
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 }); }
|
|
5280
5284
|
}
|
|
5281
5285
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DateRangePickerComponent, decorators: [{
|
|
5282
5286
|
type: Component,
|
|
@@ -5299,7 +5303,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
5299
5303
|
PurePipe,
|
|
5300
5304
|
AsyncPipe,
|
|
5301
5305
|
EFFECT_DIRECTIVE_MODULE,
|
|
5302
|
-
], 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 '
|
|
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"] }]
|
|
5303
5307
|
}], ctorParameters: () => [], propDecorators: { options: [{
|
|
5304
5308
|
type: Input
|
|
5305
5309
|
}], format: [{
|
|
@@ -5903,7 +5907,13 @@ class StrongPasswordDirective extends BaseTooltip {
|
|
|
5903
5907
|
ngOnChanges() {
|
|
5904
5908
|
this.onValidatorChange?.();
|
|
5905
5909
|
}
|
|
5906
|
-
constructor(
|
|
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);
|
|
5907
5917
|
super(overlay, viewContainerRef, elRef, renderer, cdr, ngZone);
|
|
5908
5918
|
this.specialChars = STRONG_PASSWORD_SPECIAL_CHARS;
|
|
5909
5919
|
this.minlength = 8;
|
|
@@ -6011,7 +6021,7 @@ class StrongPasswordDirective extends BaseTooltip {
|
|
|
6011
6021
|
},
|
|
6012
6022
|
};
|
|
6013
6023
|
}
|
|
6014
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: StrongPasswordDirective, deps: [
|
|
6024
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: StrongPasswordDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
6015
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: [
|
|
6016
6026
|
{
|
|
6017
6027
|
provide: NG_VALIDATORS,
|
|
@@ -6032,7 +6042,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
6032
6042
|
},
|
|
6033
6043
|
],
|
|
6034
6044
|
}]
|
|
6035
|
-
}], ctorParameters: () => [
|
|
6045
|
+
}], ctorParameters: () => [], propDecorators: { aclStrongPassword: [{
|
|
6036
6046
|
type: Input
|
|
6037
6047
|
}], required: [{
|
|
6038
6048
|
type: Input
|
|
@@ -6606,78 +6616,12 @@ function genControlDepsMap(context, rules, destroy$) {
|
|
|
6606
6616
|
});
|
|
6607
6617
|
}
|
|
6608
6618
|
|
|
6609
|
-
/**
|
|
6610
|
-
* @packageDocumentation
|
|
6611
|
-
* @module code
|
|
6612
|
-
*/
|
|
6613
|
-
const commonActions = {
|
|
6614
|
-
copy: true,
|
|
6615
|
-
find: true,
|
|
6616
|
-
export: true,
|
|
6617
|
-
};
|
|
6618
|
-
const createActions = {
|
|
6619
|
-
diffMode: false,
|
|
6620
|
-
clear: true,
|
|
6621
|
-
recover: false,
|
|
6622
|
-
import: true,
|
|
6623
|
-
...commonActions,
|
|
6624
|
-
};
|
|
6625
|
-
const viewActions = {
|
|
6626
|
-
diffMode: false,
|
|
6627
|
-
clear: false,
|
|
6628
|
-
recover: false,
|
|
6629
|
-
import: false,
|
|
6630
|
-
...commonActions,
|
|
6631
|
-
};
|
|
6632
|
-
const updateActions = {
|
|
6633
|
-
diffMode: true, // if true, you should also set 'originalValue' attribute, eg: <aui-code-editor [originalValue]="originalFile"></aui-code-editor>
|
|
6634
|
-
clear: true,
|
|
6635
|
-
recover: true,
|
|
6636
|
-
import: true,
|
|
6637
|
-
...commonActions,
|
|
6638
|
-
};
|
|
6639
|
-
const logsActions = {
|
|
6640
|
-
...viewActions,
|
|
6641
|
-
theme: true,
|
|
6642
|
-
};
|
|
6643
|
-
const commonOptions = {
|
|
6644
|
-
folding: true,
|
|
6645
|
-
minimap: { enabled: false },
|
|
6646
|
-
wordWrap: 'on',
|
|
6647
|
-
tabSize: 2,
|
|
6648
|
-
scrollbar: {
|
|
6649
|
-
alwaysConsumeMouseWheel: false,
|
|
6650
|
-
},
|
|
6651
|
-
};
|
|
6652
|
-
const readonlyOptions = {
|
|
6653
|
-
...commonOptions,
|
|
6654
|
-
readOnly: true,
|
|
6655
|
-
};
|
|
6656
|
-
const yamlReadOptions = {
|
|
6657
|
-
language: 'yaml',
|
|
6658
|
-
...readonlyOptions,
|
|
6659
|
-
};
|
|
6660
|
-
const yamlWriteOptions = {
|
|
6661
|
-
language: 'yaml',
|
|
6662
|
-
...commonOptions,
|
|
6663
|
-
};
|
|
6664
|
-
const textWriteOptions = {
|
|
6665
|
-
language: 'text',
|
|
6666
|
-
...commonOptions,
|
|
6667
|
-
};
|
|
6668
|
-
// for logs
|
|
6669
|
-
const logsReadOptions = {
|
|
6670
|
-
wordWrap: 'on',
|
|
6671
|
-
readOnly: true,
|
|
6672
|
-
renderLineHighlight: 'none',
|
|
6673
|
-
};
|
|
6674
|
-
|
|
6675
6619
|
class InterceptDeactivateService {
|
|
6676
|
-
constructor(
|
|
6677
|
-
this.location =
|
|
6678
|
-
this.router =
|
|
6679
|
-
this.dialog =
|
|
6680
|
-
this.translate =
|
|
6620
|
+
constructor() {
|
|
6621
|
+
this.location = inject(Location);
|
|
6622
|
+
this.router = inject(Router);
|
|
6623
|
+
this.dialog = inject(DialogService);
|
|
6624
|
+
this.translate = inject(TranslateService);
|
|
6681
6625
|
this.destroy$$ = new Subject();
|
|
6682
6626
|
}
|
|
6683
6627
|
ngOnDestroy() {
|
|
@@ -6720,13 +6664,13 @@ class InterceptDeactivateService {
|
|
|
6720
6664
|
queryParams: this.searchParamsToQueryParams(url.searchParams),
|
|
6721
6665
|
});
|
|
6722
6666
|
}
|
|
6723
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: InterceptDeactivateService, deps: [
|
|
6667
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: InterceptDeactivateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6724
6668
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: InterceptDeactivateService, providedIn: 'root' }); }
|
|
6725
6669
|
}
|
|
6726
6670
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: InterceptDeactivateService, decorators: [{
|
|
6727
6671
|
type: Injectable,
|
|
6728
6672
|
args: [{ providedIn: 'root' }]
|
|
6729
|
-
}]
|
|
6673
|
+
}] });
|
|
6730
6674
|
|
|
6731
6675
|
class InterceptDeactivateGuard {
|
|
6732
6676
|
constructor() {
|
|
@@ -6764,9 +6708,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
6764
6708
|
}] });
|
|
6765
6709
|
|
|
6766
6710
|
class InterceptDeactivateDirective {
|
|
6767
|
-
constructor(
|
|
6768
|
-
this.elRef =
|
|
6769
|
-
this.interceptDeactivate =
|
|
6711
|
+
constructor() {
|
|
6712
|
+
this.elRef = inject(ElementRef);
|
|
6713
|
+
this.interceptDeactivate = inject(InterceptDeactivateService);
|
|
6770
6714
|
this.enabled$ = this.enabled$$.pipe(map(coerceAttrBoolean));
|
|
6771
6715
|
this.destroy$$ = new Subject();
|
|
6772
6716
|
}
|
|
@@ -6784,7 +6728,7 @@ class InterceptDeactivateDirective {
|
|
|
6784
6728
|
onBeforeUnload() {
|
|
6785
6729
|
return isDevMode() || !this.enabled;
|
|
6786
6730
|
}
|
|
6787
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: InterceptDeactivateDirective, deps: [
|
|
6731
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: InterceptDeactivateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
6788
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 }); }
|
|
6789
6733
|
}
|
|
6790
6734
|
__decorate([
|
|
@@ -6797,7 +6741,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
6797
6741
|
selector: '[aclInterceptDeactivate]',
|
|
6798
6742
|
standalone: true,
|
|
6799
6743
|
}]
|
|
6800
|
-
}],
|
|
6744
|
+
}], propDecorators: { enabled: [{
|
|
6801
6745
|
type: Input,
|
|
6802
6746
|
args: ['aclInterceptDeactivate']
|
|
6803
6747
|
}], enabled$$: [], onBeforeUnload: [{
|
|
@@ -7169,7 +7113,7 @@ class PasswordInputComponent extends BaseNestedFormControlPure {
|
|
|
7169
7113
|
useExisting: forwardRef(() => PasswordInputComponent),
|
|
7170
7114
|
multi: true,
|
|
7171
7115
|
},
|
|
7172
|
-
], 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=\"
|
|
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 }); }
|
|
7173
7117
|
}
|
|
7174
7118
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PasswordInputComponent, decorators: [{
|
|
7175
7119
|
type: Component,
|
|
@@ -7196,7 +7140,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
7196
7140
|
useExisting: forwardRef(() => PasswordInputComponent),
|
|
7197
7141
|
multi: true,
|
|
7198
7142
|
},
|
|
7199
|
-
], template: "<aui-form-item [width]=\"width\">\n <label auiFormItemLabel>{{ label || ('password' | translate) }}</label>\n @if (showInput) {\n <aui-input-group\n class=\"
|
|
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"] }]
|
|
7200
7144
|
}], propDecorators: { initPassword: [{
|
|
7201
7145
|
type: Input
|
|
7202
7146
|
}], label: [{
|
|
@@ -7521,11 +7465,11 @@ class SearchPanelComponent {
|
|
|
7521
7465
|
return panels?.length % 3 === 0;
|
|
7522
7466
|
}
|
|
7523
7467
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SearchPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7524
|
-
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=\"
|
|
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 }); }
|
|
7525
7469
|
}
|
|
7526
7470
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SearchPanelComponent, decorators: [{
|
|
7527
7471
|
type: Component,
|
|
7528
|
-
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=\"
|
|
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"] }]
|
|
7529
7473
|
}], propDecorators: { enableEnterHandler: [{
|
|
7530
7474
|
type: Input
|
|
7531
7475
|
}], searchEvent: [{
|
|
@@ -7726,7 +7670,7 @@ class PodStatusComponent {
|
|
|
7726
7670
|
};
|
|
7727
7671
|
}
|
|
7728
7672
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PodStatusComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7729
|
-
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=\"
|
|
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>•</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 }); }
|
|
7730
7674
|
}
|
|
7731
7675
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PodStatusComponent, decorators: [{
|
|
7732
7676
|
type: Component,
|
|
@@ -7737,7 +7681,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
7737
7681
|
NgStyle,
|
|
7738
7682
|
NgTemplateOutlet,
|
|
7739
7683
|
PurePipe,
|
|
7740
|
-
], 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=\"
|
|
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>•</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"] }]
|
|
7741
7685
|
}], propDecorators: { pod: [{
|
|
7742
7686
|
type: Input
|
|
7743
7687
|
}], disableMessageOverview: [{
|
|
@@ -7778,9 +7722,9 @@ const FileResultType = {
|
|
|
7778
7722
|
TEXT: 'Text',
|
|
7779
7723
|
};
|
|
7780
7724
|
class UploadFileComponent {
|
|
7781
|
-
constructor(
|
|
7782
|
-
this.notification =
|
|
7783
|
-
this.translate =
|
|
7725
|
+
constructor() {
|
|
7726
|
+
this.notification = inject(NotificationService);
|
|
7727
|
+
this.translate = inject(TranslateService);
|
|
7784
7728
|
this.resultType = FileResultType.TEXT;
|
|
7785
7729
|
}
|
|
7786
7730
|
onClick() {
|
|
@@ -7823,7 +7767,7 @@ class UploadFileComponent {
|
|
|
7823
7767
|
registerOnTouched() {
|
|
7824
7768
|
//
|
|
7825
7769
|
}
|
|
7826
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UploadFileComponent, deps: [
|
|
7770
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UploadFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7827
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: [
|
|
7828
7772
|
{
|
|
7829
7773
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -7841,7 +7785,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
7841
7785
|
multi: true,
|
|
7842
7786
|
},
|
|
7843
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"] }]
|
|
7844
|
-
}],
|
|
7788
|
+
}], propDecorators: { disabled: [{
|
|
7845
7789
|
type: Input
|
|
7846
7790
|
}], accept: [{
|
|
7847
7791
|
type: Input
|
|
@@ -8156,7 +8100,7 @@ class PageGuardComponent {
|
|
|
8156
8100
|
this.reasonSrc$ = combineLatest([
|
|
8157
8101
|
this.theme.currentTheme$,
|
|
8158
8102
|
this.reasonModel$,
|
|
8159
|
-
]).pipe(map(([theme, reasonModel]) =>
|
|
8103
|
+
]).pipe(map(([theme, reasonModel]) => `/console-assets/images/${theme}/${reasonModel.src}`), publishRef());
|
|
8160
8104
|
}
|
|
8161
8105
|
get allowed() {
|
|
8162
8106
|
return this.status === GuardStatus.Available;
|
|
@@ -8253,11 +8197,11 @@ class ListDisplayComponent {
|
|
|
8253
8197
|
};
|
|
8254
8198
|
}
|
|
8255
8199
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ListDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8256
|
-
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=\"
|
|
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 }); }
|
|
8257
8201
|
}
|
|
8258
8202
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ListDisplayComponent, decorators: [{
|
|
8259
8203
|
type: Component,
|
|
8260
|
-
args: [{ standalone: true, selector: 'acl-list-display', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet, PurePipe, TranslatePipe, TOOLTIP_MODULE], template: "<div\n class=\"
|
|
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"] }]
|
|
8261
8205
|
}], propDecorators: { data: [{
|
|
8262
8206
|
type: Input
|
|
8263
8207
|
}], threshold: [{
|
|
@@ -8278,11 +8222,11 @@ class OverviewBannerComponent {
|
|
|
8278
8222
|
this.option = {};
|
|
8279
8223
|
}
|
|
8280
8224
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: OverviewBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8281
|
-
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 }); }
|
|
8282
8226
|
}
|
|
8283
8227
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: OverviewBannerComponent, decorators: [{
|
|
8284
8228
|
type: Component,
|
|
8285
|
-
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"] }]
|
|
8286
8230
|
}], propDecorators: { option: [{
|
|
8287
8231
|
type: Input
|
|
8288
8232
|
}] } });
|
|
@@ -8419,7 +8363,7 @@ class MultiSearchActionInputComponent extends BaseResourceFormComponent {
|
|
|
8419
8363
|
// 键盘delete事件。
|
|
8420
8364
|
this.delete = new EventEmitter();
|
|
8421
8365
|
// 键盘enter事件
|
|
8422
|
-
this.
|
|
8366
|
+
this.search = new EventEmitter();
|
|
8423
8367
|
this._conditionsModel = '';
|
|
8424
8368
|
this.conditionsModel$$ = new BehaviorSubject('');
|
|
8425
8369
|
this.hasFilteredConditions$ = combineLatest([
|
|
@@ -8621,7 +8565,7 @@ class MultiSearchActionInputComponent extends BaseResourceFormComponent {
|
|
|
8621
8565
|
this.conditionsModel = currentLabel;
|
|
8622
8566
|
// 如果是单选,则需要在选中时抛出complete事件,并抛出search事件
|
|
8623
8567
|
this.ifComplete(false, true);
|
|
8624
|
-
this.
|
|
8568
|
+
this.search.emit();
|
|
8625
8569
|
}
|
|
8626
8570
|
}
|
|
8627
8571
|
// 多选
|
|
@@ -8812,7 +8756,7 @@ class MultiSearchActionInputComponent extends BaseResourceFormComponent {
|
|
|
8812
8756
|
else {
|
|
8813
8757
|
// 当前操作内容已完成,,则会抛出enter事件
|
|
8814
8758
|
if (this.ifComplete(false, true)) {
|
|
8815
|
-
this.
|
|
8759
|
+
this.search.emit();
|
|
8816
8760
|
}
|
|
8817
8761
|
else if (this.conditionCreatable && this.isConditionSelecting) {
|
|
8818
8762
|
this.setConditionByModel();
|
|
@@ -8930,7 +8874,7 @@ class MultiSearchActionInputComponent extends BaseResourceFormComponent {
|
|
|
8930
8874
|
return conditionsModel === current;
|
|
8931
8875
|
}
|
|
8932
8876
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: MultiSearchActionInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8933
|
-
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 }); }
|
|
8934
8878
|
}
|
|
8935
8879
|
__decorate([
|
|
8936
8880
|
ObservableInput(),
|
|
@@ -8957,7 +8901,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
8957
8901
|
NgTemplateOutlet,
|
|
8958
8902
|
FormsModule,
|
|
8959
8903
|
ButtonComponent,
|
|
8960
|
-
], 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"] }]
|
|
8961
8905
|
}], ctorParameters: () => [], propDecorators: { placeholder: [{
|
|
8962
8906
|
type: Input
|
|
8963
8907
|
}], conditionCreatable: [{
|
|
@@ -8980,7 +8924,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
8980
8924
|
type: Output
|
|
8981
8925
|
}], delete: [{
|
|
8982
8926
|
type: Output
|
|
8983
|
-
}],
|
|
8927
|
+
}], search: [{
|
|
8984
8928
|
type: Output
|
|
8985
8929
|
}], inputRef: [{
|
|
8986
8930
|
type: ViewChild,
|
|
@@ -8998,7 +8942,7 @@ class MultiSearchTagsComponent {
|
|
|
8998
8942
|
this.removeCondition = new EventEmitter();
|
|
8999
8943
|
this.setConditionEditing = new EventEmitter();
|
|
9000
8944
|
this.setConditionDeleting = new EventEmitter();
|
|
9001
|
-
this.
|
|
8945
|
+
this.search = new EventEmitter();
|
|
9002
8946
|
this.completed = new EventEmitter();
|
|
9003
8947
|
}
|
|
9004
8948
|
conditionInAction(condition) {
|
|
@@ -9013,7 +8957,7 @@ class MultiSearchTagsComponent {
|
|
|
9013
8957
|
?.join(condition.separator ?? ' | ');
|
|
9014
8958
|
}
|
|
9015
8959
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: MultiSearchTagsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9016
|
-
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",
|
|
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 }); }
|
|
9017
8961
|
}
|
|
9018
8962
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: MultiSearchTagsComponent, decorators: [{
|
|
9019
8963
|
type: Component,
|
|
@@ -9023,7 +8967,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
9023
8967
|
PurePipe,
|
|
9024
8968
|
MultiSearchActionInputComponent,
|
|
9025
8969
|
FormsModule,
|
|
9026
|
-
], template: "<div class=\"search-content\">\n @for (condition of existingConditions; track condition; let index = $index) {\n @if (!conditionInAction(condition)) {\n <aui-tag\n class=\"
|
|
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"] }]
|
|
9027
8971
|
}], propDecorators: { placeholder: [{
|
|
9028
8972
|
type: Input
|
|
9029
8973
|
}], conditionCreatable: [{
|
|
@@ -9040,7 +8984,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
9040
8984
|
type: Output
|
|
9041
8985
|
}], setConditionDeleting: [{
|
|
9042
8986
|
type: Output
|
|
9043
|
-
}],
|
|
8987
|
+
}], search: [{
|
|
9044
8988
|
type: Output
|
|
9045
8989
|
}], completed: [{
|
|
9046
8990
|
type: Output
|
|
@@ -9062,7 +9006,7 @@ class MultiSearchComponent {
|
|
|
9062
9006
|
this.autoScroll = true;
|
|
9063
9007
|
this.searchSuffix = true;
|
|
9064
9008
|
// 搜索操作
|
|
9065
|
-
this.
|
|
9009
|
+
this.search = new EventEmitter();
|
|
9066
9010
|
// 条件变化
|
|
9067
9011
|
this.conditionsChange = new EventEmitter();
|
|
9068
9012
|
// 当前multi-search组件是否focus
|
|
@@ -9194,7 +9138,7 @@ class MultiSearchComponent {
|
|
|
9194
9138
|
this.existingConditions$
|
|
9195
9139
|
.pipe(take(1), takeUntil(this.destroy$$))
|
|
9196
9140
|
.subscribe(exists => {
|
|
9197
|
-
this.
|
|
9141
|
+
this.search.emit(this.getConditionModel(exists?.filter(exist => !this.conditionInAction(exist))));
|
|
9198
9142
|
});
|
|
9199
9143
|
}
|
|
9200
9144
|
// 清除所有已选条件
|
|
@@ -9309,7 +9253,7 @@ class MultiSearchComponent {
|
|
|
9309
9253
|
this.destroy$$.next();
|
|
9310
9254
|
}
|
|
9311
9255
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: MultiSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9312
|
-
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: {
|
|
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 }); }
|
|
9313
9257
|
}
|
|
9314
9258
|
__decorate([
|
|
9315
9259
|
ObservableInput(),
|
|
@@ -9328,7 +9272,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
9328
9272
|
MultiSearchTagsComponent,
|
|
9329
9273
|
FormsModule,
|
|
9330
9274
|
IconComponent,
|
|
9331
|
-
], 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=\"
|
|
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"] }]
|
|
9332
9276
|
}], ctorParameters: () => [], propDecorators: { placeholder: [{
|
|
9333
9277
|
type: Input
|
|
9334
9278
|
}], conditionCreatable: [{
|
|
@@ -9341,7 +9285,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
9341
9285
|
type: Input
|
|
9342
9286
|
}], searchSuffix: [{
|
|
9343
9287
|
type: Input
|
|
9344
|
-
}],
|
|
9288
|
+
}], search: [{
|
|
9345
9289
|
type: Output
|
|
9346
9290
|
}], showFootAction: [{
|
|
9347
9291
|
type: Input
|
|
@@ -9358,22 +9302,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
9358
9302
|
args: ['multiSearch', { static: true }]
|
|
9359
9303
|
}] } });
|
|
9360
9304
|
|
|
9361
|
-
const removeSuffix = (str) => str.replace('-resize', '');
|
|
9362
|
-
/** 如果cursor存在类似 n-resize、ne-resize,都代表是top 方向 */
|
|
9363
|
-
const isT = (cursor) => removeSuffix(cursor).includes('n');
|
|
9364
|
-
/** 是否是right */
|
|
9365
|
-
const isR = (cursor) => removeSuffix(cursor).includes('e');
|
|
9366
|
-
/** 是否是bottom */
|
|
9367
|
-
const isB = (cursor) => removeSuffix(cursor).includes('s');
|
|
9368
|
-
/** 是否是left */
|
|
9369
|
-
const isL = (cursor) => removeSuffix(cursor).includes('w');
|
|
9370
|
-
const toPx = (num) => num + 'px';
|
|
9371
|
-
const toPercent = (num, base = 1) => num * base + '%';
|
|
9372
|
-
const toNumber = (str) => {
|
|
9373
|
-
const p = parseFloat(str);
|
|
9374
|
-
return isNaN(p) ? 0 : p;
|
|
9375
|
-
};
|
|
9376
|
-
|
|
9377
9305
|
/**
|
|
9378
9306
|
* To judge whether the parent element
|
|
9379
9307
|
*/
|
|
@@ -9396,6 +9324,22 @@ function coerceElement(elementOrRef) {
|
|
|
9396
9324
|
: elementOrRef;
|
|
9397
9325
|
}
|
|
9398
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
|
+
|
|
9399
9343
|
const MUTABLE_BASIC_OPTIONS = {
|
|
9400
9344
|
directions: [true, true, true, true],
|
|
9401
9345
|
resizeThreshold: 5,
|
|
@@ -9890,8 +9834,8 @@ class K8SResourceListFooterComponent extends ScrollBorderObserverDirective {
|
|
|
9890
9834
|
this.bottomDistance = 60;
|
|
9891
9835
|
this.window = window;
|
|
9892
9836
|
this.image = [
|
|
9893
|
-
'assets/images/light/no-data-for-list-or-card.svg',
|
|
9894
|
-
'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',
|
|
9895
9839
|
];
|
|
9896
9840
|
this.translate = inject(TranslateService);
|
|
9897
9841
|
this.option = this.autoLoad ? '' : false;
|
|
@@ -10482,11 +10426,26 @@ const DEFAULT_PAGE_SIZE = 10;
|
|
|
10482
10426
|
const DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];
|
|
10483
10427
|
const DEFAULT_PAGINATION_LAYOUT = 'total,pager,sizes,jumper';
|
|
10484
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
|
+
}] } });
|
|
10485
10444
|
class TableCellDefDirective {
|
|
10486
|
-
constructor(
|
|
10487
|
-
this.templateRef =
|
|
10445
|
+
constructor() {
|
|
10446
|
+
this.templateRef = inject((TemplateRef));
|
|
10488
10447
|
}
|
|
10489
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableCellDefDirective, deps: [
|
|
10448
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableCellDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
10490
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 }); }
|
|
10491
10450
|
}
|
|
10492
10451
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableCellDefDirective, decorators: [{
|
|
@@ -10495,7 +10454,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
10495
10454
|
selector: '[aclTableCellDef]',
|
|
10496
10455
|
standalone: true,
|
|
10497
10456
|
}]
|
|
10498
|
-
}],
|
|
10457
|
+
}], propDecorators: { aclTableCellDef: [{
|
|
10499
10458
|
type: Input
|
|
10500
10459
|
}] } });
|
|
10501
10460
|
|
|
@@ -10516,8 +10475,8 @@ function defaultSorter(a, b) {
|
|
|
10516
10475
|
|
|
10517
10476
|
const KNOWN_COLUMNS = new Set([NAME, CREATOR, CREATED_AT]);
|
|
10518
10477
|
class TableUtilService {
|
|
10519
|
-
constructor(
|
|
10520
|
-
this.k8sUtil =
|
|
10478
|
+
constructor() {
|
|
10479
|
+
this.k8sUtil = inject(K8sUtilService);
|
|
10521
10480
|
this.getValueFromPath = this.getValueFromPath.bind(this);
|
|
10522
10481
|
this.defaultFilterFn = this.defaultFilterFn.bind(this);
|
|
10523
10482
|
}
|
|
@@ -10541,6 +10500,11 @@ class TableUtilService {
|
|
|
10541
10500
|
? this.k8sUtil.getName(item)
|
|
10542
10501
|
: get(item, NAME);
|
|
10543
10502
|
}
|
|
10503
|
+
case NAMESPACE$1: {
|
|
10504
|
+
return isK8s
|
|
10505
|
+
? this.k8sUtil.getNamespace(item)
|
|
10506
|
+
: get(item, NAMESPACE$1);
|
|
10507
|
+
}
|
|
10544
10508
|
case CREATOR: {
|
|
10545
10509
|
return isK8s
|
|
10546
10510
|
? this.k8sUtil.getCreator(item)
|
|
@@ -10553,7 +10517,6 @@ class TableUtilService {
|
|
|
10553
10517
|
}
|
|
10554
10518
|
}
|
|
10555
10519
|
}
|
|
10556
|
-
// eslint-disable-next-line sonarjs/cognitive-complexity
|
|
10557
10520
|
defaultFilterFn(items, columnDefs, activeSort, filterParams, context) {
|
|
10558
10521
|
context = context ?? this;
|
|
10559
10522
|
if (items && filterParams) {
|
|
@@ -10575,7 +10538,7 @@ class TableUtilService {
|
|
|
10575
10538
|
}
|
|
10576
10539
|
return items;
|
|
10577
10540
|
}
|
|
10578
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableUtilService, deps: [
|
|
10541
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableUtilService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
10579
10542
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableUtilService, providedIn: 'root' }); }
|
|
10580
10543
|
}
|
|
10581
10544
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableUtilService, decorators: [{
|
|
@@ -10583,10 +10546,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
10583
10546
|
args: [{
|
|
10584
10547
|
providedIn: 'root',
|
|
10585
10548
|
}]
|
|
10586
|
-
}], ctorParameters: () => [
|
|
10587
|
-
type: Inject,
|
|
10588
|
-
args: [K8sUtilService]
|
|
10589
|
-
}] }] });
|
|
10549
|
+
}], ctorParameters: () => [] });
|
|
10590
10550
|
|
|
10591
10551
|
class TableComponent {
|
|
10592
10552
|
get finalContext() {
|
|
@@ -10778,7 +10738,7 @@ class TableComponent {
|
|
|
10778
10738
|
: functionOrValue;
|
|
10779
10739
|
}
|
|
10780
10740
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10781
|
-
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 }); }
|
|
10782
10742
|
}
|
|
10783
10743
|
__decorate([
|
|
10784
10744
|
ObservableInput(),
|
|
@@ -10884,11 +10844,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
10884
10844
|
|
|
10885
10845
|
class NamespaceBadgeComponent {
|
|
10886
10846
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NamespaceBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10887
|
-
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=\"
|
|
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 }); }
|
|
10888
10848
|
}
|
|
10889
10849
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NamespaceBadgeComponent, decorators: [{
|
|
10890
10850
|
type: Component,
|
|
10891
|
-
args: [{ selector: 'acl-namespace-badge', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [IconComponent], template: "<div>\n <aui-icon\n icon=\"prod:namespace\"\n class=\"
|
|
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"] }]
|
|
10892
10852
|
}], propDecorators: { name: [{
|
|
10893
10853
|
type: Input
|
|
10894
10854
|
}] } });
|
|
@@ -10915,12 +10875,383 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
10915
10875
|
}]
|
|
10916
10876
|
}] });
|
|
10917
10877
|
|
|
10878
|
+
class AclTableVirtualHeaderDefDirective {
|
|
10879
|
+
constructor() {
|
|
10880
|
+
this.templateRef = inject((TemplateRef));
|
|
10881
|
+
}
|
|
10882
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualHeaderDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
10883
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: AclTableVirtualHeaderDefDirective, isStandalone: true, selector: "[aclTableVirtualHeader]", ngImport: i0 }); }
|
|
10884
|
+
}
|
|
10885
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualHeaderDefDirective, decorators: [{
|
|
10886
|
+
type: Directive,
|
|
10887
|
+
args: [{
|
|
10888
|
+
selector: '[aclTableVirtualHeader]',
|
|
10889
|
+
standalone: true,
|
|
10890
|
+
}]
|
|
10891
|
+
}] });
|
|
10892
|
+
class AclTableVirtualRowDefDirective {
|
|
10893
|
+
constructor() {
|
|
10894
|
+
this.templateRef = inject((TemplateRef));
|
|
10895
|
+
}
|
|
10896
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualRowDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
10897
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: AclTableVirtualRowDefDirective, isStandalone: true, selector: "[aclTableVirtualRow]", ngImport: i0 }); }
|
|
10898
|
+
}
|
|
10899
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualRowDefDirective, decorators: [{
|
|
10900
|
+
type: Directive,
|
|
10901
|
+
args: [{
|
|
10902
|
+
selector: '[aclTableVirtualRow]',
|
|
10903
|
+
standalone: true,
|
|
10904
|
+
}]
|
|
10905
|
+
}] });
|
|
10906
|
+
class AclTableVirtualPlaceholderDefDirective {
|
|
10907
|
+
constructor() {
|
|
10908
|
+
this.templateRef = inject((TemplateRef));
|
|
10909
|
+
}
|
|
10910
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualPlaceholderDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
10911
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: AclTableVirtualPlaceholderDefDirective, isStandalone: true, selector: "[aclTableVirtualPlaceholder]", ngImport: i0 }); }
|
|
10912
|
+
}
|
|
10913
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualPlaceholderDefDirective, decorators: [{
|
|
10914
|
+
type: Directive,
|
|
10915
|
+
args: [{
|
|
10916
|
+
selector: '[aclTableVirtualPlaceholder]',
|
|
10917
|
+
standalone: true,
|
|
10918
|
+
}]
|
|
10919
|
+
}] });
|
|
10920
|
+
|
|
10921
|
+
class AclTableVirtualComponent {
|
|
10922
|
+
constructor() {
|
|
10923
|
+
this.dataSource = [];
|
|
10924
|
+
this.itemSize = 48; // 默认行高,可在使用时传入与实际样式一致的值
|
|
10925
|
+
this.minBufferPx = 100;
|
|
10926
|
+
this.maxBufferPx = 200;
|
|
10927
|
+
this.height = '400px';
|
|
10928
|
+
this.trackBy = (index) => index;
|
|
10929
|
+
this.placeholderActive = false;
|
|
10930
|
+
this.destroy$ = new Subject();
|
|
10931
|
+
}
|
|
10932
|
+
ngAfterViewInit() {
|
|
10933
|
+
// 如果有虚拟滚动视口,优先监听其滚动;否则退回到外层容器滚动。
|
|
10934
|
+
const container = this.scrollContainerRef?.nativeElement;
|
|
10935
|
+
const viewportEl = this.viewport?.elementRef?.nativeElement ?? null;
|
|
10936
|
+
const viewportScrolled$ = this.viewport?.elementScrolled() ??
|
|
10937
|
+
fromEvent(viewportEl ?? container, 'scroll');
|
|
10938
|
+
const containerScrolled$ = fromEvent(container, 'scroll');
|
|
10939
|
+
const resized$ = fromEvent(window, 'resize');
|
|
10940
|
+
merge(viewportScrolled$, containerScrolled$, resized$)
|
|
10941
|
+
.pipe(startWith(null), takeUntil(this.destroy$))
|
|
10942
|
+
.subscribe(() => {
|
|
10943
|
+
this.mutateVerticalScroll();
|
|
10944
|
+
this.mutateHorizontalScroll();
|
|
10945
|
+
});
|
|
10946
|
+
// 初始化一次,以便首次渲染即得到正确的阴影状态。
|
|
10947
|
+
this.mutateVerticalScroll();
|
|
10948
|
+
this.mutateHorizontalScroll();
|
|
10949
|
+
}
|
|
10950
|
+
ngOnDestroy() {
|
|
10951
|
+
this.destroy$.next();
|
|
10952
|
+
this.destroy$.complete();
|
|
10953
|
+
}
|
|
10954
|
+
getScroller() {
|
|
10955
|
+
// 在虚拟滚动场景下,真正的滚动容器是 viewport;否则使用外层容器。
|
|
10956
|
+
const viewportEl = this.viewport?.elementRef?.nativeElement ?? null;
|
|
10957
|
+
return viewportEl ?? this.scrollContainerRef.nativeElement;
|
|
10958
|
+
}
|
|
10959
|
+
placeClass(condition, className) {
|
|
10960
|
+
const classList = this.scrollContainerRef.nativeElement.classList;
|
|
10961
|
+
if (condition) {
|
|
10962
|
+
classList.add(className);
|
|
10963
|
+
}
|
|
10964
|
+
else {
|
|
10965
|
+
classList.remove(className);
|
|
10966
|
+
}
|
|
10967
|
+
}
|
|
10968
|
+
mutateVerticalScroll() {
|
|
10969
|
+
const el = this.getScroller();
|
|
10970
|
+
const scrollDis = el.scrollHeight - el.clientHeight;
|
|
10971
|
+
const scrollTop = el.scrollTop;
|
|
10972
|
+
this.placeClass(scrollTop > 0, 'hasTableTopShadow');
|
|
10973
|
+
this.placeClass(scrollTop < scrollDis && scrollDis > 0, 'hasTableBottomShadow');
|
|
10974
|
+
}
|
|
10975
|
+
mutateHorizontalScroll() {
|
|
10976
|
+
const el = this.getScroller();
|
|
10977
|
+
const scrollDisX = el.scrollWidth - el.clientWidth;
|
|
10978
|
+
this.placeClass(scrollDisX > 0, 'aui-table__scroll-shadow--has-scroll');
|
|
10979
|
+
const scrollLeft = el.scrollLeft;
|
|
10980
|
+
this.placeClass(scrollLeft > 0, 'aui-table__scroll-shadow--scrolling');
|
|
10981
|
+
this.placeClass(scrollLeft < scrollDisX && scrollDisX > 0, 'aui-table__scroll-shadow--before-end');
|
|
10982
|
+
}
|
|
10983
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10984
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: AclTableVirtualComponent, isStandalone: true, selector: "acl-table-virtual", inputs: { dataSource: "dataSource", itemSize: "itemSize", minBufferPx: "minBufferPx", maxBufferPx: "maxBufferPx", height: "height", trackBy: "trackBy", placeholderActive: "placeholderActive" }, queries: [{ propertyName: "headerTemplate", first: true, predicate: AclTableVirtualHeaderDefDirective, descendants: true, read: TemplateRef }, { propertyName: "rowTemplate", first: true, predicate: (AclTableVirtualRowDefDirective), descendants: true, read: TemplateRef }, { propertyName: "placeholderTemplate", first: true, predicate: AclTableVirtualPlaceholderDefDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "scrollContainerRef", first: true, predicate: ["scrollContainer"], descendants: true, static: true }], exportAs: ["aclTableVirtual"], ngImport: i0, template: `
|
|
10985
|
+
<div
|
|
10986
|
+
#scrollContainer
|
|
10987
|
+
class="aui-table aui-table__scroll-shadow"
|
|
10988
|
+
>
|
|
10989
|
+
@if (headerTemplate) {
|
|
10990
|
+
<div class="aui-table__header-row">
|
|
10991
|
+
<ng-template [ngTemplateOutlet]="headerTemplate"></ng-template>
|
|
10992
|
+
</div>
|
|
10993
|
+
}
|
|
10994
|
+
@if (placeholderTemplate) {
|
|
10995
|
+
<ng-template [ngTemplateOutlet]="placeholderTemplate"></ng-template>
|
|
10996
|
+
} @else if (!placeholderActive) {
|
|
10997
|
+
<cdk-virtual-scroll-viewport
|
|
10998
|
+
[itemSize]="itemSize"
|
|
10999
|
+
[minBufferPx]="minBufferPx"
|
|
11000
|
+
[maxBufferPx]="maxBufferPx"
|
|
11001
|
+
class="aui-table__body-viewport"
|
|
11002
|
+
[style.height]="height"
|
|
11003
|
+
>
|
|
11004
|
+
<div
|
|
11005
|
+
class="aui-table__row"
|
|
11006
|
+
*cdkVirtualFor="
|
|
11007
|
+
let item of dataSource;
|
|
11008
|
+
let index = index;
|
|
11009
|
+
let odd = odd;
|
|
11010
|
+
let even = even;
|
|
11011
|
+
let last = last;
|
|
11012
|
+
trackBy: trackBy
|
|
11013
|
+
"
|
|
11014
|
+
>
|
|
11015
|
+
<ng-template
|
|
11016
|
+
[ngTemplateOutlet]="rowTemplate"
|
|
11017
|
+
[ngTemplateOutletContext]="{
|
|
11018
|
+
$implicit: item,
|
|
11019
|
+
index,
|
|
11020
|
+
odd,
|
|
11021
|
+
even,
|
|
11022
|
+
last,
|
|
11023
|
+
}"
|
|
11024
|
+
></ng-template>
|
|
11025
|
+
</div>
|
|
11026
|
+
</cdk-virtual-scroll-viewport>
|
|
11027
|
+
}
|
|
11028
|
+
</div>
|
|
11029
|
+
`, isInline: true, styles: [":host{display:block}.aui-table__body-viewport{display:block}cdk-virtual-scroll-viewport::-webkit-scrollbar{width:8px;height:4px}cdk-virtual-scroll-viewport::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}cdk-virtual-scroll-viewport::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}cdk-virtual-scroll-viewport::-webkit-scrollbar-corner{background-color:transparent}.aui-table{position:relative;display:block;padding:0 12px 12px}.aui-table{font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-main-text))}.aui-table{background-color:rgb(var(--aui-color-n-9));border-radius:var(--aui-border-radius-l)}.aui-table__row,.aui-table__header-row{display:flex;align-items:center}.aui-table__row.hasPanel,.aui-table__header-row.hasPanel{flex-wrap:wrap}.aui-table__header-row+.aui-table__row{border-top-left-radius:var(--aui-border-radius-l);border-top-right-radius:var(--aui-border-radius-l)}.aui-table__row{position:relative;border-width:1px;border-style:solid;border-color:rgb(var(--aui-color-n-8));border-bottom-width:0;background-color:rgb(var(--aui-color-n-10));padding:0 9px;min-height:58px;box-sizing:content-box}.aui-table__row:first-child{border-top-left-radius:var(--aui-border-radius-l);border-top-right-radius:var(--aui-border-radius-l)}.aui-table__row:last-of-type{border-bottom-width:1px;min-height:58px;border-bottom-left-radius:var(--aui-border-radius-l);border-bottom-right-radius:var(--aui-border-radius-l)}.aui-table__row.isDisabled:before{content:\"\";z-index:2;position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgb(var(--aui-color-n-10));opacity:.7;cursor:not-allowed}.aui-table__header-row{background-color:rgb(var(--aui-color-n-9));padding:0 10px}.aui-table__cell,.aui-table__header-cell{display:flex;align-items:center;flex:1;position:relative}.aui-table__cell{padding:15px 10px;background-color:rgb(var(--aui-color-n-10));overflow:hidden}.aui-table__cell--column{flex-direction:column;justify-content:center;align-items:flex-start}.aui-table__header-cell{padding:12px 10px;font-weight:var(--aui-font-weight-bold);background-color:rgb(var(--aui-color-n-9))}.aui-table__column-expand-button{display:flex;align-items:center;max-width:calc(10px * 2 + var(--aui-icon-size-m))}.aui-table__column-expand-button.aui-table__cell{height:58px}.aui-table__column-expand-button .aui-expand-button{display:inline-flex;justify-content:center;align-items:center;width:var(--aui-icon-size-m);height:var(--aui-icon-size-m);color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6));border-radius:50%;border:none;cursor:pointer;transition:transform .1s ease-in-out}.aui-table__column-expand-button .aui-expand-button aui-icon{display:flex;justify-content:center;align-items:center;width:var(--aui-icon-size-s);height:var(--aui-icon-size-s);font-size:var(--aui-icon-size-s)}.aui-table__column-expand-button .aui-expand-button:hover{background-color:rgb(var(--aui-color-p-7))}.aui-table__column-expand-button .aui-expand-button:active{background-color:rgb(var(--aui-color-p-5))}.aui-table__column-expand-button .aui-expand-button.isExpanded{transform:rotate(90deg);color:#fff;background-color:rgb(var(--aui-color-primary))}.aui-table__column-expand-button .aui-expand-button.isExpanded:hover{background-color:rgb(var(--aui-color-p-1))}.aui-table__column-expand-button .aui-expand-button.isExpanded:active{background-color:rgb(var(--aui-color-p-0))}.aui-table__column-expand-button .aui-expand-button[disabled],.aui-table__column-expand-button .aui-expand-button.isExpanded[disabled]{background-color:rgb(var(--aui-color-n-8));color:rgb(var(--aui-color-n-6));cursor:not-allowed}.aui-table__column-expand-panel{margin-top:-6px}.aui-table__column-expand-panel.aui-table__header-cell{display:none}.aui-table__column-expand-panel.aui-table__cell{width:100%;flex-shrink:0;flex-basis:100%;padding:0 10px;overflow:hidden}.aui-table__column-expand-panel.aui-table__cell .aui-table__cell-expand-panel{width:100%;border-radius:var(--aui-border-radius-l);overflow:hidden}.aui-table__column-expand-panel.aui-table__cell .aui-table__cell-expand-panel-content.hasBackground{padding:16px;background-color:rgb(var(--aui-color-n-9))}.aui-table-column-resizable__handle{display:block;position:absolute;top:0;bottom:0;right:0;width:5px;color:rgb(var(--aui-color-n-7));cursor:col-resize}.aui-table-column-resizable__handle:after{content:\"\";display:block;margin:12px 0 12px auto;width:1px;height:calc(100% - 24px);background-color:currentcolor}.aui-table-column-resizable__handle:hover{color:rgb(var(--aui-color-primary))}.aui-table-column-resizable__mark-line{display:block;position:absolute;top:0;bottom:0;width:1px;background-color:rgb(var(--aui-color-primary));z-index:9999;cursor:col-resize}.aui-table-column-resizable__overlay{display:block;position:absolute;inset:0;z-index:9000;cursor:col-resize}.aui-table__scroll-wrapper{position:relative;display:flex;flex-direction:column;max-height:100%;overflow:hidden;background-color:rgb(var(--aui-color-n-9));padding:0 12px 12px;border-radius:var(--aui-border-radius-l)}.aui-table__scroll-wrapper::-webkit-scrollbar{width:8px;height:4px}.aui-table__scroll-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.aui-table__scroll-wrapper::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.aui-table__scroll-wrapper::-webkit-scrollbar-corner{background-color:transparent}.aui-table__scroll-wrapper .aui-table{padding:0;border-radius:0}.aui-table__scroll-wrapper .aui-table__scroll-shadow.hasTableTopShadow:before,.aui-table__scroll-wrapper .aui-table__scroll-shadow.hasTableBottomShadow:after{transform:none;width:100%;left:0}.aui-table__scroll-shadow.aui-table{overflow:auto}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar{width:8px;height:4px}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-corner{background-color:transparent}.aui-table__scroll-shadow.hasTableTopShadow:before{content:\"\";position:sticky;display:block;height:16px;margin:-16px -12px 0;z-index:99;top:28px}:root .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow.hasTableBottomShadow:after{content:\"\";position:sticky;display:block;height:16px;transform:translate3d(0,12px,0);z-index:99;bottom:0;margin:-16px -12px 0}:root .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-1),.16) inset}html[aui-theme-mode=light] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-1),.16) inset}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-9),.75) inset}}html[aui-theme-mode=dark] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-9),.75) inset}.aui-table__scroll-shadow .aui-table__header-row{margin:0;padding:0;align-items:stretch}.aui-table__scroll-shadow .aui-table__header-row .aui-table__header-cell:first-of-type{padding-left:20px}.aui-table__scroll-shadow .aui-table__header-row .aui-table__header-cell:last-of-type{padding-right:20px}.aui-table__scroll-shadow .aui-table__header-row+.aui-table__row .aui-table__cell:first-of-type{border-top-left-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__header-row+.aui-table__row .aui-table__cell:last-of-type{border-top-right-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row{border:none;padding:0;align-items:stretch;min-height:59px}.aui-table__scroll-shadow .aui-table__row .aui-table__cell{border-width:1px 0;border-style:solid;border-color:rgb(var(--aui-color-n-8))}.aui-table__scroll-shadow .aui-table__row .aui-table__cell:first-of-type{border-left-width:1px;padding-left:19px}.aui-table__scroll-shadow .aui-table__row .aui-table__cell:last-of-type{border-right-width:1px;padding-right:19px}.aui-table__scroll-shadow .aui-table__row:last-child{min-height:60px}.aui-table__scroll-shadow .aui-table__row:last-child .aui-table__cell:first-of-type{border-bottom-left-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row:last-child .aui-table__cell:last-of-type{border-bottom-right-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row:not(:last-child) .aui-table__cell{border-bottom-width:0}.aui-table__scroll-shadow--has-scroll aui-table-header-cell.aui-table-sticky-border-elem-left .aui-table-column-resizable__handle{transform:translate(-20px)}.aui-table__scroll-shadow--has-scroll .aui-table-column-resizable__mark-line.inStickyBorderElemLeft{transform:translate(-20px)}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:after,.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:after{position:absolute;top:0;bottom:-1px;width:20px;transition:box-shadow .3s;content:\"\";pointer-events:none}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:before,.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:before{position:absolute;top:0;bottom:-1px;content:\"\";background:linear-gradient(to bottom,rgb(var(--aui-color-n-7)),rgb(var(--aui-color-n-7)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left{padding-right:30px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:after{right:-10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:before{right:10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right{padding-left:30px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:after{left:-10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:before{left:10px}:root .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):before{background:linear-gradient(to bottom,rgb(var(--aui-color-primary)),rgb(var(--aui-color-primary)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}:root .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):before{background:linear-gradient(to bottom,rgb(var(--aui-color-primary)),rgb(var(--aui-color-primary)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1$2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1$2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1$2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
11030
|
+
}
|
|
11031
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualComponent, decorators: [{
|
|
11032
|
+
type: Component,
|
|
11033
|
+
args: [{ selector: 'acl-table-virtual', exportAs: 'aclTableVirtual', standalone: true, template: `
|
|
11034
|
+
<div
|
|
11035
|
+
#scrollContainer
|
|
11036
|
+
class="aui-table aui-table__scroll-shadow"
|
|
11037
|
+
>
|
|
11038
|
+
@if (headerTemplate) {
|
|
11039
|
+
<div class="aui-table__header-row">
|
|
11040
|
+
<ng-template [ngTemplateOutlet]="headerTemplate"></ng-template>
|
|
11041
|
+
</div>
|
|
11042
|
+
}
|
|
11043
|
+
@if (placeholderTemplate) {
|
|
11044
|
+
<ng-template [ngTemplateOutlet]="placeholderTemplate"></ng-template>
|
|
11045
|
+
} @else if (!placeholderActive) {
|
|
11046
|
+
<cdk-virtual-scroll-viewport
|
|
11047
|
+
[itemSize]="itemSize"
|
|
11048
|
+
[minBufferPx]="minBufferPx"
|
|
11049
|
+
[maxBufferPx]="maxBufferPx"
|
|
11050
|
+
class="aui-table__body-viewport"
|
|
11051
|
+
[style.height]="height"
|
|
11052
|
+
>
|
|
11053
|
+
<div
|
|
11054
|
+
class="aui-table__row"
|
|
11055
|
+
*cdkVirtualFor="
|
|
11056
|
+
let item of dataSource;
|
|
11057
|
+
let index = index;
|
|
11058
|
+
let odd = odd;
|
|
11059
|
+
let even = even;
|
|
11060
|
+
let last = last;
|
|
11061
|
+
trackBy: trackBy
|
|
11062
|
+
"
|
|
11063
|
+
>
|
|
11064
|
+
<ng-template
|
|
11065
|
+
[ngTemplateOutlet]="rowTemplate"
|
|
11066
|
+
[ngTemplateOutletContext]="{
|
|
11067
|
+
$implicit: item,
|
|
11068
|
+
index,
|
|
11069
|
+
odd,
|
|
11070
|
+
even,
|
|
11071
|
+
last,
|
|
11072
|
+
}"
|
|
11073
|
+
></ng-template>
|
|
11074
|
+
</div>
|
|
11075
|
+
</cdk-virtual-scroll-viewport>
|
|
11076
|
+
}
|
|
11077
|
+
</div>
|
|
11078
|
+
`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ScrollingModule, NgTemplateOutlet], styles: [":host{display:block}.aui-table__body-viewport{display:block}cdk-virtual-scroll-viewport::-webkit-scrollbar{width:8px;height:4px}cdk-virtual-scroll-viewport::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}cdk-virtual-scroll-viewport::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}cdk-virtual-scroll-viewport::-webkit-scrollbar-corner{background-color:transparent}.aui-table{position:relative;display:block;padding:0 12px 12px}.aui-table{font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-main-text))}.aui-table{background-color:rgb(var(--aui-color-n-9));border-radius:var(--aui-border-radius-l)}.aui-table__row,.aui-table__header-row{display:flex;align-items:center}.aui-table__row.hasPanel,.aui-table__header-row.hasPanel{flex-wrap:wrap}.aui-table__header-row+.aui-table__row{border-top-left-radius:var(--aui-border-radius-l);border-top-right-radius:var(--aui-border-radius-l)}.aui-table__row{position:relative;border-width:1px;border-style:solid;border-color:rgb(var(--aui-color-n-8));border-bottom-width:0;background-color:rgb(var(--aui-color-n-10));padding:0 9px;min-height:58px;box-sizing:content-box}.aui-table__row:first-child{border-top-left-radius:var(--aui-border-radius-l);border-top-right-radius:var(--aui-border-radius-l)}.aui-table__row:last-of-type{border-bottom-width:1px;min-height:58px;border-bottom-left-radius:var(--aui-border-radius-l);border-bottom-right-radius:var(--aui-border-radius-l)}.aui-table__row.isDisabled:before{content:\"\";z-index:2;position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgb(var(--aui-color-n-10));opacity:.7;cursor:not-allowed}.aui-table__header-row{background-color:rgb(var(--aui-color-n-9));padding:0 10px}.aui-table__cell,.aui-table__header-cell{display:flex;align-items:center;flex:1;position:relative}.aui-table__cell{padding:15px 10px;background-color:rgb(var(--aui-color-n-10));overflow:hidden}.aui-table__cell--column{flex-direction:column;justify-content:center;align-items:flex-start}.aui-table__header-cell{padding:12px 10px;font-weight:var(--aui-font-weight-bold);background-color:rgb(var(--aui-color-n-9))}.aui-table__column-expand-button{display:flex;align-items:center;max-width:calc(10px * 2 + var(--aui-icon-size-m))}.aui-table__column-expand-button.aui-table__cell{height:58px}.aui-table__column-expand-button .aui-expand-button{display:inline-flex;justify-content:center;align-items:center;width:var(--aui-icon-size-m);height:var(--aui-icon-size-m);color:rgb(var(--aui-color-primary));background-color:rgb(var(--aui-color-p-6));border-radius:50%;border:none;cursor:pointer;transition:transform .1s ease-in-out}.aui-table__column-expand-button .aui-expand-button aui-icon{display:flex;justify-content:center;align-items:center;width:var(--aui-icon-size-s);height:var(--aui-icon-size-s);font-size:var(--aui-icon-size-s)}.aui-table__column-expand-button .aui-expand-button:hover{background-color:rgb(var(--aui-color-p-7))}.aui-table__column-expand-button .aui-expand-button:active{background-color:rgb(var(--aui-color-p-5))}.aui-table__column-expand-button .aui-expand-button.isExpanded{transform:rotate(90deg);color:#fff;background-color:rgb(var(--aui-color-primary))}.aui-table__column-expand-button .aui-expand-button.isExpanded:hover{background-color:rgb(var(--aui-color-p-1))}.aui-table__column-expand-button .aui-expand-button.isExpanded:active{background-color:rgb(var(--aui-color-p-0))}.aui-table__column-expand-button .aui-expand-button[disabled],.aui-table__column-expand-button .aui-expand-button.isExpanded[disabled]{background-color:rgb(var(--aui-color-n-8));color:rgb(var(--aui-color-n-6));cursor:not-allowed}.aui-table__column-expand-panel{margin-top:-6px}.aui-table__column-expand-panel.aui-table__header-cell{display:none}.aui-table__column-expand-panel.aui-table__cell{width:100%;flex-shrink:0;flex-basis:100%;padding:0 10px;overflow:hidden}.aui-table__column-expand-panel.aui-table__cell .aui-table__cell-expand-panel{width:100%;border-radius:var(--aui-border-radius-l);overflow:hidden}.aui-table__column-expand-panel.aui-table__cell .aui-table__cell-expand-panel-content.hasBackground{padding:16px;background-color:rgb(var(--aui-color-n-9))}.aui-table-column-resizable__handle{display:block;position:absolute;top:0;bottom:0;right:0;width:5px;color:rgb(var(--aui-color-n-7));cursor:col-resize}.aui-table-column-resizable__handle:after{content:\"\";display:block;margin:12px 0 12px auto;width:1px;height:calc(100% - 24px);background-color:currentcolor}.aui-table-column-resizable__handle:hover{color:rgb(var(--aui-color-primary))}.aui-table-column-resizable__mark-line{display:block;position:absolute;top:0;bottom:0;width:1px;background-color:rgb(var(--aui-color-primary));z-index:9999;cursor:col-resize}.aui-table-column-resizable__overlay{display:block;position:absolute;inset:0;z-index:9000;cursor:col-resize}.aui-table__scroll-wrapper{position:relative;display:flex;flex-direction:column;max-height:100%;overflow:hidden;background-color:rgb(var(--aui-color-n-9));padding:0 12px 12px;border-radius:var(--aui-border-radius-l)}.aui-table__scroll-wrapper::-webkit-scrollbar{width:8px;height:4px}.aui-table__scroll-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.aui-table__scroll-wrapper::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.aui-table__scroll-wrapper::-webkit-scrollbar-corner{background-color:transparent}.aui-table__scroll-wrapper .aui-table{padding:0;border-radius:0}.aui-table__scroll-wrapper .aui-table__scroll-shadow.hasTableTopShadow:before,.aui-table__scroll-wrapper .aui-table__scroll-shadow.hasTableBottomShadow:after{transform:none;width:100%;left:0}.aui-table__scroll-shadow.aui-table{overflow:auto}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar{width:8px;height:4px}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.aui-table__scroll-shadow.aui-table::-webkit-scrollbar-corner{background-color:transparent}.aui-table__scroll-shadow.hasTableTopShadow:before{content:\"\";position:sticky;display:block;height:16px;margin:-16px -12px 0;z-index:99;top:28px}:root .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow.hasTableTopShadow:before{box-shadow:0 10px 10px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow.hasTableBottomShadow:after{content:\"\";position:sticky;display:block;height:16px;transform:translate3d(0,12px,0);z-index:99;bottom:0;margin:-16px -12px 0}:root .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-1),.16) inset}html[aui-theme-mode=light] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-1),.16) inset}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-9),.75) inset}}html[aui-theme-mode=dark] .aui-table__scroll-shadow.hasTableBottomShadow:after{box-shadow:0 -10px 10px -4px rgba(var(--aui-color-n-9),.75) inset}.aui-table__scroll-shadow .aui-table__header-row{margin:0;padding:0;align-items:stretch}.aui-table__scroll-shadow .aui-table__header-row .aui-table__header-cell:first-of-type{padding-left:20px}.aui-table__scroll-shadow .aui-table__header-row .aui-table__header-cell:last-of-type{padding-right:20px}.aui-table__scroll-shadow .aui-table__header-row+.aui-table__row .aui-table__cell:first-of-type{border-top-left-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__header-row+.aui-table__row .aui-table__cell:last-of-type{border-top-right-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row{border:none;padding:0;align-items:stretch;min-height:59px}.aui-table__scroll-shadow .aui-table__row .aui-table__cell{border-width:1px 0;border-style:solid;border-color:rgb(var(--aui-color-n-8))}.aui-table__scroll-shadow .aui-table__row .aui-table__cell:first-of-type{border-left-width:1px;padding-left:19px}.aui-table__scroll-shadow .aui-table__row .aui-table__cell:last-of-type{border-right-width:1px;padding-right:19px}.aui-table__scroll-shadow .aui-table__row:last-child{min-height:60px}.aui-table__scroll-shadow .aui-table__row:last-child .aui-table__cell:first-of-type{border-bottom-left-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row:last-child .aui-table__cell:last-of-type{border-bottom-right-radius:var(--aui-border-radius-l)}.aui-table__scroll-shadow .aui-table__row:not(:last-child) .aui-table__cell{border-bottom-width:0}.aui-table__scroll-shadow--has-scroll aui-table-header-cell.aui-table-sticky-border-elem-left .aui-table-column-resizable__handle{transform:translate(-20px)}.aui-table__scroll-shadow--has-scroll .aui-table-column-resizable__mark-line.inStickyBorderElemLeft{transform:translate(-20px)}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:after,.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:after{position:absolute;top:0;bottom:-1px;width:20px;transition:box-shadow .3s;content:\"\";pointer-events:none}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:before,.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:before{position:absolute;top:0;bottom:-1px;content:\"\";background:linear-gradient(to bottom,rgb(var(--aui-color-n-7)),rgb(var(--aui-color-n-7)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left{padding-right:30px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:after{right:-10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-left:before{right:10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right{padding-left:30px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:after{left:-10px}.aui-table__scroll-shadow--has-scroll .aui-table-sticky-border-elem-right:before{left:10px}:root .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):after{box-shadow:inset 8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow--scrolling .aui-table-sticky-border-elem-left:not(.aui-table__header-row):before{background:linear-gradient(to bottom,rgb(var(--aui-color-primary)),rgb(var(--aui-color-primary)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}:root .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}html[aui-theme-mode=light] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-1),.16)}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}}html[aui-theme-mode=dark] .aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):after{box-shadow:inset -8px 0 4px -4px rgba(var(--aui-color-n-9),.75)}.aui-table__scroll-shadow--before-end .aui-table-sticky-border-elem-right:not(.aui-table__header-row):before{background:linear-gradient(to bottom,rgb(var(--aui-color-primary)),rgb(var(--aui-color-primary)) 8px,transparent 6px,transparent);width:1px;background-size:100% 14px;height:100%}\n"] }]
|
|
11079
|
+
}], propDecorators: { dataSource: [{
|
|
11080
|
+
type: Input
|
|
11081
|
+
}], itemSize: [{
|
|
11082
|
+
type: Input
|
|
11083
|
+
}], minBufferPx: [{
|
|
11084
|
+
type: Input
|
|
11085
|
+
}], maxBufferPx: [{
|
|
11086
|
+
type: Input
|
|
11087
|
+
}], height: [{
|
|
11088
|
+
type: Input
|
|
11089
|
+
}], trackBy: [{
|
|
11090
|
+
type: Input
|
|
11091
|
+
}], placeholderActive: [{
|
|
11092
|
+
type: Input
|
|
11093
|
+
}], headerTemplate: [{
|
|
11094
|
+
type: ContentChild,
|
|
11095
|
+
args: [AclTableVirtualHeaderDefDirective, { read: TemplateRef }]
|
|
11096
|
+
}], rowTemplate: [{
|
|
11097
|
+
type: ContentChild,
|
|
11098
|
+
args: [(AclTableVirtualRowDefDirective), { read: TemplateRef }]
|
|
11099
|
+
}], placeholderTemplate: [{
|
|
11100
|
+
type: ContentChild,
|
|
11101
|
+
args: [AclTableVirtualPlaceholderDefDirective, { read: TemplateRef }]
|
|
11102
|
+
}], viewport: [{
|
|
11103
|
+
type: ViewChild,
|
|
11104
|
+
args: [CdkVirtualScrollViewport]
|
|
11105
|
+
}], scrollContainerRef: [{
|
|
11106
|
+
type: ViewChild,
|
|
11107
|
+
args: ['scrollContainer', { static: true }]
|
|
11108
|
+
}] } });
|
|
11109
|
+
|
|
11110
|
+
class AclTableVirtualModule {
|
|
11111
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
11112
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualModule, imports: [AclTableVirtualComponent,
|
|
11113
|
+
AclTableVirtualHeaderDefDirective,
|
|
11114
|
+
AclTableVirtualRowDefDirective,
|
|
11115
|
+
AclTableVirtualPlaceholderDefDirective], exports: [AclTableVirtualComponent,
|
|
11116
|
+
AclTableVirtualHeaderDefDirective,
|
|
11117
|
+
AclTableVirtualRowDefDirective,
|
|
11118
|
+
AclTableVirtualPlaceholderDefDirective] }); }
|
|
11119
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualModule, imports: [AclTableVirtualComponent] }); }
|
|
11120
|
+
}
|
|
11121
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AclTableVirtualModule, decorators: [{
|
|
11122
|
+
type: NgModule,
|
|
11123
|
+
args: [{
|
|
11124
|
+
imports: [
|
|
11125
|
+
AclTableVirtualComponent,
|
|
11126
|
+
AclTableVirtualHeaderDefDirective,
|
|
11127
|
+
AclTableVirtualRowDefDirective,
|
|
11128
|
+
AclTableVirtualPlaceholderDefDirective,
|
|
11129
|
+
],
|
|
11130
|
+
exports: [
|
|
11131
|
+
AclTableVirtualComponent,
|
|
11132
|
+
AclTableVirtualHeaderDefDirective,
|
|
11133
|
+
AclTableVirtualRowDefDirective,
|
|
11134
|
+
AclTableVirtualPlaceholderDefDirective,
|
|
11135
|
+
],
|
|
11136
|
+
}]
|
|
11137
|
+
}] });
|
|
11138
|
+
|
|
11139
|
+
class TerminatingTagComponent {
|
|
11140
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TerminatingTagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11141
|
+
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 }); }
|
|
11142
|
+
}
|
|
11143
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TerminatingTagComponent, decorators: [{
|
|
11144
|
+
type: Component,
|
|
11145
|
+
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"] }]
|
|
11146
|
+
}], propDecorators: { resource: [{
|
|
11147
|
+
type: Input
|
|
11148
|
+
}] } });
|
|
11149
|
+
|
|
11150
|
+
class PluginClusterSelectorComponent {
|
|
11151
|
+
constructor() {
|
|
11152
|
+
this.valueChange = new EventEmitter();
|
|
11153
|
+
this.isActive = false;
|
|
11154
|
+
this.popupService = inject(ResourceSelectorPopupService);
|
|
11155
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
11156
|
+
this.elementRef = inject(ElementRef);
|
|
11157
|
+
this.http = inject(HttpClient);
|
|
11158
|
+
this.projectApi = inject(ProjectService);
|
|
11159
|
+
this.displayFields = [
|
|
11160
|
+
ConfigurableField.Status,
|
|
11161
|
+
ConfigurableField.Time,
|
|
11162
|
+
];
|
|
11163
|
+
this.filterClusters$ = this.disabled$.pipe(distinctUntilChanged(isEqual), switchMap(disabled => disabled
|
|
11164
|
+
? EMPTY$1
|
|
11165
|
+
: this.projectApi
|
|
11166
|
+
.getProjects()
|
|
11167
|
+
.pipe(map(projects => projects
|
|
11168
|
+
?.find(p => p.metadata.name === this.projectName)
|
|
11169
|
+
?.spec?.clusters?.map(r => r.name)))), publishRef());
|
|
11170
|
+
}
|
|
11171
|
+
getFilterFn(filterClusters) {
|
|
11172
|
+
return (clusters) => {
|
|
11173
|
+
if (!filterClusters?.length) {
|
|
11174
|
+
return clusters;
|
|
11175
|
+
}
|
|
11176
|
+
return clusters.filter(c => filterClusters.includes(c.name));
|
|
11177
|
+
};
|
|
11178
|
+
}
|
|
11179
|
+
ngAfterViewInit() {
|
|
11180
|
+
this.http
|
|
11181
|
+
.get(`${API_GATEWAY$1}/auth/v1/clusters`)
|
|
11182
|
+
.pipe(map(list => list.items), catchError(() => of([])))
|
|
11183
|
+
.subscribe(clusters => {
|
|
11184
|
+
this.onSelect({ name: clusters[0].metadata.name });
|
|
11185
|
+
});
|
|
11186
|
+
}
|
|
11187
|
+
openPopup() {
|
|
11188
|
+
if (this.disabled) {
|
|
11189
|
+
return;
|
|
11190
|
+
}
|
|
11191
|
+
if (this.isActive) {
|
|
11192
|
+
this.closePopup();
|
|
11193
|
+
}
|
|
11194
|
+
else {
|
|
11195
|
+
this.isActive = true;
|
|
11196
|
+
this.popupRef = this.popupService.open({
|
|
11197
|
+
origin: this.elementRef,
|
|
11198
|
+
content: this.popupTemplate,
|
|
11199
|
+
});
|
|
11200
|
+
this.popupRef.afterClosed().subscribe(() => {
|
|
11201
|
+
this.isActive = false;
|
|
11202
|
+
this.cdr.markForCheck();
|
|
11203
|
+
});
|
|
11204
|
+
}
|
|
11205
|
+
}
|
|
11206
|
+
closePopup() {
|
|
11207
|
+
if (this.isActive) {
|
|
11208
|
+
this.isActive = false;
|
|
11209
|
+
this.popupRef.close();
|
|
11210
|
+
}
|
|
11211
|
+
}
|
|
11212
|
+
onSelect(item) {
|
|
11213
|
+
this.value = item.name;
|
|
11214
|
+
this.valueChange.emit(item.name);
|
|
11215
|
+
this.closePopup();
|
|
11216
|
+
}
|
|
11217
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PluginClusterSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11218
|
+
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 }); }
|
|
11219
|
+
}
|
|
11220
|
+
__decorate([
|
|
11221
|
+
ObservableInput(),
|
|
11222
|
+
__metadata("design:type", Observable)
|
|
11223
|
+
], PluginClusterSelectorComponent.prototype, "disabled$", void 0);
|
|
11224
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PluginClusterSelectorComponent, decorators: [{
|
|
11225
|
+
type: Component,
|
|
11226
|
+
args: [{ selector: 'acl-plugin-cluster-selector', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
11227
|
+
CommonModule,
|
|
11228
|
+
ClusterListComponent,
|
|
11229
|
+
NgClass,
|
|
11230
|
+
IconComponent,
|
|
11231
|
+
TranslatePipe,
|
|
11232
|
+
], 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"] }]
|
|
11233
|
+
}], propDecorators: { value: [{
|
|
11234
|
+
type: Input
|
|
11235
|
+
}], valueChange: [{
|
|
11236
|
+
type: Output
|
|
11237
|
+
}], disabled: [{
|
|
11238
|
+
type: Input,
|
|
11239
|
+
args: [{ transform: booleanAttribute }]
|
|
11240
|
+
}], disabled$: [], projectName: [{
|
|
11241
|
+
type: Input
|
|
11242
|
+
}], popupTemplate: [{
|
|
11243
|
+
type: ViewChild,
|
|
11244
|
+
args: ['popup', { static: true }]
|
|
11245
|
+
}], fields: [{
|
|
11246
|
+
type: Input
|
|
11247
|
+
}] } });
|
|
11248
|
+
|
|
10918
11249
|
class UpdateDescriptionDialogComponent {
|
|
10919
|
-
constructor(
|
|
10920
|
-
this.dialogRef =
|
|
10921
|
-
this.k8sApi =
|
|
10922
|
-
this.k8sUtil =
|
|
10923
|
-
this.data =
|
|
11250
|
+
constructor() {
|
|
11251
|
+
this.dialogRef = inject(DialogRef);
|
|
11252
|
+
this.k8sApi = inject(K8sApiService);
|
|
11253
|
+
this.k8sUtil = inject(K8sUtilService);
|
|
11254
|
+
this.data = inject(DIALOG_DATA);
|
|
10924
11255
|
this.description = this.k8sUtil.getDescription(this.data.resource);
|
|
10925
11256
|
this.confirming$$ = new BehaviorSubject(false);
|
|
10926
11257
|
}
|
|
@@ -10928,14 +11259,7 @@ class UpdateDescriptionDialogComponent {
|
|
|
10928
11259
|
this.confirming$$.next(true);
|
|
10929
11260
|
this.k8sApi
|
|
10930
11261
|
.patchResource({
|
|
10931
|
-
|
|
10932
|
-
? {
|
|
10933
|
-
definition: this.data.definition,
|
|
10934
|
-
}
|
|
10935
|
-
: {
|
|
10936
|
-
type: this.data.type ||
|
|
10937
|
-
snakeCase(this.data.resource.kind).toUpperCase(),
|
|
10938
|
-
}),
|
|
11262
|
+
definition: this.data.definition,
|
|
10939
11263
|
cluster: this.data.cluster,
|
|
10940
11264
|
resource: this.data.resource,
|
|
10941
11265
|
part: {
|
|
@@ -10949,8 +11273,8 @@ class UpdateDescriptionDialogComponent {
|
|
|
10949
11273
|
.pipe(finalize(() => this.confirming$$.next(false)))
|
|
10950
11274
|
.subscribe(resource => this.dialogRef.close(resource));
|
|
10951
11275
|
}
|
|
10952
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateDescriptionDialogComponent, deps: [
|
|
10953
|
-
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:
|
|
11276
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateDescriptionDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11277
|
+
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 }); }
|
|
10954
11278
|
}
|
|
10955
11279
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateDescriptionDialogComponent, decorators: [{
|
|
10956
11280
|
type: Component,
|
|
@@ -10964,10 +11288,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
10964
11288
|
TranslatePipe,
|
|
10965
11289
|
K8S_UTIL_PIPES_MODULE,
|
|
10966
11290
|
], 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" }]
|
|
10967
|
-
}]
|
|
10968
|
-
type: Inject,
|
|
10969
|
-
args: [DIALOG_DATA]
|
|
10970
|
-
}] }] });
|
|
11291
|
+
}] });
|
|
10971
11292
|
|
|
10972
11293
|
class UpdateDisplayNameDialogComponent {
|
|
10973
11294
|
constructor() {
|
|
@@ -10997,7 +11318,7 @@ class UpdateDisplayNameDialogComponent {
|
|
|
10997
11318
|
.subscribe(resource => this.dialogRef.close(resource));
|
|
10998
11319
|
}
|
|
10999
11320
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateDisplayNameDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11000
|
-
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:
|
|
11321
|
+
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 }); }
|
|
11001
11322
|
}
|
|
11002
11323
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateDisplayNameDialogComponent, decorators: [{
|
|
11003
11324
|
type: Component,
|
|
@@ -11263,7 +11584,7 @@ class ArrayFormTableComponent {
|
|
|
11263
11584
|
this.destroy$$.complete();
|
|
11264
11585
|
}
|
|
11265
11586
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ArrayFormTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11266
|
-
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 }); }
|
|
11587
|
+
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 }); }
|
|
11267
11588
|
}
|
|
11268
11589
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ArrayFormTableComponent, decorators: [{
|
|
11269
11590
|
type: Component,
|
|
@@ -11277,7 +11598,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
11277
11598
|
AsyncPipe,
|
|
11278
11599
|
TranslatePipe,
|
|
11279
11600
|
EFFECT_DIRECTIVE_MODULE,
|
|
11280
|
-
], 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" }]
|
|
11601
|
+
], 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"] }]
|
|
11281
11602
|
}], propDecorators: { headerTemplate: [{
|
|
11282
11603
|
type: ContentChild,
|
|
11283
11604
|
args: [ArrayFormTableHeaderDirective, {
|
|
@@ -11477,11 +11798,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
11477
11798
|
}] } });
|
|
11478
11799
|
|
|
11479
11800
|
class UpdateKeyValueDialogComponent {
|
|
11480
|
-
constructor(
|
|
11481
|
-
this.dialogRef =
|
|
11482
|
-
this.message =
|
|
11483
|
-
this.translate =
|
|
11484
|
-
this.data =
|
|
11801
|
+
constructor() {
|
|
11802
|
+
this.dialogRef = inject(DialogRef);
|
|
11803
|
+
this.message = inject(MessageService);
|
|
11804
|
+
this.translate = inject(TranslateService);
|
|
11805
|
+
this.data = inject(DIALOG_DATA, {
|
|
11806
|
+
optional: true,
|
|
11807
|
+
}) ?? {};
|
|
11485
11808
|
this.onUpdate$$ = new Subject();
|
|
11486
11809
|
this.submitting$$ = new BehaviorSubject(false);
|
|
11487
11810
|
this.destroy$$ = new Subject();
|
|
@@ -11520,7 +11843,7 @@ class UpdateKeyValueDialogComponent {
|
|
|
11520
11843
|
this.destroy$$.next();
|
|
11521
11844
|
this.destroy$$.complete();
|
|
11522
11845
|
}
|
|
11523
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateKeyValueDialogComponent, deps: [
|
|
11846
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateKeyValueDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11524
11847
|
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 }); }
|
|
11525
11848
|
}
|
|
11526
11849
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: UpdateKeyValueDialogComponent, decorators: [{
|
|
@@ -11533,12 +11856,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
11533
11856
|
ButtonComponent,
|
|
11534
11857
|
AsyncPipe,
|
|
11535
11858
|
], 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" }]
|
|
11536
|
-
}], ctorParameters: () => [
|
|
11537
|
-
type: Optional
|
|
11538
|
-
}, {
|
|
11539
|
-
type: Inject,
|
|
11540
|
-
args: [DIALOG_DATA]
|
|
11541
|
-
}] }] });
|
|
11859
|
+
}], ctorParameters: () => [] });
|
|
11542
11860
|
|
|
11543
11861
|
class K8sSharedUtilService extends K8sUtilService {
|
|
11544
11862
|
constructor() {
|
|
@@ -11966,14 +12284,25 @@ class CodeDisplayDialogComponent {
|
|
|
11966
12284
|
};
|
|
11967
12285
|
}
|
|
11968
12286
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: CodeDisplayDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11969
|
-
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: "
|
|
12287
|
+
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 }); }
|
|
11970
12288
|
}
|
|
11971
12289
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: CodeDisplayDialogComponent, decorators: [{
|
|
11972
12290
|
type: Component,
|
|
11973
|
-
args: [{ preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [DIALOG_MODULE,
|
|
12291
|
+
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" }]
|
|
11974
12292
|
}], ctorParameters: () => [] });
|
|
11975
12293
|
|
|
11976
|
-
|
|
12294
|
+
/**
|
|
12295
|
+
* @packageDocumentation
|
|
12296
|
+
* @module code
|
|
12297
|
+
*/
|
|
12298
|
+
// for logs
|
|
12299
|
+
const logsReadOptions = {
|
|
12300
|
+
wordWrap: 'on',
|
|
12301
|
+
readOnly: true,
|
|
12302
|
+
renderLineHighlight: 'none',
|
|
12303
|
+
};
|
|
12304
|
+
|
|
12305
|
+
class ResourceYamlDisplayComponent {
|
|
11977
12306
|
constructor() {
|
|
11978
12307
|
this.concise$$ = new BehaviorSubject(false);
|
|
11979
12308
|
this.reduce$$ = new BehaviorSubject(true);
|
|
@@ -11996,7 +12325,7 @@ class ResourceYamlDisplayComponent {
|
|
|
11996
12325
|
}
|
|
11997
12326
|
}
|
|
11998
12327
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceYamlDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11999
|
-
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: "
|
|
12328
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: ResourceYamlDisplayComponent, isStandalone: true, selector: "acl-resource-yaml-display", inputs: { hasWrapper: "hasWrapper", conciseEnable: "conciseEnable", manageFieldActionEnable: "manageFieldActionEnable", resource: "resource" }, ngImport: i0, template: "@if (hasWrapper) {\n <aui-card>\n <ng-container *ngTemplateOutlet=\"content\" />\n </aui-card>\n} @else {\n <aui-code-editor\n name=\"yaml\"\n [ngModel]=\"yaml$ | async\"\n [options]=\"editorOptions\"\n [actionsConfig]=\"viewActions\"\n >\n <ng-container auiCodeEditorToolbarLeft>\n @if (conciseEnable) {\n <aui-checkbox\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"concise$$ | async\"\n (ngModelChange)=\"conciseChange($event)\"\n >\n {{ 'preview_concise_yaml' | translate }}\n </aui-checkbox>\n }\n @if (manageFieldActionEnable) {\n <aui-checkbox\n [hidden]=\"concise$$ | async\"\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"reduce$$ | async\"\n (ngModelChange)=\"reduce$$.next($event)\"\n >\n {{ 'hide_manage_fields_field' | translate }}\n </aui-checkbox>\n }\n </ng-container>\n </aui-code-editor>\n}\n<ng-template #content>\n <aui-code-editor\n name=\"yaml\"\n [ngModel]=\"yaml$ | async\"\n [options]=\"editorOptions\"\n [actionsConfig]=\"viewActions\"\n >\n <ng-container auiCodeEditorToolbarLeft>\n @if (conciseEnable) {\n <aui-checkbox\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"concise$$ | async\"\n (ngModelChange)=\"conciseChange($event)\"\n >\n {{ 'preview_concise_yaml' | translate }}\n </aui-checkbox>\n }\n @if (manageFieldActionEnable) {\n <aui-checkbox\n [hidden]=\"concise$$ | async\"\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"reduce$$ | async\"\n (ngModelChange)=\"reduce$$.next($event)\"\n >\n {{ 'hide_manage_fields_field' | translate }}\n </aui-checkbox>\n }\n </ng-container>\n </aui-code-editor>\n</ng-template>\n", styles: [":host(:not(.dialog-content)) ::ng-deep .aui-code-editor{min-height:100%}:host(:not(.dialog-content)){display:block;height:calc(100vh - (var(--acl-page-header-height) + 44px) - 147px)}:host(:not(.dialog-content))>.aui-card{height:100%}:host(:not(.dialog-content))>.aui-card .aui-card__content,:host(:not(.dialog-content))>.aui-card aui-code-editor,:host(:not(.dialog-content))>.aui-card .aui-code-editor{height:100%;min-height:100%}:host{display:block}:host ::ng-deep aui-card,:host ::ng-deep .aui-card,:host ::ng-deep .aui-card__content{height:100%}:host ::ng-deep .aui-checkbox{margin-right:0}:host aui-code-editor{height:100%}\n"], dependencies: [{ kind: "component", type: i1.CardComponent, selector: "aui-card", inputs: ["divider"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.CheckboxComponent, selector: "aui-checkbox", inputs: ["name", "type", "label", "indeterminate"] }, { kind: "component", type: CodeEditorComponent, selector: "aui-code-editor", inputs: ["options", "plain", "showLanguageLabel", "value", "originalValue", "actionsConfig", "previewMode", "diffMode", "modelUri"], outputs: ["editorChange", "editorBlur"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12000
12329
|
}
|
|
12001
12330
|
__decorate([
|
|
12002
12331
|
ObservableInput(),
|
|
@@ -12008,7 +12337,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
12008
12337
|
CARD_MODULE,
|
|
12009
12338
|
FormsModule,
|
|
12010
12339
|
CHECKBOX_MODULE,
|
|
12011
|
-
|
|
12340
|
+
CodeEditorComponent,
|
|
12012
12341
|
TranslatePipe,
|
|
12013
12342
|
AsyncPipe,
|
|
12014
12343
|
NgTemplateOutlet,
|
|
@@ -12023,10 +12352,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
12023
12352
|
type: Input
|
|
12024
12353
|
}], resource$: [] } });
|
|
12025
12354
|
|
|
12026
|
-
/**
|
|
12027
|
-
* @packageDocumentation
|
|
12028
|
-
* @module code
|
|
12029
|
-
*/
|
|
12030
12355
|
class K8sYamlDisplayDialogComponent {
|
|
12031
12356
|
constructor() {
|
|
12032
12357
|
this.data = inject(DIALOG_DATA);
|
|
@@ -12039,6 +12364,1114 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
12039
12364
|
args: [{ preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [DIALOG_MODULE, TranslatePipe, ResourceYamlDisplayComponent], template: "<aui-dialog-header [divider]=\"false\">\n <div [class.ellipsis-dialog-header]=\"data.ellipsis\">\n <span [class.text-ellipsis]=\"data.ellipsis\">\n {{ data.title || ('view_yaml' | translate) }}\n </span>\n @if (data.extra) {\n <span class=\"extra\">{{ data.extra }}</span>\n }\n </div>\n</aui-dialog-header>\n<aui-dialog-content>\n <acl-resource-yaml-display\n [resource]=\"data.resource\"\n [hasWrapper]=\"false\"\n class=\"dialog-content\"\n ></acl-resource-yaml-display>\n</aui-dialog-content>\n" }]
|
|
12040
12365
|
}] });
|
|
12041
12366
|
|
|
12367
|
+
/**
|
|
12368
|
+
* 自动折叠 managedFields 字段
|
|
12369
|
+
* @param monacoEditor Monaco 编辑器实例
|
|
12370
|
+
*/
|
|
12371
|
+
function foldManagedFields(monacoEditor) {
|
|
12372
|
+
if (!monacoEditor) {
|
|
12373
|
+
return;
|
|
12374
|
+
}
|
|
12375
|
+
const model = monacoEditor.getModel();
|
|
12376
|
+
if (!model) {
|
|
12377
|
+
return;
|
|
12378
|
+
}
|
|
12379
|
+
try {
|
|
12380
|
+
// 查找所有 managedFields 字段(只在 metadata 下的)
|
|
12381
|
+
const managedFieldsMatches = model.findMatches('^(\\s+)managedFields:', false, true, false, null, true);
|
|
12382
|
+
if (managedFieldsMatches && managedFieldsMatches.length > 0) {
|
|
12383
|
+
const foldingRanges = [];
|
|
12384
|
+
for (const match of managedFieldsMatches) {
|
|
12385
|
+
const startLine = match.range.startLineNumber;
|
|
12386
|
+
const endLine = findManagedFieldsEndLine(model, startLine);
|
|
12387
|
+
if (endLine > startLine) {
|
|
12388
|
+
foldingRanges.push({
|
|
12389
|
+
startLineNumber: startLine,
|
|
12390
|
+
startColumn: 1,
|
|
12391
|
+
endLineNumber: endLine,
|
|
12392
|
+
endColumn: model.getLineMaxColumn(endLine),
|
|
12393
|
+
});
|
|
12394
|
+
}
|
|
12395
|
+
}
|
|
12396
|
+
if (foldingRanges.length > 0) {
|
|
12397
|
+
// 递归折叠每个 managedFields 区域,确保每次折叠完成后再进行下一次
|
|
12398
|
+
foldRangesSequentially(monacoEditor, foldingRanges?.reverse(), 0);
|
|
12399
|
+
}
|
|
12400
|
+
}
|
|
12401
|
+
}
|
|
12402
|
+
catch (error) {
|
|
12403
|
+
console.warn('Failed to fold managedFields:', error);
|
|
12404
|
+
}
|
|
12405
|
+
}
|
|
12406
|
+
/**
|
|
12407
|
+
* 递归折叠多个区域,确保每次折叠完成后再进行下一次
|
|
12408
|
+
* @param monacoEditor Monaco 编辑器实例
|
|
12409
|
+
* @param foldingRanges 折叠区域数组
|
|
12410
|
+
* @param index 当前折叠的索引
|
|
12411
|
+
*/
|
|
12412
|
+
async function foldRangesSequentially(monacoEditor, foldingRanges, index) {
|
|
12413
|
+
if (index >= foldingRanges.length) {
|
|
12414
|
+
return;
|
|
12415
|
+
}
|
|
12416
|
+
const range = foldingRanges[index];
|
|
12417
|
+
monacoEditor.setSelection(range);
|
|
12418
|
+
await Promise.resolve(monacoEditor.getAction('editor.fold')?.run());
|
|
12419
|
+
return foldRangesSequentially(monacoEditor, foldingRanges, index + 1);
|
|
12420
|
+
}
|
|
12421
|
+
/**
|
|
12422
|
+
* 查找 managedFields 字段的结束行
|
|
12423
|
+
* @param model Monaco 编辑器模型
|
|
12424
|
+
* @param startLine 起始行号
|
|
12425
|
+
* @returns 结束行号
|
|
12426
|
+
*/
|
|
12427
|
+
function findManagedFieldsEndLine(model, startLine) {
|
|
12428
|
+
const totalLines = model.getLineCount();
|
|
12429
|
+
const startIndent = getLineIndentation(model, startLine);
|
|
12430
|
+
// 从下一行开始查找
|
|
12431
|
+
for (let line = startLine + 1; line <= totalLines; line++) {
|
|
12432
|
+
const lineContent = model.getLineContent(line).trim();
|
|
12433
|
+
// 跳过空行
|
|
12434
|
+
if (!lineContent) {
|
|
12435
|
+
continue;
|
|
12436
|
+
}
|
|
12437
|
+
const currentIndent = getLineIndentation(model, line);
|
|
12438
|
+
// 如果缩进小于等于起始行,说明 managedFields 字段结束
|
|
12439
|
+
if (currentIndent <= startIndent) {
|
|
12440
|
+
return line - 1;
|
|
12441
|
+
}
|
|
12442
|
+
}
|
|
12443
|
+
return totalLines;
|
|
12444
|
+
}
|
|
12445
|
+
/**
|
|
12446
|
+
* 获取行的缩进级别
|
|
12447
|
+
* @param model Monaco 编辑器模型
|
|
12448
|
+
* @param lineNumber 行号
|
|
12449
|
+
* @returns 缩进级别(空格数)
|
|
12450
|
+
*/
|
|
12451
|
+
function getLineIndentation(model, lineNumber) {
|
|
12452
|
+
const lineContent = model.getLineContent(lineNumber);
|
|
12453
|
+
const match = lineContent.match(/^(\s*)/);
|
|
12454
|
+
return match ? match[1].length : 0;
|
|
12455
|
+
}
|
|
12456
|
+
/**
|
|
12457
|
+
* ManagedFields 自动折叠器
|
|
12458
|
+
* 用于在内容变化时自动折叠 managedFields 字段
|
|
12459
|
+
*/
|
|
12460
|
+
class ManagedFieldsAutoFolder {
|
|
12461
|
+
constructor() {
|
|
12462
|
+
this.lastFoldedContent = '';
|
|
12463
|
+
}
|
|
12464
|
+
/**
|
|
12465
|
+
* 开始监听内容变化并自动折叠
|
|
12466
|
+
* @param editorProvider 编辑器实例提供者
|
|
12467
|
+
* @param contentObservable 内容变化的 Observable
|
|
12468
|
+
*/
|
|
12469
|
+
startAutoFold(editorProvider, contentObservable) {
|
|
12470
|
+
this.stopAutoFold();
|
|
12471
|
+
this.subscription = contentObservable.subscribe(() => {
|
|
12472
|
+
setTimeout(() => {
|
|
12473
|
+
const editor = editorProvider.getEditorInstance();
|
|
12474
|
+
if (editor) {
|
|
12475
|
+
const model = editor.getModel();
|
|
12476
|
+
if (model) {
|
|
12477
|
+
const currentContent = model.getValue();
|
|
12478
|
+
// 只有当内容真正发生变化时才执行折叠
|
|
12479
|
+
if (currentContent.includes('managedFields:') &&
|
|
12480
|
+
currentContent !== this.lastFoldedContent) {
|
|
12481
|
+
foldManagedFields(editor);
|
|
12482
|
+
this.lastFoldedContent = currentContent;
|
|
12483
|
+
}
|
|
12484
|
+
}
|
|
12485
|
+
}
|
|
12486
|
+
}, 100);
|
|
12487
|
+
});
|
|
12488
|
+
}
|
|
12489
|
+
/**
|
|
12490
|
+
* 停止自动折叠
|
|
12491
|
+
*/
|
|
12492
|
+
stopAutoFold() {
|
|
12493
|
+
if (this.subscription) {
|
|
12494
|
+
this.subscription.unsubscribe();
|
|
12495
|
+
this.subscription = undefined;
|
|
12496
|
+
}
|
|
12497
|
+
}
|
|
12498
|
+
/**
|
|
12499
|
+
* 手动执行一次折叠
|
|
12500
|
+
* @param editorProvider 编辑器实例提供者
|
|
12501
|
+
*/
|
|
12502
|
+
foldOnce(editorProvider) {
|
|
12503
|
+
const editor = editorProvider.getEditorInstance();
|
|
12504
|
+
if (editor) {
|
|
12505
|
+
foldManagedFields(editor);
|
|
12506
|
+
const model = editor.getModel();
|
|
12507
|
+
if (model) {
|
|
12508
|
+
this.lastFoldedContent = model.getValue();
|
|
12509
|
+
}
|
|
12510
|
+
}
|
|
12511
|
+
}
|
|
12512
|
+
}
|
|
12513
|
+
|
|
12514
|
+
/**
|
|
12515
|
+
* Kubernetes 资源的内置 YAML 示例
|
|
12516
|
+
* 按照 apiVersion.kind 的格式组织
|
|
12517
|
+
*/
|
|
12518
|
+
const BUILT_IN_YAML_EXAMPLES = {
|
|
12519
|
+
'apps/v1.Deployment': [
|
|
12520
|
+
{
|
|
12521
|
+
title: 'Basic Deployment',
|
|
12522
|
+
description: 'A basic deployment example with nginx container',
|
|
12523
|
+
yaml: `apiVersion: apps/v1
|
|
12524
|
+
kind: Deployment
|
|
12525
|
+
metadata:
|
|
12526
|
+
labels:
|
|
12527
|
+
app: nginx
|
|
12528
|
+
name: nginx-deployment
|
|
12529
|
+
namespace: ''
|
|
12530
|
+
spec:
|
|
12531
|
+
selector:
|
|
12532
|
+
matchLabels:
|
|
12533
|
+
app: nginx
|
|
12534
|
+
template:
|
|
12535
|
+
metadata:
|
|
12536
|
+
labels:
|
|
12537
|
+
app: nginx
|
|
12538
|
+
spec:
|
|
12539
|
+
containers:
|
|
12540
|
+
- image: nginx:1.7.9
|
|
12541
|
+
name: nginx
|
|
12542
|
+
ports:
|
|
12543
|
+
- containerPort: 80
|
|
12544
|
+
securityContext:
|
|
12545
|
+
allowPrivilegeEscalation: false
|
|
12546
|
+
capabilities:
|
|
12547
|
+
drop:
|
|
12548
|
+
- ALL
|
|
12549
|
+
runAsNonRoot: true
|
|
12550
|
+
seccompProfile:
|
|
12551
|
+
type: RuntimeDefault
|
|
12552
|
+
securityContext:
|
|
12553
|
+
runAsNonRoot: true
|
|
12554
|
+
seccompProfile:
|
|
12555
|
+
type: RuntimeDefault`,
|
|
12556
|
+
},
|
|
12557
|
+
],
|
|
12558
|
+
'v1.ConfigMap': [
|
|
12559
|
+
{
|
|
12560
|
+
title: 'Basic ConfigMap',
|
|
12561
|
+
description: 'A basic ConfigMap example with properties and file data',
|
|
12562
|
+
yaml: `apiVersion: v1
|
|
12563
|
+
kind: ConfigMap
|
|
12564
|
+
metadata:
|
|
12565
|
+
name: example
|
|
12566
|
+
namespace: ''
|
|
12567
|
+
data:
|
|
12568
|
+
example.property.1: hello
|
|
12569
|
+
example.property.2: world
|
|
12570
|
+
example.property.file: |-
|
|
12571
|
+
property.1=value-1
|
|
12572
|
+
property.2=value-2
|
|
12573
|
+
property.3=value-3`,
|
|
12574
|
+
},
|
|
12575
|
+
],
|
|
12576
|
+
'batch/v1.CronJob': [
|
|
12577
|
+
{
|
|
12578
|
+
title: 'Basic CronJob',
|
|
12579
|
+
description: 'A basic CronJob example that runs daily',
|
|
12580
|
+
yaml: `apiVersion: batch/v1
|
|
12581
|
+
kind: CronJob
|
|
12582
|
+
metadata:
|
|
12583
|
+
name: hello
|
|
12584
|
+
spec:
|
|
12585
|
+
jobTemplate:
|
|
12586
|
+
metadata:
|
|
12587
|
+
labels:
|
|
12588
|
+
cronjob.cpaas.io/name: hello
|
|
12589
|
+
spec:
|
|
12590
|
+
template:
|
|
12591
|
+
metadata:
|
|
12592
|
+
labels:
|
|
12593
|
+
cronjob.cpaas.io/name: hello
|
|
12594
|
+
spec:
|
|
12595
|
+
containers:
|
|
12596
|
+
- args:
|
|
12597
|
+
- /bin/sh
|
|
12598
|
+
- -c
|
|
12599
|
+
- date; echo Hello from the Kubernetes cluster
|
|
12600
|
+
image: busybox
|
|
12601
|
+
name: hello
|
|
12602
|
+
securityContext:
|
|
12603
|
+
allowPrivilegeEscalation: false
|
|
12604
|
+
capabilities:
|
|
12605
|
+
drop:
|
|
12606
|
+
- ALL
|
|
12607
|
+
runAsNonRoot: true
|
|
12608
|
+
seccompProfile:
|
|
12609
|
+
type: RuntimeDefault
|
|
12610
|
+
securityContext:
|
|
12611
|
+
runAsNonRoot: true
|
|
12612
|
+
seccompProfile:
|
|
12613
|
+
type: RuntimeDefault
|
|
12614
|
+
restartPolicy: Never
|
|
12615
|
+
schedule: "*/1 * * * *"`,
|
|
12616
|
+
},
|
|
12617
|
+
],
|
|
12618
|
+
'v1.PersistentVolume': [
|
|
12619
|
+
{
|
|
12620
|
+
title: 'Basic PersistentVolume',
|
|
12621
|
+
description: 'A basic PersistentVolume example with NFS storage',
|
|
12622
|
+
yaml: `apiVersion: v1
|
|
12623
|
+
kind: PersistentVolume
|
|
12624
|
+
metadata:
|
|
12625
|
+
name: example
|
|
12626
|
+
namespace: ''
|
|
12627
|
+
spec:
|
|
12628
|
+
capacity:
|
|
12629
|
+
storage: 5Gi
|
|
12630
|
+
accessModes:
|
|
12631
|
+
- ReadWriteOnce
|
|
12632
|
+
persistentVolumeReclaimPolicy: Retain
|
|
12633
|
+
storageClassName: slow
|
|
12634
|
+
nfs:
|
|
12635
|
+
path: /tmp
|
|
12636
|
+
server: 172.17.0.2`,
|
|
12637
|
+
},
|
|
12638
|
+
],
|
|
12639
|
+
'autoscaling/v2.HorizontalPodAutoscaler': [
|
|
12640
|
+
{
|
|
12641
|
+
title: 'Basic HorizontalPodAutoscaler',
|
|
12642
|
+
description: 'A basic HPA example with CPU utilization target',
|
|
12643
|
+
yaml: `apiVersion: autoscaling/v2
|
|
12644
|
+
kind: HorizontalPodAutoscaler
|
|
12645
|
+
metadata:
|
|
12646
|
+
name: example
|
|
12647
|
+
namespace: ''
|
|
12648
|
+
spec:
|
|
12649
|
+
scaleTargetRef:
|
|
12650
|
+
apiVersion: apps/v1
|
|
12651
|
+
kind: Deployment
|
|
12652
|
+
name: example
|
|
12653
|
+
minReplicas: 1
|
|
12654
|
+
maxReplicas: 3
|
|
12655
|
+
metrics:
|
|
12656
|
+
- type: Resource
|
|
12657
|
+
resource:
|
|
12658
|
+
name: cpu
|
|
12659
|
+
target:
|
|
12660
|
+
averageUtilization: 50
|
|
12661
|
+
type: Utilization`,
|
|
12662
|
+
},
|
|
12663
|
+
],
|
|
12664
|
+
'apps/v1.DaemonSet': [
|
|
12665
|
+
{
|
|
12666
|
+
title: 'Basic DaemonSet',
|
|
12667
|
+
description: 'A basic DaemonSet example with nginx container',
|
|
12668
|
+
yaml: `apiVersion: apps/v1
|
|
12669
|
+
kind: DaemonSet
|
|
12670
|
+
metadata:
|
|
12671
|
+
name: fluentd-elasticsearch
|
|
12672
|
+
namespace: ''
|
|
12673
|
+
labels:
|
|
12674
|
+
k8s-app: fluentd-logging
|
|
12675
|
+
spec:
|
|
12676
|
+
selector:
|
|
12677
|
+
matchLabels:
|
|
12678
|
+
name: fluentd-elasticsearch
|
|
12679
|
+
template:
|
|
12680
|
+
metadata:
|
|
12681
|
+
labels:
|
|
12682
|
+
name: fluentd-elasticsearch
|
|
12683
|
+
spec:
|
|
12684
|
+
tolerations:
|
|
12685
|
+
- key: node-role.kubernetes.io/control-plane
|
|
12686
|
+
operator: Exists
|
|
12687
|
+
effect: NoSchedule
|
|
12688
|
+
- key: node-role.kubernetes.io/master
|
|
12689
|
+
operator: Exists
|
|
12690
|
+
effect: NoSchedule
|
|
12691
|
+
containers:
|
|
12692
|
+
- name: fluentd-elasticsearch
|
|
12693
|
+
image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
|
|
12694
|
+
resources:
|
|
12695
|
+
limits:
|
|
12696
|
+
memory: 200Mi
|
|
12697
|
+
requests:
|
|
12698
|
+
cpu: 100m
|
|
12699
|
+
memory: 200Mi
|
|
12700
|
+
volumeMounts:
|
|
12701
|
+
- name: varlog
|
|
12702
|
+
mountPath: /var/log
|
|
12703
|
+
securityContext:
|
|
12704
|
+
allowPrivilegeEscalation: false
|
|
12705
|
+
capabilities:
|
|
12706
|
+
drop:
|
|
12707
|
+
- ALL
|
|
12708
|
+
runAsNonRoot: true
|
|
12709
|
+
runAsUser: 1000
|
|
12710
|
+
runAsGroup: 1000
|
|
12711
|
+
seccompProfile:
|
|
12712
|
+
type: RuntimeDefault
|
|
12713
|
+
securityContext:
|
|
12714
|
+
runAsNonRoot: true
|
|
12715
|
+
seccompProfile:
|
|
12716
|
+
type: RuntimeDefault
|
|
12717
|
+
terminationGracePeriodSeconds: 30
|
|
12718
|
+
volumes:
|
|
12719
|
+
- name: varlog
|
|
12720
|
+
emptyDir: {}`,
|
|
12721
|
+
},
|
|
12722
|
+
],
|
|
12723
|
+
'v1.PersistentVolumeClaim': [
|
|
12724
|
+
{
|
|
12725
|
+
title: 'Basic PersistentVolumeClaim',
|
|
12726
|
+
description: 'A basic PVC example requesting 1Gi storage',
|
|
12727
|
+
yaml: `apiVersion: v1
|
|
12728
|
+
kind: PersistentVolumeClaim
|
|
12729
|
+
metadata:
|
|
12730
|
+
name: example
|
|
12731
|
+
namespace:: ''
|
|
12732
|
+
spec:
|
|
12733
|
+
accessModes:
|
|
12734
|
+
- ReadWriteOnce
|
|
12735
|
+
volumeMode: Filesystem
|
|
12736
|
+
resources:
|
|
12737
|
+
requests:
|
|
12738
|
+
storage: 1Gi`,
|
|
12739
|
+
},
|
|
12740
|
+
],
|
|
12741
|
+
'v1.ResourceQuota': [
|
|
12742
|
+
{
|
|
12743
|
+
title: 'Compute ResourceQuota',
|
|
12744
|
+
description: 'A ResourceQuota example for compute resources',
|
|
12745
|
+
yaml: `apiVersion: v1
|
|
12746
|
+
kind: ResourceQuota
|
|
12747
|
+
metadata:
|
|
12748
|
+
name: compute-quota
|
|
12749
|
+
namespace: ''
|
|
12750
|
+
spec:
|
|
12751
|
+
hard:
|
|
12752
|
+
requests.cpu: '1'
|
|
12753
|
+
requests.memory: 1Gi
|
|
12754
|
+
limits.cpu: '2'
|
|
12755
|
+
limits.memory: 2Gi`,
|
|
12756
|
+
},
|
|
12757
|
+
{
|
|
12758
|
+
title: 'Storage Class ResourceQuota',
|
|
12759
|
+
description: 'A ResourceQuota example for storage class specific quotas',
|
|
12760
|
+
yaml: `apiVersion: v1
|
|
12761
|
+
kind: ResourceQuota
|
|
12762
|
+
metadata:
|
|
12763
|
+
name: storage-class-quota
|
|
12764
|
+
namespace: ''
|
|
12765
|
+
spec:
|
|
12766
|
+
hard:
|
|
12767
|
+
requests.storage: 100Gi
|
|
12768
|
+
persistentvolumeclaims: '100'
|
|
12769
|
+
# For quota specific to a storage class, the storage class must have the same name
|
|
12770
|
+
gold.storage-class.kubernetes.io/requests.storage: 3Gi
|
|
12771
|
+
gold.storage-class.kubernetes.io/persistentvolumeclaims: '5'
|
|
12772
|
+
silver.storage-class.kubernetes.io/requests.storage: 2Gi
|
|
12773
|
+
silver.storage-class.kubernetes.io/persistentvolumeclaims: '3'
|
|
12774
|
+
bronze.storage-class.kubernetes.io/requests.storage: 1Gi
|
|
12775
|
+
bronze.storage-class.kubernetes.io/persistentvolumeclaims: '1'`,
|
|
12776
|
+
},
|
|
12777
|
+
{
|
|
12778
|
+
title: 'Object Counts ResourceQuota',
|
|
12779
|
+
description: 'A ResourceQuota example for object count limits',
|
|
12780
|
+
yaml: `apiVersion: v1
|
|
12781
|
+
kind: ResourceQuota
|
|
12782
|
+
metadata:
|
|
12783
|
+
name: object-counts
|
|
12784
|
+
namespace: ''
|
|
12785
|
+
spec:
|
|
12786
|
+
hard:
|
|
12787
|
+
configmaps: "10"
|
|
12788
|
+
persistentvolumeclaims: "4"
|
|
12789
|
+
replicationcontrollers: "20"
|
|
12790
|
+
secrets: "10"
|
|
12791
|
+
services: "10"
|
|
12792
|
+
services.loadbalancers: "2"`,
|
|
12793
|
+
},
|
|
12794
|
+
],
|
|
12795
|
+
'v1.LimitRange': [
|
|
12796
|
+
{
|
|
12797
|
+
title: 'Memory LimitRange',
|
|
12798
|
+
description: 'A LimitRange example for container memory limits',
|
|
12799
|
+
yaml: `apiVersion: v1
|
|
12800
|
+
kind: LimitRange
|
|
12801
|
+
metadata:
|
|
12802
|
+
name: mem-limit-range
|
|
12803
|
+
namespace: ''
|
|
12804
|
+
spec:
|
|
12805
|
+
limits:
|
|
12806
|
+
- default:
|
|
12807
|
+
memory: 512Mi
|
|
12808
|
+
defaultRequest:
|
|
12809
|
+
memory: 256Mi
|
|
12810
|
+
type: Container`,
|
|
12811
|
+
},
|
|
12812
|
+
],
|
|
12813
|
+
'apps/v1.StatefulSet': [
|
|
12814
|
+
{
|
|
12815
|
+
title: 'Basic StatefulSet',
|
|
12816
|
+
description: 'A basic StatefulSet example with persistent storage',
|
|
12817
|
+
yaml: `apiVersion: apps/v1
|
|
12818
|
+
kind: StatefulSet
|
|
12819
|
+
metadata:
|
|
12820
|
+
name: example
|
|
12821
|
+
namespace: ''
|
|
12822
|
+
spec:
|
|
12823
|
+
replicas: 3
|
|
12824
|
+
selector:
|
|
12825
|
+
matchLabels:
|
|
12826
|
+
app: httpd
|
|
12827
|
+
serviceName: httpd
|
|
12828
|
+
template:
|
|
12829
|
+
metadata:
|
|
12830
|
+
labels:
|
|
12831
|
+
app: httpd
|
|
12832
|
+
spec:
|
|
12833
|
+
containers:
|
|
12834
|
+
- image: nginx:1.7.9
|
|
12835
|
+
name: httpd
|
|
12836
|
+
ports:
|
|
12837
|
+
- containerPort: 8080
|
|
12838
|
+
name: web
|
|
12839
|
+
volumeMounts:
|
|
12840
|
+
- mountPath: /var/www/html
|
|
12841
|
+
name: www
|
|
12842
|
+
securityContext:
|
|
12843
|
+
allowPrivilegeEscalation: false
|
|
12844
|
+
capabilities:
|
|
12845
|
+
drop:
|
|
12846
|
+
- ALL
|
|
12847
|
+
runAsNonRoot: true
|
|
12848
|
+
seccompProfile:
|
|
12849
|
+
type: RuntimeDefault
|
|
12850
|
+
securityContext:
|
|
12851
|
+
runAsNonRoot: true
|
|
12852
|
+
seccompProfile:
|
|
12853
|
+
type: RuntimeDefault
|
|
12854
|
+
terminationGracePeriodSeconds: 10
|
|
12855
|
+
volumeClaimTemplates:
|
|
12856
|
+
- metadata:
|
|
12857
|
+
name: www
|
|
12858
|
+
spec:
|
|
12859
|
+
accessModes:
|
|
12860
|
+
- ReadWriteOnce
|
|
12861
|
+
resources:
|
|
12862
|
+
requests:
|
|
12863
|
+
storage: 1Gi`,
|
|
12864
|
+
},
|
|
12865
|
+
],
|
|
12866
|
+
'storage.k8s.io/v1.StorageClass': [
|
|
12867
|
+
{
|
|
12868
|
+
title: 'Fast StorageClass',
|
|
12869
|
+
description: 'Ceph fast storage class example',
|
|
12870
|
+
yaml: `apiVersion: storage.k8s.io/v1
|
|
12871
|
+
kind: StorageClass
|
|
12872
|
+
metadata:
|
|
12873
|
+
name: example
|
|
12874
|
+
namespace: ''
|
|
12875
|
+
provisioner: my-provisioner
|
|
12876
|
+
reclaimPolicy: Delete
|
|
12877
|
+
`,
|
|
12878
|
+
},
|
|
12879
|
+
],
|
|
12880
|
+
'v1.Secret': [
|
|
12881
|
+
{
|
|
12882
|
+
title: 'Basic Secret',
|
|
12883
|
+
description: 'A basic Secret example with username and password',
|
|
12884
|
+
yaml: `apiVersion: v1
|
|
12885
|
+
kind: Secret
|
|
12886
|
+
metadata:
|
|
12887
|
+
name: example
|
|
12888
|
+
namespace: ''
|
|
12889
|
+
type: Opaque
|
|
12890
|
+
stringData:
|
|
12891
|
+
username: admin
|
|
12892
|
+
password: opensec`,
|
|
12893
|
+
},
|
|
12894
|
+
],
|
|
12895
|
+
'app.k8s.io/v1beta1.Application': [
|
|
12896
|
+
{
|
|
12897
|
+
title: 'Basic Application',
|
|
12898
|
+
description: 'A basic Application example with Deployment and Service',
|
|
12899
|
+
yaml: `apiVersion: apps/v1
|
|
12900
|
+
kind: Deployment
|
|
12901
|
+
metadata:
|
|
12902
|
+
labels:
|
|
12903
|
+
app: nginx
|
|
12904
|
+
name: nginx-deployment
|
|
12905
|
+
namespace: ''
|
|
12906
|
+
spec:
|
|
12907
|
+
replicas: 1
|
|
12908
|
+
selector:
|
|
12909
|
+
matchLabels:
|
|
12910
|
+
app: nginx
|
|
12911
|
+
template:
|
|
12912
|
+
metadata:
|
|
12913
|
+
labels:
|
|
12914
|
+
app: nginx
|
|
12915
|
+
spec:
|
|
12916
|
+
containers:
|
|
12917
|
+
- image: nginx:1.7.9
|
|
12918
|
+
name: nginx
|
|
12919
|
+
ports:
|
|
12920
|
+
- containerPort: 80
|
|
12921
|
+
securityContext:
|
|
12922
|
+
allowPrivilegeEscalation: false
|
|
12923
|
+
capabilities:
|
|
12924
|
+
drop:
|
|
12925
|
+
- ALL
|
|
12926
|
+
runAsNonRoot: true
|
|
12927
|
+
seccompProfile:
|
|
12928
|
+
type: RuntimeDefault
|
|
12929
|
+
securityContext:
|
|
12930
|
+
runAsNonRoot: true
|
|
12931
|
+
seccompProfile:
|
|
12932
|
+
type: RuntimeDefault
|
|
12933
|
+
---
|
|
12934
|
+
apiVersion: v1
|
|
12935
|
+
kind: Service
|
|
12936
|
+
metadata:
|
|
12937
|
+
labels:
|
|
12938
|
+
app: nginx
|
|
12939
|
+
name: nginx
|
|
12940
|
+
spec:
|
|
12941
|
+
ports:
|
|
12942
|
+
- port: 80
|
|
12943
|
+
protocol: TCP
|
|
12944
|
+
targetPort: 80
|
|
12945
|
+
selector:
|
|
12946
|
+
app: nginx
|
|
12947
|
+
type: ClusterIP`,
|
|
12948
|
+
},
|
|
12949
|
+
],
|
|
12950
|
+
};
|
|
12951
|
+
|
|
12952
|
+
class ResourceYamlSidebarComponent {
|
|
12953
|
+
constructor() {
|
|
12954
|
+
this.close = new EventEmitter();
|
|
12955
|
+
this.tryYaml = new EventEmitter();
|
|
12956
|
+
this.schemaEnable = true;
|
|
12957
|
+
this.exampleEnable = true;
|
|
12958
|
+
this.DEFINITIONS_PREFIX = '#/definitions/';
|
|
12959
|
+
this.path = [];
|
|
12960
|
+
this.examples = [];
|
|
12961
|
+
this.hasSchema = false;
|
|
12962
|
+
this.hasExamples = false;
|
|
12963
|
+
this.http = inject(HttpClient);
|
|
12964
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
12965
|
+
this.host = inject((ElementRef));
|
|
12966
|
+
}
|
|
12967
|
+
ngOnInit() {
|
|
12968
|
+
this.refresh();
|
|
12969
|
+
this.loadExamples();
|
|
12970
|
+
}
|
|
12971
|
+
ngOnChanges(changes) {
|
|
12972
|
+
if (changes.schema || changes.resource) {
|
|
12973
|
+
this.refresh();
|
|
12974
|
+
this.loadExamples();
|
|
12975
|
+
}
|
|
12976
|
+
}
|
|
12977
|
+
refresh() {
|
|
12978
|
+
if (this.schema) {
|
|
12979
|
+
this.currentSchema = this.schema;
|
|
12980
|
+
this.currentSchemaDescription = this.schema.description;
|
|
12981
|
+
this.properties = this.schema.properties || {};
|
|
12982
|
+
this.path = [];
|
|
12983
|
+
this.hasSchema = true;
|
|
12984
|
+
}
|
|
12985
|
+
else {
|
|
12986
|
+
this.hasSchema = false;
|
|
12987
|
+
}
|
|
12988
|
+
if (this.resource) {
|
|
12989
|
+
this.resourceKind = this.resource.kind || 'Resource';
|
|
12990
|
+
}
|
|
12991
|
+
}
|
|
12992
|
+
loadExamples() {
|
|
12993
|
+
if (!this.resource) {
|
|
12994
|
+
this.examples = [];
|
|
12995
|
+
this.hasExamples = false;
|
|
12996
|
+
this.cdr.markForCheck();
|
|
12997
|
+
return;
|
|
12998
|
+
}
|
|
12999
|
+
const resourceKey = `${this.resource.apiVersion}.${this.resource.kind}`;
|
|
13000
|
+
const builtInExamples = BUILT_IN_YAML_EXAMPLES[resourceKey] || [];
|
|
13001
|
+
// 加载 ConsoleYAMLSample CRD 中的示例
|
|
13002
|
+
this.loadConsoleYAMLSamples().subscribe({
|
|
13003
|
+
next: crdExamples => {
|
|
13004
|
+
this.examples = [
|
|
13005
|
+
...builtInExamples,
|
|
13006
|
+
...(this.extraExamples || []),
|
|
13007
|
+
...crdExamples,
|
|
13008
|
+
];
|
|
13009
|
+
this.hasExamples = this.examples.length > 0;
|
|
13010
|
+
this.cdr.markForCheck();
|
|
13011
|
+
},
|
|
13012
|
+
error: () => {
|
|
13013
|
+
// 如果加载 CRD 示例失败,只使用内置示例
|
|
13014
|
+
this.examples = builtInExamples;
|
|
13015
|
+
this.hasExamples = this.examples.length > 0;
|
|
13016
|
+
this.cdr.markForCheck();
|
|
13017
|
+
},
|
|
13018
|
+
});
|
|
13019
|
+
}
|
|
13020
|
+
loadConsoleYAMLSamples() {
|
|
13021
|
+
if (!this.resource) {
|
|
13022
|
+
return of([]);
|
|
13023
|
+
}
|
|
13024
|
+
// 构建查询 ConsoleYAMLSample 的 API 路径
|
|
13025
|
+
const apiPath = '{{API_GATEWAY}}/kubernetes/business-1/apis/console.alauda.io/v1/consoleyamlsamples';
|
|
13026
|
+
return this.http.get(apiPath).pipe(map(response => {
|
|
13027
|
+
return response.items
|
|
13028
|
+
.filter(sample => {
|
|
13029
|
+
const target = sample.spec.targetResource;
|
|
13030
|
+
return (target.apiVersion === this.resource.apiVersion &&
|
|
13031
|
+
target.kind === this.resource.kind);
|
|
13032
|
+
})
|
|
13033
|
+
.map(sample => ({
|
|
13034
|
+
title: sample.spec.title,
|
|
13035
|
+
description: sample.spec.description,
|
|
13036
|
+
yaml: sample.spec.yaml,
|
|
13037
|
+
snippet: sample.spec.snippet,
|
|
13038
|
+
}));
|
|
13039
|
+
}), catchError(() => of([])));
|
|
13040
|
+
}
|
|
13041
|
+
drillDownToProperty(name) {
|
|
13042
|
+
const property = this.currentSchema.properties?.[name];
|
|
13043
|
+
if (property) {
|
|
13044
|
+
this.currentSchemaDescription = property.description;
|
|
13045
|
+
let targetSchema = null;
|
|
13046
|
+
// 处理 $ref 引用
|
|
13047
|
+
if (property.$ref || property.items?.$ref) {
|
|
13048
|
+
const ref = property.$ref || property.items?.$ref;
|
|
13049
|
+
if (ref.startsWith(this.DEFINITIONS_PREFIX)) {
|
|
13050
|
+
// const definitionName = ref.replace(this.DEFINITIONS_PREFIX, '');
|
|
13051
|
+
// 从根 schema 的 definitions 中获取定义
|
|
13052
|
+
// todo: 书勋
|
|
13053
|
+
// const rootDefinitions = this.schemaService.definitions;
|
|
13054
|
+
// targetSchema = rootDefinitions?.[definitionName] || null;
|
|
13055
|
+
}
|
|
13056
|
+
}
|
|
13057
|
+
// 处理普通的嵌套属性
|
|
13058
|
+
else if (property.properties || property.items?.properties) {
|
|
13059
|
+
targetSchema = property.items?.properties ? property.items : property;
|
|
13060
|
+
}
|
|
13061
|
+
if (targetSchema) {
|
|
13062
|
+
this.currentSchema = targetSchema;
|
|
13063
|
+
this.path.push(name);
|
|
13064
|
+
this.properties = targetSchema.properties || {};
|
|
13065
|
+
this.scrollTop();
|
|
13066
|
+
}
|
|
13067
|
+
}
|
|
13068
|
+
}
|
|
13069
|
+
navigateToPath(index) {
|
|
13070
|
+
const targetPath = this.path.slice(0, index + 1);
|
|
13071
|
+
this.path = [...targetPath];
|
|
13072
|
+
let currentObj = this.schema;
|
|
13073
|
+
for (const pathSegment of targetPath) {
|
|
13074
|
+
const property = currentObj.properties?.[pathSegment];
|
|
13075
|
+
if (property) {
|
|
13076
|
+
this.currentSchemaDescription = property.description;
|
|
13077
|
+
// 处理 $ref 引用
|
|
13078
|
+
if (property.$ref || property.items?.$ref) {
|
|
13079
|
+
const ref = property.$ref || property.items?.$ref;
|
|
13080
|
+
if (ref.startsWith(this.DEFINITIONS_PREFIX)) {
|
|
13081
|
+
// const definitionName = ref.replace(this.DEFINITIONS_PREFIX, '');
|
|
13082
|
+
// todo: 书勋
|
|
13083
|
+
// const rootDefinitions = this.schemaService.definitions;
|
|
13084
|
+
// const definition = rootDefinitions?.[definitionName];
|
|
13085
|
+
// if (definition) {
|
|
13086
|
+
// currentObj = definition;
|
|
13087
|
+
// }
|
|
13088
|
+
}
|
|
13089
|
+
}
|
|
13090
|
+
// 处理普通的嵌套属性
|
|
13091
|
+
else {
|
|
13092
|
+
currentObj = property.items?.properties ? property.items : property;
|
|
13093
|
+
}
|
|
13094
|
+
}
|
|
13095
|
+
}
|
|
13096
|
+
this.currentSchema = currentObj;
|
|
13097
|
+
this.properties = currentObj.properties || {};
|
|
13098
|
+
}
|
|
13099
|
+
/**
|
|
13100
|
+
* 检查属性是否有 $ref 引用或嵌套属性
|
|
13101
|
+
*/
|
|
13102
|
+
hasViewableContent(property) {
|
|
13103
|
+
return (
|
|
13104
|
+
// 有 properties 的对象
|
|
13105
|
+
(property.type === 'object' &&
|
|
13106
|
+
property.properties &&
|
|
13107
|
+
Object.keys(property.properties).length > 0) ||
|
|
13108
|
+
// 有 properties 的数组项
|
|
13109
|
+
(property.type === 'array' &&
|
|
13110
|
+
property.items &&
|
|
13111
|
+
typeof property.items === 'object' &&
|
|
13112
|
+
property.items.properties &&
|
|
13113
|
+
Object.keys(property.items.properties || {})
|
|
13114
|
+
.length > 0) ||
|
|
13115
|
+
// 有 $ref 引用
|
|
13116
|
+
!!property.$ref ||
|
|
13117
|
+
!!property?.items?.$ref);
|
|
13118
|
+
}
|
|
13119
|
+
// Examples 相关方法
|
|
13120
|
+
tryExample(example) {
|
|
13121
|
+
// 触发事件,让父组件处理 try it 功能,将 YAML 内容发送给父组件
|
|
13122
|
+
this.tryYaml.emit(example.yaml);
|
|
13123
|
+
}
|
|
13124
|
+
downloadYaml(example) {
|
|
13125
|
+
const blob = new Blob([example.yaml], { type: 'text/yaml' });
|
|
13126
|
+
const url = window.URL.createObjectURL(blob);
|
|
13127
|
+
const link = document.createElement('a');
|
|
13128
|
+
link.href = url;
|
|
13129
|
+
link.download = `${example.title.toLowerCase().replace(/\s+/g, '-')}.yaml`;
|
|
13130
|
+
document.body.appendChild(link);
|
|
13131
|
+
link.click();
|
|
13132
|
+
document.body.removeChild(link);
|
|
13133
|
+
window.URL.revokeObjectURL(url);
|
|
13134
|
+
}
|
|
13135
|
+
// 处理描述中的链接
|
|
13136
|
+
processDescription(description) {
|
|
13137
|
+
if (!description)
|
|
13138
|
+
return '';
|
|
13139
|
+
// 将 URL 转换为可点击的链接
|
|
13140
|
+
const urlRegex = /(https?:\/\/[^\s]+)/g;
|
|
13141
|
+
return description
|
|
13142
|
+
.replace(urlRegex, '<a href="$1" target="_blank" rel="noopener noreferrer">$1</a>')
|
|
13143
|
+
.replace(/\n/g, '<br>'); // 保留换行符
|
|
13144
|
+
}
|
|
13145
|
+
scrollTop() {
|
|
13146
|
+
this.host.nativeElement.scrollTo({
|
|
13147
|
+
top: 0,
|
|
13148
|
+
});
|
|
13149
|
+
}
|
|
13150
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceYamlSidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13151
|
+
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 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 }); }
|
|
13152
|
+
}
|
|
13153
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceYamlSidebarComponent, decorators: [{
|
|
13154
|
+
type: Component,
|
|
13155
|
+
args: [{ selector: 'acl-resource-yaml-sidebar', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
13156
|
+
TranslatePipe,
|
|
13157
|
+
KeyValuePipe,
|
|
13158
|
+
ParseJsonTranslatePipe,
|
|
13159
|
+
IconModule,
|
|
13160
|
+
TabsModule,
|
|
13161
|
+
ButtonModule,
|
|
13162
|
+
PurePipe,
|
|
13163
|
+
], 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 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"] }]
|
|
13164
|
+
}], propDecorators: { resource: [{
|
|
13165
|
+
type: Input
|
|
13166
|
+
}], schema: [{
|
|
13167
|
+
type: Input
|
|
13168
|
+
}], close: [{
|
|
13169
|
+
type: Output
|
|
13170
|
+
}], tryYaml: [{
|
|
13171
|
+
type: Output
|
|
13172
|
+
}], schemaEnable: [{
|
|
13173
|
+
type: Input
|
|
13174
|
+
}], exampleEnable: [{
|
|
13175
|
+
type: Input
|
|
13176
|
+
}], extraExamples: [{
|
|
13177
|
+
type: Input
|
|
13178
|
+
}] } });
|
|
13179
|
+
|
|
13180
|
+
class ResourceYamlEditorComponent {
|
|
13181
|
+
set originalValue(value) {
|
|
13182
|
+
this._originalValue = value || '';
|
|
13183
|
+
}
|
|
13184
|
+
get originalValue() {
|
|
13185
|
+
return this._originalValue;
|
|
13186
|
+
}
|
|
13187
|
+
constructor() {
|
|
13188
|
+
this.destroy$ = new Subject();
|
|
13189
|
+
this._value = '';
|
|
13190
|
+
this._originalValue = '';
|
|
13191
|
+
this.onChange = (_value) => {
|
|
13192
|
+
// Placeholder for form control change callback
|
|
13193
|
+
};
|
|
13194
|
+
this.onTouched = () => {
|
|
13195
|
+
// Placeholder for form control touched callback
|
|
13196
|
+
};
|
|
13197
|
+
this.showSidebar$$ = new BehaviorSubject(true);
|
|
13198
|
+
this.showDebugPanel$$ = new BehaviorSubject(true);
|
|
13199
|
+
this.monacoEditor = null;
|
|
13200
|
+
this.registeredSchemas = new Set();
|
|
13201
|
+
this.pendingSchemas = new Set();
|
|
13202
|
+
this.schemaService = inject(KubernetesSchemaService);
|
|
13203
|
+
this.monacoLanguageService = inject(MonacoLanguageService);
|
|
13204
|
+
this.hasWrapper = true;
|
|
13205
|
+
this.showDebugInfo = false;
|
|
13206
|
+
this.sidebarEnable = true;
|
|
13207
|
+
this.schemaEnable = true;
|
|
13208
|
+
this.exampleEnable = true;
|
|
13209
|
+
this.autoFoldManagedFields = true;
|
|
13210
|
+
this.options = yamlWriteMinimapOptions;
|
|
13211
|
+
this.actionsConfig = updateActions;
|
|
13212
|
+
this.tryYaml = new EventEmitter();
|
|
13213
|
+
this.autoFillNamespace = true;
|
|
13214
|
+
this.hasFolded = false;
|
|
13215
|
+
/**
|
|
13216
|
+
* 自动获取的 schema,当没有手动提供 schema 时使用
|
|
13217
|
+
*/
|
|
13218
|
+
this.autoSchema$ = this.resource$.pipe(switchMap(resource => {
|
|
13219
|
+
if (!resource) {
|
|
13220
|
+
return of(null);
|
|
13221
|
+
}
|
|
13222
|
+
const firstResource = (Array.isArray(resource) ? resource[0] : resource);
|
|
13223
|
+
if (!firstResource?.apiVersion || !firstResource?.kind) {
|
|
13224
|
+
return of(null);
|
|
13225
|
+
}
|
|
13226
|
+
return this.schemaService.getResourceSchema(firstResource.apiVersion, firstResource.kind, this.clusterName);
|
|
13227
|
+
}), publishRef());
|
|
13228
|
+
/**
|
|
13229
|
+
* 最终使用的 schema,优先使用手动提供的,否则使用自动获取的
|
|
13230
|
+
*/
|
|
13231
|
+
this.finalSchema$ = combineLatest([this.schema$, this.autoSchema$]).pipe(map(([manualSchema, autoSchema]) => manualSchema || autoSchema), distinctUntilChanged(), shareReplay(1));
|
|
13232
|
+
this.yamlSchemaService = this.monacoLanguageService.getYamlSchemaService();
|
|
13233
|
+
// 自动设置 schema
|
|
13234
|
+
combineLatest([this.resource$, this.finalSchema$])
|
|
13235
|
+
.pipe(takeUntil(this.destroy$))
|
|
13236
|
+
.subscribe(([resource, schema]) => {
|
|
13237
|
+
if (resource && schema) {
|
|
13238
|
+
const firstResource = Array.isArray(resource)
|
|
13239
|
+
? resource[0]
|
|
13240
|
+
: resource;
|
|
13241
|
+
if (firstResource && !Array.isArray(firstResource)) {
|
|
13242
|
+
this.setYamlSchema(firstResource, schema);
|
|
13243
|
+
}
|
|
13244
|
+
}
|
|
13245
|
+
});
|
|
13246
|
+
this.autoSchema$.pipe(takeUntil(this.destroy$)).subscribe();
|
|
13247
|
+
}
|
|
13248
|
+
ngAfterViewInit() {
|
|
13249
|
+
// 监听 YAML 内容变化,自动折叠 managedFields
|
|
13250
|
+
// if (this.autoFoldManagedFields && this.schemaService.definitions) {
|
|
13251
|
+
// this.selfFoldManagedFields();
|
|
13252
|
+
// }
|
|
13253
|
+
if (this.autoFoldManagedFields) {
|
|
13254
|
+
this.selfFoldManagedFields();
|
|
13255
|
+
}
|
|
13256
|
+
}
|
|
13257
|
+
selfFoldManagedFields() {
|
|
13258
|
+
if (this.hasFolded) {
|
|
13259
|
+
return;
|
|
13260
|
+
}
|
|
13261
|
+
this.hasFolded = true;
|
|
13262
|
+
setTimeout(() => {
|
|
13263
|
+
const editor = this.getEditorInstance();
|
|
13264
|
+
if (editor) {
|
|
13265
|
+
foldManagedFields(editor);
|
|
13266
|
+
}
|
|
13267
|
+
}, 0);
|
|
13268
|
+
}
|
|
13269
|
+
get value() {
|
|
13270
|
+
return this._value;
|
|
13271
|
+
}
|
|
13272
|
+
set value(val) {
|
|
13273
|
+
this._value = val;
|
|
13274
|
+
this.onChange(val);
|
|
13275
|
+
this.onTouched();
|
|
13276
|
+
}
|
|
13277
|
+
// ControlValueAccessor implementation
|
|
13278
|
+
writeValue(value) {
|
|
13279
|
+
this._value = value || '';
|
|
13280
|
+
}
|
|
13281
|
+
registerOnChange(fn) {
|
|
13282
|
+
this.onChange = fn;
|
|
13283
|
+
}
|
|
13284
|
+
registerOnTouched(fn) {
|
|
13285
|
+
this.onTouched = fn;
|
|
13286
|
+
}
|
|
13287
|
+
toggleSidebar() {
|
|
13288
|
+
this.showSidebar$$.next(!this.showSidebar$$.value);
|
|
13289
|
+
}
|
|
13290
|
+
toggleDebugInfo() {
|
|
13291
|
+
this.showDebugPanel$$.next(!this.showDebugPanel$$.value);
|
|
13292
|
+
}
|
|
13293
|
+
getCurrentResource() {
|
|
13294
|
+
const resource = this.resource;
|
|
13295
|
+
if (Array.isArray(resource)) {
|
|
13296
|
+
return resource.length > 0 ? resource[0] : null;
|
|
13297
|
+
}
|
|
13298
|
+
return resource || null;
|
|
13299
|
+
}
|
|
13300
|
+
getCurrentSchema() {
|
|
13301
|
+
return this.schema || null;
|
|
13302
|
+
}
|
|
13303
|
+
getDebugInfo() {
|
|
13304
|
+
const resource = this.getCurrentResource();
|
|
13305
|
+
return {
|
|
13306
|
+
hasResource: !!resource,
|
|
13307
|
+
resourceApiVersion: resource?.apiVersion,
|
|
13308
|
+
resourceKind: resource?.kind,
|
|
13309
|
+
hasManualSchema: !!this.schema,
|
|
13310
|
+
};
|
|
13311
|
+
}
|
|
13312
|
+
onTryYaml(yamlContent) {
|
|
13313
|
+
let targetYaml = yamlContent;
|
|
13314
|
+
if (this.autoFillNamespace && this.namespace) {
|
|
13315
|
+
targetYaml = parseAll(yamlContent)
|
|
13316
|
+
.filter(r => !!r)
|
|
13317
|
+
.map((r) => {
|
|
13318
|
+
if (!r?.metadata?.namespace) {
|
|
13319
|
+
return {
|
|
13320
|
+
...r,
|
|
13321
|
+
metadata: {
|
|
13322
|
+
...r.metadata,
|
|
13323
|
+
namespace: this.namespace,
|
|
13324
|
+
},
|
|
13325
|
+
};
|
|
13326
|
+
}
|
|
13327
|
+
return r;
|
|
13328
|
+
})
|
|
13329
|
+
.map(r => stringify$1(r, { sortMapEntries: true }))
|
|
13330
|
+
.join('---\r\n');
|
|
13331
|
+
}
|
|
13332
|
+
this.tryYaml.emit(targetYaml);
|
|
13333
|
+
}
|
|
13334
|
+
/**
|
|
13335
|
+
* 设置 YAML schema 以提供 hover 提示和自动完成
|
|
13336
|
+
*/
|
|
13337
|
+
setYamlSchema(resource, schema) {
|
|
13338
|
+
if (!schema) {
|
|
13339
|
+
return;
|
|
13340
|
+
}
|
|
13341
|
+
// 使用 apiVersion + kind 组合作为标识
|
|
13342
|
+
const apiVersion = resource?.apiVersion || 'unknown';
|
|
13343
|
+
const kind = resource?.kind || 'unknown';
|
|
13344
|
+
const schemaKey = `${apiVersion}/${kind}`;
|
|
13345
|
+
this.modelUri = `${schemaKey}.yaml`;
|
|
13346
|
+
this.selfFoldManagedFields();
|
|
13347
|
+
// 检查是否已经注册过相同的 schema,避免重复注册
|
|
13348
|
+
if (this.registeredSchemas.has(schemaKey) ||
|
|
13349
|
+
this.pendingSchemas.has(schemaKey)) {
|
|
13350
|
+
return;
|
|
13351
|
+
}
|
|
13352
|
+
this.pendingSchemas.add(schemaKey);
|
|
13353
|
+
const registerSchema = (schemaToRegister) => {
|
|
13354
|
+
this.yamlSchemaService.addSchema({
|
|
13355
|
+
uri: `k8s://${schemaKey}.schema.json`,
|
|
13356
|
+
fileMatch: [this.modelUri],
|
|
13357
|
+
schema: schemaToRegister,
|
|
13358
|
+
});
|
|
13359
|
+
this.registeredSchemas.add(schemaKey);
|
|
13360
|
+
this.pendingSchemas.delete(schemaKey);
|
|
13361
|
+
};
|
|
13362
|
+
const schemaDefinitions = schema?.definitions;
|
|
13363
|
+
if (schemaDefinitions && Object.keys(schemaDefinitions).length > 0) {
|
|
13364
|
+
registerSchema(schema);
|
|
13365
|
+
return;
|
|
13366
|
+
}
|
|
13367
|
+
this.schemaService
|
|
13368
|
+
.getAllResourceDefinitionsCached(this.clusterName)
|
|
13369
|
+
.pipe(take(1), takeUntil(this.destroy$))
|
|
13370
|
+
.subscribe(definitions => {
|
|
13371
|
+
const fullSchema = {
|
|
13372
|
+
...schema,
|
|
13373
|
+
definitions: definitions || schemaDefinitions || {},
|
|
13374
|
+
};
|
|
13375
|
+
registerSchema(fullSchema);
|
|
13376
|
+
});
|
|
13377
|
+
}
|
|
13378
|
+
/**
|
|
13379
|
+
* 获取 Monaco 编辑器实例
|
|
13380
|
+
*/
|
|
13381
|
+
getEditorInstance() {
|
|
13382
|
+
if (!this.monacoEditor && this.codeEditorRef?.editor) {
|
|
13383
|
+
this.monacoEditor = this.codeEditorRef.editor;
|
|
13384
|
+
}
|
|
13385
|
+
return this.monacoEditor;
|
|
13386
|
+
}
|
|
13387
|
+
/**
|
|
13388
|
+
* 手动折叠 managedFields
|
|
13389
|
+
*/
|
|
13390
|
+
foldManagedFields() {
|
|
13391
|
+
const editor = this.getEditorInstance();
|
|
13392
|
+
if (editor) {
|
|
13393
|
+
foldManagedFields(editor);
|
|
13394
|
+
}
|
|
13395
|
+
}
|
|
13396
|
+
ngOnDestroy() {
|
|
13397
|
+
this.destroy$.next();
|
|
13398
|
+
this.destroy$.complete();
|
|
13399
|
+
}
|
|
13400
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceYamlEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13401
|
+
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: [
|
|
13402
|
+
{
|
|
13403
|
+
provide: NG_VALUE_ACCESSOR,
|
|
13404
|
+
useExisting: forwardRef(() => ResourceYamlEditorComponent),
|
|
13405
|
+
multi: true,
|
|
13406
|
+
},
|
|
13407
|
+
], 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 }); }
|
|
13408
|
+
}
|
|
13409
|
+
__decorate([
|
|
13410
|
+
ObservableInput(),
|
|
13411
|
+
__metadata("design:type", Observable)
|
|
13412
|
+
], ResourceYamlEditorComponent.prototype, "resource$", void 0);
|
|
13413
|
+
__decorate([
|
|
13414
|
+
ObservableInput(),
|
|
13415
|
+
__metadata("design:type", Observable)
|
|
13416
|
+
], ResourceYamlEditorComponent.prototype, "schema$", void 0);
|
|
13417
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: ResourceYamlEditorComponent, decorators: [{
|
|
13418
|
+
type: Component,
|
|
13419
|
+
args: [{ selector: 'acl-resource-yaml-editor', preserveWhitespaces: false, standalone: true, imports: [
|
|
13420
|
+
CARD_MODULE,
|
|
13421
|
+
FormsModule,
|
|
13422
|
+
CHECKBOX_MODULE,
|
|
13423
|
+
ButtonModule,
|
|
13424
|
+
CodeEditorComponent,
|
|
13425
|
+
AsyncPipe,
|
|
13426
|
+
NgTemplateOutlet,
|
|
13427
|
+
ResourceYamlSidebarComponent,
|
|
13428
|
+
IconModule,
|
|
13429
|
+
TooltipModule,
|
|
13430
|
+
TranslatePipe,
|
|
13431
|
+
], providers: [
|
|
13432
|
+
{
|
|
13433
|
+
provide: NG_VALUE_ACCESSOR,
|
|
13434
|
+
useExisting: forwardRef(() => ResourceYamlEditorComponent),
|
|
13435
|
+
multi: true,
|
|
13436
|
+
},
|
|
13437
|
+
], 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"] }]
|
|
13438
|
+
}], ctorParameters: () => [], propDecorators: { codeEditorRef: [{
|
|
13439
|
+
type: ViewChild,
|
|
13440
|
+
args: ['codeEditor', { static: false }]
|
|
13441
|
+
}], hasWrapper: [{
|
|
13442
|
+
type: Input
|
|
13443
|
+
}], showDebugInfo: [{
|
|
13444
|
+
type: Input
|
|
13445
|
+
}], sidebarEnable: [{
|
|
13446
|
+
type: Input
|
|
13447
|
+
}], schema: [{
|
|
13448
|
+
type: Input
|
|
13449
|
+
}], schemaEnable: [{
|
|
13450
|
+
type: Input
|
|
13451
|
+
}], exampleEnable: [{
|
|
13452
|
+
type: Input
|
|
13453
|
+
}], resource: [{
|
|
13454
|
+
type: Input
|
|
13455
|
+
}], autoFoldManagedFields: [{
|
|
13456
|
+
type: Input
|
|
13457
|
+
}], originalValue: [{
|
|
13458
|
+
type: Input
|
|
13459
|
+
}], options: [{
|
|
13460
|
+
type: Input
|
|
13461
|
+
}], actionsConfig: [{
|
|
13462
|
+
type: Input
|
|
13463
|
+
}], tryYaml: [{
|
|
13464
|
+
type: Output
|
|
13465
|
+
}], resource$: [], schema$: [], autoFillNamespace: [{
|
|
13466
|
+
type: Input
|
|
13467
|
+
}], extraExamples: [{
|
|
13468
|
+
type: Input
|
|
13469
|
+
}], clusterName: [{
|
|
13470
|
+
type: Input
|
|
13471
|
+
}], namespace: [{
|
|
13472
|
+
type: Input
|
|
13473
|
+
}] } });
|
|
13474
|
+
|
|
12042
13475
|
/**
|
|
12043
13476
|
* [[include:code/README.md]]
|
|
12044
13477
|
* @module code
|
|
@@ -12394,5 +13827,5 @@ const ASYNC_DATA_MODULE = [
|
|
|
12394
13827
|
* Generated bundle index. Do not edit.
|
|
12395
13828
|
*/
|
|
12396
13829
|
|
|
12397
|
-
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, 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,
|
|
13830
|
+
export { ACTION, AIT_API_GROUP, ALL, ALL_VALUE, ANNOTATIONS, API_GATEWAY, ARGOCD_GROUP, ARRAY_FORM_TABLE_MODULE, ARRAY_TABLE_FORM_ERROR_BG, ASSIGN_ALL, ASYNC_DATA_MODULE, AccessMode, AccessModes, AclTableVirtualComponent, AclTableVirtualHeaderDefDirective, AclTableVirtualModule, AclTableVirtualPlaceholderDefDirective, AclTableVirtualRowDefDirective, AlaudaDeployStatus, AlaudaRunningStatus, ArrayFormTableComponent, ArrayFormTableFooterDirective, ArrayFormTableHeaderDirective, ArrayFormTableRowControlDirective, ArrayFormTableRowDirective, ArrayFormTableRowErrorDirective, ArrayFormTableRowSeparatorDirective, ArrayFormTableZeroStateDirective, AsyncDataLoader, AsyncFunctionValidatorDirective, AuiCodeEditorHelperDirective, BASE_TIMEZONE, BUILT_IN_YAML_EXAMPLES, BaseFormContainer, BaseNestedFormControl, BaseNestedFormControlPure, BaseStringMapFormComponent, Bracket, CHART_PICKER_TIME_RANGES, CLUSTER, COMMON_RESOURCE_DEFINITIONS, CORE_UNITS, CORE_UNIT_REG, CREATE, CREATED_AT, CREATION_TIMESTAMP, CREATOR, CRON_ENABLE_7_FOR_SUNDAY, CRON_FORMAT_ERROR, CRON_MIN_INTERVAL_ERROR, CRYPTO_HEADER_KEY, CRYPTO_KEY, CRYPTO_RANDOM_HEADER_KEY, CRYPTO_TYPE, CUSTOM, CUSTOMIZED, CUSTOM_RANGE, CalcPipe, CardSectionComponent, ClickOutsideDirective, CloudHelmRequestStateEnum, CodeDisplayDialogComponent, CoerceNumberDirective, ConfirmDeleteComponent, ConfirmDeleteContentDirective, ConfirmDeleteLabelDirective, ConfirmDeleteTipDirective, ControlValueTraceDirective, CronHumanReadablePipe, CronWeekDays, CrontabNextPipe, CurrentTimeComponent, DATE_FORMAT, DATE_TIME_FORMAT, DEFAULT_CODE_EDITOR_OPTIONS, DEFAULT_CONTAINER_ANNOTATION, DEFAULT_OPERATOR, DEFAULT_OPTIONS, DEFAULT_REASON, DELIMITER, DESCRIPTION, DISPLAY_NAME, DNS1123SubdomainValidator, DOMAIN_PATTERN, DOMAIN_PATTERN_BASE, DOT, DOWNGRADE_WATCH_ENABLED, DOWNGRADE_WATCH_POLLING, DUPLICATE_ERROR_KEY, DUPLICATION_JUSTIFY_STRATEGY, DataSource, DateRangePickerComponent, DeclareDirective, DefaultStatusColorMapper, DefaultStatusIconMapper, DeleteType, DeletingTagComponent, DisabledContainerComponent, DisabledDirective, DragHandleDirective, DurationPipe, E2eAttributeBindingDirective, EFFECT_DIRECTIVE_MODULE, EMAIL_PATTERN, EMPTY, ERRORS_MAPPER_MODULE, ESCAPE_DEACTIVATE_CHECK, ErrorStateComponent, ErrorsMapperComponent, ErrorsMapperDirective, FALSE, FIELDSET_GROUP_COMPONENTS, FeatureGateDirective, FieldSetColumnComponent, FieldSetColumnGroupComponent, FieldSetGroupComponent, FieldSetItemActionDirective, FieldSetItemComponent, FileResultType, FoldableBlockComponent, FoldableItemInTableComponent, FormItemMarginEffectDirective, FunctionValidatorDirective, GLOBAL_CLUSTER, GenericStatusColor, GenericStatusIcon, GuardStatus, HTTP_ADDRESS_PATTERN, HTTP_DUAL_IP_OR_DOMAIN_PATTERN, HTTP_IP_OR_DOMAIN_PATTERN, HYPHEN, HelmRequestPhaseEnum, HelpDocDirective, HelpDocUrlPipe, HelpDocumentComponent, HelpDocumentService, IMAGE_TAG_PATTERN, INT_PATTERN, INT_ZERO_PATTERN, IPV4_IPV6_ADDRESS_HOSTNAME_PORT_PATTERN, IPV6_ADDRESS_HOSTNAME_PATTERN, IPV6_ADDRESS_HOSTNAME_PORT_PATTERN, IPV6_PATTERN_BASE, IP_ADDRESS_HOSTNAME_PATTERN, IP_ADDRESS_HOSTNAME_PATTERN_EXTEND, IP_ADDRESS_HOSTNAME_PORT_PATTERN, IP_ADDRESS_PATTERN, IP_ADDRESS_PORT_PATTERN, IP_ADDRESS_SUBNET_PATTERN, IP_PATTERN, IP_PATTERN_BASE, IP_V4_OR_V6_PATTERN, IP_V6_ADDRESS_PATTERN, IP_V6_PATTERN, InterceptDeactivateDirective, InterceptDeactivateGuard, InterceptDeactivateService, JobStatusColorMapper, JobStatusEnum, JobStatusIconMapper, K8SResourceList, K8SResourceListFooterComponent, K8SResourcePagedList, K8S_APP_API_GROUP, K8S_CORE_API_GROUP, K8S_RESOURCE_LABEL_KEY_NAME_PATTERN, K8S_RESOURCE_LABEL_KEY_PREFIX_PATTERN, K8S_RESOURCE_LABEL_VALUE_PATTERN, K8S_RESOURCE_LIST_MODULE, K8S_RESOURCE_NAME_START_WITH_CHARS_ONLY, K8S_RESOURCE_TRANSLATE_KEY, K8sListFooterLoadingErrorDirective, K8sListFooterNoDataDirective, K8sResourceAction, K8sResourceMarkComponent, K8sResourceTranslateKeyPipe, K8sSharedUtilService, K8sYamlDisplayDialogComponent, KNOWN_COLUMNS, KeyValueFormTableComponent, KeyValueTableComponent, LABELS, LINK, LOCAL_STORAGE_KEY_THEME_MODE, ListDisplayComponent, ListenResizeDirective, LoadAction, LocaleTransformPipe, MACHINE_API_GROUP, METADATA, MUTABLE_BASIC_OPTIONS, MUTABLE_MODULE, MarkedPipe, MaxLengthValidatorDirective, MaxValidatorDirective, MinLengthValidatorDirective, MinValidatorDirective, MinimumFormatPipe, MosaicComponent, MosaicLeftDirective, MosaicRightDirective, MultiSearchActionInputComponent, MultiSearchAdvanced, MultiSearchBasic, MultiSearchComponent, MutableDirective, NAME, NAMESPACE, NOTIFICATION_SERVER_NAME, NOTIFY_DURATION_HEADER, NOTIFY_ON_ERROR_HEADER, NOTIFY_ON_ERROR_HEADERS, NOT_NOTIFY_ON_ERROR_HEADERS, NUMBER_PATTERN, NamespaceBadgeComponent, NotBeValidatorDirective, OAM_GROUP, OnResizeChangeService, OneOfValidatorDirective, OverviewBannerComponent, PACKAGE_RUNTIME_VALUE, PAGE_GUARD_MODULE, PLATFORM_OPS_MODE, PORT_PATTERN, POSITIVE_INT_PATTERN, POSITIVE_NUMBER_PATTERN, PREFIX_LABEL_CLASS, PROJECT, PUBLIC_NAMESPACE, PageGuardComponent, PageGuardContentDirective, PageGuardDescriptionDirective, PageGuardImageDirective, PageGuardOperationDirective, PageStateComponent, ParseJsonTranslatePipe, PasswordInputComponent, PluginClusterSelectorComponent, PodStatusColorMapper, PodStatusComponent, PodStatusEnum, PodStatusIconMapper, PreventClipboardDirective, PreventDirective, PreventHandler, ProductKey, REASON_MAP, RESOURCE_MAC_TYPES, RESOURCE_REQUIREMENT_KEYS, ReadonlyFieldDirective, Reason, RelativeTimeComponent, RequestPool, ResizeDirective, ResourceLabelComponent, ResourceMultiSelectComponent, ResourceYamlDisplayComponent, ResourceYamlEditorComponent, SERVICE_PORT_BASE_PROTOCOLS, SERVICE_PORT_PROTOCOLS, SERVICE_SESSION_AFFINITIES, SERVICE_TYPES, SLASH, SPACE, SPEC, STATUS, STRATEGY_JUDGE_MAPPER, STRONG_PASSWORD_SPECIAL_CHARS, ScrollBorderObserverDirective, ScrollToFirstInvalidDirective, ScrollToFirstInvalidMarkerDirective, SearchItemComponent, SearchItemLabelDirective, SearchPanelComponent, SecretType, SelectPrefixLabelDirective, SpanComponent, StatusIconComponent, StopDirective, StringArrayFormTableComponent, StrongPasswordDirective, StrongPasswordTooltipComponent, TEMPLATE_OPTIONS, TIMEZONES, TIME_FORMAT, TOKEN_HELP_DOC_DATA, TRUE, TableCellDefDirective, TableComponent, TableCustomColumnsComponent, TableHeaderCellDefDirective, TableUtilService, TagsLabelComponent, TaintEffect, TerminatingTagComponent, TestTagComponent, TextEllipsisComponent, TextTooltipDirective, TextWithUrlComponent, ThemeTransformPipe, TimezoneDisplayPipe, TolerationOperator, TrimDirective, UNDERSCORE, UNITS, UNIT_REG, UPDATE, UPDATED_AT, UPDATED__AT, UpdateDescriptionDialogComponent, UpdateDisplayNameDialogComponent, UpdateKeyValueDialogComponent, UploadFileComponent, UserSecurityPolicyRule, UserState, VOLUME_SNAPSHOT_GROUP, ValidateRowDuplicateService, ValidatorsDirective, VolumeMode, VolumeModes, VolumeTypeEnum, WEEK_DAYS, WILDCARD, WORKSPACE_PARAMS, WorkloadKind, WorkloadStatusColorMapper, WorkloadStatusEnum, WorkloadStatusIconComponent, WorkloadStatusIconMapper, YamlUtilService, ZeroStateComponent, addUnitCoreM, addUnitGi, addUnitMi, appendImageHeader, atobWithFallback, buildImageAddress, buildUrl, checkValueExit, clearWindowsXtermTools, compareMinorVersion, compareVersion, copyValue, createNestedFormControl, cronValidator, cronValidatorBasic, dataTransfer, dateValueOf, defaultFilter, defaultSorter, emptyObjectRemoveRuleFactory, errorColor, extractListParamsFromRoute, extractPagedListParams, extractWorkspace, extractWorkspaceFromRoute, filterEmptyValue, filterTrees, findPath, firstPath, formatCPU, formatMemory, formatNumber, genControlDepsMap, getAppropriateMemory, getBaseHref, getCpu, getCronWeekDayNumbers, getDisabledState, getDisabledState$, getHelpDocUrl, getHostname, getJobStatus, getK8sResourceAnnotationErrorMapper, getK8sResourceAnnotationErrorMapper$, getK8sResourceLabelErrorMapper, getK8sResourceLabelErrorMapper$, getMemory, getPickerTimeRanges, getPodAggregatedStatus, getPodIPs, getPodStatus, getPrivateIP, getPrivateIPv4, getPrivateIPv6, getRelativePath, getResourceLimitAsyncValidatorFn, getResourceLimitValidatorFn, getResourceValue, getResourceViewModel, getToPath, getValidVersion, getWorkloadStatus, initGreaterValidator, isAbsoluteUrl, isB, isCronFieldCountCorrect, isCronWeekDayCorrect, isCronWeekDaysContinuous, isErrorMessage, isJsonObjectString, isK8sResource, isL, isR, isSelectAll, isT, isValidRID, isValidWorkspace, k8sResourceAnnotationKeyValidator, k8sResourceAnnotationValidator, k8sResourceLabelKeyValidator, k8sResourceLabelValidator, k8sResourceLabelValueValidator, loadEnv, logsReadOptions, mapTrees, matchExpressionsToString, matchLabelsToString, maxParallelByHttpVersion, noShowRowError, normalizeParams, numToStr, parseDaemonSetStatus, parseDeploymentStatus, parseImageAddress, parseRID, parseStatefulSetStatus, parseToWorkloadStatus, parseUrlInText, parseValidImageName, parseValueAndUnit, parseVersion, parseWorkspace, prefixFilterRuleFactory, primaryColor, queryListParams, randomPassword, reduceTrees, removeDirtyFieldsBeforeUpdate, resourceUnits, rowBackgroundColorFn, safeAssign, scrollIntoView, setNode, setupErrorMapper, shortNum, sortByCreationTimestamp, stringToMatchLabels, stringifyRID, stringifyWorkspace, successColor, tableSort, tableSortAdvance, tagRenderDefault, toLowerFirstLetter, toNumber, toPercent, toPx, toUnitGi, toUnitI, toUnitMi, toUnitNum, toUnitNumM, trackByName, trackByUid, transferResource, versionRegex, warnColor, withLoadState, workspaceToPath, yamlFilterField };
|
|
12398
13831
|
//# sourceMappingURL=alauda-fe-dynamic-plugin-shared.mjs.map
|