@xiriframework/xiri-ng 0.4.2 → 0.4.4
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/xiriframework-xiri-ng.mjs +943 -467
- package/fesm2022/xiriframework-xiri-ng.mjs.map +1 -1
- package/package.json +1 -1
- package/skills/xiri-ng-expert/SKILL.md +29 -2
- package/skills/xiri-ng-expert/references/components.md +13 -1
- package/skills/xiri-ng-expert/references/form-fields.md +95 -1
- package/types/xiriframework-xiri-ng.d.ts +28 -0
- package/types/xiriframework-xiri-ng.d.ts.map +1 -1
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { inject, Pipe, input, computed, Directive, ElementRef, ChangeDetectorRef, Input, Component, PLATFORM_ID, signal, effect, Service, output, numberAttribute, afterRenderEffect, booleanAttribute, viewChild,
|
|
3
|
+
import { inject, Pipe, input, computed, Directive, Injectable, ElementRef, ChangeDetectorRef, Input, Component, PLATFORM_ID, signal, effect, Service, output, numberAttribute, afterRenderEffect, untracked, booleanAttribute, viewChild, DestroyRef, forwardRef, Injector, afterNextRender, ViewEncapsulation, linkedSignal, ChangeDetectionStrategy, NgZone, makeEnvironmentProviders } from '@angular/core';
|
|
4
4
|
import { DefaultUrlSerializer, RouterLink, Router, NavigationEnd } from '@angular/router';
|
|
5
5
|
import { takeUntilDestroyed, toSignal, rxResource } from '@angular/core/rxjs-interop';
|
|
6
6
|
import * as i1 from '@angular/forms';
|
|
7
7
|
import { NgControl, FormGroup, FormControl, FormsModule, ReactiveFormsModule, NgForm, FormGroupDirective, Validators, FormBuilder, UntypedFormControl, NG_VALUE_ACCESSOR, UntypedFormBuilder } from '@angular/forms';
|
|
8
|
+
import { tap, Subject, Subscription, debounceTime, distinctUntilChanged, BehaviorSubject, ReplaySubject, switchMap, catchError, of, merge, filter as filter$1, map, EMPTY, timer, finalize, throwError } from 'rxjs';
|
|
9
|
+
import { HttpClient } from '@angular/common/http';
|
|
10
|
+
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
8
11
|
import { MatProgressSpinner } from '@angular/material/progress-spinner';
|
|
12
|
+
import { MatProgressBar } from '@angular/material/progress-bar';
|
|
9
13
|
import { MatFormField, MatLabel, MatSuffix, MatHint, MatError, MatFormFieldControl, MatPrefix } from '@angular/material/form-field';
|
|
10
|
-
import { Subject, Subscription, tap, debounceTime, distinctUntilChanged, BehaviorSubject, ReplaySubject, switchMap, catchError, of, map, throwError, timer, filter as filter$1 } from 'rxjs';
|
|
11
14
|
import { FocusMonitor, CdkTrapFocus, ConfigurableFocusTrapFactory } from '@angular/cdk/a11y';
|
|
12
15
|
import { MatIcon } from '@angular/material/icon';
|
|
13
16
|
import { MatIconButton, MatButton, MatFabButton, MatMiniFabButton } from '@angular/material/button';
|
|
@@ -25,8 +28,6 @@ import { enGB } from 'date-fns/locale/en-GB';
|
|
|
25
28
|
import { MatDatepickerInput, MatDatepickerToggle, MatDatepickerToggleIcon, MatDatepicker, MatDateRangeInput, MatStartDate, MatEndDate, MatDateRangePicker } from '@angular/material/datepicker';
|
|
26
29
|
import { MatTree, MatTreeNestedDataSource, MatTreeNode, MatTreeNodeToggle, MatTreeNodePadding, MatTreeNodeDef } from '@angular/material/tree';
|
|
27
30
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
28
|
-
import { HttpClient } from '@angular/common/http';
|
|
29
|
-
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
30
31
|
import { filter, takeUntil, debounceTime as debounceTime$1 } from 'rxjs/operators';
|
|
31
32
|
import * as i2 from 'ngx-mat-select-search';
|
|
32
33
|
import { NgxMatSelectSearchModule } from 'ngx-mat-select-search';
|
|
@@ -42,7 +43,6 @@ import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
|
|
|
42
43
|
import { MatDivider } from '@angular/material/divider';
|
|
43
44
|
import { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';
|
|
44
45
|
import { MatCard, MatCardContent, MatCardHeader, MatCardAvatar, MatCardSubtitle, MatCardTitle, MatCardActions } from '@angular/material/card';
|
|
45
|
-
import { MatProgressBar } from '@angular/material/progress-bar';
|
|
46
46
|
import { MatListSubheaderCssMatStyler, MatNavList, MatListItem, MatListItemIcon, MatListItemTitle, MatListItemLine, MatListItemMeta } from '@angular/material/list';
|
|
47
47
|
import { MatStepper, MatStep } from '@angular/material/stepper';
|
|
48
48
|
import { MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle, MatAccordion, MatExpansionPanelDescription } from '@angular/material/expansion';
|
|
@@ -58,10 +58,10 @@ class SafehtmlPipe {
|
|
|
58
58
|
transform(style) {
|
|
59
59
|
return this.sanitizer.bypassSecurityTrustHtml(style);
|
|
60
60
|
}
|
|
61
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
62
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0
|
|
61
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: SafehtmlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
62
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.1.0", ngImport: i0, type: SafehtmlPipe, isStandalone: true, name: "safeHtml" }); }
|
|
63
63
|
}
|
|
64
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: SafehtmlPipe, decorators: [{
|
|
65
65
|
type: Pipe,
|
|
66
66
|
args: [{
|
|
67
67
|
name: 'safeHtml'
|
|
@@ -82,10 +82,10 @@ class XiriUrlPipe {
|
|
|
82
82
|
const tree = serializer.parse(url);
|
|
83
83
|
return { path: url.split(/[?#]/)[0], queryParams: tree.queryParams };
|
|
84
84
|
}
|
|
85
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
86
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0
|
|
85
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
86
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.1.0", ngImport: i0, type: XiriUrlPipe, isStandalone: true, name: "xiriUrl" }); }
|
|
87
87
|
}
|
|
88
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
88
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriUrlPipe, decorators: [{
|
|
89
89
|
type: Pipe,
|
|
90
90
|
args: [{ name: 'xiriUrl' }]
|
|
91
91
|
}] });
|
|
@@ -108,10 +108,10 @@ class XiriColsDirective {
|
|
|
108
108
|
this.classes = computed(() => colsToClasses(this.xiriCols()), /* @ts-ignore */
|
|
109
109
|
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
110
110
|
}
|
|
111
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
112
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0
|
|
111
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriColsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
112
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.0", type: XiriColsDirective, isStandalone: true, selector: "[xiriCols]", inputs: { xiriCols: { classPropertyName: "xiriCols", publicName: "xiriCols", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0 }); }
|
|
113
113
|
}
|
|
114
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriColsDirective, decorators: [{
|
|
115
115
|
type: Directive,
|
|
116
116
|
args: [{
|
|
117
117
|
selector: '[xiriCols]',
|
|
@@ -119,8 +119,170 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
119
119
|
}]
|
|
120
120
|
}], propDecorators: { xiriCols: [{ type: i0.Input, args: [{ isSignal: true, alias: "xiriCols", required: false }] }] } });
|
|
121
121
|
|
|
122
|
+
class XiriSnackbarService {
|
|
123
|
+
constructor() {
|
|
124
|
+
this.snackbar = inject(MatSnackBar);
|
|
125
|
+
}
|
|
126
|
+
success(message, duration = 3000, action) {
|
|
127
|
+
return this.show(message, 'success', duration, action);
|
|
128
|
+
}
|
|
129
|
+
error(message, duration = 5000, action) {
|
|
130
|
+
return this.show(message, 'error', duration, action);
|
|
131
|
+
}
|
|
132
|
+
info(message, duration = 3000, action) {
|
|
133
|
+
return this.show(message, 'info', duration, action);
|
|
134
|
+
}
|
|
135
|
+
warning(message, duration = 4000, action) {
|
|
136
|
+
return this.show(message, 'warning', duration, action);
|
|
137
|
+
}
|
|
138
|
+
handleResponse(response) {
|
|
139
|
+
const res = response;
|
|
140
|
+
if (!res?.message || !res?.messageType)
|
|
141
|
+
return false;
|
|
142
|
+
switch (res.messageType) {
|
|
143
|
+
case 'success':
|
|
144
|
+
this.success(res.message);
|
|
145
|
+
break;
|
|
146
|
+
case 'error':
|
|
147
|
+
this.error(res.message);
|
|
148
|
+
break;
|
|
149
|
+
case 'info':
|
|
150
|
+
this.info(res.message);
|
|
151
|
+
break;
|
|
152
|
+
case 'warning':
|
|
153
|
+
this.warning(res.message);
|
|
154
|
+
break;
|
|
155
|
+
default: this.info(res.message);
|
|
156
|
+
}
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
show(message, type, duration, action) {
|
|
160
|
+
const config = {
|
|
161
|
+
duration: duration,
|
|
162
|
+
horizontalPosition: 'center',
|
|
163
|
+
verticalPosition: 'bottom',
|
|
164
|
+
panelClass: [`xiri-snackbar-${type}`],
|
|
165
|
+
politeness: type === 'error' ? 'assertive' : 'polite',
|
|
166
|
+
};
|
|
167
|
+
return this.snackbar.open(message, action || undefined, config);
|
|
168
|
+
}
|
|
169
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSnackbarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
170
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSnackbarService, providedIn: 'root' }); }
|
|
171
|
+
}
|
|
172
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSnackbarService, decorators: [{
|
|
173
|
+
type: Injectable,
|
|
174
|
+
args: [{
|
|
175
|
+
providedIn: 'root',
|
|
176
|
+
}]
|
|
177
|
+
}] });
|
|
178
|
+
|
|
179
|
+
// providedIn 'root' so the class doubles as its own default: an app that never calls
|
|
180
|
+
// provideXiriServices() gets the documented '/api/' base instead of a NullInjector error.
|
|
181
|
+
// provideXiriServices() still overrides it with a useValue provider.
|
|
182
|
+
class XiriDataServiceConfig {
|
|
183
|
+
constructor() {
|
|
184
|
+
this.api = '/api/';
|
|
185
|
+
}
|
|
186
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDataServiceConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
187
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDataServiceConfig, providedIn: 'root' }); }
|
|
188
|
+
}
|
|
189
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDataServiceConfig, decorators: [{
|
|
190
|
+
type: Injectable,
|
|
191
|
+
args: [{ providedIn: 'root' }]
|
|
192
|
+
}] });
|
|
193
|
+
const defaultXiriDataServiceConfig = {
|
|
194
|
+
api: '/api/',
|
|
195
|
+
};
|
|
196
|
+
class XiriDataService {
|
|
197
|
+
constructor() {
|
|
198
|
+
this.http = inject(HttpClient);
|
|
199
|
+
this.config = inject(XiriDataServiceConfig);
|
|
200
|
+
this.snackbar = inject(XiriSnackbarService);
|
|
201
|
+
}
|
|
202
|
+
get(url) {
|
|
203
|
+
return this.http.get(this.config.api + url).pipe(tap((res) => this.snackbar.handleResponse(res)));
|
|
204
|
+
}
|
|
205
|
+
post(url, data) {
|
|
206
|
+
return this.http.post(this.config.api + url, data).pipe(tap((res) => this.snackbar.handleResponse(res)));
|
|
207
|
+
}
|
|
208
|
+
postFile(url, data) {
|
|
209
|
+
return this.http.post(this.config.api + url, data, { responseType: 'blob' });
|
|
210
|
+
}
|
|
211
|
+
postFileResponse(url, data) {
|
|
212
|
+
return this.http.post(this.config.api + url, data, { observe: 'response', responseType: 'blob' });
|
|
213
|
+
}
|
|
214
|
+
/** @deprecated Use postFileResponse() + XiriDownloadService.download() instead */
|
|
215
|
+
postDownload(url, data) {
|
|
216
|
+
console.warn('XiriDataService.postDownload() is deprecated. Use postFileResponse() + XiriDownloadService.download() instead.');
|
|
217
|
+
const downForm = document.createElement('form');
|
|
218
|
+
downForm.target = '_blank';
|
|
219
|
+
downForm.method = 'POST';
|
|
220
|
+
downForm.action = url;
|
|
221
|
+
const input = document.createElement('input');
|
|
222
|
+
input.type = 'hidden';
|
|
223
|
+
input.name = 'data';
|
|
224
|
+
input.setAttribute('value', JSON.stringify(data));
|
|
225
|
+
downForm.appendChild(input);
|
|
226
|
+
document.body.appendChild(downForm);
|
|
227
|
+
downForm.submit();
|
|
228
|
+
}
|
|
229
|
+
getConfigApi() {
|
|
230
|
+
return this.config.api;
|
|
231
|
+
}
|
|
232
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
233
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDataService, providedIn: 'root' }); }
|
|
234
|
+
}
|
|
235
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDataService, decorators: [{
|
|
236
|
+
type: Injectable,
|
|
237
|
+
args: [{
|
|
238
|
+
providedIn: 'root',
|
|
239
|
+
}]
|
|
240
|
+
}] });
|
|
241
|
+
|
|
242
|
+
function parseHttpError(err) {
|
|
243
|
+
if (err.status === 400 || err.status === 424)
|
|
244
|
+
return err.error?.error || 'Format Error';
|
|
245
|
+
if (err.status === 403)
|
|
246
|
+
return err.error?.error || 'Access denied';
|
|
247
|
+
if (err.status === 404)
|
|
248
|
+
return 'Not found';
|
|
249
|
+
if (err.status === 0)
|
|
250
|
+
return 'Connection error';
|
|
251
|
+
return 'Unknown error';
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// The "empty" value used to clear a control, matching the shape the control currently holds.
|
|
255
|
+
function emptyValueForField(field) {
|
|
256
|
+
const value = field.control?.value;
|
|
257
|
+
if (Array.isArray(value))
|
|
258
|
+
return [];
|
|
259
|
+
if (typeof value === 'string')
|
|
260
|
+
return '';
|
|
261
|
+
return null;
|
|
262
|
+
}
|
|
263
|
+
|
|
122
264
|
class XiriFileComponent {
|
|
123
265
|
static { this.nextId = 0; }
|
|
266
|
+
get disabled() {
|
|
267
|
+
return this._disabled;
|
|
268
|
+
}
|
|
269
|
+
// Der oeffentliche Input ist dieselbe Quelle wie field.disabled: eine deklarative Sperre, die
|
|
270
|
+
// ein setDisabledState(false) beim Control-Setup nicht aufheben darf.
|
|
271
|
+
set disabled(value) {
|
|
272
|
+
this.inputDisabled = value;
|
|
273
|
+
this.applyDisabled();
|
|
274
|
+
}
|
|
275
|
+
applyDisabled() {
|
|
276
|
+
const value = this.fieldDisabled || this.inputDisabled || this.controlDisabled;
|
|
277
|
+
this._disabled = value;
|
|
278
|
+
if (value)
|
|
279
|
+
this.readGeneration++;
|
|
280
|
+
if (value)
|
|
281
|
+
this.parts.disable({ emitEvent: false });
|
|
282
|
+
else
|
|
283
|
+
this.parts.enable({ emitEvent: false });
|
|
284
|
+
this.stateChanges.next();
|
|
285
|
+
}
|
|
124
286
|
constructor() {
|
|
125
287
|
this.focusMonitor = inject(FocusMonitor);
|
|
126
288
|
this.ngControl = inject(NgControl, { optional: true, self: true });
|
|
@@ -132,7 +294,19 @@ class XiriFileComponent {
|
|
|
132
294
|
this.focused = false;
|
|
133
295
|
this.controlType = 'xiri-file';
|
|
134
296
|
this.required = false;
|
|
135
|
-
|
|
297
|
+
// Zwei Sperrquellen, getrennt gehalten und verodert: Angular ruft beim Control-Setup
|
|
298
|
+
// setDisabledState(false) -- callSetDisabledState ist per Default 'always' -- und zwar nach
|
|
299
|
+
// dem field-Input. Schlüge das direkt durch, höbe es ein Backend-disabled wieder auf.
|
|
300
|
+
// Getrennt, obwohl beide deklarativ sind: sind [field] und [disabled] gleichzeitig gebunden,
|
|
301
|
+
// ruft Angular den unveraenderten zweiten Input nicht erneut auf.
|
|
302
|
+
this.fieldDisabled = false;
|
|
303
|
+
this.inputDisabled = false;
|
|
304
|
+
this.controlDisabled = false;
|
|
305
|
+
// Wird bei jedem Sperren UND bei jeder neuen Auswahl hochgezaehlt. Nur beim Sperren zu zaehlen
|
|
306
|
+
// wuerde zwei schnell aufeinander folgende Auswahlen nicht trennen: der langsamere Reader der
|
|
307
|
+
// ersten Auswahl traegt dann dieselbe Generation und darf trotzdem schreiben.
|
|
308
|
+
this.readGeneration = 0;
|
|
309
|
+
this._disabled = false;
|
|
136
310
|
this.shouldLabelFloat = true;
|
|
137
311
|
this.currentFiles = [];
|
|
138
312
|
this.onChange = () => { };
|
|
@@ -178,11 +352,8 @@ class XiriFileComponent {
|
|
|
178
352
|
set field(value) {
|
|
179
353
|
this._field = value;
|
|
180
354
|
this.required = value.required ?? false;
|
|
181
|
-
this.
|
|
182
|
-
|
|
183
|
-
this.parts.disable();
|
|
184
|
-
else
|
|
185
|
-
this.parts.enable();
|
|
355
|
+
this.fieldDisabled = !!value.disabled;
|
|
356
|
+
this.applyDisabled();
|
|
186
357
|
this.stateChanges.next();
|
|
187
358
|
}
|
|
188
359
|
get errorState() {
|
|
@@ -201,13 +372,33 @@ class XiriFileComponent {
|
|
|
201
372
|
this.onTouched = fn;
|
|
202
373
|
}
|
|
203
374
|
setDisabledState(isDisabled) {
|
|
204
|
-
this.
|
|
375
|
+
this.controlDisabled = isDisabled;
|
|
376
|
+
this.applyDisabled();
|
|
205
377
|
}
|
|
206
378
|
setDescribedByIds(ids) {
|
|
207
379
|
this.describedBy = ids.join(' ');
|
|
208
380
|
}
|
|
209
381
|
onContainerClick() { }
|
|
382
|
+
// Ein deaktiviertes `parts` sperrt nur die Anzeige -- der Dateidialog haengt am
|
|
383
|
+
// mat-form-field, nicht am Input, und kann beim Sperren schon offen sein. Deshalb hier ein
|
|
384
|
+
// eigener Guard und nicht nur einer im Template.
|
|
385
|
+
openFileDialog(input) {
|
|
386
|
+
if (this.disabled)
|
|
387
|
+
return;
|
|
388
|
+
input.click();
|
|
389
|
+
}
|
|
210
390
|
fileChange(event) {
|
|
391
|
+
if (this.disabled)
|
|
392
|
+
return;
|
|
393
|
+
// Der FileReader antwortet asynchron. Wird das Feld waehrend des Lesens gesperrt oder eine
|
|
394
|
+
// neue Auswahl getroffen, darf der Callback nichts mehr schreiben -- und ein disable/enable
|
|
395
|
+
// dazwischen darf ihn auch nicht wieder gueltig machen. Deshalb eine Generation statt
|
|
396
|
+
// eines blossen Guards.
|
|
397
|
+
//
|
|
398
|
+
// Direkt hier hochzaehlen, vor jedem Abbruch: auch eine verworfene Auswahl (zu viele
|
|
399
|
+
// Dateien) muss eine noch laufende vorherige entwerten, sonst schreibt deren Reader in
|
|
400
|
+
// einen Stand, den der Nutzer gerade ersetzen wollte.
|
|
401
|
+
const generation = ++this.readGeneration;
|
|
211
402
|
const element = event.currentTarget;
|
|
212
403
|
const fileList = element.files;
|
|
213
404
|
if (fileList === null || fileList.length === 0 || fileList.length > 100)
|
|
@@ -228,6 +419,8 @@ class XiriFileComponent {
|
|
|
228
419
|
}
|
|
229
420
|
const reader = new FileReader();
|
|
230
421
|
reader.addEventListener("load", () => {
|
|
422
|
+
if (generation !== this.readGeneration)
|
|
423
|
+
return;
|
|
231
424
|
this.currentFiles.push({
|
|
232
425
|
file: file,
|
|
233
426
|
name: file.name,
|
|
@@ -250,13 +443,13 @@ class XiriFileComponent {
|
|
|
250
443
|
console.log('unknown error file', errors);
|
|
251
444
|
return 'error';
|
|
252
445
|
}
|
|
253
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
254
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
446
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
447
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriFileComponent, isStandalone: true, selector: "xiri-file", inputs: { value: "value", field: "field" }, host: { properties: { "id": "id", "attr.aria-describedby": "describedBy" } }, providers: [{
|
|
255
448
|
provide: MatFormFieldControl,
|
|
256
449
|
useExisting: XiriFileComponent
|
|
257
|
-
}], ngImport: i0, template: "<mat-form-field [formGroup]=\"parts\" floatLabel=\"auto\" class=\"fileselect\" (click)=\"fileInput
|
|
450
|
+
}], ngImport: i0, template: "<mat-form-field [formGroup]=\"parts\" floatLabel=\"auto\" class=\"fileselect\" (click)=\"openFileDialog(fileInput)\">\n\t<mat-label>{{ field.name }}</mat-label>\n\n\t<input matInput formControlName=\"text\" type=\"text\" [required]=\"required\" readonly>\n\t<button mat-icon-button matSuffix class=\"form-field-button\" aria-label=\"Datei ausw\u00E4hlen\" [disabled]=\"disabled\">\n\t\t<mat-icon>file_upload</mat-icon>\n\t</button>\n\n\t<input hidden type=\"file\" [accept]=\"field.accept\" [multiple]=\"field.multiple\" [disabled]=\"disabled\"\n\t (change)=\"fileChange($event)\" #fileInput>\n\n\t@if (field.hint) {\n\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t}\n\t@if (errorState) {\n\t\t<mat-error>{{ getErrorMessage() }}</mat-error>\n\t}\n</mat-form-field>", styles: [".fileselect{cursor:pointer}.fileselect mat-icon{--mat-icon-color: var(--xiri-formfield-icon-color)}.fileselect .form-field-button{margin-left:12px;margin-right:12px}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }] }); }
|
|
258
451
|
}
|
|
259
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
452
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriFileComponent, decorators: [{
|
|
260
453
|
type: Component,
|
|
261
454
|
args: [{ selector: 'xiri-file', host: {
|
|
262
455
|
'[id]': 'id',
|
|
@@ -275,7 +468,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
275
468
|
MatIcon,
|
|
276
469
|
MatHint,
|
|
277
470
|
MatError,
|
|
278
|
-
], template: "<mat-form-field [formGroup]=\"parts\" floatLabel=\"auto\" class=\"fileselect\" (click)=\"fileInput
|
|
471
|
+
], template: "<mat-form-field [formGroup]=\"parts\" floatLabel=\"auto\" class=\"fileselect\" (click)=\"openFileDialog(fileInput)\">\n\t<mat-label>{{ field.name }}</mat-label>\n\n\t<input matInput formControlName=\"text\" type=\"text\" [required]=\"required\" readonly>\n\t<button mat-icon-button matSuffix class=\"form-field-button\" aria-label=\"Datei ausw\u00E4hlen\" [disabled]=\"disabled\">\n\t\t<mat-icon>file_upload</mat-icon>\n\t</button>\n\n\t<input hidden type=\"file\" [accept]=\"field.accept\" [multiple]=\"field.multiple\" [disabled]=\"disabled\"\n\t (change)=\"fileChange($event)\" #fileInput>\n\n\t@if (field.hint) {\n\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t}\n\t@if (errorState) {\n\t\t<mat-error>{{ getErrorMessage() }}</mat-error>\n\t}\n</mat-form-field>", styles: [".fileselect{cursor:pointer}.fileselect mat-icon{--mat-icon-color: var(--xiri-formfield-icon-color)}.fileselect .form-field-button{margin-left:12px;margin-right:12px}\n"] }]
|
|
279
472
|
}], ctorParameters: () => [], propDecorators: { value: [{
|
|
280
473
|
type: Input
|
|
281
474
|
}], field: [{
|
|
@@ -483,13 +676,13 @@ class XiriTimelimitComponent {
|
|
|
483
676
|
onCompare() {
|
|
484
677
|
return -1;
|
|
485
678
|
}
|
|
486
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
487
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
679
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTimelimitComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
680
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriTimelimitComponent, isStandalone: true, selector: "xiri-timelimit", inputs: { placeholder: "placeholder", required: "required", disabled: "disabled", value: "value", texts: "texts" }, host: { properties: { "id": "id", "attr.aria-describedby": "describedBy" } }, providers: [{
|
|
488
681
|
provide: MatFormFieldControl,
|
|
489
682
|
useExisting: XiriTimelimitComponent
|
|
490
683
|
}], ngImport: i0, template: "<div class=\"timelimit\" [formGroup]=\"parts\">\n\n\t<mat-checkbox id=\"check\" formControlName=\"check\" (change)=\"changed()\">{{ _texts.check }}</mat-checkbox>\n\n\t<div [hidden]=\"!parts.value.check\" class=\"space\">\n\t\t<div class=\"xrow xsmall\">\n\t\t\t<div class=\"xcol-12\">\n\t\t\t\t<mat-label>{{ _texts.weekdays }}</mat-label>\n\t\t\t\t<div class=\"form-group timelimit-weekdays\">\n\t\t\t\t\t<mat-checkbox id=\"wd0\" formControlName=\"wd0\" class=\"wd\" (change)=\"changed()\">{{ _texts.wd0 }}</mat-checkbox>\n\t\t\t\t\t<mat-checkbox id=\"wd1\" formControlName=\"wd1\" class=\"wd\" (change)=\"changed()\">{{ _texts.wd1 }}</mat-checkbox>\n\t\t\t\t\t<mat-checkbox id=\"wd2\" formControlName=\"wd2\" class=\"wd\" (change)=\"changed()\">{{ _texts.wd2 }}</mat-checkbox>\n\t\t\t\t\t<mat-checkbox id=\"wd3\" formControlName=\"wd3\" class=\"wd\" (change)=\"changed()\">{{ _texts.wd3 }}</mat-checkbox>\n\t\t\t\t\t<mat-checkbox id=\"wd4\" formControlName=\"wd4\" class=\"wd\" (change)=\"changed()\">{{ _texts.wd4 }}</mat-checkbox>\n\t\t\t\t\t<mat-checkbox id=\"wd5\" formControlName=\"wd5\" class=\"wd\" (change)=\"changed()\">{{ _texts.wd5 }}</mat-checkbox>\n\t\t\t\t\t<mat-checkbox id=\"wd6\" formControlName=\"wd6\" class=\"wd\" (change)=\"changed()\">{{ _texts.wd6 }}</mat-checkbox>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"xcol-md-6\">\n\t\t\t\t<mat-label>{{ _texts.from }}</mat-label>\n\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t<mat-form-field class=\"time\">\n\t\t\t\t\t\t<mat-select formControlName=\"fromhour\" panelWidth=\"auto\">\n\t\t\t\t\t\t\t@for (h of hours; track h; let i = $index) {\n\t\t\t\t\t\t\t\t<mat-option [value]=\"i\">{{ h }}</mat-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t</mat-form-field>\n\t\t\t\t\t<mat-form-field class=\"time\">\n\t\t\t\t\t\t<mat-select formControlName=\"frommin\" panelWidth=\"auto\">\n\t\t\t\t\t\t\t@for (m of minutes | keyvalue:onCompare; track m; let i = $index) {\n\t\t\t\t\t\t\t\t<mat-option [value]=\"i\">{{ m.value }}</mat-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t</mat-form-field>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"xcol-md-6\">\n\t\t\t\t<mat-label>{{ _texts.to }}</mat-label>\n\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t<mat-form-field class=\"time\">\n\t\t\t\t\t\t<mat-select formControlName=\"tohour\" panelWidth=\"auto\">\n\t\t\t\t\t\t\t@for (h of hours; track h; let i = $index) {\n\t\t\t\t\t\t\t\t<mat-option [value]=\"i\">{{ h }}</mat-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t</mat-form-field>\n\t\t\t\t\t<mat-form-field class=\"time\">\n\t\t\t\t\t\t<mat-select formControlName=\"tomin\" panelWidth=\"auto\">\n\t\t\t\t\t\t\t@for (m of minutes | keyvalue; track m; let i = $index) {\n\t\t\t\t\t\t\t\t<mat-option [value]=\"i\">{{ m.value }}</mat-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t</mat-form-field>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"xcol-12\">\n\t\t\t\t<mat-checkbox id=\"inout\" formControlName=\"inout\" (change)=\"changed()\">{{ _texts.inout }}</mat-checkbox>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>", styles: [".time{width:5.5rem;margin-left:.5rem;margin-right:.5rem}.timelimit-weekdays .wd+.wd{margin-left:1.2rem}mat-label{color:var(--on-surface-variant, rgba(0, 0, 0, .54))}.space{margin-top:1rem;padding-left:1rem;padding-bottom:1rem;border-left:1px solid var(--outline-variant, #C2C7CF)}.form-group{padding-bottom:7px}[hidden]{display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }] }); }
|
|
491
684
|
}
|
|
492
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
685
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTimelimitComponent, decorators: [{
|
|
493
686
|
type: Component,
|
|
494
687
|
args: [{ selector: 'xiri-timelimit', host: {
|
|
495
688
|
'[id]': 'id',
|
|
@@ -521,6 +714,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
521
714
|
|
|
522
715
|
class XiriVolumeComponent {
|
|
523
716
|
static { this.nextId = 0; }
|
|
717
|
+
get disabled() {
|
|
718
|
+
return this._disabled;
|
|
719
|
+
}
|
|
720
|
+
// Der oeffentliche Input ist dieselbe Quelle wie field.disabled: eine deklarative Sperre, die
|
|
721
|
+
// ein setDisabledState(false) beim Control-Setup nicht aufheben darf.
|
|
722
|
+
set disabled(value) {
|
|
723
|
+
this.inputDisabled = value;
|
|
724
|
+
this.applyDisabled();
|
|
725
|
+
}
|
|
726
|
+
applyDisabled() {
|
|
727
|
+
const value = this.fieldDisabled || this.inputDisabled || this.controlDisabled;
|
|
728
|
+
this._disabled = value;
|
|
729
|
+
if (value)
|
|
730
|
+
this.parts.disable({ emitEvent: false });
|
|
731
|
+
else
|
|
732
|
+
this.parts.enable({ emitEvent: false });
|
|
733
|
+
this.stateChanges.next();
|
|
734
|
+
}
|
|
524
735
|
constructor() {
|
|
525
736
|
this.focusMonitor = inject(FocusMonitor);
|
|
526
737
|
this.ngControl = inject(NgControl, { optional: true, self: true });
|
|
@@ -534,7 +745,15 @@ class XiriVolumeComponent {
|
|
|
534
745
|
this.focused = false;
|
|
535
746
|
this.controlType = 'xiri-volume';
|
|
536
747
|
this.required = false;
|
|
537
|
-
|
|
748
|
+
// Zwei Sperrquellen, getrennt gehalten und verodert: Angular ruft beim Control-Setup
|
|
749
|
+
// setDisabledState(false) -- callSetDisabledState ist per Default 'always' -- und zwar nach
|
|
750
|
+
// dem field-Input. Schlüge das direkt durch, höbe es ein Backend-disabled wieder auf.
|
|
751
|
+
// Getrennt, obwohl beide deklarativ sind: sind [field] und [disabled] gleichzeitig gebunden,
|
|
752
|
+
// ruft Angular den unveraenderten zweiten Input nicht erneut auf.
|
|
753
|
+
this.fieldDisabled = false;
|
|
754
|
+
this.inputDisabled = false;
|
|
755
|
+
this.controlDisabled = false;
|
|
756
|
+
this._disabled = false;
|
|
538
757
|
this.shouldLabelFloat = true;
|
|
539
758
|
this._lastValue = null;
|
|
540
759
|
this.onChange = () => { };
|
|
@@ -570,11 +789,8 @@ class XiriVolumeComponent {
|
|
|
570
789
|
if (value.max)
|
|
571
790
|
this.max = value.max;
|
|
572
791
|
this.required = coerceBooleanProperty(value.required);
|
|
573
|
-
this.
|
|
574
|
-
|
|
575
|
-
this.parts.disable();
|
|
576
|
-
else
|
|
577
|
-
this.parts.enable();
|
|
792
|
+
this.fieldDisabled = !!value.disabled;
|
|
793
|
+
this.applyDisabled();
|
|
578
794
|
this.stateChanges.next();
|
|
579
795
|
}
|
|
580
796
|
get field() {
|
|
@@ -619,10 +835,19 @@ class XiriVolumeComponent {
|
|
|
619
835
|
this.changeValue(val);
|
|
620
836
|
}
|
|
621
837
|
changeValue(val) {
|
|
622
|
-
this._lastValue = val ?? null;
|
|
623
838
|
if (this.changeTO)
|
|
624
839
|
clearTimeout(this.changeTO);
|
|
625
840
|
this.changeTO = setTimeout(() => {
|
|
841
|
+
// Erneut pruefen: zwischen Planung und Callback kann control.disable() gelaufen sein.
|
|
842
|
+
// Ein gesperrtes Feld schreibt nichts nach aussen.
|
|
843
|
+
//
|
|
844
|
+
// _lastValue wird erst hier gesetzt, nicht schon beim Planen. Sonst merkte sich das
|
|
845
|
+
// Feld einen Wert, den das aeussere Control nie bekommen hat: nach einem spaeteren
|
|
846
|
+
// enable() ruft Angular nur setDisabledState(false) und kein writeValue(), runCheck()
|
|
847
|
+
// saehe value === _lastValue und gliche nie wieder ab.
|
|
848
|
+
if (this.disabled)
|
|
849
|
+
return;
|
|
850
|
+
this._lastValue = val ?? null;
|
|
626
851
|
this.onChange(val);
|
|
627
852
|
this.stateChanges.next();
|
|
628
853
|
this.cdr.markForCheck();
|
|
@@ -647,19 +872,20 @@ class XiriVolumeComponent {
|
|
|
647
872
|
this.onTouched = fn;
|
|
648
873
|
}
|
|
649
874
|
setDisabledState(isDisabled) {
|
|
650
|
-
this.
|
|
875
|
+
this.controlDisabled = isDisabled;
|
|
876
|
+
this.applyDisabled();
|
|
651
877
|
}
|
|
652
878
|
setDescribedByIds(ids) {
|
|
653
879
|
this.describedBy = ids.join(' ');
|
|
654
880
|
}
|
|
655
881
|
onContainerClick() { }
|
|
656
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
657
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
882
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriVolumeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
883
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriVolumeComponent, isStandalone: true, selector: "xiri-volume", inputs: { field: "field", value: "value" }, host: { properties: { "id": "id", "attr.aria-describedby": "describedBy" } }, providers: [{
|
|
658
884
|
provide: MatFormFieldControl,
|
|
659
885
|
useExisting: XiriVolumeComponent
|
|
660
886
|
}], ngImport: i0, template: "<mat-form-field [formGroup]=\"parts\" floatLabel=\"auto\">\n\t<mat-label>{{ field.name }}</mat-label>\n\t<div role=\"group\" [formGroup]=\"parts\">\n\t\t<input matInput id=\"voll\" formControlName=\"voll\" type=\"number\" [attr.min]=\"min\" [attr.max]=\"max\" [required]=\"required\">\n\t\t<input matInput id=\"volw\" formControlName=\"volw\" type=\"number\" [attr.min]=\"min\" [attr.max]=\"max\" [required]=\"required\">\n\t\t<input matInput id=\"volh\" formControlName=\"volh\" type=\"number\" [attr.min]=\"min\" [attr.max]=\"max\" [required]=\"required\">\n\t</div>\n\n\t@if (field.hint) {\n\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t}\n\t@if (parts.invalid) {\n\t\t<mat-error>{{ getErrorMessage() }}</mat-error>\n\t}\n</mat-form-field>", styles: ["div{display:flex}div input{text-align:right}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number]:not([ngNoCva])[formControlName],input[type=number]:not([ngNoCva])[formControl],input[type=number]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }] }); }
|
|
661
887
|
}
|
|
662
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
888
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriVolumeComponent, decorators: [{
|
|
663
889
|
type: Component,
|
|
664
890
|
args: [{ selector: 'xiri-volume', host: {
|
|
665
891
|
'[id]': 'id',
|
|
@@ -830,10 +1056,10 @@ class XiriLocaleService {
|
|
|
830
1056
|
// Persistenz nicht verfügbar (Private-Mode o. Ä.) — Sprachwechsel gilt trotzdem für die Session.
|
|
831
1057
|
}
|
|
832
1058
|
}
|
|
833
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
834
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0
|
|
1059
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriLocaleService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
1060
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.0", ngImport: i0, type: XiriLocaleService }); }
|
|
835
1061
|
}
|
|
836
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
1062
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriLocaleService, decorators: [{
|
|
837
1063
|
type: Service
|
|
838
1064
|
}], ctorParameters: () => [] });
|
|
839
1065
|
|
|
@@ -858,6 +1084,20 @@ class XiriFieldMain {
|
|
|
858
1084
|
this._value = null;
|
|
859
1085
|
this._disabled = signal(false, /* @ts-ignore */
|
|
860
1086
|
...(ngDevMode ? [{ debugName: "_disabled" }] : /* istanbul ignore next */ []));
|
|
1087
|
+
// Zwei Quellen, getrennt gehalten und verodert. Angular ruft beim Control-Setup
|
|
1088
|
+
// setDisabledState(false) -- callSetDisabledState ist per Default 'always' -- und zwar nach
|
|
1089
|
+
// dem field-Input. Schlüge das direkt auf `disabled` durch, höbe es ein Backend-disabled
|
|
1090
|
+
// wieder auf.
|
|
1091
|
+
//
|
|
1092
|
+
// controlDisabled ist dabei nicht "die programmatische Quelle": XiriFormFieldsComponent
|
|
1093
|
+
// schreibt Backend-Zustand über applyPatch() und den globalen disabled-Effect ebenfalls auf
|
|
1094
|
+
// das äussere Control. Auf der Control-Seite gilt last writer wins, wie bisher auch.
|
|
1095
|
+
// Getrennt, obwohl beide deklarativ sind: sind [field] und [disabled] gleichzeitig gebunden,
|
|
1096
|
+
// ruft Angular den unveraenderten zweiten Input nicht erneut auf. Mit einem gemeinsamen Flag
|
|
1097
|
+
// hoebe der zuletzt laufende Setter den anderen auf.
|
|
1098
|
+
this.fieldDisabled = false;
|
|
1099
|
+
this.inputDisabled = false;
|
|
1100
|
+
this.controlDisabled = false;
|
|
861
1101
|
this.focused = false;
|
|
862
1102
|
this.ariaDescribedby = input(undefined, { ...(ngDevMode ? { debugName: "ariaDescribedby" } : /* istanbul ignore next */ {}), alias: "aria-describedby" });
|
|
863
1103
|
this._errorStateTracker = new _ErrorStateTracker(this._defaultErrorStateMatcher, this.ngControl, this._parentFormGroup, this._parentForm, this.stateChanges);
|
|
@@ -887,11 +1127,12 @@ class XiriFieldMain {
|
|
|
887
1127
|
const ngControl = this.ngControl;
|
|
888
1128
|
if (ngControl) {
|
|
889
1129
|
if (this._previousControl !== ngControl.control) {
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
1130
|
+
// Über setDisabledState gehen, nicht direkt auf `disabled` schreiben: sonst
|
|
1131
|
+
// überschreibt eine frisch angelegte, enabled Control-Instanz das fieldDisabled
|
|
1132
|
+
// eines Backend-gesperrten Felds. Das passiert real, weil `track field.id` die
|
|
1133
|
+
// Kindkomponente behält, während createControl() ein neues Control anlegt.
|
|
1134
|
+
if (this._previousControl !== undefined && ngControl.disabled !== null)
|
|
1135
|
+
this.setDisabledState(ngControl.disabled);
|
|
895
1136
|
this._previousControl = ngControl.control;
|
|
896
1137
|
}
|
|
897
1138
|
this.updateErrorState();
|
|
@@ -914,6 +1155,12 @@ class XiriFieldMain {
|
|
|
914
1155
|
this._value = value;
|
|
915
1156
|
}
|
|
916
1157
|
runChangeValue(val) {
|
|
1158
|
+
// Ein gesperrtes Feld schreibt nichts nach aussen. Ohne den Guard laeuft nach jedem
|
|
1159
|
+
// control.disable() noch ein _onChange durch -- der Renderlauf, den das Sperren ausloest,
|
|
1160
|
+
// erreicht doCheckLogic() und von dort startChangeValue(). Das aeussere Control bekaeme
|
|
1161
|
+
// also eine zweite setValue-Emission, ausgeloest allein durch einen Zustandswechsel.
|
|
1162
|
+
if (this.disabled)
|
|
1163
|
+
return;
|
|
917
1164
|
this._onTouched();
|
|
918
1165
|
this._onChange(val);
|
|
919
1166
|
this.valueChange.emit(val);
|
|
@@ -926,12 +1173,30 @@ class XiriFieldMain {
|
|
|
926
1173
|
get disabled() {
|
|
927
1174
|
return this._disabled();
|
|
928
1175
|
}
|
|
1176
|
+
// Der oeffentliche Input ist dieselbe Quelle wie field.disabled: eine deklarative Sperre, die
|
|
1177
|
+
// ein setDisabledState(false) beim Control-Setup nicht aufheben darf. Er schreibt deshalb
|
|
1178
|
+
// fieldDisabled und nicht den effektiven Zustand.
|
|
929
1179
|
set disabled(value) {
|
|
930
|
-
this.
|
|
1180
|
+
this.inputDisabled = value;
|
|
1181
|
+
this.applyDisabled();
|
|
1182
|
+
}
|
|
1183
|
+
applyDisabled() {
|
|
1184
|
+
const value = this.fieldDisabled || this.inputDisabled || this.controlDisabled;
|
|
1185
|
+
// untracked, weil Angular setDisabledState() aus setUpControlValueAccessor heraus ruft --
|
|
1186
|
+
// also waehrend der Template-Auswertung, wo ein Signal-Write sonst NG0600 wirft. Angulars
|
|
1187
|
+
// eigenes FormControl.setValue macht es an derselben Stelle genauso.
|
|
1188
|
+
untracked(() => this._disabled.set(value));
|
|
1189
|
+
if (value)
|
|
1190
|
+
this.inner?.disable({ emitEvent: false });
|
|
1191
|
+
else
|
|
1192
|
+
this.inner?.enable({ emitEvent: false });
|
|
931
1193
|
this._changeDetectorRef.markForCheck();
|
|
932
1194
|
this.stateChanges.next();
|
|
933
1195
|
}
|
|
934
|
-
setDisabledState() {
|
|
1196
|
+
setDisabledState(isDisabled) {
|
|
1197
|
+
this.controlDisabled = isDisabled;
|
|
1198
|
+
this.applyDisabled();
|
|
1199
|
+
}
|
|
935
1200
|
get required() {
|
|
936
1201
|
return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;
|
|
937
1202
|
}
|
|
@@ -997,13 +1262,13 @@ class XiriFieldMain {
|
|
|
997
1262
|
get userAriaDescribedBy() {
|
|
998
1263
|
return this.ariaDescribedby() ?? '';
|
|
999
1264
|
}
|
|
1000
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
1001
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0
|
|
1265
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriFieldMain, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1266
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: XiriFieldMain, isStandalone: true, selector: "ng-component", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: false, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: booleanAttribute }, required: { classPropertyName: "required", publicName: "required", isSignal: false, isRequired: false, transformFunction: booleanAttribute }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, errorStateMatcher: { classPropertyName: "errorStateMatcher", publicName: "errorStateMatcher", isSignal: false, isRequired: false, transformFunction: null }, ariaDescribedby: { classPropertyName: "ariaDescribedby", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, providers: [{
|
|
1002
1267
|
provide: MatFormFieldControl,
|
|
1003
1268
|
useExisting: XiriFieldMain
|
|
1004
1269
|
}], ngImport: i0, template: ``, isInline: true }); }
|
|
1005
1270
|
}
|
|
1006
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
1271
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriFieldMain, decorators: [{
|
|
1007
1272
|
type: Component,
|
|
1008
1273
|
args: [{
|
|
1009
1274
|
providers: [{
|
|
@@ -1061,6 +1326,9 @@ class XiriDateTimeRangeComponent extends XiriFieldMain {
|
|
|
1061
1326
|
thour: new FormControl(0, { nonNullable: true }),
|
|
1062
1327
|
tminute: new FormControl(0, { nonNullable: true }),
|
|
1063
1328
|
});
|
|
1329
|
+
// Meldet die innere Gruppe an XiriFieldMain: control.disable() von aussen muss sie
|
|
1330
|
+
// genauso treffen wie field.disabled.
|
|
1331
|
+
this.inner = this.parts;
|
|
1064
1332
|
}
|
|
1065
1333
|
ngOnInit() {
|
|
1066
1334
|
this.subs.add(this.parts.valueChanges.subscribe(() => {
|
|
@@ -1074,11 +1342,8 @@ class XiriDateTimeRangeComponent extends XiriFieldMain {
|
|
|
1074
1342
|
if (value.max)
|
|
1075
1343
|
this.maxDate = this.dateService.unixToLocal(value.max);
|
|
1076
1344
|
this.required = !!value.required;
|
|
1077
|
-
this.
|
|
1078
|
-
|
|
1079
|
-
this.parts.disable();
|
|
1080
|
-
else
|
|
1081
|
-
this.parts.enable();
|
|
1345
|
+
this.fieldDisabled = !!value.disabled;
|
|
1346
|
+
this.applyDisabled();
|
|
1082
1347
|
this.stateChanges.next();
|
|
1083
1348
|
}
|
|
1084
1349
|
get value() {
|
|
@@ -1160,13 +1425,13 @@ class XiriDateTimeRangeComponent extends XiriFieldMain {
|
|
|
1160
1425
|
getInt(num) {
|
|
1161
1426
|
return parseInt(num);
|
|
1162
1427
|
}
|
|
1163
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
1164
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
1428
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDateTimeRangeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1429
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriDateTimeRangeComponent, isStandalone: true, selector: "xiri-date-time-range", inputs: { field: "field", value: "value" }, host: { listeners: { "focus": "focus()" }, properties: { "id": "id" } }, providers: [{
|
|
1165
1430
|
provide: MatFormFieldControl,
|
|
1166
1431
|
useExisting: XiriDateTimeRangeComponent
|
|
1167
1432
|
}], usesInheritance: true, ngImport: i0, template: "<ng-container [formGroup]=\"parts\">\n\t<input matInput formControlName=\"date\" [matDatepicker]=\"picker\" [required]=\"required\" [min]=\"minDate\" [max]=\"maxDate\">\n\n\t<mat-select formControlName=\"fhour\" class=\"time\" [required]=\"required\">\n\t\t@for (h of hours; track h; let i = $index) {\n\t\t\t<mat-option [value]=\"getInt(h)\">{{ h }}</mat-option>\n\t\t}\n\t</mat-select>\n\t<span class=\"spacert\">:</span>\n\t<mat-select formControlName=\"fminute\" class=\"time\" [required]=\"required\">\n\t\t@for (m of minutes; track m; let i = $index) {\n\t\t\t<mat-option [value]=\"getInt(m)\">{{ m }}</mat-option>\n\t\t}\n\t</mat-select>\n\n\t<span class=\"spacer\">-</span>\n\n\t<mat-select formControlName=\"thour\" class=\"time\" [required]=\"required\">\n\t\t@for (h of hours; track h; let i = $index) {\n\t\t\t<mat-option [value]=\"getInt(h)\">{{ h }}</mat-option>\n\t\t}\n\t</mat-select>\n\t<span class=\"spacert\">:</span>\n\t<mat-select formControlName=\"tminute\" class=\"time\" [required]=\"required\">\n\t\t@for (m of minutes; track m; let i = $index) {\n\t\t\t<mat-option [value]=\"getInt(m)\">{{ m }}</mat-option>\n\t\t}\n\t</mat-select>\n\n\t<mat-datepicker-toggle matIconSuffix [for]=\"picker\">\n\t\t<mat-icon matDatepickerToggleIcon>today</mat-icon>\n\t</mat-datepicker-toggle>\n\t<mat-datepicker #picker></mat-datepicker>\n</ng-container>", styles: [":host{display:flex;align-items:center;margin-top:-2px;margin-bottom:-8px}mat-datepicker-toggle{margin-left:10px;margin-top:-15px;margin-right:-10px;--mat-icon-color: var(--xiri-formfield-icon-color)}.spacer{padding-left:8px;padding-right:8px}.spacert{padding-right:4px}.time{width:2.3rem;text-align:center}mat-select{--mat-select-arrow-transform: translateY(-1px) translateX(2px)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "component", type: MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }] }); }
|
|
1168
1433
|
}
|
|
1169
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
1434
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDateTimeRangeComponent, decorators: [{
|
|
1170
1435
|
type: Component,
|
|
1171
1436
|
args: [{ selector: 'xiri-date-time-range', host: {
|
|
1172
1437
|
'[id]': 'id',
|
|
@@ -1216,6 +1481,9 @@ class XiriDateRangeComponent extends XiriFieldMain {
|
|
|
1216
1481
|
start: new FormControl(null),
|
|
1217
1482
|
end: new FormControl(null),
|
|
1218
1483
|
});
|
|
1484
|
+
// Meldet die innere Gruppe an XiriFieldMain: control.disable() von aussen muss sie
|
|
1485
|
+
// genauso treffen wie field.disabled.
|
|
1486
|
+
this.inner = this.parts;
|
|
1219
1487
|
}
|
|
1220
1488
|
ngOnInit() {
|
|
1221
1489
|
this.subs.add(this.parts.valueChanges.subscribe(() => {
|
|
@@ -1229,11 +1497,8 @@ class XiriDateRangeComponent extends XiriFieldMain {
|
|
|
1229
1497
|
if (value.max)
|
|
1230
1498
|
this.maxDate = this.dateService.unixToLocal(value.max);
|
|
1231
1499
|
this.required = !!value.required;
|
|
1232
|
-
this.
|
|
1233
|
-
|
|
1234
|
-
this.parts.disable();
|
|
1235
|
-
else
|
|
1236
|
-
this.parts.enable();
|
|
1500
|
+
this.fieldDisabled = !!value.disabled;
|
|
1501
|
+
this.applyDisabled();
|
|
1237
1502
|
this.stateChanges.next();
|
|
1238
1503
|
}
|
|
1239
1504
|
get value() {
|
|
@@ -1301,13 +1566,13 @@ class XiriDateRangeComponent extends XiriFieldMain {
|
|
|
1301
1566
|
writeValue(value) {
|
|
1302
1567
|
this.value = value;
|
|
1303
1568
|
}
|
|
1304
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
1305
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0
|
|
1569
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDateRangeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1570
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.0", type: XiriDateRangeComponent, isStandalone: true, selector: "xiri-date-range", inputs: { field: "field", value: "value" }, host: { listeners: { "focus": "focus()" }, properties: { "id": "id" } }, providers: [{
|
|
1306
1571
|
provide: MatFormFieldControl,
|
|
1307
1572
|
useExisting: XiriDateRangeComponent
|
|
1308
1573
|
}], usesInheritance: true, ngImport: i0, template: "<ng-container [formGroup]=\"parts\">\n\t<mat-date-range-input [rangePicker]=\"picker\" [required]=\"required\" [min]=\"minDate\" [max]=\"maxDate\">\n\t\t<input matStartDate formControlName=\"start\" placeholder=\"Start date\" [required]=\"required\">\n\t\t<input matEndDate formControlName=\"end\" placeholder=\"End date\" [required]=\"required\">\n\t</mat-date-range-input>\n\n\t<mat-datepicker-toggle matIconSuffix [for]=\"picker\">\n\t\t<mat-icon matDatepickerToggleIcon>today</mat-icon>\n\t</mat-datepicker-toggle>\n\t<mat-date-range-picker #picker></mat-date-range-picker>\n</ng-container>", styles: [":host{display:flex;align-items:center;margin-top:-2px;margin-bottom:-8px}mat-datepicker-toggle{margin-top:-15px;margin-right:-10px;--mat-icon-color: var(--xiri-formfield-icon-color)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "component", type: MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }] }); }
|
|
1309
1574
|
}
|
|
1310
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
1575
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDateRangeComponent, decorators: [{
|
|
1311
1576
|
type: Component,
|
|
1312
1577
|
args: [{ selector: 'xiri-date-range', host: {
|
|
1313
1578
|
'[id]': 'id',
|
|
@@ -1361,6 +1626,9 @@ class XiriDateComponent extends XiriFieldMain {
|
|
|
1361
1626
|
hour: new FormControl(0, { nonNullable: true }),
|
|
1362
1627
|
minute: new FormControl(0, { nonNullable: true }),
|
|
1363
1628
|
});
|
|
1629
|
+
// Meldet die innere Gruppe an XiriFieldMain: control.disable() von aussen muss sie
|
|
1630
|
+
// genauso treffen wie field.disabled.
|
|
1631
|
+
this.inner = this.parts;
|
|
1364
1632
|
}
|
|
1365
1633
|
ngOnInit() {
|
|
1366
1634
|
this.subs.add(this.parts.valueChanges.subscribe(() => {
|
|
@@ -1375,11 +1643,8 @@ class XiriDateComponent extends XiriFieldMain {
|
|
|
1375
1643
|
if (value.max)
|
|
1376
1644
|
this.maxDate = this.dateService.unixToLocal(value.max);
|
|
1377
1645
|
this.required = !!value.required;
|
|
1378
|
-
this.
|
|
1379
|
-
|
|
1380
|
-
this.parts.disable();
|
|
1381
|
-
else
|
|
1382
|
-
this.parts.enable();
|
|
1646
|
+
this.fieldDisabled = !!value.disabled;
|
|
1647
|
+
this.applyDisabled();
|
|
1383
1648
|
this.stateChanges.next();
|
|
1384
1649
|
}
|
|
1385
1650
|
get value() {
|
|
@@ -1435,13 +1700,13 @@ class XiriDateComponent extends XiriFieldMain {
|
|
|
1435
1700
|
writeValue(value) {
|
|
1436
1701
|
this.value = value;
|
|
1437
1702
|
}
|
|
1438
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
1439
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
1703
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1704
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriDateComponent, isStandalone: true, selector: "xiri-date", inputs: { field: "field", value: "value" }, host: { listeners: { "focus": "focus()" }, properties: { "id": "id" } }, providers: [{
|
|
1440
1705
|
provide: MatFormFieldControl,
|
|
1441
1706
|
useExisting: XiriDateComponent
|
|
1442
1707
|
}], usesInheritance: true, ngImport: i0, template: "<ng-container [formGroup]=\"parts\">\n\t<input matInput formControlName=\"date\" class=\"date\" [required]=\"required\" [min]=\"minDate\" [max]=\"maxDate\" [matDatepicker]=\"picker\">\n\n\t@if (type === 'datetime') {\n\t\t<mat-select formControlName=\"hour\" class=\"time\" [required]=\"required\">\n\t\t\t@for (h of hours; track h; let i = $index) {\n\t\t\t\t<mat-option [value]=\"i\">{{ h }}</mat-option>\n\t\t\t}\n\t\t</mat-select>\n\t\t<span class=\"spacer\">:</span>\n\t\t<mat-select formControlName=\"minute\" class=\"time\" [required]=\"required\">\n\t\t\t@for (m of minutes; track m; let i = $index) {\n\t\t\t\t<mat-option [value]=\"i\">{{ m }}</mat-option>\n\t\t\t}\n\t\t</mat-select>\n\t}\n\n\t<mat-datepicker-toggle matIconSuffix [for]=\"picker\">\n\t\t<mat-icon matDatepickerToggleIcon>today</mat-icon>\n\t</mat-datepicker-toggle>\n\t<mat-datepicker #picker></mat-datepicker>\n</ng-container>", styles: [":host{display:flex;align-items:center;margin-top:-2px;margin-bottom:-8px}mat-datepicker-toggle{margin-left:10px;margin-top:-15px;margin-right:-10px;--mat-icon-color: var(--xiri-formfield-icon-color)}.spacer{padding-left:8px;padding-right:8px}.time{width:2.3rem;text-align:center}mat-select{--mat-select-arrow-transform: translateY(-1px) translateX(2px)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "component", type: MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }] }); }
|
|
1443
1708
|
}
|
|
1444
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
1709
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDateComponent, decorators: [{
|
|
1445
1710
|
type: Component,
|
|
1446
1711
|
args: [{ selector: 'xiri-date', host: {
|
|
1447
1712
|
'[id]': 'id',
|
|
@@ -1493,6 +1758,9 @@ class XiriYearMonthComponent extends XiriFieldMain {
|
|
|
1493
1758
|
this._id = this._uid;
|
|
1494
1759
|
if (this.ngControl != null)
|
|
1495
1760
|
this.ngControl.valueAccessor = this;
|
|
1761
|
+
// Meldet das innere Control an XiriFieldMain: control.disable() von aussen muss es
|
|
1762
|
+
// genauso treffen wie field.disabled.
|
|
1763
|
+
this.inner = this.dateControl;
|
|
1496
1764
|
}
|
|
1497
1765
|
ngOnInit() {
|
|
1498
1766
|
this.subs.add(this.dateControl.valueChanges.subscribe(() => {
|
|
@@ -1506,11 +1774,8 @@ class XiriYearMonthComponent extends XiriFieldMain {
|
|
|
1506
1774
|
if (value.max)
|
|
1507
1775
|
this.maxDate = this.dateService.unixToLocal(value.max);
|
|
1508
1776
|
this.required = !!value.required;
|
|
1509
|
-
this.
|
|
1510
|
-
|
|
1511
|
-
this.dateControl.disable();
|
|
1512
|
-
else
|
|
1513
|
-
this.dateControl.enable();
|
|
1777
|
+
this.fieldDisabled = !!value.disabled;
|
|
1778
|
+
this.applyDisabled();
|
|
1514
1779
|
this.stateChanges.next();
|
|
1515
1780
|
}
|
|
1516
1781
|
get value() {
|
|
@@ -1562,13 +1827,13 @@ class XiriYearMonthComponent extends XiriFieldMain {
|
|
|
1562
1827
|
writeValue(value) {
|
|
1563
1828
|
this.value = value;
|
|
1564
1829
|
}
|
|
1565
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
1566
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0
|
|
1830
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriYearMonthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1831
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.0", type: XiriYearMonthComponent, isStandalone: true, selector: "xiri-yearmonth", inputs: { field: "field", value: "value" }, host: { listeners: { "focus": "focus()" }, properties: { "id": "id" } }, providers: [
|
|
1567
1832
|
{ provide: MatFormFieldControl, useExisting: XiriYearMonthComponent },
|
|
1568
1833
|
{ provide: MAT_DATE_FORMATS, useValue: XIRI_YEAR_MONTH_FORMATS },
|
|
1569
1834
|
], viewQueries: [{ propertyName: "picker", first: true, predicate: ["picker"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<input matInput [formControl]=\"dateControl\" class=\"date\" [required]=\"required\"\n [min]=\"minDate\" [max]=\"maxDate\" [matDatepicker]=\"picker\">\n\n<mat-datepicker-toggle matIconSuffix [for]=\"picker\">\n\t<mat-icon matDatepickerToggleIcon>today</mat-icon>\n</mat-datepicker-toggle>\n<mat-datepicker #picker startView=\"multi-year\" (monthSelected)=\"onYearMonthSelected($event)\"></mat-datepicker>\n", styles: [":host{display:flex;align-items:center;margin-top:-2px;margin-bottom:-8px}mat-datepicker-toggle{margin-left:10px;margin-top:-15px;margin-right:-10px;--mat-icon-color: var(--xiri-formfield-icon-color)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "component", type: MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }] }); }
|
|
1570
1835
|
}
|
|
1571
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
1836
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriYearMonthComponent, decorators: [{
|
|
1572
1837
|
type: Component,
|
|
1573
1838
|
args: [{ selector: 'xiri-yearmonth', host: {
|
|
1574
1839
|
'[id]': 'id',
|
|
@@ -1593,117 +1858,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
1593
1858
|
type: Input
|
|
1594
1859
|
}] } });
|
|
1595
1860
|
|
|
1596
|
-
class XiriSnackbarService {
|
|
1597
|
-
constructor() {
|
|
1598
|
-
this.snackbar = inject(MatSnackBar);
|
|
1599
|
-
}
|
|
1600
|
-
success(message, duration = 3000, action) {
|
|
1601
|
-
return this.show(message, 'success', duration, action);
|
|
1602
|
-
}
|
|
1603
|
-
error(message, duration = 5000, action) {
|
|
1604
|
-
return this.show(message, 'error', duration, action);
|
|
1605
|
-
}
|
|
1606
|
-
info(message, duration = 3000, action) {
|
|
1607
|
-
return this.show(message, 'info', duration, action);
|
|
1608
|
-
}
|
|
1609
|
-
warning(message, duration = 4000, action) {
|
|
1610
|
-
return this.show(message, 'warning', duration, action);
|
|
1611
|
-
}
|
|
1612
|
-
handleResponse(response) {
|
|
1613
|
-
const res = response;
|
|
1614
|
-
if (!res?.message || !res?.messageType)
|
|
1615
|
-
return false;
|
|
1616
|
-
switch (res.messageType) {
|
|
1617
|
-
case 'success':
|
|
1618
|
-
this.success(res.message);
|
|
1619
|
-
break;
|
|
1620
|
-
case 'error':
|
|
1621
|
-
this.error(res.message);
|
|
1622
|
-
break;
|
|
1623
|
-
case 'info':
|
|
1624
|
-
this.info(res.message);
|
|
1625
|
-
break;
|
|
1626
|
-
case 'warning':
|
|
1627
|
-
this.warning(res.message);
|
|
1628
|
-
break;
|
|
1629
|
-
default: this.info(res.message);
|
|
1630
|
-
}
|
|
1631
|
-
return true;
|
|
1632
|
-
}
|
|
1633
|
-
show(message, type, duration, action) {
|
|
1634
|
-
const config = {
|
|
1635
|
-
duration: duration,
|
|
1636
|
-
horizontalPosition: 'center',
|
|
1637
|
-
verticalPosition: 'bottom',
|
|
1638
|
-
panelClass: [`xiri-snackbar-${type}`],
|
|
1639
|
-
politeness: type === 'error' ? 'assertive' : 'polite',
|
|
1640
|
-
};
|
|
1641
|
-
return this.snackbar.open(message, action || undefined, config);
|
|
1642
|
-
}
|
|
1643
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: XiriSnackbarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1644
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: XiriSnackbarService, providedIn: 'root' }); }
|
|
1645
|
-
}
|
|
1646
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: XiriSnackbarService, decorators: [{
|
|
1647
|
-
type: Injectable,
|
|
1648
|
-
args: [{
|
|
1649
|
-
providedIn: 'root',
|
|
1650
|
-
}]
|
|
1651
|
-
}] });
|
|
1652
|
-
|
|
1653
|
-
class XiriDataServiceConfig {
|
|
1654
|
-
constructor() {
|
|
1655
|
-
this.api = '/api/';
|
|
1656
|
-
}
|
|
1657
|
-
}
|
|
1658
|
-
const defaultXiriDataServiceConfig = {
|
|
1659
|
-
api: '/api/',
|
|
1660
|
-
};
|
|
1661
|
-
class XiriDataService {
|
|
1662
|
-
constructor() {
|
|
1663
|
-
this.http = inject(HttpClient);
|
|
1664
|
-
this.config = inject(XiriDataServiceConfig);
|
|
1665
|
-
this.snackbar = inject(XiriSnackbarService);
|
|
1666
|
-
}
|
|
1667
|
-
get(url) {
|
|
1668
|
-
return this.http.get(this.config.api + url).pipe(tap((res) => this.snackbar.handleResponse(res)));
|
|
1669
|
-
}
|
|
1670
|
-
post(url, data) {
|
|
1671
|
-
return this.http.post(this.config.api + url, data).pipe(tap((res) => this.snackbar.handleResponse(res)));
|
|
1672
|
-
}
|
|
1673
|
-
postFile(url, data) {
|
|
1674
|
-
return this.http.post(this.config.api + url, data, { responseType: 'blob' });
|
|
1675
|
-
}
|
|
1676
|
-
postFileResponse(url, data) {
|
|
1677
|
-
return this.http.post(this.config.api + url, data, { observe: 'response', responseType: 'blob' });
|
|
1678
|
-
}
|
|
1679
|
-
/** @deprecated Use postFileResponse() + XiriDownloadService.download() instead */
|
|
1680
|
-
postDownload(url, data) {
|
|
1681
|
-
console.warn('XiriDataService.postDownload() is deprecated. Use postFileResponse() + XiriDownloadService.download() instead.');
|
|
1682
|
-
const downForm = document.createElement('form');
|
|
1683
|
-
downForm.target = '_blank';
|
|
1684
|
-
downForm.method = 'POST';
|
|
1685
|
-
downForm.action = url;
|
|
1686
|
-
const input = document.createElement('input');
|
|
1687
|
-
input.type = 'hidden';
|
|
1688
|
-
input.name = 'data';
|
|
1689
|
-
input.setAttribute('value', JSON.stringify(data));
|
|
1690
|
-
downForm.appendChild(input);
|
|
1691
|
-
document.body.appendChild(downForm);
|
|
1692
|
-
downForm.submit();
|
|
1693
|
-
}
|
|
1694
|
-
getConfigApi() {
|
|
1695
|
-
return this.config.api;
|
|
1696
|
-
}
|
|
1697
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: XiriDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1698
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: XiriDataService, providedIn: 'root' }); }
|
|
1699
|
-
}
|
|
1700
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: XiriDataService, decorators: [{
|
|
1701
|
-
type: Injectable,
|
|
1702
|
-
args: [{
|
|
1703
|
-
providedIn: 'root',
|
|
1704
|
-
}]
|
|
1705
|
-
}] });
|
|
1706
|
-
|
|
1707
1861
|
class XiriSearchComponent {
|
|
1708
1862
|
constructor() {
|
|
1709
1863
|
this.changed = output();
|
|
@@ -1771,10 +1925,10 @@ class XiriSearchComponent {
|
|
|
1771
1925
|
this._text = '';
|
|
1772
1926
|
this.filter.next(this._text);
|
|
1773
1927
|
}
|
|
1774
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
1775
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
1928
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1929
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriSearchComponent, isStandalone: true, selector: "xiri-search", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, reset: { classPropertyName: "reset", publicName: "reset", isSignal: true, isRequired: false, transformFunction: null }, escape: { classPropertyName: "escape", publicName: "escape", isSignal: true, isRequired: false, transformFunction: null }, focus: { classPropertyName: "focus", publicName: "focus", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed" }, host: { listeners: { "document:keydown.escape": "onKeydownHandler()" } }, viewQueries: [{ propertyName: "_search", first: true, predicate: ["search"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"search\" [class.open]=\"show\">\n\t@if (show) {\n\t\t<input type=\"text\" name=\"input\" class=\"input lens\" autocomplete=\"off\"\n\t\t [cdkTrapFocusAutoCapture]=\"show\" [cdkTrapFocus]=\"show\"\n\t\t [placeholder]=\"placeholder()\"\n\t\t [class.open]=\"show\"\n\t\t (keyup)=\"searchDo()\" [value]=\"_text\" [(ngModel)]=\"_text\">\n\t}\n\t<button mat-icon-button color=\"primary\" (click)=\"click()\" [attr.aria-label]=\"show ? 'Suche schlie\u00DFen' : 'Suche \u00F6ffnen'\">\n\t\t<mat-icon>{{ show ? 'close' : 'search' }}</mat-icon>\n\t</button>\n</div>", styles: [".search{display:flex;justify-content:flex-end;align-items:center;height:42px;padding-bottom:2px;min-width:44px;max-width:180px;margin-right:2px;width:44px;transition:width var(--xiri-duration-slow) var(--xiri-easing-standard)}.search.open{border-bottom:2px solid var(--primary);padding-bottom:0;width:100%;margin-left:8px}input{box-sizing:border-box;padding:0 10px;height:44px;border:none;background:none;outline:none;width:100%;color:var(--on-surface)}input:focus-visible{outline:2px solid var(--primary, #2892D9);outline-offset:-2px;border-radius:var(--xiri-radius-xs)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
1776
1930
|
}
|
|
1777
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
1931
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSearchComponent, decorators: [{
|
|
1778
1932
|
type: Component,
|
|
1779
1933
|
args: [{ selector: 'xiri-search', host: {
|
|
1780
1934
|
'(document:keydown.escape)': 'onKeydownHandler()'
|
|
@@ -1822,20 +1976,18 @@ class XiriTreeselectComponent extends XiriFieldMain {
|
|
|
1822
1976
|
return;
|
|
1823
1977
|
this.dataSource.data = data;
|
|
1824
1978
|
// this.tree().expandAll();
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
this.treeItemSelectionToggle(node);
|
|
1830
|
-
});
|
|
1831
|
-
});
|
|
1979
|
+
// Nicht direkt togglen: ein Options-Reload ersetzt das Feld-Objekt und baut den Baum
|
|
1980
|
+
// neu auf, wobei die alten Node-Objekte im SelectionModel selektiert bleiben würden
|
|
1981
|
+
// (doppelte IDs) und das Zurückschreiben ans FormControl emittieren würde.
|
|
1982
|
+
this.applyInputSelection();
|
|
1832
1983
|
this.loading.set(false);
|
|
1833
1984
|
}));
|
|
1834
1985
|
}
|
|
1835
1986
|
set field(value) {
|
|
1836
1987
|
this._field = value;
|
|
1837
1988
|
this.required = !!value.required;
|
|
1838
|
-
this.
|
|
1989
|
+
this.fieldDisabled = !!value.disabled;
|
|
1990
|
+
this.applyDisabled();
|
|
1839
1991
|
if (value.url) {
|
|
1840
1992
|
this.dataService.get(value.url).subscribe({
|
|
1841
1993
|
next: (response) => {
|
|
@@ -2035,13 +2187,13 @@ class XiriTreeselectComponent extends XiriFieldMain {
|
|
|
2035
2187
|
}
|
|
2036
2188
|
return null;
|
|
2037
2189
|
}
|
|
2038
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
2039
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
2190
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTreeselectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2191
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriTreeselectComponent, isStandalone: true, selector: "xiri-treeselect", inputs: { field: "field", value: "value" }, host: { listeners: { "focus": "focus()" }, properties: { "id": "id" } }, providers: [{
|
|
2040
2192
|
provide: MatFormFieldControl,
|
|
2041
2193
|
useExisting: XiriTreeselectComponent
|
|
2042
|
-
}], viewQueries: [{ propertyName: "tree", first: true, predicate: MatTree, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"main\">\n\t<div class=\"line\">\n\t\t<div class=\"xrow xsmall\">\n\t\t\t<div class=\"xcol xcol-md-6 header\"><span>{{ field.name }}</span></div>\n\t\t\t<div class=\"xcol xcol-md-6 search\">\n\t\t\t\t@if (field.search !== false) {\n\t\t\t\t\t<xiri-search (changed)=\"searchDo($event)\"></xiri-search>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"tree\">\n\t\t@if (loading()) {\n\t\t\t<mat-spinner diameter=\"30\"></mat-spinner>\n\t\t}\n\t\t<mat-tree [dataSource]=\"dataSource\" [childrenAccessor]=\"getChildren\">\n\t\t\t<mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding=\"\" matTreeNodePaddingIndent=\"20px\" [hidden]=\"node.hidden\"\n\t\t\t [class.notree]=\"!field.tree\">\n\t\t\t\t<button mat-icon-button disabled aria-hidden=\"true\">\n\t\t\t\t\t<mat-icon style=\"visibility: hidden\">chevron_right</mat-icon>\n\t\t\t\t</button>\n\t\t\t\t<mat-checkbox class=\"checklist-leaf-node\" [checked]=\"node.state === 1\"\n\t\t\t\t (change)=\"treeItemSelectionToggle(node)\">{{ node.name }}\n\t\t\t\t</mat-checkbox>\n\t\t\t</mat-tree-node>\n\t\t\t<mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding=\"\" matTreeNodePaddingIndent=\"20px\" [hidden]=\"node.hidden\">\n\t\t\t\t<button mat-icon-button matTreeNodeToggle [attr.aria-label]=\"tree().isExpanded(node) ? 'Zuklappen' : 'Aufklappen'\">\n\t\t\t\t\t<mat-icon class=\"mat-icon-rtl-mirror\">\n\t\t\t\t\t\t{{ tree().isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n\t\t\t\t\t</mat-icon>\n\t\t\t\t</button>\n\t\t\t\t<mat-checkbox class=\"group\"\n\t\t\t\t [checked]=\"node.state === 1\"\n\t\t\t\t [indeterminate]=\"node.state === 2\"\n\t\t\t\t (change)=\"treeItemSelectionToggle(node)\">{{ node.name }}\n\t\t\t\t</mat-checkbox>\n\t\t\t</mat-tree-node>\n\t\t</mat-tree>\n\t</div>\n</div>", styles: [".main{border:1px solid var(--outline-variant, #C2C7CF);border-radius:var(--mat-form-field-filled-container-shape, var(--xiri-radius-xs, var(--mat-sys-corner-extra-small)));overflow:hidden}:host.error .main{border:1px solid var(--error, red)}.line{background-color:var(--surface-bright, #F9F9FC);padding:0 0 0 1rem;border-bottom:1px solid var(--outline-variant, #C2C7CF);border-top-left-radius:var(--mat-form-field-filled-container-shape, var(--xiri-radius-xs, var(--mat-sys-corner-extra-small)));border-top-right-radius:var(--mat-form-field-filled-container-shape, var(--xiri-radius-xs, var(--mat-sys-corner-extra-small)))}.line .header{color:var(--on-surface-variant, rgba(0, 0, 0, .54));display:flex;align-items:center;min-height:32px}.line .search{display:flex;justify-content:flex-end;padding-right:.5rem}.tree{height:300px;width:100%;overflow-y:scroll;background-color:var(--surface, #FFF)}.tree mat-spinner{margin:1rem}.tree .group{font-size:var(--xiri-font-size-label);color:var(--on-surface-variant, rgba(0, 0, 0, .54))}.tree mat-tree-node{min-height:20px;max-height:38px}.tree mat-tree-node.notree{margin-left:-25px}[hidden]{display:none!important}\n"], dependencies: [{ kind: "component", type: XiriSearchComponent, selector: "xiri-search", inputs: ["placeholder", "open", "reset", "escape", "focus", "text"], outputs: ["changed"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "directive", type: MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "directive", type: MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }] }); }
|
|
2194
|
+
}], viewQueries: [{ propertyName: "tree", first: true, predicate: MatTree, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"main\">\n\t<div class=\"line\">\n\t\t<div class=\"xrow xsmall\">\n\t\t\t<div class=\"xcol xcol-md-6 header\"><span>{{ field.name }}</span></div>\n\t\t\t<div class=\"xcol xcol-md-6 search\">\n\t\t\t\t@if (field.search !== false) {\n\t\t\t\t\t<!-- ponytail: Suche und Aufklapp-Button bleiben auch gesperrt bedienbar. Beide\n\t\t\t\t\t \u00E4ndern den Wert nicht, sperren w\u00FCrde nur das Nachschauen behindern. -->\n\t\t\t\t\t<xiri-search (changed)=\"searchDo($event)\"></xiri-search>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"tree\">\n\t\t@if (loading()) {\n\t\t\t<mat-spinner diameter=\"30\"></mat-spinner>\n\t\t}\n\t\t<mat-tree [dataSource]=\"dataSource\" [childrenAccessor]=\"getChildren\">\n\t\t\t<mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding=\"\" matTreeNodePaddingIndent=\"20px\" [hidden]=\"node.hidden\"\n\t\t\t [class.notree]=\"!field.tree\">\n\t\t\t\t<button mat-icon-button disabled aria-hidden=\"true\">\n\t\t\t\t\t<mat-icon style=\"visibility: hidden\">chevron_right</mat-icon>\n\t\t\t\t</button>\n\t\t\t\t<mat-checkbox class=\"checklist-leaf-node\" [checked]=\"node.state === 1\" [disabled]=\"disabled\"\n\t\t\t\t (change)=\"treeItemSelectionToggle(node)\">{{ node.name }}\n\t\t\t\t</mat-checkbox>\n\t\t\t</mat-tree-node>\n\t\t\t<mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding=\"\" matTreeNodePaddingIndent=\"20px\" [hidden]=\"node.hidden\">\n\t\t\t\t<button mat-icon-button matTreeNodeToggle [attr.aria-label]=\"tree().isExpanded(node) ? 'Zuklappen' : 'Aufklappen'\">\n\t\t\t\t\t<mat-icon class=\"mat-icon-rtl-mirror\">\n\t\t\t\t\t\t{{ tree().isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n\t\t\t\t\t</mat-icon>\n\t\t\t\t</button>\n\t\t\t\t<mat-checkbox class=\"group\"\n\t\t\t\t [checked]=\"node.state === 1\"\n\t\t\t\t [indeterminate]=\"node.state === 2\"\n\t\t\t\t [disabled]=\"disabled\"\n\t\t\t\t (change)=\"treeItemSelectionToggle(node)\">{{ node.name }}\n\t\t\t\t</mat-checkbox>\n\t\t\t</mat-tree-node>\n\t\t</mat-tree>\n\t</div>\n</div>", styles: [".main{border:1px solid var(--outline-variant, #C2C7CF);border-radius:var(--mat-form-field-filled-container-shape, var(--xiri-radius-xs, var(--mat-sys-corner-extra-small)));overflow:hidden}:host.error .main{border:1px solid var(--error, red)}.line{background-color:var(--surface-bright, #F9F9FC);padding:0 0 0 1rem;border-bottom:1px solid var(--outline-variant, #C2C7CF);border-top-left-radius:var(--mat-form-field-filled-container-shape, var(--xiri-radius-xs, var(--mat-sys-corner-extra-small)));border-top-right-radius:var(--mat-form-field-filled-container-shape, var(--xiri-radius-xs, var(--mat-sys-corner-extra-small)))}.line .header{color:var(--on-surface-variant, rgba(0, 0, 0, .54));display:flex;align-items:center;min-height:32px}.line .search{display:flex;justify-content:flex-end;padding-right:.5rem}.tree{height:300px;width:100%;overflow-y:scroll;background-color:var(--surface, #FFF)}.tree mat-spinner{margin:1rem}.tree .group{font-size:var(--xiri-font-size-label);color:var(--on-surface-variant, rgba(0, 0, 0, .54))}.tree mat-tree-node{min-height:20px;max-height:38px}.tree mat-tree-node.notree{margin-left:-25px}[hidden]{display:none!important}\n"], dependencies: [{ kind: "component", type: XiriSearchComponent, selector: "xiri-search", inputs: ["placeholder", "open", "reset", "escape", "focus", "text"], outputs: ["changed"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "directive", type: MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "directive", type: MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }] }); }
|
|
2043
2195
|
}
|
|
2044
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
2196
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTreeselectComponent, decorators: [{
|
|
2045
2197
|
type: Component,
|
|
2046
2198
|
args: [{ selector: 'xiri-treeselect', host: {
|
|
2047
2199
|
'[id]': 'id',
|
|
@@ -2060,7 +2212,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
2060
2212
|
MatCheckbox,
|
|
2061
2213
|
MatIcon,
|
|
2062
2214
|
MatTreeNodeDef,
|
|
2063
|
-
], template: "<div class=\"main\">\n\t<div class=\"line\">\n\t\t<div class=\"xrow xsmall\">\n\t\t\t<div class=\"xcol xcol-md-6 header\"><span>{{ field.name }}</span></div>\n\t\t\t<div class=\"xcol xcol-md-6 search\">\n\t\t\t\t@if (field.search !== false) {\n\t\t\t\t\t<xiri-search (changed)=\"searchDo($event)\"></xiri-search>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"tree\">\n\t\t@if (loading()) {\n\t\t\t<mat-spinner diameter=\"30\"></mat-spinner>\n\t\t}\n\t\t<mat-tree [dataSource]=\"dataSource\" [childrenAccessor]=\"getChildren\">\n\t\t\t<mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding=\"\" matTreeNodePaddingIndent=\"20px\" [hidden]=\"node.hidden\"\n\t\t\t [class.notree]=\"!field.tree\">\n\t\t\t\t<button mat-icon-button disabled aria-hidden=\"true\">\n\t\t\t\t\t<mat-icon style=\"visibility: hidden\">chevron_right</mat-icon>\n\t\t\t\t</button>\n\t\t\t\t<mat-checkbox class=\"checklist-leaf-node\" [checked]=\"node.state === 1\"\n\t\t\t\t (change)=\"treeItemSelectionToggle(node)\">{{ node.name }}\n\t\t\t\t</mat-checkbox>\n\t\t\t</mat-tree-node>\n\t\t\t<mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding=\"\" matTreeNodePaddingIndent=\"20px\" [hidden]=\"node.hidden\">\n\t\t\t\t<button mat-icon-button matTreeNodeToggle [attr.aria-label]=\"tree().isExpanded(node) ? 'Zuklappen' : 'Aufklappen'\">\n\t\t\t\t\t<mat-icon class=\"mat-icon-rtl-mirror\">\n\t\t\t\t\t\t{{ tree().isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n\t\t\t\t\t</mat-icon>\n\t\t\t\t</button>\n\t\t\t\t<mat-checkbox class=\"group\"\n\t\t\t\t [checked]=\"node.state === 1\"\n\t\t\t\t [indeterminate]=\"node.state === 2\"\n\t\t\t\t (change)=\"treeItemSelectionToggle(node)\">{{ node.name }}\n\t\t\t\t</mat-checkbox>\n\t\t\t</mat-tree-node>\n\t\t</mat-tree>\n\t</div>\n</div>", styles: [".main{border:1px solid var(--outline-variant, #C2C7CF);border-radius:var(--mat-form-field-filled-container-shape, var(--xiri-radius-xs, var(--mat-sys-corner-extra-small)));overflow:hidden}:host.error .main{border:1px solid var(--error, red)}.line{background-color:var(--surface-bright, #F9F9FC);padding:0 0 0 1rem;border-bottom:1px solid var(--outline-variant, #C2C7CF);border-top-left-radius:var(--mat-form-field-filled-container-shape, var(--xiri-radius-xs, var(--mat-sys-corner-extra-small)));border-top-right-radius:var(--mat-form-field-filled-container-shape, var(--xiri-radius-xs, var(--mat-sys-corner-extra-small)))}.line .header{color:var(--on-surface-variant, rgba(0, 0, 0, .54));display:flex;align-items:center;min-height:32px}.line .search{display:flex;justify-content:flex-end;padding-right:.5rem}.tree{height:300px;width:100%;overflow-y:scroll;background-color:var(--surface, #FFF)}.tree mat-spinner{margin:1rem}.tree .group{font-size:var(--xiri-font-size-label);color:var(--on-surface-variant, rgba(0, 0, 0, .54))}.tree mat-tree-node{min-height:20px;max-height:38px}.tree mat-tree-node.notree{margin-left:-25px}[hidden]{display:none!important}\n"] }]
|
|
2215
|
+
], template: "<div class=\"main\">\n\t<div class=\"line\">\n\t\t<div class=\"xrow xsmall\">\n\t\t\t<div class=\"xcol xcol-md-6 header\"><span>{{ field.name }}</span></div>\n\t\t\t<div class=\"xcol xcol-md-6 search\">\n\t\t\t\t@if (field.search !== false) {\n\t\t\t\t\t<!-- ponytail: Suche und Aufklapp-Button bleiben auch gesperrt bedienbar. Beide\n\t\t\t\t\t \u00E4ndern den Wert nicht, sperren w\u00FCrde nur das Nachschauen behindern. -->\n\t\t\t\t\t<xiri-search (changed)=\"searchDo($event)\"></xiri-search>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"tree\">\n\t\t@if (loading()) {\n\t\t\t<mat-spinner diameter=\"30\"></mat-spinner>\n\t\t}\n\t\t<mat-tree [dataSource]=\"dataSource\" [childrenAccessor]=\"getChildren\">\n\t\t\t<mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding=\"\" matTreeNodePaddingIndent=\"20px\" [hidden]=\"node.hidden\"\n\t\t\t [class.notree]=\"!field.tree\">\n\t\t\t\t<button mat-icon-button disabled aria-hidden=\"true\">\n\t\t\t\t\t<mat-icon style=\"visibility: hidden\">chevron_right</mat-icon>\n\t\t\t\t</button>\n\t\t\t\t<mat-checkbox class=\"checklist-leaf-node\" [checked]=\"node.state === 1\" [disabled]=\"disabled\"\n\t\t\t\t (change)=\"treeItemSelectionToggle(node)\">{{ node.name }}\n\t\t\t\t</mat-checkbox>\n\t\t\t</mat-tree-node>\n\t\t\t<mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding=\"\" matTreeNodePaddingIndent=\"20px\" [hidden]=\"node.hidden\">\n\t\t\t\t<button mat-icon-button matTreeNodeToggle [attr.aria-label]=\"tree().isExpanded(node) ? 'Zuklappen' : 'Aufklappen'\">\n\t\t\t\t\t<mat-icon class=\"mat-icon-rtl-mirror\">\n\t\t\t\t\t\t{{ tree().isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n\t\t\t\t\t</mat-icon>\n\t\t\t\t</button>\n\t\t\t\t<mat-checkbox class=\"group\"\n\t\t\t\t [checked]=\"node.state === 1\"\n\t\t\t\t [indeterminate]=\"node.state === 2\"\n\t\t\t\t [disabled]=\"disabled\"\n\t\t\t\t (change)=\"treeItemSelectionToggle(node)\">{{ node.name }}\n\t\t\t\t</mat-checkbox>\n\t\t\t</mat-tree-node>\n\t\t</mat-tree>\n\t</div>\n</div>", styles: [".main{border:1px solid var(--outline-variant, #C2C7CF);border-radius:var(--mat-form-field-filled-container-shape, var(--xiri-radius-xs, var(--mat-sys-corner-extra-small)));overflow:hidden}:host.error .main{border:1px solid var(--error, red)}.line{background-color:var(--surface-bright, #F9F9FC);padding:0 0 0 1rem;border-bottom:1px solid var(--outline-variant, #C2C7CF);border-top-left-radius:var(--mat-form-field-filled-container-shape, var(--xiri-radius-xs, var(--mat-sys-corner-extra-small)));border-top-right-radius:var(--mat-form-field-filled-container-shape, var(--xiri-radius-xs, var(--mat-sys-corner-extra-small)))}.line .header{color:var(--on-surface-variant, rgba(0, 0, 0, .54));display:flex;align-items:center;min-height:32px}.line .search{display:flex;justify-content:flex-end;padding-right:.5rem}.tree{height:300px;width:100%;overflow-y:scroll;background-color:var(--surface, #FFF)}.tree mat-spinner{margin:1rem}.tree .group{font-size:var(--xiri-font-size-label);color:var(--on-surface-variant, rgba(0, 0, 0, .54))}.tree mat-tree-node{min-height:20px;max-height:38px}.tree mat-tree-node.notree{margin-left:-25px}[hidden]{display:none!important}\n"] }]
|
|
2064
2216
|
}], ctorParameters: () => [], propDecorators: { field: [{
|
|
2065
2217
|
type: Input
|
|
2066
2218
|
}], value: [{
|
|
@@ -2162,10 +2314,10 @@ class XiriSelectDirective {
|
|
|
2162
2314
|
// filter the _allValues
|
|
2163
2315
|
this._filteredValuesSubject.next(this._allValues.filter(el => this.predicate()(search, el)));
|
|
2164
2316
|
}
|
|
2165
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
2166
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0
|
|
2317
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSelectDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2318
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.0", type: XiriSelectDirective, isStandalone: true, selector: "[xiriSelect]", inputs: { predicate: { classPropertyName: "predicate", publicName: "predicate", isSignal: true, isRequired: false, transformFunction: null }, compare: { classPropertyName: "compare", publicName: "compare", isSignal: true, isRequired: false, transformFunction: null }, serverSideSearch: { classPropertyName: "serverSideSearch", publicName: "serverSideSearch", isSignal: true, isRequired: false, transformFunction: null }, serverUrl: { classPropertyName: "serverUrl", publicName: "serverUrl", isSignal: true, isRequired: false, transformFunction: null }, serverParams: { classPropertyName: "serverParams", publicName: "serverParams", isSignal: true, isRequired: false, transformFunction: null }, values: { classPropertyName: "values", publicName: "values", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["xiriSelect"], ngImport: i0 }); }
|
|
2167
2319
|
}
|
|
2168
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
2320
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSelectDirective, decorators: [{
|
|
2169
2321
|
type: Directive,
|
|
2170
2322
|
args: [{
|
|
2171
2323
|
selector: "[xiriSelect]",
|
|
@@ -2184,11 +2336,21 @@ class XiriChipsComponent {
|
|
|
2184
2336
|
this.separatorKeyCodes = [ENTER, COMMA];
|
|
2185
2337
|
this.chipInput = viewChild('chipInput', /* @ts-ignore */
|
|
2186
2338
|
...(ngDevMode ? [{ debugName: "chipInput" }] : /* istanbul ignore next */ []));
|
|
2339
|
+
// Zwei Sperrquellen, verodert. field ist hier ein input(), kein Setter -- die Ableitung
|
|
2340
|
+
// gehoert deshalb in ein computed. Angular ruft beim Control-Setup setDisabledState(false),
|
|
2341
|
+
// was ein Backend-disabled sonst wieder aufhoebe.
|
|
2342
|
+
this.controlDisabled = signal(false, /* @ts-ignore */
|
|
2343
|
+
...(ngDevMode ? [{ debugName: "controlDisabled" }] : /* istanbul ignore next */ []));
|
|
2344
|
+
this.disabled = computed(() => !!this.field().disabled || this.controlDisabled(), /* @ts-ignore */
|
|
2345
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
2187
2346
|
this.onChange = () => { };
|
|
2188
2347
|
this.onTouched = () => { };
|
|
2189
2348
|
}
|
|
2190
2349
|
writeValue(value) {
|
|
2191
|
-
|
|
2350
|
+
// untracked wie bei setDisabledState: Angular ruft writeValue aus
|
|
2351
|
+
// setUpControlValueAccessor, also waehrend der Template-Auswertung. Ohne das wirft ein
|
|
2352
|
+
// Neuaufbau des Formulars mit gleicher Feld-ID NG0600.
|
|
2353
|
+
untracked(() => this.chips.set(value || []));
|
|
2192
2354
|
}
|
|
2193
2355
|
registerOnChange(fn) {
|
|
2194
2356
|
this.onChange = fn;
|
|
@@ -2196,7 +2358,14 @@ class XiriChipsComponent {
|
|
|
2196
2358
|
registerOnTouched(fn) {
|
|
2197
2359
|
this.onTouched = fn;
|
|
2198
2360
|
}
|
|
2361
|
+
setDisabledState(isDisabled) {
|
|
2362
|
+
// untracked: Angular ruft das aus setUpControlValueAccessor, also waehrend der
|
|
2363
|
+
// Template-Auswertung -- ein Signal-Write wuerde dort NG0600 werfen.
|
|
2364
|
+
untracked(() => this.controlDisabled.set(isDisabled));
|
|
2365
|
+
}
|
|
2199
2366
|
add(event) {
|
|
2367
|
+
if (this.disabled())
|
|
2368
|
+
return;
|
|
2200
2369
|
const value = (event.value || '').trim();
|
|
2201
2370
|
if (!value)
|
|
2202
2371
|
return;
|
|
@@ -2209,11 +2378,18 @@ class XiriChipsComponent {
|
|
|
2209
2378
|
event.chipInput.clear();
|
|
2210
2379
|
}
|
|
2211
2380
|
remove(chip) {
|
|
2381
|
+
// Auch bei deaktiviertem Grid: hatte ein Chip beim Sperren den Fokus, leitet Material
|
|
2382
|
+
// Delete/Backspace weiter und prueft dabei nur `removable`.
|
|
2383
|
+
if (this.disabled())
|
|
2384
|
+
return;
|
|
2212
2385
|
const current = this.chips().filter(c => c !== chip);
|
|
2213
2386
|
this.chips.set(current);
|
|
2214
2387
|
this.onChange(current);
|
|
2215
2388
|
}
|
|
2216
2389
|
selected(event) {
|
|
2390
|
+
// Ein bereits offenes Autocomplete-Overlay kann nach dem Sperren noch liefern.
|
|
2391
|
+
if (this.disabled())
|
|
2392
|
+
return;
|
|
2217
2393
|
const option = event.option.value;
|
|
2218
2394
|
const current = [...this.chips()];
|
|
2219
2395
|
if (!current.includes(option.id)) {
|
|
@@ -2254,14 +2430,14 @@ class XiriChipsComponent {
|
|
|
2254
2430
|
}
|
|
2255
2431
|
return chip;
|
|
2256
2432
|
}
|
|
2257
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
2258
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
2433
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriChipsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2434
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriChipsComponent, isStandalone: true, selector: "xiri-chips", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null } }, providers: [{
|
|
2259
2435
|
provide: NG_VALUE_ACCESSOR,
|
|
2260
2436
|
useExisting: forwardRef(() => XiriChipsComponent),
|
|
2261
2437
|
multi: true
|
|
2262
|
-
}], viewQueries: [{ propertyName: "chipInput", first: true, predicate: ["chipInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<mat-form-field>\n\t@if (field().name) {\n\t\t<mat-label>{{ field().name }}</mat-label>\n\t}\n\t<mat-chip-grid #chipGrid>\n\t\t@for (chip of chips(); track chip) {\n\t\t\t<mat-chip-row (removed)=\"remove(chip)\" [class]=\"chipColor(chip)\">\n\t\t\t\t{{ displayLabel(chip) }}\n\t\t\t\t<button matChipRemove [attr.aria-label]=\"'Entfernen: ' + displayLabel( chip )\">\n\t\t\t\t\t<mat-icon>cancel</mat-icon>\n\t\t\t\t</button>\n\t\t\t</mat-chip-row>\n\t\t}\n\t</mat-chip-grid>\n\t<input #chipInput\n\t [matChipInputFor]=\"chipGrid\"\n\t [matChipInputSeparatorKeyCodes]=\"separatorKeyCodes\"\n\t [matChipInputAddOnBlur]=\"true\"\n\t (matChipInputTokenEnd)=\"add($event)\"\n\t (input)=\"onInputChange($event)\"\n\t (focus)=\"onFocus()\"\n\t [matAutocomplete]=\"auto\"\n\t [placeholder]=\"field().hint || ''\">\n\t<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\n\t\t@for (option of filteredOptions(); track option.id) {\n\t\t\t<mat-option [value]=\"option\">{{ option.name }}</mat-option>\n\t\t}\n\t</mat-autocomplete>\n</mat-form-field>\n", styles: [":host{display:block;width:100%}mat-form-field{width:100%}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "component", type: MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "directive", type: MatChipRemove, selector: "[matChipRemove]" }, { kind: "directive", type: MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
2438
|
+
}], viewQueries: [{ propertyName: "chipInput", first: true, predicate: ["chipInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<mat-form-field>\n\t@if (field().name) {\n\t\t<mat-label>{{ field().name }}</mat-label>\n\t}\n\t<mat-chip-grid #chipGrid [disabled]=\"disabled()\">\n\t\t@for (chip of chips(); track chip) {\n\t\t\t<mat-chip-row (removed)=\"remove(chip)\" [class]=\"chipColor(chip)\" [removable]=\"!disabled()\">\n\t\t\t\t{{ displayLabel(chip) }}\n\t\t\t\t<button matChipRemove [disabled]=\"disabled()\" [attr.aria-label]=\"'Entfernen: ' + displayLabel( chip )\">\n\t\t\t\t\t<mat-icon>cancel</mat-icon>\n\t\t\t\t</button>\n\t\t\t</mat-chip-row>\n\t\t}\n\t</mat-chip-grid>\n\t<input #chipInput\n\t [matChipInputFor]=\"chipGrid\"\n\t [matChipInputSeparatorKeyCodes]=\"separatorKeyCodes\"\n\t [matChipInputAddOnBlur]=\"true\"\n\t (matChipInputTokenEnd)=\"add($event)\"\n\t (input)=\"onInputChange($event)\"\n\t (focus)=\"onFocus()\"\n\t [matAutocomplete]=\"auto\"\n\t [disabled]=\"disabled()\"\n\t [placeholder]=\"field().hint || ''\">\n\t<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\n\t\t@for (option of filteredOptions(); track option.id) {\n\t\t\t<mat-option [value]=\"option\">{{ option.name }}</mat-option>\n\t\t}\n\t</mat-autocomplete>\n</mat-form-field>\n", styles: [":host{display:block;width:100%}mat-form-field{width:100%}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "component", type: MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "directive", type: MatChipRemove, selector: "[matChipRemove]" }, { kind: "directive", type: MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
2263
2439
|
}
|
|
2264
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
2440
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriChipsComponent, decorators: [{
|
|
2265
2441
|
type: Component,
|
|
2266
2442
|
args: [{ selector: 'xiri-chips', providers: [{
|
|
2267
2443
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -2278,7 +2454,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
2278
2454
|
MatAutocomplete,
|
|
2279
2455
|
MatOption,
|
|
2280
2456
|
MatIcon
|
|
2281
|
-
], template: "<mat-form-field>\n\t@if (field().name) {\n\t\t<mat-label>{{ field().name }}</mat-label>\n\t}\n\t<mat-chip-grid #chipGrid>\n\t\t@for (chip of chips(); track chip) {\n\t\t\t<mat-chip-row (removed)=\"remove(chip)\" [class]=\"chipColor(chip)\">\n\t\t\t\t{{ displayLabel(chip) }}\n\t\t\t\t<button matChipRemove [attr.aria-label]=\"'Entfernen: ' + displayLabel( chip )\">\n\t\t\t\t\t<mat-icon>cancel</mat-icon>\n\t\t\t\t</button>\n\t\t\t</mat-chip-row>\n\t\t}\n\t</mat-chip-grid>\n\t<input #chipInput\n\t [matChipInputFor]=\"chipGrid\"\n\t [matChipInputSeparatorKeyCodes]=\"separatorKeyCodes\"\n\t [matChipInputAddOnBlur]=\"true\"\n\t (matChipInputTokenEnd)=\"add($event)\"\n\t (input)=\"onInputChange($event)\"\n\t (focus)=\"onFocus()\"\n\t [matAutocomplete]=\"auto\"\n\t [placeholder]=\"field().hint || ''\">\n\t<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\n\t\t@for (option of filteredOptions(); track option.id) {\n\t\t\t<mat-option [value]=\"option\">{{ option.name }}</mat-option>\n\t\t}\n\t</mat-autocomplete>\n</mat-form-field>\n", styles: [":host{display:block;width:100%}mat-form-field{width:100%}\n"] }]
|
|
2457
|
+
], template: "<mat-form-field>\n\t@if (field().name) {\n\t\t<mat-label>{{ field().name }}</mat-label>\n\t}\n\t<mat-chip-grid #chipGrid [disabled]=\"disabled()\">\n\t\t@for (chip of chips(); track chip) {\n\t\t\t<mat-chip-row (removed)=\"remove(chip)\" [class]=\"chipColor(chip)\" [removable]=\"!disabled()\">\n\t\t\t\t{{ displayLabel(chip) }}\n\t\t\t\t<button matChipRemove [disabled]=\"disabled()\" [attr.aria-label]=\"'Entfernen: ' + displayLabel( chip )\">\n\t\t\t\t\t<mat-icon>cancel</mat-icon>\n\t\t\t\t</button>\n\t\t\t</mat-chip-row>\n\t\t}\n\t</mat-chip-grid>\n\t<input #chipInput\n\t [matChipInputFor]=\"chipGrid\"\n\t [matChipInputSeparatorKeyCodes]=\"separatorKeyCodes\"\n\t [matChipInputAddOnBlur]=\"true\"\n\t (matChipInputTokenEnd)=\"add($event)\"\n\t (input)=\"onInputChange($event)\"\n\t (focus)=\"onFocus()\"\n\t [matAutocomplete]=\"auto\"\n\t [disabled]=\"disabled()\"\n\t [placeholder]=\"field().hint || ''\">\n\t<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\n\t\t@for (option of filteredOptions(); track option.id) {\n\t\t\t<mat-option [value]=\"option\">{{ option.name }}</mat-option>\n\t\t}\n\t</mat-autocomplete>\n</mat-form-field>\n", styles: [":host{display:block;width:100%}mat-form-field{width:100%}\n"] }]
|
|
2282
2458
|
}], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], chipInput: [{ type: i0.ViewChild, args: ['chipInput', { isSignal: true }] }] } });
|
|
2283
2459
|
|
|
2284
2460
|
function formatValidationDate(localeString, unixSeconds) {
|
|
@@ -2290,6 +2466,8 @@ class XiriFormFieldsComponent {
|
|
|
2290
2466
|
this.destroyRef = inject(DestroyRef);
|
|
2291
2467
|
this.elementRef = inject(ElementRef);
|
|
2292
2468
|
this.localeService = inject(XiriLocaleService);
|
|
2469
|
+
this.dataService = inject(XiriDataService);
|
|
2470
|
+
this.snackbar = inject(XiriSnackbarService);
|
|
2293
2471
|
this.form = input(null, /* @ts-ignore */
|
|
2294
2472
|
...(ngDevMode ? [{ debugName: "form" }] : /* istanbul ignore next */ []));
|
|
2295
2473
|
this.display = input('full', /* @ts-ignore */
|
|
@@ -2306,6 +2484,42 @@ class XiriFormFieldsComponent {
|
|
|
2306
2484
|
this._fieldsLoaded = false;
|
|
2307
2485
|
this._initialEmitDone = false;
|
|
2308
2486
|
this._autoFocusDone = false;
|
|
2487
|
+
// Render-Kopien der gepatchten Felder, siehe displayFields(). Das Signal daneben stößt nur die
|
|
2488
|
+
// Neuberechnung an; die Identitäten selbst leben in der Map, damit sie stabil bleiben.
|
|
2489
|
+
this.patchedClones = new Map();
|
|
2490
|
+
this.patchVersion = signal(0, /* @ts-ignore */
|
|
2491
|
+
...(ngDevMode ? [{ debugName: "patchVersion" }] : /* istanbul ignore next */ []));
|
|
2492
|
+
// Zuletzt angewendeter Patch pro Feld - Rohdaten vom Server, also frei von den Referenzen,
|
|
2493
|
+
// die z.B. der Treeselect nachträglich in die Optionsliste hängt.
|
|
2494
|
+
this.lastPatch = new Map();
|
|
2495
|
+
// Zählt jeden Aufbau einer neuen Feldliste, damit der Initial-Reload auch dann feuert, wenn
|
|
2496
|
+
// das neue Formular zufällig dieselben Trigger-Werte trägt wie das alte.
|
|
2497
|
+
this.formGeneration = 0;
|
|
2498
|
+
// Startet den Reload einmalig nach dem Aufbau der Controls.
|
|
2499
|
+
this.reloadKick = new Subject();
|
|
2500
|
+
// Unterdrückt den formChange-Emit der valueChanges-Subscription, während ein Patch angewendet
|
|
2501
|
+
// wird - nach dem Patch wird genau einmal emittiert.
|
|
2502
|
+
this.applyingPatch = false;
|
|
2503
|
+
// Läuft gerade ein Reload? Trägt den Fortschrittsbalken über dem Feldblock. Bewusst nur eine
|
|
2504
|
+
// Anzeige und kein control.disable(): ein deaktiviertes Control fällt aus formGroup.value, und
|
|
2505
|
+
// genau das lesen xiri-query und xiri-form aus dem formChange.
|
|
2506
|
+
this.reloading = signal(false, /* @ts-ignore */
|
|
2507
|
+
...(ngDevMode ? [{ debugName: "reloading" }] : /* istanbul ignore next */ []));
|
|
2508
|
+
// Gepatchte Felder werden als Kopie gerendert, damit Kind-Komponenten mit eigenem State
|
|
2509
|
+
// (treeselect, chips, die Select-Directive) ihre Inputs neu auswerten. Die Originale bleiben
|
|
2510
|
+
// die Quelle der Wahrheit - sie tragen field.control und werden von xiri-query mitgelesen.
|
|
2511
|
+
//
|
|
2512
|
+
// Die Kopie wird gecacht: die Identität eines Felds darf sich nur ändern, wenn genau dieses
|
|
2513
|
+
// Feld erneut gepatcht wurde. Würde hier bei jedem Patch neu geklont, liefe der Input-Setter
|
|
2514
|
+
// aller je gepatchten Felder erneut - beim Treeselect wäre das ein kompletter Neuaufbau.
|
|
2515
|
+
this.displayFields = computed(() => {
|
|
2516
|
+
const fields = this.fields();
|
|
2517
|
+
this.patchVersion();
|
|
2518
|
+
if (fields === null || this.patchedClones.size === 0)
|
|
2519
|
+
return fields;
|
|
2520
|
+
return fields.map(f => this.patchedClones.get(f.id) ?? f);
|
|
2521
|
+
}, /* @ts-ignore */
|
|
2522
|
+
...(ngDevMode ? [{ debugName: "displayFields" }] : /* istanbul ignore next */ []));
|
|
2309
2523
|
this.fields = computed(() => {
|
|
2310
2524
|
this._fieldsLoaded = false;
|
|
2311
2525
|
if (this._fields !== null) {
|
|
@@ -2319,6 +2533,10 @@ class XiriFormFieldsComponent {
|
|
|
2319
2533
|
return null;
|
|
2320
2534
|
}
|
|
2321
2535
|
this._fields = fields;
|
|
2536
|
+
// Neue Feldliste: alte Render-Kopien und Patch-Stände gehören zum vorherigen Formular.
|
|
2537
|
+
this.formGeneration++;
|
|
2538
|
+
this.patchedClones.clear();
|
|
2539
|
+
this.lastPatch.clear();
|
|
2322
2540
|
const initialCollapsed = new Set();
|
|
2323
2541
|
for (const f of fields) {
|
|
2324
2542
|
if (f.type === 'header' && f.collapsible && f.collapsed)
|
|
@@ -2381,13 +2599,23 @@ class XiriFormFieldsComponent {
|
|
|
2381
2599
|
}
|
|
2382
2600
|
}
|
|
2383
2601
|
});
|
|
2602
|
+
// Ein Reload direkt nach dem Aufbau der Controls, immer. Der Server liefert seine Listen
|
|
2603
|
+
// zum Startwert eines Triggers - der muss aber nicht der aktuelle sein: xiri-query stellt
|
|
2604
|
+
// gespeicherte Filterwerte über formService.loadState() wieder her, bevor die Controls
|
|
2605
|
+
// entstehen. Ein bedingtes "nur wenn abweichend" ist von hier aus nicht erkennbar.
|
|
2606
|
+
effect(() => {
|
|
2607
|
+
const formInput = this.form();
|
|
2608
|
+
this.fields();
|
|
2609
|
+
if (formInput !== null && this._fieldsLoaded)
|
|
2610
|
+
this.reloadKick.next();
|
|
2611
|
+
});
|
|
2384
2612
|
}
|
|
2385
2613
|
ngOnInit() {
|
|
2386
2614
|
this.check()?.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
|
|
2387
2615
|
this.validateAllFormFields();
|
|
2388
2616
|
});
|
|
2389
2617
|
this.formGroup.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
|
|
2390
|
-
if (this._fieldsLoaded) {
|
|
2618
|
+
if (this._fieldsLoaded && !this.applyingPatch) {
|
|
2391
2619
|
const currentValue = JSON.stringify(this.formGroup.value);
|
|
2392
2620
|
if (currentValue === this.lastValue)
|
|
2393
2621
|
return;
|
|
@@ -2395,6 +2623,132 @@ class XiriFormFieldsComponent {
|
|
|
2395
2623
|
this.formChange.emit(this.formGroup);
|
|
2396
2624
|
}
|
|
2397
2625
|
});
|
|
2626
|
+
// Ein Trigger-Wechsel lädt die abhängigen Felder nach.
|
|
2627
|
+
//
|
|
2628
|
+
// Der Snapshot wird ungefiltert gebildet und erst danach entprellt: das äußere switchMap
|
|
2629
|
+
// bricht damit einen noch laufenden Request sofort ab, sobald sich der Stand ändert. Läge
|
|
2630
|
+
// debounceTime davor, bliebe die Anfrage zum überholten Stand noch 200 ms aktiv und könnte
|
|
2631
|
+
// in diesem Fenster antworten - ihr Patch würde dann Werte verwerfen, die für den neuen
|
|
2632
|
+
// Stand gültig sind, und kein späterer Patch stellt sie wieder her.
|
|
2633
|
+
merge(this.reloadKick, this.formGroup.valueChanges).pipe(
|
|
2634
|
+
// Während des Control-Aufbaus feuert valueChanges für jedes entfernte und neue Control;
|
|
2635
|
+
// diese Zwischenstände sind kein Trigger-Wechsel. Der Kick danach übernimmt.
|
|
2636
|
+
filter$1(() => this._fieldsLoaded), map(() => JSON.stringify({ g: this.formGeneration, v: this.triggerValues() })), distinctUntilChanged(),
|
|
2637
|
+
// Der Balken hängt am Trigger-Wechsel, nicht am Request: gesetzt wird vor dem Timer,
|
|
2638
|
+
// sonst bliebe die Entprellzeit ohne Rückmeldung. Bei einem zweiten Wechsel bleibt er
|
|
2639
|
+
// durchgehend an, weil switchMap den alten Inner-Stream abräumt (finalize -> false),
|
|
2640
|
+
// bevor diese Projektion für den neuen läuft (-> true).
|
|
2641
|
+
switchMap(() => {
|
|
2642
|
+
if (this.dependentFields().length === 0)
|
|
2643
|
+
return EMPTY;
|
|
2644
|
+
this.reloading.set(true);
|
|
2645
|
+
return timer(200).pipe(switchMap(() => this.fetchPatches()), finalize(() => this.reloading.set(false)));
|
|
2646
|
+
}), takeUntilDestroyed(this.destroyRef)).subscribe(patch => this.applyPatch(patch.url, patch.fields));
|
|
2647
|
+
}
|
|
2648
|
+
// Felder, die inhaltlich von anderen abhängen (beide Angaben nötig, siehe field.interface).
|
|
2649
|
+
dependentFields() {
|
|
2650
|
+
return (this._fields ?? []).filter(f => !!f.reloadUrl && !!f.reloadOn?.length);
|
|
2651
|
+
}
|
|
2652
|
+
// Nur die Trigger-Werte gehen an den Server, nicht das ganze Formular: ein Options-Endpoint
|
|
2653
|
+
// braucht keine Passwörter. Alles Weitere gehört in die reloadUrl.
|
|
2654
|
+
//
|
|
2655
|
+
// Ohne URL sind es alle Trigger (für den Änderungsvergleich), mit URL nur die, von denen die
|
|
2656
|
+
// Felder genau dieser URL abhängen - jeder Endpoint sieht also nur seine eigenen Werte.
|
|
2657
|
+
triggerValues(url) {
|
|
2658
|
+
const dependent = this.dependentFields().filter(f => url === undefined || f.reloadUrl === url);
|
|
2659
|
+
if (dependent.length === 0)
|
|
2660
|
+
return null;
|
|
2661
|
+
const raw = this.formGroup.getRawValue();
|
|
2662
|
+
const values = {};
|
|
2663
|
+
for (const field of dependent)
|
|
2664
|
+
for (const trigger of field.reloadOn ?? [])
|
|
2665
|
+
if (trigger in raw)
|
|
2666
|
+
values[trigger] = raw[trigger];
|
|
2667
|
+
return values;
|
|
2668
|
+
}
|
|
2669
|
+
fetchPatches() {
|
|
2670
|
+
const urls = new Set(this.dependentFields().map(f => f.reloadUrl));
|
|
2671
|
+
if (urls.size === 0)
|
|
2672
|
+
return EMPTY;
|
|
2673
|
+
// Ein Request pro URL, jeder für sich: schlägt einer fehl, werden die Patches der
|
|
2674
|
+
// anderen trotzdem angewendet.
|
|
2675
|
+
return merge(...Array.from(urls).map(url => this.dataService.post(url, this.triggerValues(url) ?? {}).pipe(map(res => ({ url, fields: res?.fields ?? {} })), catchError(err => {
|
|
2676
|
+
this.snackbar.error(parseHttpError(err));
|
|
2677
|
+
return EMPTY;
|
|
2678
|
+
}))));
|
|
2679
|
+
}
|
|
2680
|
+
applyPatch(url, patch) {
|
|
2681
|
+
const fields = this._fields;
|
|
2682
|
+
if (fields === null || !patch)
|
|
2683
|
+
return;
|
|
2684
|
+
const patchedNow = new Set();
|
|
2685
|
+
this.applyingPatch = true;
|
|
2686
|
+
try {
|
|
2687
|
+
for (const field of fields) {
|
|
2688
|
+
// Der Server ist eine Trust-Boundary: eine Antwort darf nur die abhängigen Felder
|
|
2689
|
+
// genau dieser URL anfassen.
|
|
2690
|
+
if (!field.reloadOn?.length || field.reloadUrl !== url)
|
|
2691
|
+
continue;
|
|
2692
|
+
const entry = patch[field.id];
|
|
2693
|
+
if (entry === null || typeof entry !== 'object')
|
|
2694
|
+
continue;
|
|
2695
|
+
const applied = applyPatchProperties(field, entry, this.lastPatch.get(field.id));
|
|
2696
|
+
this.lastPatch.set(field.id, entry);
|
|
2697
|
+
if (applied.length === 0)
|
|
2698
|
+
continue;
|
|
2699
|
+
patchedNow.add(field.id);
|
|
2700
|
+
this.patchedClones.set(field.id, { ...field });
|
|
2701
|
+
const control = field.control;
|
|
2702
|
+
if (!control)
|
|
2703
|
+
continue;
|
|
2704
|
+
if (applied.includes('list'))
|
|
2705
|
+
this.pruneValue(field, control);
|
|
2706
|
+
if (applied.includes('required') || applied.includes('min') || applied.includes('max')) {
|
|
2707
|
+
field.validations = undefined;
|
|
2708
|
+
control.setValidators(this.bindValidations(field));
|
|
2709
|
+
control.updateValueAndValidity({ emitEvent: false });
|
|
2710
|
+
}
|
|
2711
|
+
// Mit dem globalen disabled kombinieren, sonst reaktiviert ein disabled:false im
|
|
2712
|
+
// Patch ein Control, obwohl die ganze Form gerade deaktiviert ist.
|
|
2713
|
+
if (applied.includes('disabled')) {
|
|
2714
|
+
if (field.disabled || this.disabled())
|
|
2715
|
+
control.disable({ emitEvent: false });
|
|
2716
|
+
else
|
|
2717
|
+
control.enable({ emitEvent: false });
|
|
2718
|
+
}
|
|
2719
|
+
}
|
|
2720
|
+
}
|
|
2721
|
+
finally {
|
|
2722
|
+
this.applyingPatch = false;
|
|
2723
|
+
}
|
|
2724
|
+
if (patchedNow.size === 0)
|
|
2725
|
+
return;
|
|
2726
|
+
// Nur anstoßen: die Klon-Identitäten selbst liegen in patchedClones und bleiben für alle
|
|
2727
|
+
// Felder stabil, die dieser Patch nicht angefasst hat.
|
|
2728
|
+
this.patchVersion.update(v => v + 1);
|
|
2729
|
+
this.lastValue = JSON.stringify(this.formGroup.value);
|
|
2730
|
+
this.formChange.emit(this.formGroup);
|
|
2731
|
+
}
|
|
2732
|
+
// Verwirft Werte, die die neue Liste nicht mehr anbietet. Das emittiert bewusst, damit ein
|
|
2733
|
+
// Feld, das seinerseits von diesem abhängt, nachzieht. Die Kette terminiert, weil Pruning
|
|
2734
|
+
// monoton ist: ein leeres Feld hat nichts mehr zu verwerfen.
|
|
2735
|
+
pruneValue(field, control) {
|
|
2736
|
+
// Nur wenn die Liste autoritativ ist. Bei Server-Suche ist list nur der statische Sockel,
|
|
2737
|
+
// bei chips sind es Vorschläge - dort würde Pruning gültige Eingaben löschen.
|
|
2738
|
+
if (field.url || field.type === 'chips')
|
|
2739
|
+
return;
|
|
2740
|
+
const ids = collectOptionIds(field.list ?? []);
|
|
2741
|
+
const value = control.value;
|
|
2742
|
+
if (Array.isArray(value)) {
|
|
2743
|
+
const kept = value.filter(v => ids.has(v));
|
|
2744
|
+
if (kept.length !== value.length)
|
|
2745
|
+
control.setValue(kept);
|
|
2746
|
+
return;
|
|
2747
|
+
}
|
|
2748
|
+
if (value === null || value === undefined || value === '')
|
|
2749
|
+
return;
|
|
2750
|
+
if (!ids.has(value))
|
|
2751
|
+
control.setValue(emptyValueForField(field));
|
|
2398
2752
|
}
|
|
2399
2753
|
createControl() {
|
|
2400
2754
|
const fields = this._fields;
|
|
@@ -2663,7 +3017,9 @@ class XiriFormFieldsComponent {
|
|
|
2663
3017
|
// Ein header startet seine eigene Section und ist nie Teil einer vorherigen
|
|
2664
3018
|
if (field.type === 'header')
|
|
2665
3019
|
return false;
|
|
2666
|
-
|
|
3020
|
+
// Über die ID suchen, nicht über die Identität: gepatchte Felder werden als Kopie
|
|
3021
|
+
// gerendert, damit die Kind-Komponenten eine neue Input-Identität sehen.
|
|
3022
|
+
const idx = fields.findIndex(f => f.id === field.id);
|
|
2667
3023
|
if (idx <= 0)
|
|
2668
3024
|
return false;
|
|
2669
3025
|
// Walk backwards to find the nearest header or divider
|
|
@@ -2702,10 +3058,10 @@ class XiriFormFieldsComponent {
|
|
|
2702
3058
|
return true;
|
|
2703
3059
|
}
|
|
2704
3060
|
}
|
|
2705
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
2706
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: XiriFormFieldsComponent, isStandalone: true, selector: "xiri-form-fields", inputs: { form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, display: { classPropertyName: "display", publicName: "display", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, check: { classPropertyName: "check", publicName: "check", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { formChange: "formChange" }, ngImport: i0, template: "<form class=\"xrow dynamic-form\" [formGroup]=\"formGroup\" [class]=\"display()\">\n\t@for (field of fields(); track field.id) {\n\t\t@if (isFieldVisible(field)) {\n\t\t@switch (field.type) {\n\t\t\t@case ('text') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<input matInput\n\t\t\t\t\t [formControlName]=\"field.id\"\n\t\t\t\t\t [type]=\"field.subtype || 'text'\"\n\t\t\t\t\t [autocomplete]=\"field.name\"\n\t\t\t\t\t [attr.minlength]=\"field.min\"\n\t\t\t\t\t [attr.maxlength]=\"field.max\"\n\t\t\t\t\t [required]=\"!!field.required\">\n\t\t\t\t\t@if (field.textPrefix) {\n\t\t\t\t\t\t<span matTextPrefix=\"\">{{ field.textPrefix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.textSuffix) {\n\t\t\t\t\t\t<span matTextSuffix=\"\">{{ field.textSuffix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconPrefix) {\n\t\t\t\t\t\t<mat-icon matPrefix>{{ field.iconPrefix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconSuffix) {\n\t\t\t\t\t\t<mat-icon matSuffix>{{ field.iconSuffix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('number') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<input matInput\n\t\t\t\t\t [formControlName]=\"field.id\"\n\t\t\t\t\t [autocomplete]=\"field.name || field.id\"\n\t\t\t\t\t [lang]=\"field.locale || ''\"\n\t\t\t\t\t [type]=\"field.type\"\n\t\t\t\t\t [attr.min]=\"field.min\"\n\t\t\t\t\t [attr.max]=\"field.max\"\n\t\t\t\t\t [required]=\"!!field.required\">\n\t\t\t\t\t@if (field.textPrefix) {\n\t\t\t\t\t\t<span matTextPrefix=\"\">{{ field.textPrefix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.textSuffix) {\n\t\t\t\t\t\t<span matTextSuffix=\"\">{{ field.textSuffix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconPrefix) {\n\t\t\t\t\t\t<mat-icon matPrefix>{{ field.iconPrefix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconSuffix) {\n\t\t\t\t\t\t<mat-icon matSuffix>{{ field.iconSuffix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('password') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<input matInput\n\t\t\t\t\t [formControlName]=\"field.id\"\n\t\t\t\t\t [type]=\"field.pwdhide ? 'password' : 'text'\"\n\t\t\t\t\t [autocomplete]=\"field.name\"\n\t\t\t\t\t [attr.minlength]=\"field.min\"\n\t\t\t\t\t [attr.maxlength]=\"field.max\"\n\t\t\t\t\t [required]=\"!!field.required\">\n\t\t\t\t\t<button mat-icon-button matSuffix class=\"form-field-button\" (click)=\"field.pwdhide = !field.pwdhide\" [attr.aria-label]=\"'Hide password'\"\n\t\t\t\t\t [attr.aria-pressed]=\"field.pwdhide\">\n\t\t\t\t\t\t<mat-icon>{{ field.pwdhide ? 'visibility_off' : 'visibility' }}</mat-icon>\n\t\t\t\t\t</button>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('select') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t@if (field.search === false) {\n\t\t\t\t\t\t<mat-select [formControlName]=\"field.id\" [multiple]=\"field.multiple\" [required]=\"!!field.required\" panelClass=\"selectPanel\">\n\t\t\t\t\t\t\t@for (x of field.list; track x.id) {\n\t\t\t\t\t\t\t\t<mat-option [value]=\"x.id\" [disabled]=\"x.disabled\">{{ x.name }}</mat-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<mat-select [formControlName]=\"field.id\" [multiple]=\"field.multiple\" [required]=\"!!field.required\" panelClass=\"selectPanel\">\n\t\t\t\t\t\t\t<mat-option>\n\t\t\t\t\t\t\t\t<ngx-mat-select-search [formControl]=\"xiriSelect.formControl\" xiriSelect #xiriSelect=\"xiriSelect\"\n\t\t\t\t\t\t\t\t [values]=\"field.list || []\" [searching]=\"xiriSelect.searching\"\n\t\t\t\t\t\t\t\t [serverSideSearch]=\"!!field.serverSideSearch\" [serverUrl]=\"field.url || ''\"\n\t\t\t\t\t\t\t\t [serverParams]=\"field.params || {}\"></ngx-mat-select-search>\n\t\t\t\t\t\t\t</mat-option>\n\t\t\t\t\t\t\t@for (x of xiriSelect.filter | async; track x.id) {\n\t\t\t\t\t\t\t\t<mat-option [value]=\"x.id\" [disabled]=\"x.disabled\">{{ x.name }}</mat-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('treeselect') {\n\t\t\t\t<div class=\"treeselect\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-treeselect [field]=\"field\" [formControlName]=\"field.id\"\n\t\t\t\t\t [class.error]=\"formGroup.get(field.id)?.touched && formGroup.get(field.id)?.invalid\"></xiri-treeselect>\n\t\t\t\t\t<div class=\"xhint\" aria-live=\"polite\" [class.error]=\"formGroup.get(field.id)?.touched && formGroup.get(field.id)?.invalid\">\n\t\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.touched && formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('date') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"date\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-date [field]=\"field\" [formControlName]=\"field.id\"></xiri-date>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('yearmonth') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"yearmonth\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-yearmonth [field]=\"field\" [formControlName]=\"field.id\"></xiri-yearmonth>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('daterange') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"daterange\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-date-range [field]=\"field\" [formControlName]=\"field.id\"></xiri-date-range>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('datetimerange') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"datetimerange\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-date-time-range [field]=\"field\" [formControlName]=\"field.id\"></xiri-date-time-range>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('bool') {\n\t\t\t\t<div class=\"bool\" [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-checkbox [formControlName]=\"field.id\">{{ field.name }}</mat-checkbox>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('radio') {\n\t\t\t\t<div class=\"radio\" [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<span class=\"radio-label\" [id]=\"field.id + '-label'\">{{ field.name }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<mat-radio-group\n\t\t\t\t\t\t[formControlName]=\"field.id\"\n\t\t\t\t\t\t[attr.aria-labelledby]=\"field.name ? field.id + '-label' : null\"\n\t\t\t\t\t>\n\t\t\t\t\t\t@for (x of field.list; track x.id) {\n\t\t\t\t\t\t\t<mat-radio-button [value]=\"x.id\" [disabled]=\"x.disabled\">{{ x.name }}</mat-radio-button>\n\t\t\t\t\t\t}\n\t\t\t\t\t</mat-radio-group>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('volume') {\n\t\t\t\t<div [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-volume [field]=\"field\" [formControlName]=\"field.id\"></xiri-volume>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('timelimit') {\n\t\t\t\t<div [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-timelimit matInput [formControlName]=\"field.id\" [required]=\"!!field.required\" [texts]=\"field.texts || {}\"></xiri-timelimit>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('textarea') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<textarea matInput [formControlName]=\"field.id\" [required]=\"!!field.required\" [rows]=\"field.rows || 5\"></textarea>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('file') {\n\t\t\t\t<div [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-file [field]=\"field\" [formControlName]=\"field.id\"></xiri-file>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('info') {\n\t\t\t\t<div class=\"info\" [class]=\"field.class\">{{ field.value }}</div>\n\t\t\t}\n\t\t\t@case ('header') {\n\t\t\t\t@if (field.collapsible) {\n\t\t\t\t\t<div class=\"header collapsible\" [class]=\"field.class\" role=\"button\" tabindex=\"0\"\n\t\t\t\t\t [attr.aria-expanded]=\"!isSectionCollapsed(field.id)\"\n\t\t\t\t\t (click)=\"toggleSection(field)\" (keydown.enter)=\"toggleSection(field)\" (keydown.space)=\"toggleSection(field); $event.preventDefault()\">\n\t\t\t\t\t\t<mat-icon class=\"collapse-icon\" [class.collapsed]=\"isSectionCollapsed(field.id)\">expand_more</mat-icon>\n\t\t\t\t\t\t{{ field.value }}\n\t\t\t\t\t</div>\n\t\t\t\t} @else {\n\t\t\t\t\t<div class=\"header\" [class]=\"field.class\">{{ field.value }}</div>\n\t\t\t\t}\n\t\t\t}\n\t\t\t@case ('divider') {\n\t\t\t\t<div class=\"divider\" [class]=\"field.class\">\n\t\t\t\t\t@if (field.value) {\n\t\t\t\t\t\t<span class=\"divider-text\">{{ field.value }}</span>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('html') {\n\t\t\t\t<div class=\"html\" [class]=\"field.class\" [innerHtml]=\"$any(field.value) | safeHtml\"></div>\n\t\t\t}\n\t\t\t@case ('question') {\n\t\t\t\t<div class=\"xcol question\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t<mat-icon [class]=\"field.iconColor || 'warn'\" inline=\"true\">{{ field.icon }}</mat-icon>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"right\">{{ field.value }}</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('waiting') {\n\t\t\t\t<div class=\"xcol waiting\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t@if (!field.done) {\n\t\t\t\t\t\t\t<mat-spinner diameter=\"40\"></mat-spinner>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (field.done) {\n\t\t\t\t\t\t\t<mat-icon inline=\"true\">done</mat-icon>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"right\">{{ field.value }}</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('chips') {\n\t\t\t\t<div [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-chips [field]=\"field\" [formControlName]=\"field.id\"></xiri-chips>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@default {\n\t\t\t\t<div>default: {{ field.type }}</div>\n\t\t\t}\n\t\t}\n\t\t}\n\t}\n</form>\n", styles: [".dynamic-form{grid-row-gap:7px}.dynamic-form mat-form-field mat-icon{--mat-icon-color: var(--xiri-formfield-icon-color)}.dynamic-form.line{grid-row-gap:5px}.dynamic-form.small{grid-row-gap:2px}.dynamic-form textarea{white-space:pre}.dynamic-form .xhint{display:flex;min-height:20px;margin-top:4px}.dynamic-form .xhint mat-hint{font-size:var(--xiri-font-size-helper);padding:1px 16px 0}.dynamic-form .xhint mat-hint.mat-mdc-form-field-hint-end{flex:1;text-align:right}.dynamic-form .xhint mat-error{font-size:var(--xiri-font-size-helper);padding:1px 16px 0}.dynamic-form .xhint.error mat-hint{display:none}.dynamic-form .date{align-self:start;min-width:min(9.5rem,100%)}.dynamic-form .date.datetime{min-width:min(14.5rem,100%)}.dynamic-form .daterange{align-self:start;min-width:min(14.5rem,100%)}.dynamic-form .datetimerange{align-self:start;min-width:min(18.5rem,100%)}.dynamic-form .bool{display:flex;flex-direction:column}.dynamic-form .bool mat-hint{font-size:var(--xiri-font-size-helper);margin-top:-8px;padding-left:44px}.dynamic-form .radio{display:flex;flex-direction:column;gap:var(--xiri-spacing-xs)}.dynamic-form .radio .radio-label{font-size:var(--xiri-font-size-label)}.dynamic-form .radio mat-radio-group{display:flex;flex-wrap:wrap;gap:var(--xiri-spacing-xs) var(--xiri-spacing-md)}.dynamic-form .radio mat-hint{font-size:var(--xiri-font-size-helper)}.dynamic-form .info{padding-top:.8rem;padding-bottom:.4rem;color:var(--primary, #2892D9)}.dynamic-form .header{font-size:var(--xiri-font-size-title);padding-top:.8rem;padding-bottom:.4rem;color:var(--primary, #2892D9)}.dynamic-form .header.collapsible{cursor:pointer;display:flex;align-items:center;gap:.25rem;-webkit-user-select:none;user-select:none;border-radius:var(--xiri-radius-xs);padding:.5rem .25rem;margin:.25rem 0}.dynamic-form .header.collapsible:hover{background:color-mix(in srgb,var(--primary, #2892D9) 8%,transparent)}.dynamic-form .header.collapsible .collapse-icon{transition:transform var(--xiri-duration-fast) var(--xiri-easing-standard)}.dynamic-form .header.collapsible .collapse-icon.collapsed{transform:rotate(-90deg)}.dynamic-form .divider{width:100%;display:flex;align-items:center;padding:.5rem 0;margin:.25rem 0}.dynamic-form .divider:before,.dynamic-form .divider:after{content:\"\";flex:1;height:1px;background:var(--outline-variant, var(--mat-sys-outline-variant, rgba(0, 0, 0, .12)))}.dynamic-form .divider .divider-text{padding:0 1rem;font-size:var(--xiri-font-size-helper);color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, .6)));white-space:nowrap}.dynamic-form .question,.dynamic-form .waiting{display:flex}.dynamic-form .question .left,.dynamic-form .waiting .left{font-size:var(--xiri-font-size-display);padding-right:1rem}.dynamic-form .question{align-items:center}.dynamic-form .question .left mat-icon{height:auto;width:auto;line-height:1;overflow:visible}.dynamic-form .form-field-button{margin-left:12px;margin-right:12px}.mat-mdc-select-panel.selectPanel{max-height:max(50vh,256px)}[hidden]{display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: NgxMatSelectSearchModule }, { kind: "component", type: i2.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "directive", type: XiriSelectDirective, selector: "[xiriSelect]", inputs: ["predicate", "compare", "serverSideSearch", "serverUrl", "serverParams", "values"], exportAs: ["xiriSelect"] }, { kind: "component", type: XiriTreeselectComponent, selector: "xiri-treeselect", inputs: ["field", "value"] }, { kind: "component", type: XiriDateComponent, selector: "xiri-date", inputs: ["field", "value"] }, { kind: "component", type: XiriYearMonthComponent, selector: "xiri-yearmonth", inputs: ["field", "value"] }, { kind: "component", type: XiriDateRangeComponent, selector: "xiri-date-range", inputs: ["field", "value"] }, { kind: "component", type: XiriDateTimeRangeComponent, selector: "xiri-date-time-range", inputs: ["field", "value"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: XiriVolumeComponent, selector: "xiri-volume", inputs: ["field", "value"] }, { kind: "component", type: XiriTimelimitComponent, selector: "xiri-timelimit", inputs: ["placeholder", "required", "disabled", "value", "texts"] }, { kind: "component", type: XiriFileComponent, selector: "xiri-file", inputs: ["value", "field"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: XiriChipsComponent, selector: "xiri-chips", inputs: ["field"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SafehtmlPipe, name: "safeHtml" }] }); }
|
|
3061
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriFormFieldsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3062
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriFormFieldsComponent, isStandalone: true, selector: "xiri-form-fields", inputs: { form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, display: { classPropertyName: "display", publicName: "display", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, check: { classPropertyName: "check", publicName: "check", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { formChange: "formChange" }, ngImport: i0, template: "@if (reloading()) {\n\t<mat-progress-bar class=\"reloadbar\" mode=\"indeterminate\"></mat-progress-bar>\n}\n<form class=\"xrow dynamic-form\" [formGroup]=\"formGroup\" [class]=\"display()\">\n\t@for (field of displayFields(); track field.id) {\n\t\t@if (isFieldVisible(field)) {\n\t\t@switch (field.type) {\n\t\t\t@case ('text') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<input matInput\n\t\t\t\t\t [formControlName]=\"field.id\"\n\t\t\t\t\t [type]=\"field.subtype || 'text'\"\n\t\t\t\t\t [autocomplete]=\"field.name\"\n\t\t\t\t\t [attr.minlength]=\"field.min\"\n\t\t\t\t\t [attr.maxlength]=\"field.max\"\n\t\t\t\t\t [required]=\"!!field.required\">\n\t\t\t\t\t@if (field.textPrefix) {\n\t\t\t\t\t\t<span matTextPrefix=\"\">{{ field.textPrefix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.textSuffix) {\n\t\t\t\t\t\t<span matTextSuffix=\"\">{{ field.textSuffix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconPrefix) {\n\t\t\t\t\t\t<mat-icon matPrefix>{{ field.iconPrefix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconSuffix) {\n\t\t\t\t\t\t<mat-icon matSuffix>{{ field.iconSuffix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('number') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<input matInput\n\t\t\t\t\t [formControlName]=\"field.id\"\n\t\t\t\t\t [autocomplete]=\"field.name || field.id\"\n\t\t\t\t\t [lang]=\"field.locale || ''\"\n\t\t\t\t\t [type]=\"field.type\"\n\t\t\t\t\t [attr.min]=\"field.min\"\n\t\t\t\t\t [attr.max]=\"field.max\"\n\t\t\t\t\t [required]=\"!!field.required\">\n\t\t\t\t\t@if (field.textPrefix) {\n\t\t\t\t\t\t<span matTextPrefix=\"\">{{ field.textPrefix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.textSuffix) {\n\t\t\t\t\t\t<span matTextSuffix=\"\">{{ field.textSuffix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconPrefix) {\n\t\t\t\t\t\t<mat-icon matPrefix>{{ field.iconPrefix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconSuffix) {\n\t\t\t\t\t\t<mat-icon matSuffix>{{ field.iconSuffix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('password') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<input matInput\n\t\t\t\t\t [formControlName]=\"field.id\"\n\t\t\t\t\t [type]=\"field.pwdhide ? 'password' : 'text'\"\n\t\t\t\t\t [autocomplete]=\"field.name\"\n\t\t\t\t\t [attr.minlength]=\"field.min\"\n\t\t\t\t\t [attr.maxlength]=\"field.max\"\n\t\t\t\t\t [required]=\"!!field.required\">\n\t\t\t\t\t<button mat-icon-button matSuffix class=\"form-field-button\" (click)=\"field.pwdhide = !field.pwdhide\" [attr.aria-label]=\"'Hide password'\"\n\t\t\t\t\t [attr.aria-pressed]=\"field.pwdhide\">\n\t\t\t\t\t\t<mat-icon>{{ field.pwdhide ? 'visibility_off' : 'visibility' }}</mat-icon>\n\t\t\t\t\t</button>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('select') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t@if (field.search === false) {\n\t\t\t\t\t\t<mat-select [formControlName]=\"field.id\" [multiple]=\"field.multiple\" [required]=\"!!field.required\" panelClass=\"selectPanel\">\n\t\t\t\t\t\t\t@for (x of field.list; track x.id) {\n\t\t\t\t\t\t\t\t<mat-option [value]=\"x.id\" [disabled]=\"x.disabled\">{{ x.name }}</mat-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<mat-select [formControlName]=\"field.id\" [multiple]=\"field.multiple\" [required]=\"!!field.required\" panelClass=\"selectPanel\">\n\t\t\t\t\t\t\t<mat-option>\n\t\t\t\t\t\t\t\t<ngx-mat-select-search [formControl]=\"xiriSelect.formControl\" xiriSelect #xiriSelect=\"xiriSelect\"\n\t\t\t\t\t\t\t\t [values]=\"field.list || []\" [searching]=\"xiriSelect.searching\"\n\t\t\t\t\t\t\t\t [serverSideSearch]=\"!!field.serverSideSearch\" [serverUrl]=\"field.url || ''\"\n\t\t\t\t\t\t\t\t [serverParams]=\"field.params || {}\"></ngx-mat-select-search>\n\t\t\t\t\t\t\t</mat-option>\n\t\t\t\t\t\t\t@for (x of xiriSelect.filter | async; track x.id) {\n\t\t\t\t\t\t\t\t<mat-option [value]=\"x.id\" [disabled]=\"x.disabled\">{{ x.name }}</mat-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('treeselect') {\n\t\t\t\t<div class=\"treeselect\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-treeselect [field]=\"field\" [formControlName]=\"field.id\"\n\t\t\t\t\t [class.error]=\"formGroup.get(field.id)?.touched && formGroup.get(field.id)?.invalid\"></xiri-treeselect>\n\t\t\t\t\t<div class=\"xhint\" aria-live=\"polite\" [class.error]=\"formGroup.get(field.id)?.touched && formGroup.get(field.id)?.invalid\">\n\t\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.touched && formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('date') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"date\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-date [field]=\"field\" [formControlName]=\"field.id\"></xiri-date>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('yearmonth') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"yearmonth\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-yearmonth [field]=\"field\" [formControlName]=\"field.id\"></xiri-yearmonth>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('daterange') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"daterange\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-date-range [field]=\"field\" [formControlName]=\"field.id\"></xiri-date-range>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('datetimerange') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"datetimerange\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-date-time-range [field]=\"field\" [formControlName]=\"field.id\"></xiri-date-time-range>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('bool') {\n\t\t\t\t<div class=\"bool\" [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-checkbox [formControlName]=\"field.id\">{{ field.name }}</mat-checkbox>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('radio') {\n\t\t\t\t<div class=\"radio\" [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<span class=\"radio-label\" [id]=\"field.id + '-label'\">{{ field.name }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<mat-radio-group\n\t\t\t\t\t\t[formControlName]=\"field.id\"\n\t\t\t\t\t\t[attr.aria-labelledby]=\"field.name ? field.id + '-label' : null\"\n\t\t\t\t\t>\n\t\t\t\t\t\t@for (x of field.list; track x.id) {\n\t\t\t\t\t\t\t<mat-radio-button [value]=\"x.id\" [disabled]=\"x.disabled\">{{ x.name }}</mat-radio-button>\n\t\t\t\t\t\t}\n\t\t\t\t\t</mat-radio-group>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('volume') {\n\t\t\t\t<div [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-volume [field]=\"field\" [formControlName]=\"field.id\"></xiri-volume>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('timelimit') {\n\t\t\t\t<div [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-timelimit matInput [formControlName]=\"field.id\" [required]=\"!!field.required\" [texts]=\"field.texts || {}\"></xiri-timelimit>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('textarea') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<textarea matInput [formControlName]=\"field.id\" [required]=\"!!field.required\" [rows]=\"field.rows || 5\"></textarea>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('file') {\n\t\t\t\t<div [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-file [field]=\"field\" [formControlName]=\"field.id\"></xiri-file>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('info') {\n\t\t\t\t<div class=\"info\" [class]=\"field.class\">{{ field.value }}</div>\n\t\t\t}\n\t\t\t@case ('header') {\n\t\t\t\t@if (field.collapsible) {\n\t\t\t\t\t<div class=\"header collapsible\" [class]=\"field.class\" role=\"button\" tabindex=\"0\"\n\t\t\t\t\t [attr.aria-expanded]=\"!isSectionCollapsed(field.id)\"\n\t\t\t\t\t (click)=\"toggleSection(field)\" (keydown.enter)=\"toggleSection(field)\" (keydown.space)=\"toggleSection(field); $event.preventDefault()\">\n\t\t\t\t\t\t<mat-icon class=\"collapse-icon\" [class.collapsed]=\"isSectionCollapsed(field.id)\">expand_more</mat-icon>\n\t\t\t\t\t\t{{ field.value }}\n\t\t\t\t\t</div>\n\t\t\t\t} @else {\n\t\t\t\t\t<div class=\"header\" [class]=\"field.class\">{{ field.value }}</div>\n\t\t\t\t}\n\t\t\t}\n\t\t\t@case ('divider') {\n\t\t\t\t<div class=\"divider\" [class]=\"field.class\">\n\t\t\t\t\t@if (field.value) {\n\t\t\t\t\t\t<span class=\"divider-text\">{{ field.value }}</span>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('html') {\n\t\t\t\t<div class=\"html\" [class]=\"field.class\" [innerHtml]=\"$any(field.value) | safeHtml\"></div>\n\t\t\t}\n\t\t\t@case ('question') {\n\t\t\t\t<div class=\"xcol question\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t<mat-icon [class]=\"field.iconColor || 'warn'\" inline=\"true\">{{ field.icon }}</mat-icon>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"right\">{{ field.value }}</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('waiting') {\n\t\t\t\t<div class=\"xcol waiting\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t@if (!field.done) {\n\t\t\t\t\t\t\t<mat-spinner diameter=\"40\"></mat-spinner>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (field.done) {\n\t\t\t\t\t\t\t<mat-icon inline=\"true\">done</mat-icon>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"right\">{{ field.value }}</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('chips') {\n\t\t\t\t<div [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-chips [field]=\"field\" [formControlName]=\"field.id\"></xiri-chips>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@default {\n\t\t\t\t<div>default: {{ field.type }}</div>\n\t\t\t}\n\t\t}\n\t\t}\n\t}\n</form>\n", styles: [":host{position:relative}.reloadbar{position:absolute;top:0;left:0;right:0;z-index:1}.dynamic-form{grid-row-gap:7px}.dynamic-form mat-form-field mat-icon{--mat-icon-color: var(--xiri-formfield-icon-color)}.dynamic-form.line{grid-row-gap:5px}.dynamic-form.small{grid-row-gap:2px}.dynamic-form textarea{white-space:pre}.dynamic-form .xhint{display:flex;min-height:20px;margin-top:4px}.dynamic-form .xhint mat-hint{font-size:var(--xiri-font-size-helper);padding:1px 16px 0}.dynamic-form .xhint mat-hint.mat-mdc-form-field-hint-end{flex:1;text-align:right}.dynamic-form .xhint mat-error{font-size:var(--xiri-font-size-helper);padding:1px 16px 0}.dynamic-form .xhint.error mat-hint{display:none}.dynamic-form .date{align-self:start;min-width:min(9.5rem,100%)}.dynamic-form .date.datetime{min-width:min(14.5rem,100%)}.dynamic-form .daterange{align-self:start;min-width:min(14.5rem,100%)}.dynamic-form .datetimerange{align-self:start;min-width:min(18.5rem,100%)}.dynamic-form .bool{display:flex;flex-direction:column}.dynamic-form .bool mat-hint{font-size:var(--xiri-font-size-helper);margin-top:-8px;padding-left:44px}.dynamic-form .radio{display:flex;flex-direction:column;gap:var(--xiri-spacing-xs)}.dynamic-form .radio .radio-label{font-size:var(--xiri-font-size-label)}.dynamic-form .radio mat-radio-group{display:flex;flex-wrap:wrap;gap:var(--xiri-spacing-xs) var(--xiri-spacing-md)}.dynamic-form .radio mat-hint{font-size:var(--xiri-font-size-helper)}.dynamic-form .info{padding-top:.8rem;padding-bottom:.4rem;color:var(--primary, #2892D9)}.dynamic-form .header{font-size:var(--xiri-font-size-title);padding-top:.8rem;padding-bottom:.4rem;color:var(--primary, #2892D9)}.dynamic-form .header.collapsible{cursor:pointer;display:flex;align-items:center;gap:.25rem;-webkit-user-select:none;user-select:none;border-radius:var(--xiri-radius-xs);padding:.5rem .25rem;margin:.25rem 0}.dynamic-form .header.collapsible:hover{background:color-mix(in srgb,var(--primary, #2892D9) 8%,transparent)}.dynamic-form .header.collapsible .collapse-icon{transition:transform var(--xiri-duration-fast) var(--xiri-easing-standard)}.dynamic-form .header.collapsible .collapse-icon.collapsed{transform:rotate(-90deg)}.dynamic-form .divider{width:100%;display:flex;align-items:center;padding:.5rem 0;margin:.25rem 0}.dynamic-form .divider:before,.dynamic-form .divider:after{content:\"\";flex:1;height:1px;background:var(--outline-variant, var(--mat-sys-outline-variant, rgba(0, 0, 0, .12)))}.dynamic-form .divider .divider-text{padding:0 1rem;font-size:var(--xiri-font-size-helper);color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, .6)));white-space:nowrap}.dynamic-form .question,.dynamic-form .waiting{display:flex}.dynamic-form .question .left,.dynamic-form .waiting .left{font-size:var(--xiri-font-size-display);padding-right:1rem}.dynamic-form .question{align-items:center}.dynamic-form .question .left mat-icon{height:auto;width:auto;line-height:1;overflow:visible}.dynamic-form .form-field-button{margin-left:12px;margin-right:12px}.mat-mdc-select-panel.selectPanel{max-height:max(50vh,256px)}[hidden]{display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: NgxMatSelectSearchModule }, { kind: "component", type: i2.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "directive", type: XiriSelectDirective, selector: "[xiriSelect]", inputs: ["predicate", "compare", "serverSideSearch", "serverUrl", "serverParams", "values"], exportAs: ["xiriSelect"] }, { kind: "component", type: XiriTreeselectComponent, selector: "xiri-treeselect", inputs: ["field", "value"] }, { kind: "component", type: XiriDateComponent, selector: "xiri-date", inputs: ["field", "value"] }, { kind: "component", type: XiriYearMonthComponent, selector: "xiri-yearmonth", inputs: ["field", "value"] }, { kind: "component", type: XiriDateRangeComponent, selector: "xiri-date-range", inputs: ["field", "value"] }, { kind: "component", type: XiriDateTimeRangeComponent, selector: "xiri-date-time-range", inputs: ["field", "value"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: XiriVolumeComponent, selector: "xiri-volume", inputs: ["field", "value"] }, { kind: "component", type: XiriTimelimitComponent, selector: "xiri-timelimit", inputs: ["placeholder", "required", "disabled", "value", "texts"] }, { kind: "component", type: XiriFileComponent, selector: "xiri-file", inputs: ["value", "field"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: XiriChipsComponent, selector: "xiri-chips", inputs: ["field"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SafehtmlPipe, name: "safeHtml" }] }); }
|
|
2707
3063
|
}
|
|
2708
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
3064
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriFormFieldsComponent, decorators: [{
|
|
2709
3065
|
type: Component,
|
|
2710
3066
|
args: [{ selector: 'xiri-form-fields', imports: [
|
|
2711
3067
|
FormsModule,
|
|
@@ -2735,11 +3091,110 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
2735
3091
|
XiriTimelimitComponent,
|
|
2736
3092
|
XiriFileComponent,
|
|
2737
3093
|
MatProgressSpinner,
|
|
3094
|
+
MatProgressBar,
|
|
2738
3095
|
AsyncPipe,
|
|
2739
3096
|
SafehtmlPipe,
|
|
2740
3097
|
XiriChipsComponent,
|
|
2741
|
-
], template: "<form class=\"xrow dynamic-form\" [formGroup]=\"formGroup\" [class]=\"display()\">\n\t@for (field of fields(); track field.id) {\n\t\t@if (isFieldVisible(field)) {\n\t\t@switch (field.type) {\n\t\t\t@case ('text') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<input matInput\n\t\t\t\t\t [formControlName]=\"field.id\"\n\t\t\t\t\t [type]=\"field.subtype || 'text'\"\n\t\t\t\t\t [autocomplete]=\"field.name\"\n\t\t\t\t\t [attr.minlength]=\"field.min\"\n\t\t\t\t\t [attr.maxlength]=\"field.max\"\n\t\t\t\t\t [required]=\"!!field.required\">\n\t\t\t\t\t@if (field.textPrefix) {\n\t\t\t\t\t\t<span matTextPrefix=\"\">{{ field.textPrefix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.textSuffix) {\n\t\t\t\t\t\t<span matTextSuffix=\"\">{{ field.textSuffix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconPrefix) {\n\t\t\t\t\t\t<mat-icon matPrefix>{{ field.iconPrefix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconSuffix) {\n\t\t\t\t\t\t<mat-icon matSuffix>{{ field.iconSuffix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('number') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<input matInput\n\t\t\t\t\t [formControlName]=\"field.id\"\n\t\t\t\t\t [autocomplete]=\"field.name || field.id\"\n\t\t\t\t\t [lang]=\"field.locale || ''\"\n\t\t\t\t\t [type]=\"field.type\"\n\t\t\t\t\t [attr.min]=\"field.min\"\n\t\t\t\t\t [attr.max]=\"field.max\"\n\t\t\t\t\t [required]=\"!!field.required\">\n\t\t\t\t\t@if (field.textPrefix) {\n\t\t\t\t\t\t<span matTextPrefix=\"\">{{ field.textPrefix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.textSuffix) {\n\t\t\t\t\t\t<span matTextSuffix=\"\">{{ field.textSuffix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconPrefix) {\n\t\t\t\t\t\t<mat-icon matPrefix>{{ field.iconPrefix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconSuffix) {\n\t\t\t\t\t\t<mat-icon matSuffix>{{ field.iconSuffix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('password') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<input matInput\n\t\t\t\t\t [formControlName]=\"field.id\"\n\t\t\t\t\t [type]=\"field.pwdhide ? 'password' : 'text'\"\n\t\t\t\t\t [autocomplete]=\"field.name\"\n\t\t\t\t\t [attr.minlength]=\"field.min\"\n\t\t\t\t\t [attr.maxlength]=\"field.max\"\n\t\t\t\t\t [required]=\"!!field.required\">\n\t\t\t\t\t<button mat-icon-button matSuffix class=\"form-field-button\" (click)=\"field.pwdhide = !field.pwdhide\" [attr.aria-label]=\"'Hide password'\"\n\t\t\t\t\t [attr.aria-pressed]=\"field.pwdhide\">\n\t\t\t\t\t\t<mat-icon>{{ field.pwdhide ? 'visibility_off' : 'visibility' }}</mat-icon>\n\t\t\t\t\t</button>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('select') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t@if (field.search === false) {\n\t\t\t\t\t\t<mat-select [formControlName]=\"field.id\" [multiple]=\"field.multiple\" [required]=\"!!field.required\" panelClass=\"selectPanel\">\n\t\t\t\t\t\t\t@for (x of field.list; track x.id) {\n\t\t\t\t\t\t\t\t<mat-option [value]=\"x.id\" [disabled]=\"x.disabled\">{{ x.name }}</mat-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<mat-select [formControlName]=\"field.id\" [multiple]=\"field.multiple\" [required]=\"!!field.required\" panelClass=\"selectPanel\">\n\t\t\t\t\t\t\t<mat-option>\n\t\t\t\t\t\t\t\t<ngx-mat-select-search [formControl]=\"xiriSelect.formControl\" xiriSelect #xiriSelect=\"xiriSelect\"\n\t\t\t\t\t\t\t\t [values]=\"field.list || []\" [searching]=\"xiriSelect.searching\"\n\t\t\t\t\t\t\t\t [serverSideSearch]=\"!!field.serverSideSearch\" [serverUrl]=\"field.url || ''\"\n\t\t\t\t\t\t\t\t [serverParams]=\"field.params || {}\"></ngx-mat-select-search>\n\t\t\t\t\t\t\t</mat-option>\n\t\t\t\t\t\t\t@for (x of xiriSelect.filter | async; track x.id) {\n\t\t\t\t\t\t\t\t<mat-option [value]=\"x.id\" [disabled]=\"x.disabled\">{{ x.name }}</mat-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('treeselect') {\n\t\t\t\t<div class=\"treeselect\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-treeselect [field]=\"field\" [formControlName]=\"field.id\"\n\t\t\t\t\t [class.error]=\"formGroup.get(field.id)?.touched && formGroup.get(field.id)?.invalid\"></xiri-treeselect>\n\t\t\t\t\t<div class=\"xhint\" aria-live=\"polite\" [class.error]=\"formGroup.get(field.id)?.touched && formGroup.get(field.id)?.invalid\">\n\t\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.touched && formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('date') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"date\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-date [field]=\"field\" [formControlName]=\"field.id\"></xiri-date>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('yearmonth') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"yearmonth\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-yearmonth [field]=\"field\" [formControlName]=\"field.id\"></xiri-yearmonth>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('daterange') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"daterange\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-date-range [field]=\"field\" [formControlName]=\"field.id\"></xiri-date-range>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('datetimerange') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"datetimerange\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-date-time-range [field]=\"field\" [formControlName]=\"field.id\"></xiri-date-time-range>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('bool') {\n\t\t\t\t<div class=\"bool\" [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-checkbox [formControlName]=\"field.id\">{{ field.name }}</mat-checkbox>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('radio') {\n\t\t\t\t<div class=\"radio\" [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<span class=\"radio-label\" [id]=\"field.id + '-label'\">{{ field.name }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<mat-radio-group\n\t\t\t\t\t\t[formControlName]=\"field.id\"\n\t\t\t\t\t\t[attr.aria-labelledby]=\"field.name ? field.id + '-label' : null\"\n\t\t\t\t\t>\n\t\t\t\t\t\t@for (x of field.list; track x.id) {\n\t\t\t\t\t\t\t<mat-radio-button [value]=\"x.id\" [disabled]=\"x.disabled\">{{ x.name }}</mat-radio-button>\n\t\t\t\t\t\t}\n\t\t\t\t\t</mat-radio-group>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('volume') {\n\t\t\t\t<div [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-volume [field]=\"field\" [formControlName]=\"field.id\"></xiri-volume>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('timelimit') {\n\t\t\t\t<div [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-timelimit matInput [formControlName]=\"field.id\" [required]=\"!!field.required\" [texts]=\"field.texts || {}\"></xiri-timelimit>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('textarea') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<textarea matInput [formControlName]=\"field.id\" [required]=\"!!field.required\" [rows]=\"field.rows || 5\"></textarea>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('file') {\n\t\t\t\t<div [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-file [field]=\"field\" [formControlName]=\"field.id\"></xiri-file>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('info') {\n\t\t\t\t<div class=\"info\" [class]=\"field.class\">{{ field.value }}</div>\n\t\t\t}\n\t\t\t@case ('header') {\n\t\t\t\t@if (field.collapsible) {\n\t\t\t\t\t<div class=\"header collapsible\" [class]=\"field.class\" role=\"button\" tabindex=\"0\"\n\t\t\t\t\t [attr.aria-expanded]=\"!isSectionCollapsed(field.id)\"\n\t\t\t\t\t (click)=\"toggleSection(field)\" (keydown.enter)=\"toggleSection(field)\" (keydown.space)=\"toggleSection(field); $event.preventDefault()\">\n\t\t\t\t\t\t<mat-icon class=\"collapse-icon\" [class.collapsed]=\"isSectionCollapsed(field.id)\">expand_more</mat-icon>\n\t\t\t\t\t\t{{ field.value }}\n\t\t\t\t\t</div>\n\t\t\t\t} @else {\n\t\t\t\t\t<div class=\"header\" [class]=\"field.class\">{{ field.value }}</div>\n\t\t\t\t}\n\t\t\t}\n\t\t\t@case ('divider') {\n\t\t\t\t<div class=\"divider\" [class]=\"field.class\">\n\t\t\t\t\t@if (field.value) {\n\t\t\t\t\t\t<span class=\"divider-text\">{{ field.value }}</span>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('html') {\n\t\t\t\t<div class=\"html\" [class]=\"field.class\" [innerHtml]=\"$any(field.value) | safeHtml\"></div>\n\t\t\t}\n\t\t\t@case ('question') {\n\t\t\t\t<div class=\"xcol question\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t<mat-icon [class]=\"field.iconColor || 'warn'\" inline=\"true\">{{ field.icon }}</mat-icon>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"right\">{{ field.value }}</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('waiting') {\n\t\t\t\t<div class=\"xcol waiting\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t@if (!field.done) {\n\t\t\t\t\t\t\t<mat-spinner diameter=\"40\"></mat-spinner>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (field.done) {\n\t\t\t\t\t\t\t<mat-icon inline=\"true\">done</mat-icon>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"right\">{{ field.value }}</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('chips') {\n\t\t\t\t<div [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-chips [field]=\"field\" [formControlName]=\"field.id\"></xiri-chips>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@default {\n\t\t\t\t<div>default: {{ field.type }}</div>\n\t\t\t}\n\t\t}\n\t\t}\n\t}\n</form>\n", styles: [".dynamic-form{grid-row-gap:7px}.dynamic-form mat-form-field mat-icon{--mat-icon-color: var(--xiri-formfield-icon-color)}.dynamic-form.line{grid-row-gap:5px}.dynamic-form.small{grid-row-gap:2px}.dynamic-form textarea{white-space:pre}.dynamic-form .xhint{display:flex;min-height:20px;margin-top:4px}.dynamic-form .xhint mat-hint{font-size:var(--xiri-font-size-helper);padding:1px 16px 0}.dynamic-form .xhint mat-hint.mat-mdc-form-field-hint-end{flex:1;text-align:right}.dynamic-form .xhint mat-error{font-size:var(--xiri-font-size-helper);padding:1px 16px 0}.dynamic-form .xhint.error mat-hint{display:none}.dynamic-form .date{align-self:start;min-width:min(9.5rem,100%)}.dynamic-form .date.datetime{min-width:min(14.5rem,100%)}.dynamic-form .daterange{align-self:start;min-width:min(14.5rem,100%)}.dynamic-form .datetimerange{align-self:start;min-width:min(18.5rem,100%)}.dynamic-form .bool{display:flex;flex-direction:column}.dynamic-form .bool mat-hint{font-size:var(--xiri-font-size-helper);margin-top:-8px;padding-left:44px}.dynamic-form .radio{display:flex;flex-direction:column;gap:var(--xiri-spacing-xs)}.dynamic-form .radio .radio-label{font-size:var(--xiri-font-size-label)}.dynamic-form .radio mat-radio-group{display:flex;flex-wrap:wrap;gap:var(--xiri-spacing-xs) var(--xiri-spacing-md)}.dynamic-form .radio mat-hint{font-size:var(--xiri-font-size-helper)}.dynamic-form .info{padding-top:.8rem;padding-bottom:.4rem;color:var(--primary, #2892D9)}.dynamic-form .header{font-size:var(--xiri-font-size-title);padding-top:.8rem;padding-bottom:.4rem;color:var(--primary, #2892D9)}.dynamic-form .header.collapsible{cursor:pointer;display:flex;align-items:center;gap:.25rem;-webkit-user-select:none;user-select:none;border-radius:var(--xiri-radius-xs);padding:.5rem .25rem;margin:.25rem 0}.dynamic-form .header.collapsible:hover{background:color-mix(in srgb,var(--primary, #2892D9) 8%,transparent)}.dynamic-form .header.collapsible .collapse-icon{transition:transform var(--xiri-duration-fast) var(--xiri-easing-standard)}.dynamic-form .header.collapsible .collapse-icon.collapsed{transform:rotate(-90deg)}.dynamic-form .divider{width:100%;display:flex;align-items:center;padding:.5rem 0;margin:.25rem 0}.dynamic-form .divider:before,.dynamic-form .divider:after{content:\"\";flex:1;height:1px;background:var(--outline-variant, var(--mat-sys-outline-variant, rgba(0, 0, 0, .12)))}.dynamic-form .divider .divider-text{padding:0 1rem;font-size:var(--xiri-font-size-helper);color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, .6)));white-space:nowrap}.dynamic-form .question,.dynamic-form .waiting{display:flex}.dynamic-form .question .left,.dynamic-form .waiting .left{font-size:var(--xiri-font-size-display);padding-right:1rem}.dynamic-form .question{align-items:center}.dynamic-form .question .left mat-icon{height:auto;width:auto;line-height:1;overflow:visible}.dynamic-form .form-field-button{margin-left:12px;margin-right:12px}.mat-mdc-select-panel.selectPanel{max-height:max(50vh,256px)}[hidden]{display:none!important}\n"] }]
|
|
3098
|
+
], template: "@if (reloading()) {\n\t<mat-progress-bar class=\"reloadbar\" mode=\"indeterminate\"></mat-progress-bar>\n}\n<form class=\"xrow dynamic-form\" [formGroup]=\"formGroup\" [class]=\"display()\">\n\t@for (field of displayFields(); track field.id) {\n\t\t@if (isFieldVisible(field)) {\n\t\t@switch (field.type) {\n\t\t\t@case ('text') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<input matInput\n\t\t\t\t\t [formControlName]=\"field.id\"\n\t\t\t\t\t [type]=\"field.subtype || 'text'\"\n\t\t\t\t\t [autocomplete]=\"field.name\"\n\t\t\t\t\t [attr.minlength]=\"field.min\"\n\t\t\t\t\t [attr.maxlength]=\"field.max\"\n\t\t\t\t\t [required]=\"!!field.required\">\n\t\t\t\t\t@if (field.textPrefix) {\n\t\t\t\t\t\t<span matTextPrefix=\"\">{{ field.textPrefix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.textSuffix) {\n\t\t\t\t\t\t<span matTextSuffix=\"\">{{ field.textSuffix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconPrefix) {\n\t\t\t\t\t\t<mat-icon matPrefix>{{ field.iconPrefix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconSuffix) {\n\t\t\t\t\t\t<mat-icon matSuffix>{{ field.iconSuffix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('number') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<input matInput\n\t\t\t\t\t [formControlName]=\"field.id\"\n\t\t\t\t\t [autocomplete]=\"field.name || field.id\"\n\t\t\t\t\t [lang]=\"field.locale || ''\"\n\t\t\t\t\t [type]=\"field.type\"\n\t\t\t\t\t [attr.min]=\"field.min\"\n\t\t\t\t\t [attr.max]=\"field.max\"\n\t\t\t\t\t [required]=\"!!field.required\">\n\t\t\t\t\t@if (field.textPrefix) {\n\t\t\t\t\t\t<span matTextPrefix=\"\">{{ field.textPrefix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.textSuffix) {\n\t\t\t\t\t\t<span matTextSuffix=\"\">{{ field.textSuffix }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconPrefix) {\n\t\t\t\t\t\t<mat-icon matPrefix>{{ field.iconPrefix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.iconSuffix) {\n\t\t\t\t\t\t<mat-icon matSuffix>{{ field.iconSuffix }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('password') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<input matInput\n\t\t\t\t\t [formControlName]=\"field.id\"\n\t\t\t\t\t [type]=\"field.pwdhide ? 'password' : 'text'\"\n\t\t\t\t\t [autocomplete]=\"field.name\"\n\t\t\t\t\t [attr.minlength]=\"field.min\"\n\t\t\t\t\t [attr.maxlength]=\"field.max\"\n\t\t\t\t\t [required]=\"!!field.required\">\n\t\t\t\t\t<button mat-icon-button matSuffix class=\"form-field-button\" (click)=\"field.pwdhide = !field.pwdhide\" [attr.aria-label]=\"'Hide password'\"\n\t\t\t\t\t [attr.aria-pressed]=\"field.pwdhide\">\n\t\t\t\t\t\t<mat-icon>{{ field.pwdhide ? 'visibility_off' : 'visibility' }}</mat-icon>\n\t\t\t\t\t</button>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('select') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" floatLabel=\"auto\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t@if (field.search === false) {\n\t\t\t\t\t\t<mat-select [formControlName]=\"field.id\" [multiple]=\"field.multiple\" [required]=\"!!field.required\" panelClass=\"selectPanel\">\n\t\t\t\t\t\t\t@for (x of field.list; track x.id) {\n\t\t\t\t\t\t\t\t<mat-option [value]=\"x.id\" [disabled]=\"x.disabled\">{{ x.name }}</mat-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<mat-select [formControlName]=\"field.id\" [multiple]=\"field.multiple\" [required]=\"!!field.required\" panelClass=\"selectPanel\">\n\t\t\t\t\t\t\t<mat-option>\n\t\t\t\t\t\t\t\t<ngx-mat-select-search [formControl]=\"xiriSelect.formControl\" xiriSelect #xiriSelect=\"xiriSelect\"\n\t\t\t\t\t\t\t\t [values]=\"field.list || []\" [searching]=\"xiriSelect.searching\"\n\t\t\t\t\t\t\t\t [serverSideSearch]=\"!!field.serverSideSearch\" [serverUrl]=\"field.url || ''\"\n\t\t\t\t\t\t\t\t [serverParams]=\"field.params || {}\"></ngx-mat-select-search>\n\t\t\t\t\t\t\t</mat-option>\n\t\t\t\t\t\t\t@for (x of xiriSelect.filter | async; track x.id) {\n\t\t\t\t\t\t\t\t<mat-option [value]=\"x.id\" [disabled]=\"x.disabled\">{{ x.name }}</mat-option>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('treeselect') {\n\t\t\t\t<div class=\"treeselect\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-treeselect [field]=\"field\" [formControlName]=\"field.id\"\n\t\t\t\t\t [class.error]=\"formGroup.get(field.id)?.touched && formGroup.get(field.id)?.invalid\"></xiri-treeselect>\n\t\t\t\t\t<div class=\"xhint\" aria-live=\"polite\" [class.error]=\"formGroup.get(field.id)?.touched && formGroup.get(field.id)?.invalid\">\n\t\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.touched && formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('date') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"date\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-date [field]=\"field\" [formControlName]=\"field.id\"></xiri-date>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('yearmonth') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"yearmonth\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-yearmonth [field]=\"field\" [formControlName]=\"field.id\"></xiri-yearmonth>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('daterange') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"daterange\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-date-range [field]=\"field\" [formControlName]=\"field.id\"></xiri-date-range>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('datetimerange') {\n\t\t\t\t<mat-form-field [formGroup]=\"formGroup\" class=\"datetimerange\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t<xiri-date-time-range [field]=\"field\" [formControlName]=\"field.id\"></xiri-date-time-range>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('bool') {\n\t\t\t\t<div class=\"bool\" [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t<mat-checkbox [formControlName]=\"field.id\">{{ field.name }}</mat-checkbox>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('radio') {\n\t\t\t\t<div class=\"radio\" [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<span class=\"radio-label\" [id]=\"field.id + '-label'\">{{ field.name }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<mat-radio-group\n\t\t\t\t\t\t[formControlName]=\"field.id\"\n\t\t\t\t\t\t[attr.aria-labelledby]=\"field.name ? field.id + '-label' : null\"\n\t\t\t\t\t>\n\t\t\t\t\t\t@for (x of field.list; track x.id) {\n\t\t\t\t\t\t\t<mat-radio-button [value]=\"x.id\" [disabled]=\"x.disabled\">{{ x.name }}</mat-radio-button>\n\t\t\t\t\t\t}\n\t\t\t\t\t</mat-radio-group>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('volume') {\n\t\t\t\t<div [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-volume [field]=\"field\" [formControlName]=\"field.id\"></xiri-volume>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('timelimit') {\n\t\t\t\t<div [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-timelimit matInput [formControlName]=\"field.id\" [required]=\"!!field.required\" [texts]=\"field.texts || {}\"></xiri-timelimit>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('textarea') {\n\t\t\t\t<mat-form-field [class]=\"field.class\" [formGroup]=\"formGroup\" [hidden]=\"field.hide\">\n\t\t\t\t\t@if (field.name) {\n\t\t\t\t\t\t<mat-label>{{ field.name }}</mat-label>\n\t\t\t\t\t}\n\t\t\t\t\t<textarea matInput [formControlName]=\"field.id\" [required]=\"!!field.required\" [rows]=\"field.rows || 5\"></textarea>\n\t\t\t\t\t@if (field.hint) {\n\t\t\t\t\t\t<mat-hint>{{ field.hint }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@if (field.max) {\n\t\t\t\t\t\t<mat-hint align=\"end\">{{ formGroup.get(field.id)?.value?.length || 0 }} / {{ field.max }}</mat-hint>\n\t\t\t\t\t}\n\t\t\t\t\t@for (vali of field.validations; track vali.id) {\n\t\t\t\t\t\t<ng-container ngProjectAs=\"mat-error\">\n\t\t\t\t\t\t\t@if (formGroup.get(field.id)?.hasError(vali.id)) {\n\t\t\t\t\t\t\t\t<mat-error>{{ vali.message }}</mat-error>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t</mat-form-field>\n\t\t\t}\n\t\t\t@case ('file') {\n\t\t\t\t<div [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-file [field]=\"field\" [formControlName]=\"field.id\"></xiri-file>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('info') {\n\t\t\t\t<div class=\"info\" [class]=\"field.class\">{{ field.value }}</div>\n\t\t\t}\n\t\t\t@case ('header') {\n\t\t\t\t@if (field.collapsible) {\n\t\t\t\t\t<div class=\"header collapsible\" [class]=\"field.class\" role=\"button\" tabindex=\"0\"\n\t\t\t\t\t [attr.aria-expanded]=\"!isSectionCollapsed(field.id)\"\n\t\t\t\t\t (click)=\"toggleSection(field)\" (keydown.enter)=\"toggleSection(field)\" (keydown.space)=\"toggleSection(field); $event.preventDefault()\">\n\t\t\t\t\t\t<mat-icon class=\"collapse-icon\" [class.collapsed]=\"isSectionCollapsed(field.id)\">expand_more</mat-icon>\n\t\t\t\t\t\t{{ field.value }}\n\t\t\t\t\t</div>\n\t\t\t\t} @else {\n\t\t\t\t\t<div class=\"header\" [class]=\"field.class\">{{ field.value }}</div>\n\t\t\t\t}\n\t\t\t}\n\t\t\t@case ('divider') {\n\t\t\t\t<div class=\"divider\" [class]=\"field.class\">\n\t\t\t\t\t@if (field.value) {\n\t\t\t\t\t\t<span class=\"divider-text\">{{ field.value }}</span>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('html') {\n\t\t\t\t<div class=\"html\" [class]=\"field.class\" [innerHtml]=\"$any(field.value) | safeHtml\"></div>\n\t\t\t}\n\t\t\t@case ('question') {\n\t\t\t\t<div class=\"xcol question\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t<mat-icon [class]=\"field.iconColor || 'warn'\" inline=\"true\">{{ field.icon }}</mat-icon>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"right\">{{ field.value }}</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('waiting') {\n\t\t\t\t<div class=\"xcol waiting\" [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<div class=\"left\">\n\t\t\t\t\t\t@if (!field.done) {\n\t\t\t\t\t\t\t<mat-spinner diameter=\"40\"></mat-spinner>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (field.done) {\n\t\t\t\t\t\t\t<mat-icon inline=\"true\">done</mat-icon>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"right\">{{ field.value }}</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case ('chips') {\n\t\t\t\t<div [class]=\"field.class\" [hidden]=\"field.hide\">\n\t\t\t\t\t<xiri-chips [field]=\"field\" [formControlName]=\"field.id\"></xiri-chips>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@default {\n\t\t\t\t<div>default: {{ field.type }}</div>\n\t\t\t}\n\t\t}\n\t\t}\n\t}\n</form>\n", styles: [":host{position:relative}.reloadbar{position:absolute;top:0;left:0;right:0;z-index:1}.dynamic-form{grid-row-gap:7px}.dynamic-form mat-form-field mat-icon{--mat-icon-color: var(--xiri-formfield-icon-color)}.dynamic-form.line{grid-row-gap:5px}.dynamic-form.small{grid-row-gap:2px}.dynamic-form textarea{white-space:pre}.dynamic-form .xhint{display:flex;min-height:20px;margin-top:4px}.dynamic-form .xhint mat-hint{font-size:var(--xiri-font-size-helper);padding:1px 16px 0}.dynamic-form .xhint mat-hint.mat-mdc-form-field-hint-end{flex:1;text-align:right}.dynamic-form .xhint mat-error{font-size:var(--xiri-font-size-helper);padding:1px 16px 0}.dynamic-form .xhint.error mat-hint{display:none}.dynamic-form .date{align-self:start;min-width:min(9.5rem,100%)}.dynamic-form .date.datetime{min-width:min(14.5rem,100%)}.dynamic-form .daterange{align-self:start;min-width:min(14.5rem,100%)}.dynamic-form .datetimerange{align-self:start;min-width:min(18.5rem,100%)}.dynamic-form .bool{display:flex;flex-direction:column}.dynamic-form .bool mat-hint{font-size:var(--xiri-font-size-helper);margin-top:-8px;padding-left:44px}.dynamic-form .radio{display:flex;flex-direction:column;gap:var(--xiri-spacing-xs)}.dynamic-form .radio .radio-label{font-size:var(--xiri-font-size-label)}.dynamic-form .radio mat-radio-group{display:flex;flex-wrap:wrap;gap:var(--xiri-spacing-xs) var(--xiri-spacing-md)}.dynamic-form .radio mat-hint{font-size:var(--xiri-font-size-helper)}.dynamic-form .info{padding-top:.8rem;padding-bottom:.4rem;color:var(--primary, #2892D9)}.dynamic-form .header{font-size:var(--xiri-font-size-title);padding-top:.8rem;padding-bottom:.4rem;color:var(--primary, #2892D9)}.dynamic-form .header.collapsible{cursor:pointer;display:flex;align-items:center;gap:.25rem;-webkit-user-select:none;user-select:none;border-radius:var(--xiri-radius-xs);padding:.5rem .25rem;margin:.25rem 0}.dynamic-form .header.collapsible:hover{background:color-mix(in srgb,var(--primary, #2892D9) 8%,transparent)}.dynamic-form .header.collapsible .collapse-icon{transition:transform var(--xiri-duration-fast) var(--xiri-easing-standard)}.dynamic-form .header.collapsible .collapse-icon.collapsed{transform:rotate(-90deg)}.dynamic-form .divider{width:100%;display:flex;align-items:center;padding:.5rem 0;margin:.25rem 0}.dynamic-form .divider:before,.dynamic-form .divider:after{content:\"\";flex:1;height:1px;background:var(--outline-variant, var(--mat-sys-outline-variant, rgba(0, 0, 0, .12)))}.dynamic-form .divider .divider-text{padding:0 1rem;font-size:var(--xiri-font-size-helper);color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, .6)));white-space:nowrap}.dynamic-form .question,.dynamic-form .waiting{display:flex}.dynamic-form .question .left,.dynamic-form .waiting .left{font-size:var(--xiri-font-size-display);padding-right:1rem}.dynamic-form .question{align-items:center}.dynamic-form .question .left mat-icon{height:auto;width:auto;line-height:1;overflow:visible}.dynamic-form .form-field-button{margin-left:12px;margin-right:12px}.mat-mdc-select-panel.selectPanel{max-height:max(50vh,256px)}[hidden]{display:none!important}\n"] }]
|
|
2742
3099
|
}], ctorParameters: () => [], propDecorators: { form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: false }] }], display: [{ type: i0.Input, args: [{ isSignal: true, alias: "display", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], formChange: [{ type: i0.Output, args: ["formChange"] }], check: [{ type: i0.Input, args: [{ isSignal: true, alias: "check", required: false }] }] } });
|
|
3100
|
+
// Was ein Reload-Patch am Feld ändern darf, jeweils mit Typprüfung. Der Server ist eine
|
|
3101
|
+
// Trust-Boundary: eine kaputte `list` oder ein `min: "3"` dürfen weder das Pruning noch den
|
|
3102
|
+
// Validator-Aufbau verfälschen.
|
|
3103
|
+
//
|
|
3104
|
+
// Bewusst nicht patchbar: `id`, `type`, `subtype` (createControl normalisiert die einmalig, ein
|
|
3105
|
+
// Roh-Wert vom Server würde das zerlegen), `value` (den Wert behält der Client, siehe pruneValue),
|
|
3106
|
+
// `control`, `showWhen` und `url` (`serverSideSearch` und der Suchfluss der Select-Directive
|
|
3107
|
+
// werden nur beim Aufbau abgeleitet, eine Änderung käme nie an).
|
|
3108
|
+
const PATCH_GUARDS = {
|
|
3109
|
+
list: isOptionList,
|
|
3110
|
+
name: isString,
|
|
3111
|
+
// Go exportiert einen leeren Hint als null - sonst liesse er sich nie wieder abräumen.
|
|
3112
|
+
hint: isStringOrNull,
|
|
3113
|
+
class: isString,
|
|
3114
|
+
required: isBoolean,
|
|
3115
|
+
disabled: isBoolean,
|
|
3116
|
+
hide: isBoolean,
|
|
3117
|
+
search: isBoolean,
|
|
3118
|
+
min: isNumber,
|
|
3119
|
+
max: isNumber,
|
|
3120
|
+
params: isPlainObject,
|
|
3121
|
+
};
|
|
3122
|
+
function isString(value) {
|
|
3123
|
+
return typeof value === 'string';
|
|
3124
|
+
}
|
|
3125
|
+
function isStringOrNull(value) {
|
|
3126
|
+
return value === null || typeof value === 'string';
|
|
3127
|
+
}
|
|
3128
|
+
function isBoolean(value) {
|
|
3129
|
+
return typeof value === 'boolean';
|
|
3130
|
+
}
|
|
3131
|
+
function isNumber(value) {
|
|
3132
|
+
return typeof value === 'number' && Number.isFinite(value);
|
|
3133
|
+
}
|
|
3134
|
+
function isPlainObject(value) {
|
|
3135
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
3136
|
+
}
|
|
3137
|
+
// Rekursiv, inklusive children: eine Option mit einem children-Feld, das kein Array ist, würde
|
|
3138
|
+
// sonst erst später beim Sammeln der IDs oder beim Aufbau des Baums knallen.
|
|
3139
|
+
function isOptionList(value) {
|
|
3140
|
+
return Array.isArray(value) && value.every(isOption);
|
|
3141
|
+
}
|
|
3142
|
+
function isOption(value) {
|
|
3143
|
+
if (!isPlainObject(value))
|
|
3144
|
+
return false;
|
|
3145
|
+
const option = value;
|
|
3146
|
+
if (typeof option.id !== 'string' && typeof option.id !== 'number')
|
|
3147
|
+
return false;
|
|
3148
|
+
return option.children === undefined || option.children === null || isOptionList(option.children);
|
|
3149
|
+
}
|
|
3150
|
+
// Schreibt die erlaubten Properties ins Feld und meldet, welche davon wirklich etwas geändert
|
|
3151
|
+
// haben. Ein Reload liefert oft dasselbe zurück - z.B. weil ein anderer Trigger sich geändert
|
|
3152
|
+
// hat. Unveränderte Properties zu überspringen erspart den Klon (der einen Treeselect neu
|
|
3153
|
+
// aufbauen und bei gesetzter url erneut laden würde), den Validator-Neubau und den formChange.
|
|
3154
|
+
//
|
|
3155
|
+
// Verglichen wird bevorzugt mit dem zuletzt angewendeten Patch, nicht mit dem Feld: der
|
|
3156
|
+
// Treeselect hängt beim Aufbau parent-Referenzen und state an die Optionsknoten, wodurch die
|
|
3157
|
+
// Liste am Feld verschachtelt zyklisch wird und ohnehin nie mehr gleich aussieht.
|
|
3158
|
+
function applyPatchProperties(field, entry, previous) {
|
|
3159
|
+
const applied = [];
|
|
3160
|
+
const target = field;
|
|
3161
|
+
for (const key of Object.keys(PATCH_GUARDS)) {
|
|
3162
|
+
if (!(key in entry))
|
|
3163
|
+
continue;
|
|
3164
|
+
const value = entry[key];
|
|
3165
|
+
if (!PATCH_GUARDS[key](value))
|
|
3166
|
+
continue;
|
|
3167
|
+
const before = previous && key in previous ? previous[key] : target[key];
|
|
3168
|
+
if (sameValue(before, value))
|
|
3169
|
+
continue;
|
|
3170
|
+
target[key] = value === null ? undefined : value;
|
|
3171
|
+
applied.push(key);
|
|
3172
|
+
}
|
|
3173
|
+
return applied;
|
|
3174
|
+
}
|
|
3175
|
+
function sameValue(a, b) {
|
|
3176
|
+
if (a === b)
|
|
3177
|
+
return true;
|
|
3178
|
+
if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null)
|
|
3179
|
+
return false;
|
|
3180
|
+
try {
|
|
3181
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
3182
|
+
}
|
|
3183
|
+
catch {
|
|
3184
|
+
// Zyklisch (siehe oben) - dann lieber anwenden als fälschlich überspringen.
|
|
3185
|
+
return false;
|
|
3186
|
+
}
|
|
3187
|
+
}
|
|
3188
|
+
// Option-IDs inklusive verschachtelter children - eine flache Sammlung würde jede ausgewählte
|
|
3189
|
+
// Leaf-ID eines Treeselects verwerfen.
|
|
3190
|
+
function collectOptionIds(list, into = new Set()) {
|
|
3191
|
+
for (const option of list) {
|
|
3192
|
+
into.add(option.id);
|
|
3193
|
+
if (option.children?.length)
|
|
3194
|
+
collectOptionIds(option.children, into);
|
|
3195
|
+
}
|
|
3196
|
+
return into;
|
|
3197
|
+
}
|
|
2743
3198
|
function fillListFromArray(field) {
|
|
2744
3199
|
if (field.list === undefined && field.array !== undefined) {
|
|
2745
3200
|
const list = [];
|
|
@@ -2827,10 +3282,10 @@ class XiriRawTableComponent {
|
|
|
2827
3282
|
this.columnsToDisplay.push(column.name);
|
|
2828
3283
|
}
|
|
2829
3284
|
}
|
|
2830
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
2831
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
3285
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriRawTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3286
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriRawTableComponent, isStandalone: true, selector: "xiri-raw-table", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"table-out\" [class]=\"tableClass()\">\n\t<table mat-table [dataSource]=\"dataSource\">\n\t\t@for (column of displayedColumns; track column) {\n\t\t\t<ng-container [matColumnDef]=\"column.name\">\n\t\t\t\t<th mat-header-cell *matHeaderCellDef [class]=\"column.display\"> {{ column.header }}</th>\n\t\t\t\t@switch (column.format) {\n\t\t\t\t\t@case ('icon') {\n\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t@if ($any(column.icons)[ $any(row)[ column.id ] ]) {\n\t\t\t\t\t\t\t\t<mat-icon [class]=\"$any(column.icons)[ $any(row)[ column.id ] ][ 'color' ] || 'primary'\"\n\t\t\t\t\t\t\t\t [matTooltip]=\"$any(column.icons)[ $any(row)[ column.id ] ][ 'hint' ]\"\n\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!$any(column.icons)[ $any(row)[ column.id ] ][ 'hint' ]\">{{ $any(column.icons)[$any(row)[column.id]]['icon'] }}\n\t\t\t\t\t\t\t\t</mat-icon>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</td>\n\t\t\t\t\t}\n\t\t\t\t\t@case ('html') {\n\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [innerHtml]=\"$any(row)[column.id] | safeHtml\" [class]=\"column.display\"></td>\n\t\t\t\t\t}\n\t\t\t\t\t@case ('link') {\n\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t@if ($any(row)[column.id + 'Link']) {\n\t\t\t\t\t\t\t\t@let cellUrl = $any(row)[column.id + 'Link'] | xiriUrl;\n\t\t\t\t\t\t\t\t<a [routerLink]=\"cellUrl?.path\" [queryParams]=\"cellUrl?.queryParams\" class=\"tablelink\">{{ $any(row)[column.id] }}</a>\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t<span>{{ $any(row)[column.id] }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</td>\n\t\t\t\t\t}\n\t\t\t\t\t@case ('text2') {\n\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t<div>{{ $any(row)[column.id][0] }}</div>\n\t\t\t\t\t\t\t<div>{{ $any(row)[column.id][1] }}</div>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t}\n\t\t\t\t\t@case ('textn') {\n\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t@for (line of $any(row)[column.id]; track $index) {\n\t\t\t\t\t\t\t\t<div>{{ line }}</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</td>\n\t\t\t\t\t}\n\t\t\t\t\t@case ('linkrow') {\n\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t@if ($any(row)[column.id + 'Link']) {\n\t\t\t\t\t\t\t\t@let rowUrl = $any(row)[column.id + 'Link'] | xiriUrl;\n\t\t\t\t\t\t\t\t<a [routerLink]=\"rowUrl?.path\" [queryParams]=\"rowUrl?.queryParams\">\n\t\t\t\t\t\t\t\t\t<div class=\"linkrow\">\n\t\t\t\t\t\t\t\t\t\t@if ($any(row)['icon']) {\n\t\t\t\t\t\t\t\t\t\t\t@if ($any(row)['iconSet']) {\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"$any(row)['iconColor'] || 'primary'\" [fontSet]=\"$any(row)['iconSet']\">{{ $any(row)['icon'] }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"$any(row)['iconColor'] || 'primary'\">{{ $any(row)['icon'] }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t<span class=\"text\" [class.hasIcon]=\"$any(row)['icon']\">{{ $any(row)[column.id] }}</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</td>\n\t\t\t\t\t}\n\t\t\t\t\t@case ('number') {\n\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t{{ column.textPrefix }}{{ $any(row)[column.id][0] }}{{ column.textSuffix }}\n\t\t\t\t\t\t</td>\n\t\t\t\t\t}\n\t\t\t\t\t@case ('chips') {\n\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t<div class=\"xiri-chips-display\">\n\t\t\t\t\t\t\t\t@for (chip of $any(row)[column.id]; track chip.label) {\n\t\t\t\t\t\t\t\t\t<span class=\"xiri-chip-display\" [class]=\"chip.color || ''\">{{ chip.label }}</span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t}\n\t\t\t\t\t@default {\n\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">{{ $any(row)[column.id] }}</td>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</ng-container>\n\t\t}\n\n\t\t@if (showHeader()) {\n\t\t\t<tr mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></tr>\n\t\t}\n\t\t<tr mat-row *matRowDef=\"let row; columns: columnsToDisplay;\"></tr>\n\t</table>\n</div>", styles: [".table-out{overflow-x:auto}.table-out.dense-1{--mat-table-header-container-height: 52px;--mat-table-footer-container-height: 48px;--mat-table-row-item-container-height: 48px}.table-out.dense-2{--mat-table-header-container-height: 48px;--mat-table-footer-container-height: 44px;--mat-table-row-item-container-height: 44px}.table-out.dense-3{--mat-table-header-container-height: 44px;--mat-table-footer-container-height: 40px;--mat-table-row-item-container-height: 40px}.table-out.dense-4,.table-out.dense-6{--mat-table-header-container-height: 40px;--mat-table-footer-container-height: 36px;--mat-table-row-item-container-height: 36px}.table-out.dense-6 table tr.mat-mdc-row{height:32px}.table-out.dense-8{--mat-table-header-container-height: 40px;--mat-table-footer-container-height: 36px;--mat-table-row-item-container-height: 36px}.table-out.dense-8 table tr.mat-mdc-row{height:30px}.table-out.force-min-width td{min-width:150px}table{width:100%}table tr.mat-mdc-row:hover{background:var(--surface-variant, #DEE3EB)}table .tablelink{text-decoration:underline}table .linkrow{display:table-row}table .linkrow mat-icon{display:table-cell;width:30px;text-align:center;padding-right:1rem;line-height:31px;color:var(--xiri-linkrow-icon-color)}table .linkrow .text{display:table-cell;text-decoration:underline}table .linkrow .text.hasIcon{vertical-align:middle;line-height:33px}table td.mat-mdc-cell mat-icon{vertical-align:middle}table td.mat-mdc-cell.info{font-size:var(--xiri-font-size-label);color:var(--on-surface-variant, #42474E)}table td.mat-mdc-cell.number{text-align:right;font-variant-numeric:tabular-nums}table td.mat-mdc-cell.right,table td.mat-mdc-cell.align-right{text-align:right;padding-left:1rem;word-wrap:anywhere}table td.mat-mdc-cell.center,table td.mat-mdc-cell.align-center{text-align:center;padding-left:1rem}table td.mat-mdc-cell.left,table td.mat-mdc-cell.align-left{text-align:left}table td.mat-mdc-cell.middle{padding-left:1rem}table th.mat-mdc-header-cell.number{text-align:right;font-variant-numeric:tabular-nums}table th.mat-mdc-header-cell.align-right{text-align:right}table th.mat-mdc-header-cell.align-center{text-align:center}table th.mat-mdc-header-cell.align-left{text-align:left}\n"], dependencies: [{ kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "pipe", type: SafehtmlPipe, name: "safeHtml" }, { kind: "pipe", type: XiriUrlPipe, name: "xiriUrl" }] }); }
|
|
2832
3287
|
}
|
|
2833
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
3288
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriRawTableComponent, decorators: [{
|
|
2834
3289
|
type: Component,
|
|
2835
3290
|
args: [{ selector: 'xiri-raw-table', imports: [MatTable,
|
|
2836
3291
|
MatColumnDef,
|
|
@@ -2864,10 +3319,10 @@ class XiriButtonstyleComponent {
|
|
|
2864
3319
|
this.pollText = input('', /* @ts-ignore */
|
|
2865
3320
|
...(ngDevMode ? [{ debugName: "pollText" }] : /* istanbul ignore next */ []));
|
|
2866
3321
|
}
|
|
2867
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
2868
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
3322
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriButtonstyleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3323
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriButtonstyleComponent, isStandalone: true, selector: "xiri-buttonstyle", inputs: { button: { classPropertyName: "button", publicName: "button", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: true, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, countdown: { classPropertyName: "countdown", publicName: "countdown", isSignal: true, isRequired: false, transformFunction: null }, pollText: { classPropertyName: "pollText", publicName: "pollText", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ng-template #textContent>\n\t@if (loading()) {\n\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t@if (pollText() || countdown() > 0) {\n\t\t\t<span class=\"poll-countdown\">{{ pollText() || countdown() + 's' }}</span>\n\t\t}\n\t} @else {\n\t\t{{ button().text }}\n\t}\n</ng-template>\n\n<!-- Guard sitzt hier, nicht nur in xiri-button: form, dialog, alert und stepper\n rendern XiriButton direkt ueber buttonstyle. -->\n@if (!button().hide) {\n\t@switch (button().type) {\n\t\t@case ('icon') {\n\t\t\t<button mat-icon-button [matTooltip]=\"button().hint\" [matTooltipDisabled]=\"!button().hint\"\n\t\t\t [attr.aria-label]=\"button().hint || button().text\"\n\t\t\t [color]=\"button().color || 'primary'\" [disabled]=\"disabled() || loading()\">\n\t\t\t\t@if (loading()) {\n\t\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t\t} @else {\n\t\t\t\t\t<mat-icon>{{ button().icon }}</mat-icon>\n\t\t\t\t}\n\t\t\t</button>\n\t\t}\n\t\t@case ('icontext') {\n\t\t\t<button mat-fab extended=\"true\"\n\t\t\t class=\"icontext\"\n\t\t\t [matTooltip]=\"button().hint\"\n\t\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t\t [color]=\"button().color || 'primary'\"\n\t\t\t [disabled]=\"disabled() || loading()\"\n\t\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t\t@if (loading()) {\n\t\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t\t\t@if (pollText() || countdown() > 0) {\n\t\t\t\t\t\t<span class=\"poll-countdown\">{{ pollText() || countdown() + 's' }}</span>\n\t\t\t\t\t}\n\t\t\t\t} @else {\n\t\t\t\t\t<mat-icon>{{ button().icon }}</mat-icon>\n\t\t\t\t}\n\t\t\t\t{{ button().text }}\n\t\t\t</button>\n\t\t}\n\t\t@case ('raised') {\n\t\t\t<button mat-raised-button\n\t\t\t [matTooltip]=\"button().hint\"\n\t\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t\t [color]=\"button().color || 'primary'\"\n\t\t\t [disabled]=\"disabled() || loading()\"\n\t\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"textContent\"></ng-container>\n\t\t\t</button>\n\t\t}\n\t\t@case ('basic') {\n\t\t\t<button mat-button\n\t\t\t [matTooltip]=\"button().hint\"\n\t\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t\t [color]=\"button().color || 'primary'\"\n\t\t\t [disabled]=\"disabled() || loading()\"\n\t\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"textContent\"></ng-container>\n\t\t\t</button>\n\t\t}\n\t\t@case ('stroked') {\n\t\t\t<button mat-stroked-button\n\t\t\t [matTooltip]=\"button().hint\"\n\t\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t\t [color]=\"button().color || 'primary'\"\n\t\t\t [disabled]=\"disabled() || loading()\"\n\t\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"textContent\"></ng-container>\n\t\t\t</button>\n\t\t}\n\t\t@case ('flat') {\n\t\t\t<button mat-flat-button\n\t\t\t [matTooltip]=\"button().hint\"\n\t\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t\t [color]=\"button().color || 'primary'\"\n\t\t\t [disabled]=\"disabled() || loading()\"\n\t\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"textContent\"></ng-container>\n\t\t\t</button>\n\t\t}\n\t\t@case ('minifab') {\n\t\t\t<button mat-mini-fab [matTooltip]=\"button().hint\" [matTooltipDisabled]=\"!button().hint\"\n\t\t\t [attr.aria-label]=\"button().hint || button().text\"\n\t\t\t [color]=\"button().color || 'primary'\" [disabled]=\"disabled() || loading()\"\n\t\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t\t@if (loading()) {\n\t\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t\t} @else {\n\t\t\t\t\t<mat-icon>{{ button().icon }}</mat-icon>\n\t\t\t\t}\n\t\t\t</button>\n\t\t}\n\t\t@case ('fab') {\n\t\t\t<button mat-fab [matTooltip]=\"button().hint\" [matTooltipDisabled]=\"!button().hint\"\n\t\t\t [attr.aria-label]=\"button().hint || button().text\"\n\t\t\t [color]=\"button().color || 'primary'\" [disabled]=\"disabled() || loading()\"\n\t\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t\t@if (loading()) {\n\t\t\t\t\t<mat-spinner diameter=\"24\"></mat-spinner>\n\t\t\t\t} @else {\n\t\t\t\t\t<mat-icon>{{ button().icon }}</mat-icon>\n\t\t\t\t}\n\t\t\t</button>\n\t\t}\n\t\t@default {\n\t\t\t@if (button().icon) {\n\t\t\t\t<button mat-icon-button [matTooltip]=\"button().hint\" [matTooltipDisabled]=\"!button().hint\"\n\t\t\t\t [attr.aria-label]=\"button().hint || button().text\"\n\t\t\t\t [color]=\"button().color || 'primary'\" [disabled]=\"disabled() || loading()\"\n\t\t\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t\t\t@if (loading()) {\n\t\t\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<mat-icon>{{ button().icon }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t</button>\n\t\t\t}\n\t\t\t@if (button().text) {\n\t\t\t\t<button mat-raised-button\n\t\t\t\t [matTooltip]=\"button().hint\"\n\t\t\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t\t\t [color]=\"button().color || 'primary'\"\n\t\t\t\t [disabled]=\"disabled() || loading()\"\n\t\t\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"textContent\"></ng-container>\n\t\t\t\t</button>\n\t\t\t}\n\t\t}\n\t}\n}\n", styles: ["mat-spinner{display:inline-block;--mat-progress-spinner-active-indicator-color: currentColor}.poll-countdown{display:inline-block;margin-left:6px;font-variant-numeric:tabular-nums;font-size:.85em;opacity:.9}\n"], dependencies: [{ kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
|
|
2869
3324
|
}
|
|
2870
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
3325
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriButtonstyleComponent, decorators: [{
|
|
2871
3326
|
type: Component,
|
|
2872
3327
|
args: [{ selector: 'xiri-buttonstyle', imports: [
|
|
2873
3328
|
MatButton,
|
|
@@ -2882,10 +3337,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
2882
3337
|
}], propDecorators: { button: [{ type: i0.Input, args: [{ isSignal: true, alias: "button", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: true }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], countdown: [{ type: i0.Input, args: [{ isSignal: true, alias: "countdown", required: false }] }], pollText: [{ type: i0.Input, args: [{ isSignal: true, alias: "pollText", required: false }] }] } });
|
|
2883
3338
|
|
|
2884
3339
|
class XiriDoneComponent {
|
|
2885
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
2886
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0
|
|
3340
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDoneComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3341
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.0", type: XiriDoneComponent, isStandalone: true, selector: "xiri-done", ngImport: i0, template: "<mat-icon aria-label=\"Erfolgreich abgeschlossen\" role=\"status\">done</mat-icon>\n", styles: ["@keyframes bounceIn{0%{transform:scale(.2);opacity:0}70%{transform:scale(1.4);opacity:1}to{transform:scale(1)}}:host{margin:1em;min-height:60px}mat-icon{color:var(--color-success, #2ECC71);font-size:4rem;height:auto;width:auto;animation:bounceIn .4s .1s cubic-bezier(.8,-.6,.2,1.5) both}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
2887
3342
|
}
|
|
2888
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
3343
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDoneComponent, decorators: [{
|
|
2889
3344
|
type: Component,
|
|
2890
3345
|
args: [{ selector: 'xiri-done', imports: [MatIcon], template: "<mat-icon aria-label=\"Erfolgreich abgeschlossen\" role=\"status\">done</mat-icon>\n", styles: ["@keyframes bounceIn{0%{transform:scale(.2);opacity:0}70%{transform:scale(1.4);opacity:1}to{transform:scale(1)}}:host{margin:1em;min-height:60px}mat-icon{color:var(--color-success, #2ECC71);font-size:4rem;height:auto;width:auto;animation:bounceIn .4s .1s cubic-bezier(.8,-.6,.2,1.5) both}\n"] }]
|
|
2891
3346
|
}] });
|
|
@@ -2895,10 +3350,10 @@ class XiriErrorComponent {
|
|
|
2895
3350
|
this.text = input.required(/* @ts-ignore */
|
|
2896
3351
|
...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
|
|
2897
3352
|
}
|
|
2898
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
2899
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0
|
|
3353
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3354
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: XiriErrorComponent, isStandalone: true, selector: "xiri-error", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"error\">\n\t{{ text() }}\n</div>\n", styles: ["@keyframes fadeInUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.error{padding:var(--xiri-spacing-md);margin:var(--xiri-spacing-md) 0;border:1px solid transparent;border-radius:var(--xiri-radius-sm);background-color:var(--error-container, #FFDAD6);color:var(--on-error-container, #410002);animation:fadeInUp var(--xiri-duration-normal) var(--xiri-easing-decelerate)}\n"] }); }
|
|
2900
3355
|
}
|
|
2901
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
3356
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriErrorComponent, decorators: [{
|
|
2902
3357
|
type: Component,
|
|
2903
3358
|
args: [{ selector: 'xiri-error', template: "<div class=\"error\">\n\t{{ text() }}\n</div>\n", styles: ["@keyframes fadeInUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.error{padding:var(--xiri-spacing-md);margin:var(--xiri-spacing-md) 0;border:1px solid transparent;border-radius:var(--xiri-radius-sm);background-color:var(--error-container, #FFDAD6);color:var(--on-error-container, #410002);animation:fadeInUp var(--xiri-duration-normal) var(--xiri-easing-decelerate)}\n"] }]
|
|
2904
3359
|
}], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: true }] }] } });
|
|
@@ -2947,28 +3402,16 @@ class XiriDownloadService {
|
|
|
2947
3402
|
setTimeout(() => a.click(), 0);
|
|
2948
3403
|
return true;
|
|
2949
3404
|
}
|
|
2950
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
2951
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0
|
|
3405
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDownloadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3406
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDownloadService, providedIn: 'root' }); }
|
|
2952
3407
|
}
|
|
2953
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
3408
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDownloadService, decorators: [{
|
|
2954
3409
|
type: Injectable,
|
|
2955
3410
|
args: [{
|
|
2956
3411
|
providedIn: 'root',
|
|
2957
3412
|
}]
|
|
2958
3413
|
}] });
|
|
2959
3414
|
|
|
2960
|
-
function parseHttpError(err) {
|
|
2961
|
-
if (err.status === 400 || err.status === 424)
|
|
2962
|
-
return err.error?.error || 'Format Error';
|
|
2963
|
-
if (err.status === 403)
|
|
2964
|
-
return err.error?.error || 'Access denied';
|
|
2965
|
-
if (err.status === 404)
|
|
2966
|
-
return 'Not found';
|
|
2967
|
-
if (err.status === 0)
|
|
2968
|
-
return 'Connection error';
|
|
2969
|
-
return 'Unknown error';
|
|
2970
|
-
}
|
|
2971
|
-
|
|
2972
3415
|
const DIALOG_SIZE_MAP = {
|
|
2973
3416
|
sm: '400px',
|
|
2974
3417
|
md: '600px',
|
|
@@ -3273,10 +3716,10 @@ class XiriDialogComponent {
|
|
|
3273
3716
|
if (this.to)
|
|
3274
3717
|
clearTimeout(this.to);
|
|
3275
3718
|
}
|
|
3276
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
3277
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
3719
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3720
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriDialogComponent, isStandalone: true, selector: "xiri-dialog", ngImport: i0, template: "<div class=\"dialog\">\n\t<div class=\"dialog-header\">\n\t\t<h1 mat-dialog-title>{{ header() }}</h1>\n\t\t@if (type() !== 'waiting') {\n\t\t\t<button mat-icon-button aria-label=\"Schlie\u00DFen\" (click)=\"dialogRef.close(null)\"><mat-icon>close</mat-icon></button>\n\t\t}\n\t</div>\n\t<mat-dialog-content>\n\t\t@if (loading() && formFields() === null) {\n\t\t\t<mat-spinner diameter=\"30\"></mat-spinner>\n\t\t}\n\t\t@if (formFields() !== null) {\n\t\t\t@if (type() === 'table') {\n\t\t\t\t<xiri-raw-table [settings]=\"rawTable\"></xiri-raw-table>\n\t\t\t} @else {\n\t\t\t\t<xiri-form-fields [form]=\"formFields()\" (formChange)=\"formChanged($event)\" [disabled]=\"loading()\"\n\t\t\t\t [check]=\"checkSubject.asObservable()\"></xiri-form-fields>\n\t\t\t}\n\t\t}\n\t\t@if (componentData() !== null && dynComponentType() !== null) {\n\t\t\t<ng-container [ngComponentOutlet]=\"dynComponentType()\"\n\t\t\t [ngComponentOutletInputs]=\"{ data: componentData() }\"></ng-container>\n\t\t}\n\t\t@if (error()) {\n\t\t\t<xiri-error class=\"error\" [text]=\"error()\"></xiri-error>\n\t\t}\n\t\t@if (done()) {\n\t\t\t<div class=\"xcol done\">\n\t\t\t\t<xiri-done></xiri-done>\n\t\t\t</div>\n\t\t}\n\t</mat-dialog-content>\n\t@if (!done() && !(loading() && formFields() === null) && (loading() || buttons().length > 0)) {\n\t\t<mat-divider></mat-divider>\n\t\t<mat-dialog-actions [class.one]=\"buttons().length===1\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"30\" class=\"actions-spinner\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t@for (button of buttons(); track $index) {\n\t\t\t\t\t<xiri-buttonstyle [button]=\"button\" (click)=\"clickButton( button )\" [disabled]=\"!!button.default && !formValid()\"></xiri-buttonstyle>\n\t\t\t\t}\n\t\t\t}\n\t\t</mat-dialog-actions>\n\t}\n</div>", styles: ["mat-spinner{margin:var(--xiri-spacing-md)}.dialog-header{display:flex;align-items:center;justify-content:space-between;padding-inline-end:var(--xiri-spacing-lg)}.dialog-header h1[mat-dialog-title]{margin-bottom:0;flex:0 1 auto;min-width:0;overflow-wrap:anywhere}mat-dialog-content{overflow-x:auto}.dynamic-form{margin-bottom:var(--xiri-spacing-md)}.dynamic-form .field{width:100%;margin-top:var(--xiri-spacing-sm)}.question,.waiting{display:flex}.question .left,.waiting .left{font-size:var(--xiri-font-size-display);padding-right:var(--xiri-spacing-md)}.waiting mat-icon{color:var(--color-success, #2ECC71);font-size:var(--xiri-font-size-headline)}.error{color:var(--error, red);font-size:var(--xiri-font-size-title);margin-top:var(--xiri-spacing-md);margin-bottom:var(--xiri-spacing-md)}mat-dialog-actions{justify-content:space-between;padding-left:var(--xiri-spacing-lg);padding-right:var(--xiri-spacing-lg)}mat-dialog-actions.one{justify-content:end}mat-dialog-actions .actions-spinner{margin:0 0 0 auto}mat-dialog-content{min-height:4rem}mat-dialog-content.mat-mdc-dialog-content{padding-bottom:var(--xiri-spacing-md)}mat-dialog-content>*{animation:fadeIn var(--xiri-duration-fast, .15s) var(--xiri-easing-standard, cubic-bezier(.4, 0, .2, 1))}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.done{text-align:center;font-size:var(--xiri-font-size-display)}[hidden]{display:none!important}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: XiriRawTableComponent, selector: "xiri-raw-table", inputs: ["settings"] }, { kind: "component", type: XiriFormFieldsComponent, selector: "xiri-form-fields", inputs: ["form", "display", "disabled", "check"], outputs: ["formChange"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: XiriErrorComponent, selector: "xiri-error", inputs: ["text"] }, { kind: "component", type: XiriDoneComponent, selector: "xiri-done" }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: XiriButtonstyleComponent, selector: "xiri-buttonstyle", inputs: ["button", "disabled", "loading", "countdown", "pollText"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
3278
3721
|
}
|
|
3279
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
3722
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDialogComponent, decorators: [{
|
|
3280
3723
|
type: Component,
|
|
3281
3724
|
args: [{ selector: 'xiri-dialog', imports: [MatDialogTitle,
|
|
3282
3725
|
MatDialogContent,
|
|
@@ -3314,10 +3757,10 @@ class XiriResponseHandlerService {
|
|
|
3314
3757
|
else if (res.table == 'update' || res.update == 'table')
|
|
3315
3758
|
callbacks?.onTableUpdate?.(res.id, res.field, res.content);
|
|
3316
3759
|
}
|
|
3317
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
3318
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0
|
|
3760
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriResponseHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3761
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriResponseHandlerService, providedIn: 'root' }); }
|
|
3319
3762
|
}
|
|
3320
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
3763
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriResponseHandlerService, decorators: [{
|
|
3321
3764
|
type: Injectable,
|
|
3322
3765
|
args: [{
|
|
3323
3766
|
providedIn: 'root',
|
|
@@ -3613,10 +4056,10 @@ class XiriButtonComponent {
|
|
|
3613
4056
|
this.dialogRef.close(null);
|
|
3614
4057
|
}
|
|
3615
4058
|
}
|
|
3616
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
3617
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
4059
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4060
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriButtonComponent, isStandalone: true, selector: "xiri-button", inputs: { button: { classPropertyName: "button", publicName: "button", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, filterData: { classPropertyName: "filterData", publicName: "filterData", isSignal: true, isRequired: false, transformFunction: null }, url: { classPropertyName: "url", publicName: "url", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { result: "result" }, ngImport: i0, template: "<!-- hide has always been part of the XiriButton contract; a hidden button must not\n render and must not run its action (see the autoLoad effect). -->\n@if (!displayButton().hide) {\n\t@switch (button().action) {\n\t\t@case ('link') {\n\t\t\t@let linkUrl = _url() | xiriUrl;\n\t\t\t<a [routerLink]=\"linkUrl?.path\" [queryParams]=\"linkUrl?.queryParams\" [href]=\"_url()\" (click)=\"clicked($event)\">\n\t\t\t\t<xiri-buttonstyle [button]=\"displayButton()\" [disabled]=\"_disabled()\" [loading]=\"loading()\" [countdown]=\"countdown()\" [pollText]=\"pollText()\"></xiri-buttonstyle>\n\t\t\t</a>\n\t\t}\n\t\t@case ('href') {\n\t\t\t<a [href]=\"_url()\" [target]=\"button().target\" (click)=\"clicked($event)\">\n\t\t\t\t<xiri-buttonstyle [button]=\"displayButton()\" [disabled]=\"_disabled()\" [loading]=\"loading()\" [countdown]=\"countdown()\" [pollText]=\"pollText()\"></xiri-buttonstyle>\n\t\t\t</a>\n\t\t}\n\t\t@case ('menu') {\n\t\t\t<button mat-icon-button [matMenuTriggerFor]=\"menuRef\"\n\t\t\t [class]=\"displayButton().color || 'primary'\"\n\t\t\t [matTooltip]=\"button().hint\"\n\t\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t\t [attr.aria-label]=\"displayButton().hint || displayButton().text\"\n\t\t\t (click)=\"$event.stopPropagation()\">\n\t\t\t\t<mat-icon>{{ displayButton().icon }}</mat-icon>\n\t\t\t</button>\n\t\t\t<mat-menu #menuRef=\"matMenu\">\n\t\t\t\t@for (item of button().menuItems; track item) {\n\t\t\t\t\t@switch (item.action) {\n\t\t\t\t\t\t@case ('link') {\n\t\t\t\t\t\t\t@let menuUrl = item.url | xiriUrl;\n\t\t\t\t\t\t\t<a mat-menu-item [routerLink]=\"menuUrl?.path\" [queryParams]=\"menuUrl?.queryParams\">\n\t\t\t\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"item.color || 'primary'\">{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t<span>{{ item.text }}</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@case ('href') {\n\t\t\t\t\t\t\t<a mat-menu-item [href]=\"item.url\" target=\"_blank\">\n\t\t\t\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"item.color || 'primary'\">{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t<span>{{ item.text }}</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@case ('dialog') {\n\t\t\t\t\t\t\t<button mat-menu-item (click)=\"openMenuDialog($event, item)\">\n\t\t\t\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"item.color || 'primary'\">{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t<span>{{ item.text }}</span>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</mat-menu>\n\t\t}\n\t\t@default {\n\t\t\t<xiri-buttonstyle [button]=\"displayButton()\" [disabled]=\"_disabled()\" [loading]=\"loading()\" [countdown]=\"countdown()\" [pollText]=\"pollText()\" (click)=\"clicked($event)\"></xiri-buttonstyle>\n\t\t}\n\t}\n}\n", styles: [""], dependencies: [{ kind: "component", type: XiriButtonstyleComponent, selector: "xiri-buttonstyle", inputs: ["button", "disabled", "loading", "countdown", "pollText"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: XiriUrlPipe, name: "xiriUrl" }] }); }
|
|
3618
4061
|
}
|
|
3619
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
4062
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriButtonComponent, decorators: [{
|
|
3620
4063
|
type: Component,
|
|
3621
4064
|
args: [{ selector: 'xiri-button', imports: [
|
|
3622
4065
|
XiriButtonstyleComponent,
|
|
@@ -3929,10 +4372,10 @@ class XiriTableInlineEditService {
|
|
|
3929
4372
|
return { label: opt?.label || val, color: opt?.color || '' };
|
|
3930
4373
|
});
|
|
3931
4374
|
}
|
|
3932
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
3933
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0
|
|
4375
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTableInlineEditService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4376
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTableInlineEditService }); }
|
|
3934
4377
|
}
|
|
3935
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
4378
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTableInlineEditService, decorators: [{
|
|
3936
4379
|
type: Injectable
|
|
3937
4380
|
}] });
|
|
3938
4381
|
|
|
@@ -3999,10 +4442,10 @@ class XiriLocalStorageService extends XiriStorageServiceBase {
|
|
|
3999
4442
|
constructor() {
|
|
4000
4443
|
super(window.localStorage);
|
|
4001
4444
|
}
|
|
4002
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
4003
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0
|
|
4445
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriLocalStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4446
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriLocalStorageService, providedIn: 'root' }); }
|
|
4004
4447
|
}
|
|
4005
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
4448
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriLocalStorageService, decorators: [{
|
|
4006
4449
|
type: Injectable,
|
|
4007
4450
|
args: [{
|
|
4008
4451
|
providedIn: 'root'
|
|
@@ -4287,10 +4730,10 @@ class XiriTableTreeService {
|
|
|
4287
4730
|
if (key)
|
|
4288
4731
|
this.localStorage.set(key, Array.from(this.expanded));
|
|
4289
4732
|
}
|
|
4290
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
4291
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0
|
|
4733
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTableTreeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4734
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTableTreeService }); }
|
|
4292
4735
|
}
|
|
4293
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
4736
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTableTreeService, decorators: [{
|
|
4294
4737
|
type: Injectable
|
|
4295
4738
|
}] });
|
|
4296
4739
|
|
|
@@ -4304,10 +4747,10 @@ class XiriButtonlineComponent {
|
|
|
4304
4747
|
...(ngDevMode ? [{ debugName: "filterData" }] : /* istanbul ignore next */ []));
|
|
4305
4748
|
this.result = output();
|
|
4306
4749
|
}
|
|
4307
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
4308
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
4750
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriButtonlineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4751
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriButtonlineComponent, isStandalone: true, selector: "xiri-buttonline", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, filterData: { classPropertyName: "filterData", publicName: "filterData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { result: "result" }, ngImport: i0, template: "<div class=\"buttonline\" [class]=\"settings().class\">\n\t@for (button of settings().buttons; track i; let i = $index) {\n\t\t<xiri-button [button]=\"button\" [filterData]=\"filterData()\" [disabled]=\"disabled()\" (result)=\"result.emit( $event )\"></xiri-button>\n\t}\n</div>\n", styles: [".buttonline.right{text-align:right}.buttonline.right>xiri-button,.buttonline.right a{margin-left:var(--xiri-spacing-sm)}.buttonline.center{text-align:center}.buttonline.center button,.buttonline.center a,.buttonline.center xiri-button{margin-left:var(--xiri-spacing-sm);margin-right:var(--xiri-spacing-sm)}.buttonline.left button,.buttonline.left a,.buttonline.left xiri-button{margin-left:var(--xiri-spacing-sm);margin-right:var(--xiri-spacing-sm)}.buttonline.small{padding-bottom:0}.buttonline xiri-button+xiri-button{margin-left:var(--xiri-spacing-sm)}\n"], dependencies: [{ kind: "component", type: XiriButtonComponent, selector: "xiri-button", inputs: ["button", "disabled", "filterData", "url"], outputs: ["result"] }] }); }
|
|
4309
4752
|
}
|
|
4310
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
4753
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriButtonlineComponent, decorators: [{
|
|
4311
4754
|
type: Component,
|
|
4312
4755
|
args: [{ selector: 'xiri-buttonline', imports: [
|
|
4313
4756
|
XiriButtonComponent
|
|
@@ -4318,10 +4761,10 @@ class XiriSessionStorageService extends XiriStorageServiceBase {
|
|
|
4318
4761
|
constructor() {
|
|
4319
4762
|
super(window.sessionStorage);
|
|
4320
4763
|
}
|
|
4321
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
4322
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0
|
|
4764
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSessionStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4765
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSessionStorageService, providedIn: 'root' }); }
|
|
4323
4766
|
}
|
|
4324
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
4767
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSessionStorageService, decorators: [{
|
|
4325
4768
|
type: Injectable,
|
|
4326
4769
|
args: [{
|
|
4327
4770
|
providedIn: 'root'
|
|
@@ -4334,10 +4777,10 @@ class XiriEmptyStateComponent {
|
|
|
4334
4777
|
...(ngDevMode ? [{ debugName: "settings" }] : /* istanbul ignore next */ []));
|
|
4335
4778
|
this.buttonResult = output();
|
|
4336
4779
|
}
|
|
4337
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
4338
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
4780
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriEmptyStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4781
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriEmptyStateComponent, isStandalone: true, selector: "xiri-empty-state", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { buttonResult: "buttonResult" }, ngImport: i0, template: "<div class=\"empty-state\">\n\t@if (settings().icon) {\n\t\t<mat-icon [class]=\"settings().iconColor || 'gray'\">{{ settings().icon }}</mat-icon>\n\t}\n\t<div class=\"title\">{{ settings().title }}</div>\n\t@if (settings().description) {\n\t\t<div class=\"description\">{{ settings().description }}</div>\n\t}\n\t@if (settings().button) {\n\t\t<div class=\"action\">\n\t\t\t<xiri-button [button]=\"settings().button!\" (result)=\"buttonResult.emit($event)\"></xiri-button>\n\t\t</div>\n\t}\n</div>\n", styles: [".empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--xiri-spacing-xl) var(--xiri-spacing-md);text-align:center;animation:fadeInUp var(--xiri-duration-normal) var(--xiri-easing-decelerate)}.empty-state mat-icon{font-size:48px;width:48px;height:48px;margin-bottom:var(--xiri-spacing-md);opacity:.6}.empty-state .title{font-size:1.1rem;font-weight:500;color:var(--on-surface, #1B1B1F);margin-bottom:var(--xiri-spacing-sm)}.empty-state .description{font-size:.875rem;color:var(--on-surface-variant, #44474F);max-width:400px;margin-bottom:var(--xiri-spacing-md)}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: XiriButtonComponent, selector: "xiri-button", inputs: ["button", "disabled", "filterData", "url"], outputs: ["result"] }] }); }
|
|
4339
4782
|
}
|
|
4340
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
4783
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriEmptyStateComponent, decorators: [{
|
|
4341
4784
|
type: Component,
|
|
4342
4785
|
args: [{ selector: 'xiri-empty-state', imports: [MatIcon, XiriButtonComponent], template: "<div class=\"empty-state\">\n\t@if (settings().icon) {\n\t\t<mat-icon [class]=\"settings().iconColor || 'gray'\">{{ settings().icon }}</mat-icon>\n\t}\n\t<div class=\"title\">{{ settings().title }}</div>\n\t@if (settings().description) {\n\t\t<div class=\"description\">{{ settings().description }}</div>\n\t}\n\t@if (settings().button) {\n\t\t<div class=\"action\">\n\t\t\t<xiri-button [button]=\"settings().button!\" (result)=\"buttonResult.emit($event)\"></xiri-button>\n\t\t</div>\n\t}\n</div>\n", styles: [".empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--xiri-spacing-xl) var(--xiri-spacing-md);text-align:center;animation:fadeInUp var(--xiri-duration-normal) var(--xiri-easing-decelerate)}.empty-state mat-icon{font-size:48px;width:48px;height:48px;margin-bottom:var(--xiri-spacing-md);opacity:.6}.empty-state .title{font-size:1.1rem;font-weight:500;color:var(--on-surface, #1B1B1F);margin-bottom:var(--xiri-spacing-sm)}.empty-state .description{font-size:.875rem;color:var(--on-surface-variant, #44474F);max-width:400px;margin-bottom:var(--xiri-spacing-md)}\n"] }]
|
|
4343
4786
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }], buttonResult: [{ type: i0.Output, args: ["buttonResult"] }] } });
|
|
@@ -5183,10 +5626,10 @@ class XiriTableComponent {
|
|
|
5183
5626
|
return data[sortHeaderId];
|
|
5184
5627
|
};
|
|
5185
5628
|
}
|
|
5186
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
5187
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: XiriTableComponent, isStandalone: true, selector: "xiri-table", inputs: { dyncomponent: { classPropertyName: "dyncomponent", publicName: "dyncomponent", isSignal: true, isRequired: false, transformFunction: null }, settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null }, filterData: { classPropertyName: "filterData", publicName: "filterData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickedRow: "clickedRow" }, providers: [XiriTableInlineEditService, XiriTableTreeService], viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, isSignal: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true, isSignal: true }, { propertyName: "table", first: true, predicate: MatTable, descendants: true, isSignal: true }], ngImport: i0, template: "<mat-card class=\"xiritablecard mat-mdc-elevation-specific mat-elevation-z3\">\n\t<div class=\"xiritable\" [class]=\"options.class\">\n\t\t<div class=\"table-full\">\n\t\t\t@if (bulkBarActive) {\n\t\t\t\t<div class=\"xiri-bulk-bar\" [class.sticky]=\"options.stickyBulkBar\" role=\"toolbar\"\n\t\t\t\t aria-label=\"Massenaktionen\" data-testid=\"table-bulk-bar\">\n\t\t\t\t\t<button mat-icon-button (click)=\"cancelBulk()\" matTooltip=\"Auswahl aufheben\"\n\t\t\t\t\t aria-label=\"Auswahl aufheben\">\n\t\t\t\t\t\t<mat-icon>close</mat-icon>\n\t\t\t\t\t</button>\n\t\t\t\t\t<span class=\"xiri-bulk-count\" aria-live=\"polite\" data-testid=\"table-bulk-count\">\n\t\t\t\t\t\t@if (bulkAllResults()) {\n\t\t\t\t\t\t\tAlle {{ bulkTotalCount() }} Ergebnisse ausgew\u00E4hlt\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t{{ selection.selected.length }} ausgew\u00E4hlt\n\t\t\t\t\t\t}\n\t\t\t\t\t</span>\n\t\t\t\t\t@if (canSelectAllResults()) {\n\t\t\t\t\t\t<button mat-button color=\"primary\" (click)=\"selectAllResults()\"\n\t\t\t\t\t\t data-testid=\"table-bulk-selectall\">\n\t\t\t\t\t\t\tAlle {{ bulkTotalCount() }} Ergebnisse ausw\u00E4hlen\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t\t<span class=\"xiri-bulk-spacer\"></span>\n\t\t\t\t\t@for (button of options.bulkActions; track button) {\n\t\t\t\t\t\t@if (!button.hide) {\n\t\t\t\t\t\t\t<button mat-button [color]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t (click)=\"bulkAction($event, button)\"\n\t\t\t\t\t\t\t [matTooltip]=\"button.hint\" [matTooltipDisabled]=\"!button.hint\">\n\t\t\t\t\t\t\t\t@if (button.icon) {\n\t\t\t\t\t\t\t\t\t<mat-icon>{{ button.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t{{ button.text }}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<div class=\"header\" [hidden]=\"bulkBarActive\">\n\t\t\t\t@if (options.reload) {\n\t\t\t\t\t<div class=\"buttons\">\n\t\t\t\t\t\t<button mat-icon-button (click)=\"reload()\" color=\"primary\" aria-label=\"Tabelle neu laden\">\n\t\t\t\t\t\t\t<mat-icon>autorenew</mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (autoRefresh()) {\n\t\t\t\t\t<div class=\"autorefresh-indicator\" role=\"status\" aria-live=\"polite\"\n\t\t\t\t\t matTooltip=\"Tabelle aktualisiert sich automatisch\">\n\t\t\t\t\t\t<mat-icon class=\"spin\">sync</mat-icon>\n\t\t\t\t\t\t<span>Auto-Refresh aktiv \u00B7 n\u00E4chste in {{ countdown() }}s</span>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (lastUpdated(); as updated) {\n\t\t\t\t\t<div class=\"lastupdated-indicator\" data-testid=\"table-last-updated\" role=\"status\" aria-live=\"polite\">\n\t\t\t\t\t\tStand {{ updated | date:'HH:mm' }}\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (treeEnabled) {\n\t\t\t\t\t<div class=\"buttons xiri-tree-actions\">\n\t\t\t\t\t\t<button mat-icon-button (click)=\"expandAllNodes()\" color=\"primary\"\n\t\t\t\t\t\t matTooltip=\"Alle ausklappen\" aria-label=\"Alle ausklappen\">\n\t\t\t\t\t\t\t<mat-icon>unfold_more</mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button mat-icon-button (click)=\"collapseAllNodes()\" color=\"primary\"\n\t\t\t\t\t\t matTooltip=\"Alle einklappen\" aria-label=\"Alle einklappen\">\n\t\t\t\t\t\t\t<mat-icon>unfold_less</mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<div class=\"middle\" [class.hasButtons]=\"options.buttons\">{{ options.title }}</div>\n\t\t\t\t@if (options.buttons) {\n\t\t\t\t\t<xiri-buttonline [settings]=\"options.buttons\" (result)=\"buttonReturn($event)\"\n\t\t\t\t\t [filterData]=\"_filterData()\"></xiri-buttonline>\n\t\t\t\t}\n\t\t\t\t@if (options.search) {\n\t\t\t\t\t<xiri-search (changed)=\"searchDo($event)\" [placeholder]=\"''\" [text]=\"searchTextInit\"></xiri-search>\n\t\t\t\t}\n\t\t\t\t@if (options.saveInput) {\n\t\t\t\t\t<div class=\"buttons saveInput\">\n\t\t\t\t\t\t<button mat-raised-button (click)=\"saveInputData()\" color=\"primary\">\n\t\t\t\t\t\t\t{{ options.saveInput }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"tableout-wrap\">\n\t\t\t<div class=\"tableout\" [class.is-loading]=\"loading()\" [style.max-height]=\"options.scrollHeight || null\">\n\t\t\t\t<table mat-table [dataSource]=\"dataSource\" matSort [style.min-width]=\"options.minWidth ?? '100%'\"\n\t\t\t\t [class]=\"densityClass()\"\n\t\t\t\t [class.borders]=\"options.borders\" [class.bordersHeader]=\"options.bordersHeader\"\n\t\t\t\t [trackBy]=\"trackByRowId\">\n\n\t\t\t\t\t@for (column of displayedColumns; track column.id) {\n\t\t\t\t\t\t<ng-container [matColumnDef]=\"column.id\" [sticky]=\"column.sticky\">\n\t\t\t\t\t\t\t<th mat-header-cell *matHeaderCellDef mat-sort-header=\"{{ column.id }}\" [disabled]=\"!column.sort || !options.sort\" disableClear\n\t\t\t\t\t\t\t [style.width]=\"column.width\" [style.min-width]=\"column.minWidth\"\n\t\t\t\t\t\t\t [class]=\"column.display + ' ' + (column.header || '')\"> {{ column.name }}\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t@switch (column.format) {\n\t\t\t\t\t\t\t\t@case ('buttons') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t\t@for (button of column.buttons; track button; let i = $index) {\n\t\t\t\t\t\t\t\t\t\t\t@if (row[column.id][i] !== false && !button.hide) {\n\t\t\t\t\t\t\t\t\t\t\t\t@switch (button.action) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('link') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<xiri-button [button]=\"button\" [disabled]=\"false\" [url]=\"row[column.id][ i ]\"></xiri-button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('href') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<xiri-button [button]=\"button\" [disabled]=\"false\" [url]=\"row[column.id][ i ]\"></xiri-button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('download') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<xiri-button [button]=\"button\" [disabled]=\"false\" [url]=\"row[column.id][ i ]\"></xiri-button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('dialog') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<xiri-buttonstyle [button]=\"button\" [disabled]=\"false\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t (click)=\"openDialog( $event, button, column.id, i, row)\"></xiri-buttonstyle>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('api') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<xiri-buttonstyle [button]=\"button\" [disabled]=\"false\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t (click)=\"apiCall( $event, row[column.id][ i ] )\"></xiri-buttonstyle>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('save') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<xiri-buttonstyle [button]=\"button\" (click)=\"saveCall( $event, button, row, row[column.id][ i ] )\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t [disabled]=\"!saveCallCheck( button, row )\"></xiri-buttonstyle>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('icon') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon class=\"btnicon\" [class]=\"button.color || 'primary'\" [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\">{{ button.icon }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('menu') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button mat-icon-button [matMenuTriggerFor]=\"menuRef\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t [class]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t [attr.aria-label]=\"button.hint || button.text\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t (click)=\"$event.stopPropagation()\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon>{{ button.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-menu #menuRef=\"matMenu\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@for (item of button.menuItems; track item; let j = $index) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (row[column.id][i][j] !== false) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@switch (item.action) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('link') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@let menuUrl = row[column.id][i][j] | xiriUrl;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a mat-menu-item [routerLink]=\"menuUrl?.path\" [queryParams]=\"menuUrl?.queryParams\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"item.color || 'primary'\">{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ item.text }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('href') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a mat-menu-item [href]=\"row[column.id][i][j]\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"item.color || 'primary'\">{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ item.text }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('dialog') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button mat-menu-item (click)=\"openMenuDialog($event, item, column.id, i, j, row)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"item.color || 'primary'\">{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ item.text }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</mat-menu>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('icon') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t\t@if (column.icons?.[ $any(row[ column.id ]) ]; as icon) {\n\t\t\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"icon[ 'color' ] || 'primary'\"\n\t\t\t\t\t\t\t\t\t\t\t [matTooltip]=\"icon[ 'hint' ] || '' \"\n\t\t\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!icon[ 'hint' ]\">{{ icon['icon'] }}\n\t\t\t\t\t\t\t\t\t\t\t</mat-icon>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('html') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [innerHtml]=\"row[column.id] | safeHtml\" [class]=\"column.display\"></td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('link') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\"\n\t\t\t\t\t\t\t\t\t [class.xiri-tree-td]=\"treeEnabled && column.id === treeColumnId\">\n\t\t\t\t\t\t\t\t\t\t@if (treeEnabled && column.id === treeColumnId) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treePrefix; context: { $implicit: row }\"></ng-container>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (row[column.id + 'Link']) {\n\t\t\t\t\t\t\t\t\t\t\t@let cellUrl = row[column.id + 'Link'] | xiriUrl;\n\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"cellUrl?.path\" [queryParams]=\"cellUrl?.queryParams\" class=\"tablelink\">{{ row[column.id] }}</a>\n\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t<span>{{ row[column.id] }}</span>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (treeEnabled && column.id === treeColumnId) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeSuffix; context: { $implicit: row }\"></ng-container>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('input') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t\t<mat-form-field subscriptSizing=\"dynamic\">\n\t\t\t\t\t\t\t\t\t\t\t<input matInput\n\t\t\t\t\t\t\t\t\t\t\t [type]=\"column.inputType || 'text'\"\n\t\t\t\t\t\t\t\t\t\t\t [(ngModel)]=\"row[ column.id ]\"\n\t\t\t\t\t\t\t\t\t\t\t [lang]=\"column.inputLang || ''\"\n\t\t\t\t\t\t\t\t\t\t\t [required]=\"column.inputRequired || true\"\n\t\t\t\t\t\t\t\t\t\t\t (paste)=\"pasteInput( $event, row, column )\">\n\t\t\t\t\t\t\t\t\t\t</mat-form-field>\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('text2') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t\t<div>{{ row[column.id][0] }}</div>\n\t\t\t\t\t\t\t\t\t\t<div>{{ row[column.id][1] }}</div>\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('textn') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t\t@for (line of row[column.id]; track $index) {\n\t\t\t\t\t\t\t\t\t\t\t<div>{{ line }}</div>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('number') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t\t{{ column.textPrefix }}{{ row[column.id][0] }}{{ column.textSuffix }}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('chips') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t\t@if (isSaving(row, column.id)) {\n\t\t\t\t\t\t\t\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t\t\t\t\t\t\t\t} @else if (column.editable && options.editUrl && isEditing(row, column.id)) {\n\t\t\t\t\t\t\t\t\t\t\t@if (editableOptionsLoading()) {\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-form-field class=\"xiri-inline-edit\" subscriptSizing=\"dynamic\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-select multiple\n\t\t\t\t\t\t\t\t\t\t\t\t\t [ngModel]=\"editingChipsValues()\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t (selectionChange)=\"onChipsSelectionChange(row, column, $event.value)\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t (keydown)=\"onInlineEditKeydown($event, row, column)\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t (openedChange)=\"!$event && saveInlineEdit(row, column)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (column.editableOptionsSearch || column.editableSearchUrl) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ngx-mat-select-search [formControl]=\"inlineSearchControl\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t [searching]=\"inlineSearching()\"></ngx-mat-select-search>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</mat-option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t@for (opt of getEditableOptions(column); track opt.value) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-option [value]=\"opt.value\">{{ opt.label }}</mat-option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t\t\t\t\t\t\t\t</mat-form-field>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} @else if (column.editable && options.editUrl) {\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"xiri-editable-cell\" role=\"button\" tabindex=\"0\"\n\t\t\t\t\t\t\t\t\t\t\t (click)=\"startInlineEdit(row, column); $event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t\t (keydown.enter)=\"startInlineEdit(row, column); $event.stopPropagation()\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"xiri-chips-display\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t@for (chip of row[column.id]; track chip.label) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"xiri-chip-display\" [class]=\"chip.color || ''\">{{ chip.label }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon class=\"xiri-edit-icon\">edit</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"xiri-chips-display\">\n\t\t\t\t\t\t\t\t\t\t\t\t@for (chip of row[column.id]; track chip.label) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"xiri-chip-display\" [class]=\"chip.color || ''\">{{ chip.label }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@default {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\"\n\t\t\t\t\t\t\t\t\t [class.xiri-tree-td]=\"treeEnabled && column.id === treeColumnId\">\n\t\t\t\t\t\t\t\t\t\t@if (treeEnabled && column.id === treeColumnId) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treePrefix; context: { $implicit: row }\"></ng-container>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (isSaving(row, column.id)) {\n\t\t\t\t\t\t\t\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t\t\t\t\t\t\t\t} @else if (column.editable && options.editUrl && isEditing(row, column.id)) {\n\t\t\t\t\t\t\t\t\t\t\t@if (column.editableOptions || column.editableOptionsUrl || column.editableSearchUrl) {\n\t\t\t\t\t\t\t\t\t\t\t\t@if (editableOptionsLoading()) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-form-field class=\"xiri-inline-edit\" subscriptSizing=\"dynamic\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-select [(ngModel)]=\"row[column.id]\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t (keydown)=\"onInlineEditKeydown($event, row, column)\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t (openedChange)=\"!$event && saveInlineEdit(row, column)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (column.editableOptionsSearch || column.editableSearchUrl) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ngx-mat-select-search [formControl]=\"inlineSearchControl\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t [searching]=\"inlineSearching()\"></ngx-mat-select-search>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</mat-option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@for (opt of getEditableOptions(column); track opt.value) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-option [value]=\"opt.value\">{{ opt.label }}</mat-option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</mat-form-field>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-form-field class=\"xiri-inline-edit\" subscriptSizing=\"dynamic\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<input matInput\n\t\t\t\t\t\t\t\t\t\t\t\t\t [(ngModel)]=\"row[column.id]\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t (blur)=\"saveInlineEdit(row, column)\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t (keydown)=\"onInlineEditKeydown($event, row, column)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button matSuffix mat-icon-button class=\"xiri-inline-edit-confirm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t (mousedown)=\"$event.preventDefault(); saveInlineEdit(row, column)\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t aria-label=\"\u00C4nderung speichern\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t tabindex=\"-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon>check</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t</mat-form-field>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} @else if (column.editable && options.editUrl) {\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"xiri-editable-cell\" role=\"button\" tabindex=\"0\"\n\t\t\t\t\t\t\t\t\t\t\t (click)=\"startInlineEdit(row, column); $event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t\t (keydown.enter)=\"startInlineEdit(row, column); $event.stopPropagation()\">\n\t\t\t\t\t\t\t\t\t\t\t\t{{ column.textPrefix }}{{ row[column.id] }}{{ column.textSuffix }}\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon class=\"xiri-edit-icon\">edit</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t{{ column.textPrefix }}{{ row[column.id] }}{{ column.textSuffix }}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (treeEnabled && column.id === treeColumnId) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeSuffix; context: { $implicit: row }\"></ng-container>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t<td mat-footer-cell *matFooterCellDef [hidden]=\"!options.footer\"\n\t\t\t\t\t\t\t [style.width]=\"column.width\" [style.min-width]=\"column.minWidth\" class=\"bottomrow\"\n\t\t\t\t\t\t\t [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t@if ( footer[ column.id ] ) {\n\t\t\t\t\t\t\t\t\t\t{{ column.textPrefix }}{{ footer[ column.id ] }}{{ column.textSuffix }}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t\t@if (showSelectColumn) {\n\t\t\t\t\t\t<ng-container matColumnDef=\"select\" [sticky]=\"true\">\n\t\t\t\t\t\t\t<th mat-header-cell *matHeaderCellDef [style.width]=\"'65px'\">\n\t\t\t\t\t\t\t\t<mat-checkbox (change)=\"$event ? masterToggle() : null\"\n\t\t\t\t\t\t\t\t [checked]=\"selection.hasValue() && isAllSelected()\"\n\t\t\t\t\t\t\t\t [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n\t\t\t\t\t\t\t\t</mat-checkbox>\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\">\n\t\t\t\t\t\t\t\t@if (isSelectable(row)) {\n\t\t\t\t\t\t\t\t\t<mat-checkbox\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t\t(change)=\"$event ? toggleRow(row) : null\"\n\t\t\t\t\t\t\t\t\t\t\t[checked]=\"selection.isSelected(row)\">\n\t\t\t\t\t\t\t\t\t</mat-checkbox>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td mat-footer-cell *matFooterCellDef [style.width]=\"'65px'\" class=\"bottomrow\" [hidden]=\"!options.footer\">\n\t\t\t\t\t\t\t\t<mat-checkbox (change)=\"$event ? masterToggle() : null\"\n\t\t\t\t\t\t\t\t [checked]=\"selection.hasValue() && isAllSelected()\"\n\t\t\t\t\t\t\t\t [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n\t\t\t\t\t\t\t\t</mat-checkbox>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\n\t\t\t\t\t@if (extraHeaderFields.length > 0) {\n\t\t\t\t\t\t@for (column of extraHeaderFields; track column.id) {\n\t\t\t\t\t\t\t<ng-container matColumnDef=\"{{ column.id }}\" [sticky]=\"column.sticky\">\n\t\t\t\t\t\t\t\t<th mat-header-cell *matHeaderCellDef [attr.colspan]=\"column.headerSpan\">{{ column.name }}</th>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<tr mat-header-row *matHeaderRowDef=\"extraHeaders; sticky: true\" [class.dense]=\"options.dense\"></tr>\n\t\t\t\t\t}\n\n\t\t\t\t\t<tr mat-header-row *matHeaderRowDef=\"columnsToDisplay; sticky: true\" [class.dense]=\"options.dense\"></tr>\n\t\t\t\t\t<tr mat-row *matRowDef=\"let row; columns: columnsToDisplay;\" (click)=\"clicked(row)\"\n\t\t\t\t\t [class.xiri-tree-dimmed]=\"treeEnabled && row._tree?.dimmed\"></tr>\n\t\t\t\t\t<tr mat-footer-row *matFooterRowDef=\"columnsToDisplay; sticky: true\" [hidden]=\"!options.footer\"></tr>\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t\t<div class=\"loader\" [hidden]=\"!loading()\" [class.has-bottombar]=\"(options.select || options.pagination) && !options.footer\">\n\t\t\t\t<mat-spinner diameter=\"30\"></mat-spinner>\n\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t@if (!loading()) {\n\t\t\t\t@if (!errorMsg && dataSource.filteredData.length === 0) {\n\t\t\t\t\t@if (options.emptyState) {\n\t\t\t\t\t\t<xiri-empty-state [settings]=\"options.emptyState\"></xiri-empty-state>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<div class=\"nodata\">{{ options.textNoData }}</div>\n\t\t\t\t\t}\n\t\t\t\t} @else if (errorMsg) {\n\t\t\t\t\t<div class=\"alert alert-danger\">\n\t\t\t\t\t\t<span>{{ errorMsg }}</span>\n\t\t\t\t\t\t<button mat-button type=\"button\" data-testid=\"table-retry\" (click)=\"reload()\">\n\t\t\t\t\t\t\t<mat-icon>autorenew</mat-icon> Retry\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t<div class=\"xrow xsmall\" [class.bottomrow]=\"(options.select || options.pagination) && !options.footer\">\n\t\t\t\t@if (options.select) {\n\t\t\t\t\t<div class=\"xcol xcol-md-2 select-buttons\">\n\t\t\t\t\t\t@for (button of options.selectButtons; track button) {\n\t\t\t\t\t\t\t@if (!button.hide) {\n\t\t\t\t\t\t\t\t@switch (button.action) {\n\t\t\t\t\t\t\t\t\t@case ('dialog') {\n\t\t\t\t\t\t\t\t\t\t<button mat-icon-button\n\t\t\t\t\t\t\t\t\t\t (click)=\"openDialogSelection( $event, button )\"\n\t\t\t\t\t\t\t\t\t\t [disabled]=\"selection.isEmpty()\"\n\t\t\t\t\t\t\t\t\t\t [color]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t\t\t\t [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\"\n\t\t\t\t\t\t\t\t\t\t [attr.aria-label]=\"button.hint || button.text\">\n\t\t\t\t\t\t\t\t\t\t\t<mat-icon>{{ button.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@case ('api') {\n\t\t\t\t\t\t\t\t\t\t<button mat-icon-button\n\t\t\t\t\t\t\t\t\t\t (click)=\"apiCallSelection( $event, button )\"\n\t\t\t\t\t\t\t\t\t\t [disabled]=\"selection.isEmpty()\"\n\t\t\t\t\t\t\t\t\t\t [color]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t\t\t\t [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\"\n\t\t\t\t\t\t\t\t\t\t [attr.aria-label]=\"button.hint || button.text\">\n\t\t\t\t\t\t\t\t\t\t\t<mat-icon>{{ button.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@case ('download') {\n\t\t\t\t\t\t\t\t\t\t<button mat-icon-button\n\t\t\t\t\t\t\t\t\t\t (click)=\"downloadSelection( $event, button )\"\n\t\t\t\t\t\t\t\t\t\t [disabled]=\"selection.isEmpty()\"\n\t\t\t\t\t\t\t\t\t\t [color]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t\t\t\t [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\"\n\t\t\t\t\t\t\t\t\t\t [attr.aria-label]=\"button.hint || button.text\">\n\t\t\t\t\t\t\t\t\t\t\t<mat-icon>{{ button.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<div class=\"xcol xcol-right-md-10\">\n\t\t\t\t\t<mat-paginator [hidden]=\"!options.pagination\" [pageSizeOptions]=\"options.pageSizes || []\" showFirstLastButtons=\"true\"></mat-paginator>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</mat-card>\n\n@if (dynData.data) {\n\t<ng-container *ngTemplateOutlet=\"dyncomponent(); context: { $implicit: dynData }\"></ng-container>\n}\n\n<!-- Tree mode: indent + expand/collapse arrow rendered before the tree column's content -->\n<ng-template #treePrefix let-row>\n\t<span class=\"xiri-tree-prefix\" [style.padding-left.px]=\"(row._tree?.level || 0) * 24\">\n\t\t@if (row._tree?.hasChildren) {\n\t\t\t<button type=\"button\" class=\"xiri-tree-iconbtn xiri-tree-toggle\" (click)=\"toggleNode($event, row)\"\n\t\t\t tabindex=\"-1\" [attr.aria-label]=\"row._tree.expanded ? 'einklappen' : 'ausklappen'\">\n\t\t\t\t<mat-icon color=\"primary\">{{ row._tree.expanded ? 'expand_more' : 'chevron_right' }}</mat-icon>\n\t\t\t</button>\n\t\t} @else {\n\t\t\t<span class=\"xiri-tree-spacer\"></span>\n\t\t}\n\t</span>\n</ng-template>\n\n<!-- Tree mode: child-count badge (when collapsed) + optional \"+ sub\" button after the content -->\n<ng-template #treeSuffix let-row>\n\t@if (treeShowCounts && row._tree && !row._tree.expanded && row._tree.childCount > 0) {\n\t\t<span class=\"xiri-tree-count\">({{ row._tree.childCount }})</span>\n\t}\n\t@if (treeHasAddSub && treeCanAddSub(row)) {\n\t\t<button type=\"button\" class=\"xiri-tree-iconbtn xiri-tree-addsub\" (click)=\"addSub($event, row)\"\n\t\t tabindex=\"-1\" matTooltip=\"Sub-Eintrag hinzuf\u00FCgen\" aria-label=\"Sub-Eintrag hinzuf\u00FCgen\">\n\t\t\t<mat-icon color=\"primary\">add</mat-icon>\n\t\t</button>\n\t}\n</ng-template>\n", styles: ["mat-card.xiritablecard{padding:0;margin-bottom:var(--xiri-spacing-xl)}.xiritable{width:100%;overflow:auto}.xiritable.canbreak{word-break:break-all}.xiritable .table-full{display:inline-block;width:100%}.xiritable .table-full .xiri-bulk-bar{display:flex;align-items:center;gap:var(--xiri-spacing-sm);padding:var(--xiri-spacing-xs) var(--xiri-spacing-sm);background:var(--secondary-container, var(--mat-sys-secondary-container, #e0e0e0));color:var(--on-secondary-container, var(--mat-sys-on-secondary-container, inherit));border-radius:var(--xiri-radius-sm, 4px);margin-bottom:var(--xiri-spacing-xs)}.xiritable .table-full .xiri-bulk-bar.sticky{position:sticky;top:0;z-index:5}.xiritable .table-full .xiri-bulk-bar .xiri-bulk-count{font-weight:500}.xiritable .table-full .xiri-bulk-bar .xiri-bulk-spacer{flex:1 1 auto}.xiritable .table-full .tableout-wrap{position:relative}.xiritable .table-full .tableout{max-height:60vh;overflow-y:auto;width:100%;min-width:100%;max-width:100%}.xiritable .table-full .tableout.is-loading{min-height:100px}.xiritable .table-full .alert{padding:var(--xiri-spacing-md)}.xiritable .table-full mat-paginator{--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: 51px;--mat-form-field-container-height: 32px;--mat-form-field-container-vertical-padding: 4px}.xiritable .table-full .bottomrow{border-top:1px solid var(--outline-variant, #C2C7CF)}.xiritable .table-full div.bottomrow{background-color:var(--surface-container, #F3F3F6);border-bottom-left-radius:var(--mat-card-elevated-container-shape, 12px);border-bottom-right-radius:var(--mat-card-elevated-container-shape, 12px)}.xiritable .header{background-color:var(--surface-container, #F3F3F6);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;min-height:51px;padding:0 16px;border-bottom:1px solid var(--outline-variant, #C2C7CF);border-top-left-radius:var(--mat-card-elevated-container-shape, 12px);border-top-right-radius:var(--mat-card-elevated-container-shape, 12px)}.xiritable .header .buttons{padding:0 7px 0 .5rem;margin-left:-16px}.xiritable .header .buttons button{z-index:200}.xiritable .header .buttons.saveInput{padding-left:21px}.xiritable .header .middle{flex-grow:1;font-size:var(--xiri-font-size-title);display:flex;padding:0}.xiritable .header xiri-buttonline{padding:0 0 0 16px}.xiritable .header .autorefresh-indicator{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;font-size:var(--xiri-font-size-small, .8rem);color:var(--primary, var(--mat-sys-primary, #006398))}.xiritable .header .autorefresh-indicator mat-icon{font-size:18px;width:18px;height:18px;line-height:18px}.xiritable .header .autorefresh-indicator mat-icon.spin{animation:xiri-autorefresh-spin 1.5s linear infinite}.xiritable .header .lastupdated-indicator{display:inline-flex;align-items:center;padding:2px 8px;font-size:var(--xiri-font-size-small, .8rem);color:var(--on-surface-variant, #44474F);opacity:.75}@keyframes xiri-autorefresh-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.xiritable table{width:100%}.xiritable table.density-regular{--mat-table-header-container-height: 42px;--mat-table-footer-container-height: 42px;--mat-table-row-item-container-height: 42px}.xiritable table.density-compact{--mat-table-header-container-height: 32px;--mat-table-footer-container-height: 32px;--mat-table-row-item-container-height: 32px}.xiritable table.density-relaxed{--mat-table-header-container-height: 52px;--mat-table-footer-container-height: 52px;--mat-table-row-item-container-height: 52px}.xiritable table th.mat-mdc-header-cell:not(:first-of-type),.xiritable table td.mat-mdc-cell:not(:first-of-type),.xiritable table td.mat-mdc-footer-cell:not(:first-of-type){padding-left:5px}.xiritable table th.mat-mdc-header-cell:not(:last-of-type),.xiritable table td.mat-mdc-cell:not(:last-of-type),.xiritable table td.mat-mdc-footer-cell:not(:last-of-type){padding-right:7px}.xiritable table tr.mat-mdc-row{transition:background-color var(--xiri-duration-fast) var(--xiri-easing-standard)}.xiritable table tr.mat-mdc-row:hover{background:var(--surface-variant, #DEE3EB)}.xiritable table .tablelink{text-decoration:underline}.xiritable table td.buttons xiri-button,.xiritable table td.buttons xiri-buttonstyle,.xiritable table td.buttons .btnicon{margin-right:8px}.xiritable table td.buttons xiri-button:last-child,.xiritable table td.buttons xiri-buttonstyle:last-child,.xiritable table td.buttons .btnicon:last-child{margin-right:0}.xiritable table td.number,.xiritable table th.number,.xiritable table td.mat-mdc-footer-cell.number{text-align:right;font-variant-numeric:tabular-nums}.xiritable table td.right,.xiritable table td.align-right,.xiritable table th.right,.xiritable table th.align-right{text-align:right}.xiritable table td.center,.xiritable table td.align-center,.xiritable table th.center,.xiritable table th.align-center{text-align:center}.xiritable table td.left,.xiritable table td.align-left,.xiritable table th.left,.xiritable table th.align-left{text-align:left}.xiritable table td.vertical,.xiritable table th.vertical{writing-mode:sideways-rl;text-orientation:sideways}.xiritable table td.vertical div,.xiritable table th.vertical div{max-height:6rem}.xiritable table td.sideways,.xiritable table th.sideways{writing-mode:sideways-lr;text-orientation:sideways}.xiritable table td.sideways div,.xiritable table th.sideways div{max-height:6rem}.xiritable table td.upright,.xiritable table th.upright{writing-mode:vertical-rl;text-orientation:upright}.xiritable table.borders td+td{border-left:1px solid var(--outline-variant, #C2C7CF)}.xiritable table.bordersHeader th+th{border-left:1px solid var(--outline-variant, #C2C7CF)}.xiritable table td.mat-mdc-cell mat-form-field{--mat-form-field-container-height: 40px;--mat-form-field-container-vertical-padding: 8px}.xiritable .xiri-editable-cell{cursor:pointer;display:inline-flex;align-items:center;border-radius:var(--xiri-radius-xs);padding:2px 4px}.xiritable .xiri-editable-cell:hover,.xiritable .xiri-editable-cell:focus-visible{background-color:var(--surface-variant, #DEE3EB)}.xiritable .xiri-editable-cell:hover .xiri-edit-icon,.xiritable .xiri-editable-cell:focus-visible .xiri-edit-icon{opacity:1}.xiritable .xiri-edit-icon{opacity:0;font-size:14px;width:14px;height:14px;margin-left:4px;color:var(--on-surface-variant, #44474F);transition:opacity var(--xiri-duration-fast) var(--xiri-easing-standard)}.xiritable .xiri-inline-edit{--mat-form-field-container-height: 36px;--mat-form-field-container-vertical-padding: 6px;width:100%}.xiritable .xiri-inline-edit-confirm{--mdc-icon-button-icon-size: 18px;--mdc-icon-button-state-layer-size: 28px;width:28px;height:28px;padding:0;margin-right:5px;color:var(--primary, #1976d2);display:inline-flex;align-items:center;justify-content:center}.xiritable .xiri-inline-edit-confirm mat-icon{display:flex;align-items:center;justify-content:center;width:18px;height:18px;font-size:18px}.xiritable .mat-column-select{overflow:initial}.xiritable .select-buttons{padding:.3rem .8rem;display:flex;align-items:center}.xiritable .select-buttons button{margin-right:.5rem}.xiritable .xiri-cell-saved{animation:pulse .5s var(--xiri-easing-standard);border-radius:var(--xiri-radius-xs)}.xiritable .nodata{padding:.5rem 1.5rem;font-size:var(--xiri-font-size-label);background-color:var(--surface, #FFFFFF);animation:fadeInUp var(--xiri-duration-normal) var(--xiri-easing-decelerate)}.xiritable .loader{position:absolute;top:0;left:0;width:100%;bottom:0;display:flex;justify-content:center;align-items:center;background-color:var(--ripple, rgba(206, 212, 218, .5));z-index:200;border-bottom-left-radius:var(--mat-card-elevated-container-shape, 12px);border-bottom-right-radius:var(--mat-card-elevated-container-shape, 12px);animation:fadeIn var(--xiri-duration-fast) var(--xiri-easing-standard)}.xiritable .loader.has-bottombar{border-bottom-left-radius:0;border-bottom-right-radius:0}xiri-dyncomponent{margin-bottom:var(--xiri-spacing-xl)}[hidden]{display:none!important}.xiri-tree-actions{display:flex;align-items:center}td.xiri-tree-td{white-space:nowrap}td.xiri-tree-td .xiri-tree-prefix{display:inline-flex;align-items:center;vertical-align:middle}td.xiri-tree-td .xiri-tree-iconbtn{appearance:none;border:0;background:transparent;padding:0;margin:0;flex:0 0 24px;width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;border-radius:50%;cursor:pointer;-webkit-tap-highlight-color:transparent}td.xiri-tree-td .xiri-tree-iconbtn .mat-icon{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;font-size:20px;line-height:20px;margin:0}td.xiri-tree-td .xiri-tree-iconbtn:hover{background:#0000000f}td.xiri-tree-td .xiri-tree-iconbtn:focus-visible{outline:2px solid var(--primary, var(--mat-sys-primary, currentColor));outline-offset:-2px}td.xiri-tree-td .xiri-tree-spacer{width:24px;height:24px;flex:0 0 24px}td.xiri-tree-td .xiri-tree-count{margin-left:var(--xiri-spacing-xs, 4px);opacity:.6;font-size:.85em}td.xiri-tree-td .xiri-tree-addsub{margin-left:var(--xiri-spacing-xs, 4px);opacity:0;transition:opacity .15s ease-in-out}tr.mat-mdc-row:hover td.xiri-tree-td .xiri-tree-addsub,td.xiri-tree-td .xiri-tree-addsub:focus-visible{opacity:1}tr.xiri-tree-dimmed{opacity:.6}\n"], dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: XiriButtonlineComponent, selector: "xiri-buttonline", inputs: ["settings", "disabled", "filterData"], outputs: ["result"] }, { kind: "component", type: XiriSearchComponent, selector: "xiri-search", inputs: ["placeholder", "open", "reset", "escape", "focus", "text"], outputs: ["changed"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "component", type: MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "component", type: XiriButtonstyleComponent, selector: "xiri-buttonstyle", inputs: ["button", "disabled", "loading", "countdown", "pollText"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: NgxMatSelectSearchModule }, { kind: "component", type: i2.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: XiriButtonComponent, selector: "xiri-button", inputs: ["button", "disabled", "filterData", "url"], outputs: ["result"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "component", type: MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "directive", type: MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "directive", type: MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption$1, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: XiriEmptyStateComponent, selector: "xiri-empty-state", inputs: ["settings"], outputs: ["buttonResult"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: SafehtmlPipe, name: "safeHtml" }, { kind: "pipe", type: XiriUrlPipe, name: "xiriUrl" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
5629
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5630
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriTableComponent, isStandalone: true, selector: "xiri-table", inputs: { dyncomponent: { classPropertyName: "dyncomponent", publicName: "dyncomponent", isSignal: true, isRequired: false, transformFunction: null }, settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null }, filterData: { classPropertyName: "filterData", publicName: "filterData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickedRow: "clickedRow" }, providers: [XiriTableInlineEditService, XiriTableTreeService], viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, isSignal: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true, isSignal: true }, { propertyName: "table", first: true, predicate: MatTable, descendants: true, isSignal: true }], ngImport: i0, template: "<mat-card class=\"xiritablecard mat-mdc-elevation-specific mat-elevation-z3\">\n\t<div class=\"xiritable\" [class]=\"options.class\">\n\t\t<div class=\"table-full\">\n\t\t\t@if (bulkBarActive) {\n\t\t\t\t<div class=\"xiri-bulk-bar\" [class.sticky]=\"options.stickyBulkBar\" role=\"toolbar\"\n\t\t\t\t aria-label=\"Massenaktionen\" data-testid=\"table-bulk-bar\">\n\t\t\t\t\t<button mat-icon-button (click)=\"cancelBulk()\" matTooltip=\"Auswahl aufheben\"\n\t\t\t\t\t aria-label=\"Auswahl aufheben\">\n\t\t\t\t\t\t<mat-icon>close</mat-icon>\n\t\t\t\t\t</button>\n\t\t\t\t\t<span class=\"xiri-bulk-count\" aria-live=\"polite\" data-testid=\"table-bulk-count\">\n\t\t\t\t\t\t@if (bulkAllResults()) {\n\t\t\t\t\t\t\tAlle {{ bulkTotalCount() }} Ergebnisse ausgew\u00E4hlt\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t{{ selection.selected.length }} ausgew\u00E4hlt\n\t\t\t\t\t\t}\n\t\t\t\t\t</span>\n\t\t\t\t\t@if (canSelectAllResults()) {\n\t\t\t\t\t\t<button mat-button color=\"primary\" (click)=\"selectAllResults()\"\n\t\t\t\t\t\t data-testid=\"table-bulk-selectall\">\n\t\t\t\t\t\t\tAlle {{ bulkTotalCount() }} Ergebnisse ausw\u00E4hlen\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t\t<span class=\"xiri-bulk-spacer\"></span>\n\t\t\t\t\t@for (button of options.bulkActions; track button) {\n\t\t\t\t\t\t@if (!button.hide) {\n\t\t\t\t\t\t\t<button mat-button [color]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t (click)=\"bulkAction($event, button)\"\n\t\t\t\t\t\t\t [matTooltip]=\"button.hint\" [matTooltipDisabled]=\"!button.hint\">\n\t\t\t\t\t\t\t\t@if (button.icon) {\n\t\t\t\t\t\t\t\t\t<mat-icon>{{ button.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t{{ button.text }}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<div class=\"header\" [hidden]=\"bulkBarActive\">\n\t\t\t\t@if (options.reload) {\n\t\t\t\t\t<div class=\"buttons\">\n\t\t\t\t\t\t<button mat-icon-button (click)=\"reload()\" color=\"primary\" aria-label=\"Tabelle neu laden\">\n\t\t\t\t\t\t\t<mat-icon>autorenew</mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (autoRefresh()) {\n\t\t\t\t\t<div class=\"autorefresh-indicator\" role=\"status\" aria-live=\"polite\"\n\t\t\t\t\t matTooltip=\"Tabelle aktualisiert sich automatisch\">\n\t\t\t\t\t\t<mat-icon class=\"spin\">sync</mat-icon>\n\t\t\t\t\t\t<span>Auto-Refresh aktiv \u00B7 n\u00E4chste in {{ countdown() }}s</span>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (lastUpdated(); as updated) {\n\t\t\t\t\t<div class=\"lastupdated-indicator\" data-testid=\"table-last-updated\" role=\"status\" aria-live=\"polite\">\n\t\t\t\t\t\tStand {{ updated | date:'HH:mm' }}\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (treeEnabled) {\n\t\t\t\t\t<div class=\"buttons xiri-tree-actions\">\n\t\t\t\t\t\t<button mat-icon-button (click)=\"expandAllNodes()\" color=\"primary\"\n\t\t\t\t\t\t matTooltip=\"Alle ausklappen\" aria-label=\"Alle ausklappen\">\n\t\t\t\t\t\t\t<mat-icon>unfold_more</mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button mat-icon-button (click)=\"collapseAllNodes()\" color=\"primary\"\n\t\t\t\t\t\t matTooltip=\"Alle einklappen\" aria-label=\"Alle einklappen\">\n\t\t\t\t\t\t\t<mat-icon>unfold_less</mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<div class=\"middle\" [class.hasButtons]=\"options.buttons\">{{ options.title }}</div>\n\t\t\t\t@if (options.buttons) {\n\t\t\t\t\t<xiri-buttonline [settings]=\"options.buttons\" (result)=\"buttonReturn($event)\"\n\t\t\t\t\t [filterData]=\"_filterData()\"></xiri-buttonline>\n\t\t\t\t}\n\t\t\t\t@if (options.search) {\n\t\t\t\t\t<xiri-search (changed)=\"searchDo($event)\" [placeholder]=\"''\" [text]=\"searchTextInit\"></xiri-search>\n\t\t\t\t}\n\t\t\t\t@if (options.saveInput) {\n\t\t\t\t\t<div class=\"buttons saveInput\">\n\t\t\t\t\t\t<button mat-raised-button (click)=\"saveInputData()\" color=\"primary\">\n\t\t\t\t\t\t\t{{ options.saveInput }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"tableout-wrap\">\n\t\t\t<div class=\"tableout\" [class.is-loading]=\"loading()\" [style.max-height]=\"options.scrollHeight || null\">\n\t\t\t\t<table mat-table [dataSource]=\"dataSource\" matSort [style.min-width]=\"options.minWidth ?? '100%'\"\n\t\t\t\t [class]=\"densityClass()\"\n\t\t\t\t [class.borders]=\"options.borders\" [class.bordersHeader]=\"options.bordersHeader\"\n\t\t\t\t [trackBy]=\"trackByRowId\">\n\n\t\t\t\t\t@for (column of displayedColumns; track column.id) {\n\t\t\t\t\t\t<ng-container [matColumnDef]=\"column.id\" [sticky]=\"column.sticky\">\n\t\t\t\t\t\t\t<th mat-header-cell *matHeaderCellDef mat-sort-header=\"{{ column.id }}\" [disabled]=\"!column.sort || !options.sort\" disableClear\n\t\t\t\t\t\t\t [style.width]=\"column.width\" [style.min-width]=\"column.minWidth\"\n\t\t\t\t\t\t\t [class]=\"column.display + ' ' + (column.header || '')\"> {{ column.name }}\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t@switch (column.format) {\n\t\t\t\t\t\t\t\t@case ('buttons') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t\t@for (button of column.buttons; track button; let i = $index) {\n\t\t\t\t\t\t\t\t\t\t\t@if (row[column.id][i] !== false && !button.hide) {\n\t\t\t\t\t\t\t\t\t\t\t\t@switch (button.action) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('link') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<xiri-button [button]=\"button\" [disabled]=\"false\" [url]=\"row[column.id][ i ]\"></xiri-button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('href') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<xiri-button [button]=\"button\" [disabled]=\"false\" [url]=\"row[column.id][ i ]\"></xiri-button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('download') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<xiri-button [button]=\"button\" [disabled]=\"false\" [url]=\"row[column.id][ i ]\"></xiri-button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('dialog') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<xiri-buttonstyle [button]=\"button\" [disabled]=\"false\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t (click)=\"openDialog( $event, button, column.id, i, row)\"></xiri-buttonstyle>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('api') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<xiri-buttonstyle [button]=\"button\" [disabled]=\"false\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t (click)=\"apiCall( $event, row[column.id][ i ] )\"></xiri-buttonstyle>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('save') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<xiri-buttonstyle [button]=\"button\" (click)=\"saveCall( $event, button, row, row[column.id][ i ] )\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t [disabled]=\"!saveCallCheck( button, row )\"></xiri-buttonstyle>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('icon') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon class=\"btnicon\" [class]=\"button.color || 'primary'\" [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\">{{ button.icon }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('menu') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button mat-icon-button [matMenuTriggerFor]=\"menuRef\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t [class]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t [attr.aria-label]=\"button.hint || button.text\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t (click)=\"$event.stopPropagation()\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon>{{ button.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-menu #menuRef=\"matMenu\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@for (item of button.menuItems; track item; let j = $index) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (row[column.id][i][j] !== false) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@switch (item.action) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('link') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@let menuUrl = row[column.id][i][j] | xiriUrl;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a mat-menu-item [routerLink]=\"menuUrl?.path\" [queryParams]=\"menuUrl?.queryParams\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"item.color || 'primary'\">{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ item.text }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('href') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a mat-menu-item [href]=\"row[column.id][i][j]\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"item.color || 'primary'\">{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ item.text }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@case ('dialog') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button mat-menu-item (click)=\"openMenuDialog($event, item, column.id, i, j, row)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"item.color || 'primary'\">{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ item.text }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</mat-menu>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('icon') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t\t@if (column.icons?.[ $any(row[ column.id ]) ]; as icon) {\n\t\t\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"icon[ 'color' ] || 'primary'\"\n\t\t\t\t\t\t\t\t\t\t\t [matTooltip]=\"icon[ 'hint' ] || '' \"\n\t\t\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!icon[ 'hint' ]\">{{ icon['icon'] }}\n\t\t\t\t\t\t\t\t\t\t\t</mat-icon>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('html') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [innerHtml]=\"row[column.id] | safeHtml\" [class]=\"column.display\"></td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('link') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\"\n\t\t\t\t\t\t\t\t\t [class.xiri-tree-td]=\"treeEnabled && column.id === treeColumnId\">\n\t\t\t\t\t\t\t\t\t\t@if (treeEnabled && column.id === treeColumnId) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treePrefix; context: { $implicit: row }\"></ng-container>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (row[column.id + 'Link']) {\n\t\t\t\t\t\t\t\t\t\t\t@let cellUrl = row[column.id + 'Link'] | xiriUrl;\n\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"cellUrl?.path\" [queryParams]=\"cellUrl?.queryParams\" class=\"tablelink\">{{ row[column.id] }}</a>\n\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t<span>{{ row[column.id] }}</span>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (treeEnabled && column.id === treeColumnId) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeSuffix; context: { $implicit: row }\"></ng-container>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('input') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t\t<mat-form-field subscriptSizing=\"dynamic\">\n\t\t\t\t\t\t\t\t\t\t\t<input matInput\n\t\t\t\t\t\t\t\t\t\t\t [type]=\"column.inputType || 'text'\"\n\t\t\t\t\t\t\t\t\t\t\t [(ngModel)]=\"row[ column.id ]\"\n\t\t\t\t\t\t\t\t\t\t\t [lang]=\"column.inputLang || ''\"\n\t\t\t\t\t\t\t\t\t\t\t [required]=\"column.inputRequired || true\"\n\t\t\t\t\t\t\t\t\t\t\t (paste)=\"pasteInput( $event, row, column )\">\n\t\t\t\t\t\t\t\t\t\t</mat-form-field>\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('text2') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t\t<div>{{ row[column.id][0] }}</div>\n\t\t\t\t\t\t\t\t\t\t<div>{{ row[column.id][1] }}</div>\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('textn') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t\t@for (line of row[column.id]; track $index) {\n\t\t\t\t\t\t\t\t\t\t\t<div>{{ line }}</div>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('number') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t\t{{ column.textPrefix }}{{ row[column.id][0] }}{{ column.textSuffix }}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('chips') {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t\t@if (isSaving(row, column.id)) {\n\t\t\t\t\t\t\t\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t\t\t\t\t\t\t\t} @else if (column.editable && options.editUrl && isEditing(row, column.id)) {\n\t\t\t\t\t\t\t\t\t\t\t@if (editableOptionsLoading()) {\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-form-field class=\"xiri-inline-edit\" subscriptSizing=\"dynamic\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-select multiple\n\t\t\t\t\t\t\t\t\t\t\t\t\t [ngModel]=\"editingChipsValues()\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t (selectionChange)=\"onChipsSelectionChange(row, column, $event.value)\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t (keydown)=\"onInlineEditKeydown($event, row, column)\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t (openedChange)=\"!$event && saveInlineEdit(row, column)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (column.editableOptionsSearch || column.editableSearchUrl) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ngx-mat-select-search [formControl]=\"inlineSearchControl\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t [searching]=\"inlineSearching()\"></ngx-mat-select-search>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</mat-option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t@for (opt of getEditableOptions(column); track opt.value) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-option [value]=\"opt.value\">{{ opt.label }}</mat-option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t\t\t\t\t\t\t\t</mat-form-field>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} @else if (column.editable && options.editUrl) {\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"xiri-editable-cell\" role=\"button\" tabindex=\"0\"\n\t\t\t\t\t\t\t\t\t\t\t (click)=\"startInlineEdit(row, column); $event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t\t (keydown.enter)=\"startInlineEdit(row, column); $event.stopPropagation()\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"xiri-chips-display\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t@for (chip of row[column.id]; track chip.label) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"xiri-chip-display\" [class]=\"chip.color || ''\">{{ chip.label }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon class=\"xiri-edit-icon\">edit</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"xiri-chips-display\">\n\t\t\t\t\t\t\t\t\t\t\t\t@for (chip of row[column.id]; track chip.label) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"xiri-chip-display\" [class]=\"chip.color || ''\">{{ chip.label }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@default {\n\t\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\" [class]=\"column.display\"\n\t\t\t\t\t\t\t\t\t [class.xiri-tree-td]=\"treeEnabled && column.id === treeColumnId\">\n\t\t\t\t\t\t\t\t\t\t@if (treeEnabled && column.id === treeColumnId) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treePrefix; context: { $implicit: row }\"></ng-container>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (isSaving(row, column.id)) {\n\t\t\t\t\t\t\t\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t\t\t\t\t\t\t\t} @else if (column.editable && options.editUrl && isEditing(row, column.id)) {\n\t\t\t\t\t\t\t\t\t\t\t@if (column.editableOptions || column.editableOptionsUrl || column.editableSearchUrl) {\n\t\t\t\t\t\t\t\t\t\t\t\t@if (editableOptionsLoading()) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-form-field class=\"xiri-inline-edit\" subscriptSizing=\"dynamic\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-select [(ngModel)]=\"row[column.id]\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t (keydown)=\"onInlineEditKeydown($event, row, column)\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t (openedChange)=\"!$event && saveInlineEdit(row, column)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (column.editableOptionsSearch || column.editableSearchUrl) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ngx-mat-select-search [formControl]=\"inlineSearchControl\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t [searching]=\"inlineSearching()\"></ngx-mat-select-search>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</mat-option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@for (opt of getEditableOptions(column); track opt.value) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-option [value]=\"opt.value\">{{ opt.label }}</mat-option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</mat-select>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</mat-form-field>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-form-field class=\"xiri-inline-edit\" subscriptSizing=\"dynamic\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<input matInput\n\t\t\t\t\t\t\t\t\t\t\t\t\t [(ngModel)]=\"row[column.id]\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t (blur)=\"saveInlineEdit(row, column)\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t (keydown)=\"onInlineEditKeydown($event, row, column)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button matSuffix mat-icon-button class=\"xiri-inline-edit-confirm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t (mousedown)=\"$event.preventDefault(); saveInlineEdit(row, column)\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t aria-label=\"\u00C4nderung speichern\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t tabindex=\"-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon>check</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t</mat-form-field>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} @else if (column.editable && options.editUrl) {\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"xiri-editable-cell\" role=\"button\" tabindex=\"0\"\n\t\t\t\t\t\t\t\t\t\t\t (click)=\"startInlineEdit(row, column); $event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t\t (keydown.enter)=\"startInlineEdit(row, column); $event.stopPropagation()\">\n\t\t\t\t\t\t\t\t\t\t\t\t{{ column.textPrefix }}{{ row[column.id] }}{{ column.textSuffix }}\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon class=\"xiri-edit-icon\">edit</mat-icon>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t{{ column.textPrefix }}{{ row[column.id] }}{{ column.textSuffix }}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (treeEnabled && column.id === treeColumnId) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeSuffix; context: { $implicit: row }\"></ng-container>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t<td mat-footer-cell *matFooterCellDef [hidden]=\"!options.footer\"\n\t\t\t\t\t\t\t [style.width]=\"column.width\" [style.min-width]=\"column.minWidth\" class=\"bottomrow\"\n\t\t\t\t\t\t\t [class]=\"column.display\">\n\t\t\t\t\t\t\t\t\t@if ( footer[ column.id ] ) {\n\t\t\t\t\t\t\t\t\t\t{{ column.textPrefix }}{{ footer[ column.id ] }}{{ column.textSuffix }}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\t\t\t\t\t@if (showSelectColumn) {\n\t\t\t\t\t\t<ng-container matColumnDef=\"select\" [sticky]=\"true\">\n\t\t\t\t\t\t\t<th mat-header-cell *matHeaderCellDef [style.width]=\"'65px'\">\n\t\t\t\t\t\t\t\t<mat-checkbox (change)=\"$event ? masterToggle() : null\"\n\t\t\t\t\t\t\t\t [checked]=\"selection.hasValue() && isAllSelected()\"\n\t\t\t\t\t\t\t\t [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n\t\t\t\t\t\t\t\t</mat-checkbox>\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\">\n\t\t\t\t\t\t\t\t@if (isSelectable(row)) {\n\t\t\t\t\t\t\t\t\t<mat-checkbox\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t\t(change)=\"$event ? toggleRow(row) : null\"\n\t\t\t\t\t\t\t\t\t\t\t[checked]=\"selection.isSelected(row)\">\n\t\t\t\t\t\t\t\t\t</mat-checkbox>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td mat-footer-cell *matFooterCellDef [style.width]=\"'65px'\" class=\"bottomrow\" [hidden]=\"!options.footer\">\n\t\t\t\t\t\t\t\t<mat-checkbox (change)=\"$event ? masterToggle() : null\"\n\t\t\t\t\t\t\t\t [checked]=\"selection.hasValue() && isAllSelected()\"\n\t\t\t\t\t\t\t\t [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n\t\t\t\t\t\t\t\t</mat-checkbox>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t}\n\n\t\t\t\t\t@if (extraHeaderFields.length > 0) {\n\t\t\t\t\t\t@for (column of extraHeaderFields; track column.id) {\n\t\t\t\t\t\t\t<ng-container matColumnDef=\"{{ column.id }}\" [sticky]=\"column.sticky\">\n\t\t\t\t\t\t\t\t<th mat-header-cell *matHeaderCellDef [attr.colspan]=\"column.headerSpan\">{{ column.name }}</th>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<tr mat-header-row *matHeaderRowDef=\"extraHeaders; sticky: true\" [class.dense]=\"options.dense\"></tr>\n\t\t\t\t\t}\n\n\t\t\t\t\t<tr mat-header-row *matHeaderRowDef=\"columnsToDisplay; sticky: true\" [class.dense]=\"options.dense\"></tr>\n\t\t\t\t\t<tr mat-row *matRowDef=\"let row; columns: columnsToDisplay;\" (click)=\"clicked(row)\"\n\t\t\t\t\t [class.xiri-tree-dimmed]=\"treeEnabled && row._tree?.dimmed\"></tr>\n\t\t\t\t\t<tr mat-footer-row *matFooterRowDef=\"columnsToDisplay; sticky: true\" [hidden]=\"!options.footer\"></tr>\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t\t<div class=\"loader\" [hidden]=\"!loading()\" [class.has-bottombar]=\"(options.select || options.pagination) && !options.footer\">\n\t\t\t\t<mat-spinner diameter=\"30\"></mat-spinner>\n\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t@if (!loading()) {\n\t\t\t\t@if (!errorMsg && dataSource.filteredData.length === 0) {\n\t\t\t\t\t@if (options.emptyState) {\n\t\t\t\t\t\t<xiri-empty-state [settings]=\"options.emptyState\"></xiri-empty-state>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<div class=\"nodata\">{{ options.textNoData }}</div>\n\t\t\t\t\t}\n\t\t\t\t} @else if (errorMsg) {\n\t\t\t\t\t<div class=\"alert alert-danger\">\n\t\t\t\t\t\t<span>{{ errorMsg }}</span>\n\t\t\t\t\t\t<button mat-button type=\"button\" data-testid=\"table-retry\" (click)=\"reload()\">\n\t\t\t\t\t\t\t<mat-icon>autorenew</mat-icon> Retry\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t<div class=\"xrow xsmall\" [class.bottomrow]=\"(options.select || options.pagination) && !options.footer\">\n\t\t\t\t@if (options.select) {\n\t\t\t\t\t<div class=\"xcol xcol-md-2 select-buttons\">\n\t\t\t\t\t\t@for (button of options.selectButtons; track button) {\n\t\t\t\t\t\t\t@if (!button.hide) {\n\t\t\t\t\t\t\t\t@switch (button.action) {\n\t\t\t\t\t\t\t\t\t@case ('dialog') {\n\t\t\t\t\t\t\t\t\t\t<button mat-icon-button\n\t\t\t\t\t\t\t\t\t\t (click)=\"openDialogSelection( $event, button )\"\n\t\t\t\t\t\t\t\t\t\t [disabled]=\"selection.isEmpty()\"\n\t\t\t\t\t\t\t\t\t\t [color]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t\t\t\t [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\"\n\t\t\t\t\t\t\t\t\t\t [attr.aria-label]=\"button.hint || button.text\">\n\t\t\t\t\t\t\t\t\t\t\t<mat-icon>{{ button.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@case ('api') {\n\t\t\t\t\t\t\t\t\t\t<button mat-icon-button\n\t\t\t\t\t\t\t\t\t\t (click)=\"apiCallSelection( $event, button )\"\n\t\t\t\t\t\t\t\t\t\t [disabled]=\"selection.isEmpty()\"\n\t\t\t\t\t\t\t\t\t\t [color]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t\t\t\t [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\"\n\t\t\t\t\t\t\t\t\t\t [attr.aria-label]=\"button.hint || button.text\">\n\t\t\t\t\t\t\t\t\t\t\t<mat-icon>{{ button.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@case ('download') {\n\t\t\t\t\t\t\t\t\t\t<button mat-icon-button\n\t\t\t\t\t\t\t\t\t\t (click)=\"downloadSelection( $event, button )\"\n\t\t\t\t\t\t\t\t\t\t [disabled]=\"selection.isEmpty()\"\n\t\t\t\t\t\t\t\t\t\t [color]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t\t\t\t [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\"\n\t\t\t\t\t\t\t\t\t\t [attr.aria-label]=\"button.hint || button.text\">\n\t\t\t\t\t\t\t\t\t\t\t<mat-icon>{{ button.icon }}</mat-icon>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<div class=\"xcol xcol-right-md-10\">\n\t\t\t\t\t<mat-paginator [hidden]=\"!options.pagination\" [pageSizeOptions]=\"options.pageSizes || []\" showFirstLastButtons=\"true\"></mat-paginator>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</mat-card>\n\n@if (dynData.data) {\n\t<ng-container *ngTemplateOutlet=\"dyncomponent(); context: { $implicit: dynData }\"></ng-container>\n}\n\n<!-- Tree mode: indent + expand/collapse arrow rendered before the tree column's content -->\n<ng-template #treePrefix let-row>\n\t<span class=\"xiri-tree-prefix\" [style.padding-left.px]=\"(row._tree?.level || 0) * 24\">\n\t\t@if (row._tree?.hasChildren) {\n\t\t\t<button type=\"button\" class=\"xiri-tree-iconbtn xiri-tree-toggle\" (click)=\"toggleNode($event, row)\"\n\t\t\t tabindex=\"-1\" [attr.aria-label]=\"row._tree.expanded ? 'einklappen' : 'ausklappen'\">\n\t\t\t\t<mat-icon color=\"primary\">{{ row._tree.expanded ? 'expand_more' : 'chevron_right' }}</mat-icon>\n\t\t\t</button>\n\t\t} @else {\n\t\t\t<span class=\"xiri-tree-spacer\"></span>\n\t\t}\n\t</span>\n</ng-template>\n\n<!-- Tree mode: child-count badge (when collapsed) + optional \"+ sub\" button after the content -->\n<ng-template #treeSuffix let-row>\n\t@if (treeShowCounts && row._tree && !row._tree.expanded && row._tree.childCount > 0) {\n\t\t<span class=\"xiri-tree-count\">({{ row._tree.childCount }})</span>\n\t}\n\t@if (treeHasAddSub && treeCanAddSub(row)) {\n\t\t<button type=\"button\" class=\"xiri-tree-iconbtn xiri-tree-addsub\" (click)=\"addSub($event, row)\"\n\t\t tabindex=\"-1\" matTooltip=\"Sub-Eintrag hinzuf\u00FCgen\" aria-label=\"Sub-Eintrag hinzuf\u00FCgen\">\n\t\t\t<mat-icon color=\"primary\">add</mat-icon>\n\t\t</button>\n\t}\n</ng-template>\n", styles: ["mat-card.xiritablecard{padding:0;margin-bottom:var(--xiri-spacing-xl)}.xiritable{width:100%;overflow:auto}.xiritable.canbreak{word-break:break-all}.xiritable .table-full{display:inline-block;width:100%}.xiritable .table-full .xiri-bulk-bar{display:flex;align-items:center;gap:var(--xiri-spacing-sm);padding:var(--xiri-spacing-xs) var(--xiri-spacing-sm);background:var(--secondary-container, var(--mat-sys-secondary-container, #e0e0e0));color:var(--on-secondary-container, var(--mat-sys-on-secondary-container, inherit));border-radius:var(--xiri-radius-sm, 4px);margin-bottom:var(--xiri-spacing-xs)}.xiritable .table-full .xiri-bulk-bar.sticky{position:sticky;top:0;z-index:5}.xiritable .table-full .xiri-bulk-bar .xiri-bulk-count{font-weight:500}.xiritable .table-full .xiri-bulk-bar .xiri-bulk-spacer{flex:1 1 auto}.xiritable .table-full .tableout-wrap{position:relative}.xiritable .table-full .tableout{max-height:60vh;overflow-y:auto;width:100%;min-width:100%;max-width:100%}.xiritable .table-full .tableout.is-loading{min-height:100px}.xiritable .table-full .alert{padding:var(--xiri-spacing-md)}.xiritable .table-full mat-paginator{--mat-paginator-container-background-color: transparent;--mat-paginator-container-size: 51px;--mat-form-field-container-height: 32px;--mat-form-field-container-vertical-padding: 4px}.xiritable .table-full .bottomrow{border-top:1px solid var(--outline-variant, #C2C7CF)}.xiritable .table-full div.bottomrow{background-color:var(--surface-container, #F3F3F6);border-bottom-left-radius:var(--mat-card-elevated-container-shape, 12px);border-bottom-right-radius:var(--mat-card-elevated-container-shape, 12px)}.xiritable .header{background-color:var(--surface-container, #F3F3F6);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;min-height:51px;padding:0 16px;border-bottom:1px solid var(--outline-variant, #C2C7CF);border-top-left-radius:var(--mat-card-elevated-container-shape, 12px);border-top-right-radius:var(--mat-card-elevated-container-shape, 12px)}.xiritable .header .buttons{padding:0 7px 0 .5rem;margin-left:-16px}.xiritable .header .buttons button{z-index:200}.xiritable .header .buttons.saveInput{padding-left:21px}.xiritable .header .middle{flex-grow:1;font-size:var(--xiri-font-size-title);display:flex;padding:0}.xiritable .header xiri-buttonline{padding:0 0 0 16px}.xiritable .header .autorefresh-indicator{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;font-size:var(--xiri-font-size-small, .8rem);color:var(--primary, var(--mat-sys-primary, #006398))}.xiritable .header .autorefresh-indicator mat-icon{font-size:18px;width:18px;height:18px;line-height:18px}.xiritable .header .autorefresh-indicator mat-icon.spin{animation:xiri-autorefresh-spin 1.5s linear infinite}.xiritable .header .lastupdated-indicator{display:inline-flex;align-items:center;padding:2px 8px;font-size:var(--xiri-font-size-small, .8rem);color:var(--on-surface-variant, #44474F);opacity:.75}@keyframes xiri-autorefresh-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.xiritable table{width:100%}.xiritable table.density-regular{--mat-table-header-container-height: 42px;--mat-table-footer-container-height: 42px;--mat-table-row-item-container-height: 42px}.xiritable table.density-compact{--mat-table-header-container-height: 32px;--mat-table-footer-container-height: 32px;--mat-table-row-item-container-height: 32px}.xiritable table.density-relaxed{--mat-table-header-container-height: 52px;--mat-table-footer-container-height: 52px;--mat-table-row-item-container-height: 52px}.xiritable table th.mat-mdc-header-cell:not(:first-of-type),.xiritable table td.mat-mdc-cell:not(:first-of-type),.xiritable table td.mat-mdc-footer-cell:not(:first-of-type){padding-left:5px}.xiritable table th.mat-mdc-header-cell:not(:last-of-type),.xiritable table td.mat-mdc-cell:not(:last-of-type),.xiritable table td.mat-mdc-footer-cell:not(:last-of-type){padding-right:7px}.xiritable table tr.mat-mdc-row{transition:background-color var(--xiri-duration-fast) var(--xiri-easing-standard)}.xiritable table tr.mat-mdc-row:hover{background:var(--surface-variant, #DEE3EB)}.xiritable table .tablelink{text-decoration:underline}.xiritable table td.buttons xiri-button,.xiritable table td.buttons xiri-buttonstyle,.xiritable table td.buttons .btnicon{margin-right:8px}.xiritable table td.buttons xiri-button:last-child,.xiritable table td.buttons xiri-buttonstyle:last-child,.xiritable table td.buttons .btnicon:last-child{margin-right:0}.xiritable table td.number,.xiritable table th.number,.xiritable table td.mat-mdc-footer-cell.number{text-align:right;font-variant-numeric:tabular-nums}.xiritable table td.right,.xiritable table td.align-right,.xiritable table th.right,.xiritable table th.align-right{text-align:right}.xiritable table td.center,.xiritable table td.align-center,.xiritable table th.center,.xiritable table th.align-center{text-align:center}.xiritable table td.left,.xiritable table td.align-left,.xiritable table th.left,.xiritable table th.align-left{text-align:left}.xiritable table td.vertical,.xiritable table th.vertical{writing-mode:sideways-rl;text-orientation:sideways}.xiritable table td.vertical div,.xiritable table th.vertical div{max-height:6rem}.xiritable table td.sideways,.xiritable table th.sideways{writing-mode:sideways-lr;text-orientation:sideways}.xiritable table td.sideways div,.xiritable table th.sideways div{max-height:6rem}.xiritable table td.upright,.xiritable table th.upright{writing-mode:vertical-rl;text-orientation:upright}.xiritable table.borders td+td{border-left:1px solid var(--outline-variant, #C2C7CF)}.xiritable table.bordersHeader th+th{border-left:1px solid var(--outline-variant, #C2C7CF)}.xiritable table td.mat-mdc-cell mat-form-field{--mat-form-field-container-height: 40px;--mat-form-field-container-vertical-padding: 8px}.xiritable .xiri-editable-cell{cursor:pointer;display:inline-flex;align-items:center;border-radius:var(--xiri-radius-xs);padding:2px 4px}.xiritable .xiri-editable-cell:hover,.xiritable .xiri-editable-cell:focus-visible{background-color:var(--surface-variant, #DEE3EB)}.xiritable .xiri-editable-cell:hover .xiri-edit-icon,.xiritable .xiri-editable-cell:focus-visible .xiri-edit-icon{opacity:1}.xiritable .xiri-edit-icon{opacity:0;font-size:14px;width:14px;height:14px;margin-left:4px;color:var(--on-surface-variant, #44474F);transition:opacity var(--xiri-duration-fast) var(--xiri-easing-standard)}.xiritable .xiri-inline-edit{--mat-form-field-container-height: 36px;--mat-form-field-container-vertical-padding: 6px;width:100%}.xiritable .xiri-inline-edit-confirm{--mdc-icon-button-icon-size: 18px;--mdc-icon-button-state-layer-size: 28px;width:28px;height:28px;padding:0;margin-right:5px;color:var(--primary, #1976d2);display:inline-flex;align-items:center;justify-content:center}.xiritable .xiri-inline-edit-confirm mat-icon{display:flex;align-items:center;justify-content:center;width:18px;height:18px;font-size:18px}.xiritable .mat-column-select{overflow:initial}.xiritable .select-buttons{padding:.3rem .8rem;display:flex;align-items:center}.xiritable .select-buttons button{margin-right:.5rem}.xiritable .xiri-cell-saved{animation:pulse .5s var(--xiri-easing-standard);border-radius:var(--xiri-radius-xs)}.xiritable .nodata{padding:.5rem 1.5rem;font-size:var(--xiri-font-size-label);background-color:var(--surface, #FFFFFF);animation:fadeInUp var(--xiri-duration-normal) var(--xiri-easing-decelerate)}.xiritable .loader{position:absolute;top:0;left:0;width:100%;bottom:0;display:flex;justify-content:center;align-items:center;background-color:var(--ripple, rgba(206, 212, 218, .5));z-index:200;border-bottom-left-radius:var(--mat-card-elevated-container-shape, 12px);border-bottom-right-radius:var(--mat-card-elevated-container-shape, 12px);animation:fadeIn var(--xiri-duration-fast) var(--xiri-easing-standard)}.xiritable .loader.has-bottombar{border-bottom-left-radius:0;border-bottom-right-radius:0}xiri-dyncomponent{margin-bottom:var(--xiri-spacing-xl)}[hidden]{display:none!important}.xiri-tree-actions{display:flex;align-items:center}td.xiri-tree-td{white-space:nowrap}td.xiri-tree-td .xiri-tree-prefix{display:inline-flex;align-items:center;vertical-align:middle}td.xiri-tree-td .xiri-tree-iconbtn{appearance:none;border:0;background:transparent;padding:0;margin:0;flex:0 0 24px;width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;border-radius:50%;cursor:pointer;-webkit-tap-highlight-color:transparent}td.xiri-tree-td .xiri-tree-iconbtn .mat-icon{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;font-size:20px;line-height:20px;margin:0}td.xiri-tree-td .xiri-tree-iconbtn:hover{background:#0000000f}td.xiri-tree-td .xiri-tree-iconbtn:focus-visible{outline:2px solid var(--primary, var(--mat-sys-primary, currentColor));outline-offset:-2px}td.xiri-tree-td .xiri-tree-spacer{width:24px;height:24px;flex:0 0 24px}td.xiri-tree-td .xiri-tree-count{margin-left:var(--xiri-spacing-xs, 4px);opacity:.6;font-size:.85em}td.xiri-tree-td .xiri-tree-addsub{margin-left:var(--xiri-spacing-xs, 4px);opacity:0;transition:opacity .15s ease-in-out}tr.mat-mdc-row:hover td.xiri-tree-td .xiri-tree-addsub,td.xiri-tree-td .xiri-tree-addsub:focus-visible{opacity:1}tr.xiri-tree-dimmed{opacity:.6}\n"], dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: XiriButtonlineComponent, selector: "xiri-buttonline", inputs: ["settings", "disabled", "filterData"], outputs: ["result"] }, { kind: "component", type: XiriSearchComponent, selector: "xiri-search", inputs: ["placeholder", "open", "reset", "escape", "focus", "text"], outputs: ["changed"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "component", type: MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "component", type: XiriButtonstyleComponent, selector: "xiri-buttonstyle", inputs: ["button", "disabled", "loading", "countdown", "pollText"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: NgxMatSelectSearchModule }, { kind: "component", type: i2.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: XiriButtonComponent, selector: "xiri-button", inputs: ["button", "disabled", "filterData", "url"], outputs: ["result"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "component", type: MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "directive", type: MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "directive", type: MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption$1, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: XiriEmptyStateComponent, selector: "xiri-empty-state", inputs: ["settings"], outputs: ["buttonResult"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: SafehtmlPipe, name: "safeHtml" }, { kind: "pipe", type: XiriUrlPipe, name: "xiriUrl" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
5188
5631
|
}
|
|
5189
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
5632
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTableComponent, decorators: [{
|
|
5190
5633
|
type: Component,
|
|
5191
5634
|
args: [{ selector: 'xiri-table', encapsulation: ViewEncapsulation.None, providers: [XiriTableInlineEditService, XiriTableTreeService], imports: [MatCard,
|
|
5192
5635
|
MatIconButton,
|
|
@@ -5338,10 +5781,10 @@ class XiriFormService {
|
|
|
5338
5781
|
return;
|
|
5339
5782
|
this.sessionStorageService.set(saveStateId, values);
|
|
5340
5783
|
}
|
|
5341
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
5342
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0
|
|
5784
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
5785
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriFormService, providedIn: 'root' }); }
|
|
5343
5786
|
}
|
|
5344
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
5787
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriFormService, decorators: [{
|
|
5345
5788
|
type: Injectable,
|
|
5346
5789
|
args: [{
|
|
5347
5790
|
providedIn: 'root',
|
|
@@ -5468,10 +5911,10 @@ class XiriFormComponent {
|
|
|
5468
5911
|
// data = { ...data, ...this.extra }
|
|
5469
5912
|
// this.events.push( '' + this.formValid + ' => ' + JSON.stringify( event.value ) );
|
|
5470
5913
|
}
|
|
5471
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
5472
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
5914
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5915
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriFormComponent, isStandalone: true, selector: "xiri-form", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"xrow\" cdkTrapFocus>\n\t<div class=\"xcol\">\n\t\t@if (loading() && formFields() === null) {\n\t\t\t<mat-spinner diameter=\"30\"></mat-spinner>\n\t\t}\n\t\t@if (formFields() !== null) {\n\t\t\t<xiri-form-fields [form]=\"formFields()\" (formChange)=\"formChanged($event)\" [disabled]=\"loading()\"\n\t\t\t [check]=\"checkSubject.asObservable()\"></xiri-form-fields>\n\t\t}\n\t\t@if (error()) {\n\t\t\t<xiri-error class=\"error\" [text]=\"error()\"></xiri-error>\n\t\t}\n\t</div>\n\t@if (done()) {\n\t\t<div class=\"xcol done\">\n\t\t\t<xiri-done></xiri-done>\n\t\t</div>\n\t} @else {\n\t\t<div class=\"xcol formbtnline\">\n\t\t\t@for (button of buttons; track button) {\n\t\t\t\t@if (button.default) {\n\t\t\t\t\t<xiri-buttonstyle (click)=\"clickButton( button )\" [button]=\"button\" [disabled]=\"!formValid || loading()\" [loading]=\"loadingButton() === button\"></xiri-buttonstyle>\n\t\t\t\t} @else {\n\t\t\t\t\t<xiri-buttonstyle (click)=\"clickButton( button )\" [button]=\"button\" [disabled]=\"loading()\" [loading]=\"loadingButton() === button\"></xiri-buttonstyle>\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t}\n</div>\n", styles: [".formbtnline{padding-top:var(--xiri-spacing-xl);display:flex;justify-content:space-between;padding-left:var(--xiri-spacing-md);padding-right:var(--xiri-spacing-md)}.done{text-align:center;font-size:var(--xiri-font-size-display);margin-bottom:var(--xiri-spacing-md)}mat-spinner{margin:var(--xiri-spacing-xl)}[hidden]{display:none!important}\n"], dependencies: [{ kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: XiriFormFieldsComponent, selector: "xiri-form-fields", inputs: ["form", "display", "disabled", "check"], outputs: ["formChange"] }, { kind: "component", type: XiriErrorComponent, selector: "xiri-error", inputs: ["text"] }, { kind: "component", type: XiriDoneComponent, selector: "xiri-done" }, { kind: "component", type: XiriButtonstyleComponent, selector: "xiri-buttonstyle", inputs: ["button", "disabled", "loading", "countdown", "pollText"] }] }); }
|
|
5473
5916
|
}
|
|
5474
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
5917
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriFormComponent, decorators: [{
|
|
5475
5918
|
type: Component,
|
|
5476
5919
|
args: [{ selector: 'xiri-form', imports: [CdkTrapFocus,
|
|
5477
5920
|
MatProgressSpinner,
|
|
@@ -5505,10 +5948,10 @@ class XiriProgressComponent {
|
|
|
5505
5948
|
this.mode = computed(() => this.settings().indeterminate ? 'indeterminate' : 'determinate', /* @ts-ignore */
|
|
5506
5949
|
...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
5507
5950
|
}
|
|
5508
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
5509
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
5951
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriProgressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5952
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriProgressComponent, isStandalone: true, selector: "xiri-progress", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"xiri-progress\">\n\t<div class=\"progress-head\">\n\t\t<span class=\"progress-label\">{{ settings().label }}</span>\n\t\t@if (!settings().indeterminate) {\n\t\t\t<span class=\"progress-count\">{{ settings().current }} / {{ settings().total }}</span>\n\t\t}\n\t</div>\n\t<mat-progress-bar [mode]=\"mode()\" [value]=\"settings().value\" [class]=\"settings().color || ''\"></mat-progress-bar>\n</div>\n", styles: [".xiri-progress{display:flex;flex-direction:column;gap:var(--xiri-spacing-xs, 4px)}.progress-head{display:flex;justify-content:space-between;align-items:baseline;gap:var(--xiri-spacing-sm, 8px);font-size:var(--xiri-font-size-label)}.progress-count{color:var(--on-surface-variant, #44474F);font-weight:500;flex-shrink:0}\n"], dependencies: [{ kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] }); }
|
|
5510
5953
|
}
|
|
5511
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
5954
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriProgressComponent, decorators: [{
|
|
5512
5955
|
type: Component,
|
|
5513
5956
|
args: [{ selector: 'xiri-progress', imports: [MatProgressBar], template: "<div class=\"xiri-progress\">\n\t<div class=\"progress-head\">\n\t\t<span class=\"progress-label\">{{ settings().label }}</span>\n\t\t@if (!settings().indeterminate) {\n\t\t\t<span class=\"progress-count\">{{ settings().current }} / {{ settings().total }}</span>\n\t\t}\n\t</div>\n\t<mat-progress-bar [mode]=\"mode()\" [value]=\"settings().value\" [class]=\"settings().color || ''\"></mat-progress-bar>\n</div>\n", styles: [".xiri-progress{display:flex;flex-direction:column;gap:var(--xiri-spacing-xs, 4px)}.progress-head{display:flex;justify-content:space-between;align-items:baseline;gap:var(--xiri-spacing-sm, 8px);font-size:var(--xiri-font-size-label)}.progress-count{color:var(--on-surface-variant, #44474F);font-weight:500;flex-shrink:0}\n"] }]
|
|
5514
5957
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }] } });
|
|
@@ -5520,10 +5963,10 @@ class XiriInfopointComponent {
|
|
|
5520
5963
|
this.compact = computed(() => !!this.settings().compact, /* @ts-ignore */
|
|
5521
5964
|
...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
|
|
5522
5965
|
}
|
|
5523
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
5524
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
5966
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriInfopointComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5967
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriInfopointComponent, isStandalone: true, selector: "xiri-infopoint", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.compact": "compact()" } }, ngImport: i0, template: "<div class=\"point\" [class.isLink]=\"settings().url\" [routerLink]=\"settings().url\" [queryParams]=\"settings().urlParams\">\n\t@if (compact()) {\n\t\t<div class=\"card xiri-infopoint-flat\" [class.dense]=\"settings().dense\">\n\t\t\t<div class=\"icon\" [class]=\"settings().iconColor\">\n\t\t\t\t@if (settings().iconSet) {\n\t\t\t\t\t<mat-icon [fontSet]=\"settings().iconSet!\">{{ settings().icon }}</mat-icon>\n\t\t\t\t} @else {\n\t\t\t\t\t<mat-icon>{{ settings().icon }}</mat-icon>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"right\">\n\t\t\t\t@if (settings().text) {\n\t\t\t\t\t@if (settings().html) {\n\t\t\t\t\t\t<div class=\"text\" [innerHtml]=\"settings().text | safeHtml\"></div>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<div class=\"text\">{{ settings().text }}</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t@if (settings().html) {\n\t\t\t\t\t<div class=\"info\" [innerHtml]=\"settings().info | safeHtml\"></div>\n\t\t\t\t} @else {\n\t\t\t\t\t<div class=\"info\">{{ settings().info }}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t} @else {\n\t\t<mat-card class=\"card mat-mdc-elevation-specific mat-elevation-z2\">\n\t\t\t<mat-card-content [class.dense]=\"settings().dense\">\n\t\t\t\t<div class=\"icon\" [class]=\"settings().iconColor\">\n\t\t\t\t\t@if (settings().iconSet) {\n\t\t\t\t\t\t<mat-icon [fontSet]=\"settings().iconSet!\">{{ settings().icon }}</mat-icon>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<mat-icon>{{ settings().icon }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"right\">\n\t\t\t\t\t@if (settings().text) {\n\t\t\t\t\t\t@if (settings().html) {\n\t\t\t\t\t\t\t<div class=\"text\" [innerHtml]=\"settings().text | safeHtml\"></div>\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t<div class=\"text\">{{ settings().text }}</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t@if (settings().html) {\n\t\t\t\t\t\t<div class=\"info\" [innerHtml]=\"settings().info | safeHtml\"></div>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<div class=\"info\">{{ settings().info }}</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</mat-card-content>\n\t\t</mat-card>\n\t}\n</div>\n", styles: [".point mat-card{background-color:var(--surface, #FFFFFF)}.point mat-card-content{display:flex;flex-direction:row;align-items:center;overflow:hidden}.point mat-card-content.dense{padding:6px 16px}:host(.compact) .point .xiri-infopoint-flat{display:flex;flex-direction:row;align-items:center;overflow:hidden;background:transparent;box-shadow:none;padding:var(--xiri-spacing-sm, 8px)}:host(.compact) .point .xiri-infopoint-flat.dense{padding:4px 8px}.point.isLink{cursor:pointer}.point.isLink mat-card{transition:background-color var(--xiri-duration-fast, .15s) var(--xiri-easing-standard, cubic-bezier(.4, 0, .2, 1))}.point.isLink:hover mat-card{background-color:var(--surface-variant, #DEE3EB)}.right{text-align:right;flex-grow:1;min-width:0;display:flex;flex-direction:column;justify-content:center;padding-left:7px;overflow-wrap:anywhere}.right .text{color:var(--on-surface-variant, rgba(0, 0, 0, .54));font-size:var(--xiri-font-size-label)}.right .info{font-size:var(--xiri-font-size-display);font-weight:500}.icon{width:64px;min-width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center}.icon mat-icon{transform:scale(1.5)}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: SafehtmlPipe, name: "safeHtml" }] }); }
|
|
5525
5968
|
}
|
|
5526
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
5969
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriInfopointComponent, decorators: [{
|
|
5527
5970
|
type: Component,
|
|
5528
5971
|
args: [{ selector: 'xiri-infopoint', imports: [RouterLink, MatCard, MatCardContent, MatIcon, SafehtmlPipe], host: { '[class.compact]': 'compact()' }, template: "<div class=\"point\" [class.isLink]=\"settings().url\" [routerLink]=\"settings().url\" [queryParams]=\"settings().urlParams\">\n\t@if (compact()) {\n\t\t<div class=\"card xiri-infopoint-flat\" [class.dense]=\"settings().dense\">\n\t\t\t<div class=\"icon\" [class]=\"settings().iconColor\">\n\t\t\t\t@if (settings().iconSet) {\n\t\t\t\t\t<mat-icon [fontSet]=\"settings().iconSet!\">{{ settings().icon }}</mat-icon>\n\t\t\t\t} @else {\n\t\t\t\t\t<mat-icon>{{ settings().icon }}</mat-icon>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"right\">\n\t\t\t\t@if (settings().text) {\n\t\t\t\t\t@if (settings().html) {\n\t\t\t\t\t\t<div class=\"text\" [innerHtml]=\"settings().text | safeHtml\"></div>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<div class=\"text\">{{ settings().text }}</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t@if (settings().html) {\n\t\t\t\t\t<div class=\"info\" [innerHtml]=\"settings().info | safeHtml\"></div>\n\t\t\t\t} @else {\n\t\t\t\t\t<div class=\"info\">{{ settings().info }}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t} @else {\n\t\t<mat-card class=\"card mat-mdc-elevation-specific mat-elevation-z2\">\n\t\t\t<mat-card-content [class.dense]=\"settings().dense\">\n\t\t\t\t<div class=\"icon\" [class]=\"settings().iconColor\">\n\t\t\t\t\t@if (settings().iconSet) {\n\t\t\t\t\t\t<mat-icon [fontSet]=\"settings().iconSet!\">{{ settings().icon }}</mat-icon>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<mat-icon>{{ settings().icon }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"right\">\n\t\t\t\t\t@if (settings().text) {\n\t\t\t\t\t\t@if (settings().html) {\n\t\t\t\t\t\t\t<div class=\"text\" [innerHtml]=\"settings().text | safeHtml\"></div>\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t<div class=\"text\">{{ settings().text }}</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t@if (settings().html) {\n\t\t\t\t\t\t<div class=\"info\" [innerHtml]=\"settings().info | safeHtml\"></div>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<div class=\"info\">{{ settings().info }}</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</mat-card-content>\n\t\t</mat-card>\n\t}\n</div>\n", styles: [".point mat-card{background-color:var(--surface, #FFFFFF)}.point mat-card-content{display:flex;flex-direction:row;align-items:center;overflow:hidden}.point mat-card-content.dense{padding:6px 16px}:host(.compact) .point .xiri-infopoint-flat{display:flex;flex-direction:row;align-items:center;overflow:hidden;background:transparent;box-shadow:none;padding:var(--xiri-spacing-sm, 8px)}:host(.compact) .point .xiri-infopoint-flat.dense{padding:4px 8px}.point.isLink{cursor:pointer}.point.isLink mat-card{transition:background-color var(--xiri-duration-fast, .15s) var(--xiri-easing-standard, cubic-bezier(.4, 0, .2, 1))}.point.isLink:hover mat-card{background-color:var(--surface-variant, #DEE3EB)}.right{text-align:right;flex-grow:1;min-width:0;display:flex;flex-direction:column;justify-content:center;padding-left:7px;overflow-wrap:anywhere}.right .text{color:var(--on-surface-variant, rgba(0, 0, 0, .54));font-size:var(--xiri-font-size-label)}.right .info{font-size:var(--xiri-font-size-display);font-weight:500}.icon{width:64px;min-width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center}.icon mat-icon{transform:scale(1.5)}\n"] }]
|
|
5529
5972
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }] } });
|
|
@@ -5542,10 +5985,10 @@ class XiriListComponent {
|
|
|
5542
5985
|
this.dataService.get(url).pipe(takeUntilDestroyed(this.destroyRef)).subscribe();
|
|
5543
5986
|
item.isFavorite = !item.isFavorite;
|
|
5544
5987
|
}
|
|
5545
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
5546
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
5988
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5989
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriListComponent, isStandalone: true, selector: "xiri-list", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@for (section of settings().sections; track section) {\n\t@if (section.name) {\n\t\t<div mat-subheader>{{ section.name }}</div>\n\t}\n\t<mat-card class=\"card mat-mdc-elevation-specific mat-elevation-z2\">\n\t\t<mat-card-content>\n\t\t\t<mat-nav-list>\n\t\t\t\t@for (item of section.data; track item) {\n\t\t\t\t\t@let itemUrl = item.url | xiriUrl;\n\t\t\t\t\t<a mat-list-item [routerLink]=\"itemUrl?.path\" [queryParams]=\"itemUrl?.queryParams\" class=\"linelink\">\n\t\t\t\t\t\t<div matListItemIcon class=\"list-icon\" [class]=\"item.iconColor\">\n\t\t\t\t\t\t\t@if (item.iconSet) {\n\t\t\t\t\t\t\t\t<mat-icon [fontSet]=\"item.iconSet\">{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t<mat-icon>{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<span matListItemTitle>{{ item.name }}</span>\n\t\t\t\t\t\t<span matListItemLine>{{ item.info }}</span>\n\t\t\t\t\t\t@if (item.hasFavorite) {\n\t\t\t\t\t\t\t<div matListItemMeta class=\"list-fav\">\n\t\t\t\t\t\t\t\t<button mat-icon-button (click)=\"changeFavorite(item, $event)\" [matTooltip]=\"item.favoriteHint\"\n\t\t\t\t\t\t\t [attr.aria-label]=\"'Favorit: ' + item.name\"\n\t\t\t\t\t\t\t [attr.aria-pressed]=\"!!item.isFavorite\">\n\t\t\t\t\t\t\t\t\t@if (item.isFavorite) {\n\t\t\t\t\t\t\t\t\t\t<mat-icon class=\"accent\">star</mat-icon>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@if (!item.isFavorite) {\n\t\t\t\t\t\t\t\t\t\t<mat-icon class=\"gray\">star_outline</mat-icon>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</a>\n\t\t\t\t}\n\t\t\t</mat-nav-list>\n\t\t</mat-card-content>\n\t</mat-card>\n}\n", styles: [".card{background-color:var(--surface, #FFFFFF)}.card mat-card-content,.card mat-nav-list{padding:0}.card a+a{border-top:1px solid var(--outline-variant, #C2C7CF)}.card a.mat-mdc-list-item{align-items:center;border-radius:0}.card a.mat-mdc-list-item:before{border-radius:var(--xiri-radius-md)}.card a.mat-mdc-list-item.mdc-list-item--with-two-lines ::ng-deep .mdc-list-item__content{transform:translateY(-7px)}.card .list-icon{width:48px;height:48px;color:var(--on-primary, #FFFFFF);border-radius:50%;margin:0 16px;align-self:center;display:flex;justify-content:center;align-items:center}.card .list-icon mat-icon{text-align:center;font-size:var(--xiri-icon-size-lg);--mat-icon-color: var(--on-primary, white)}.card .list-icon.primary{background-color:var(--primary)}.card .list-icon.secondary{background-color:var(--secondary)}.card .list-icon.tertiary{background-color:var(--tertiary)}.card .list-icon.accent{background-color:var(--secondary)}.card .list-icon.warn,.card .list-icon.error{background-color:var(--error)}.card .list-icon.success{background-color:var(--color-success)}.card .list-icon.emerald{background-color:#2892d9}.card .list-icon.red{background-color:#e74c3c}.card .list-icon.yellow{background-color:#f1c40f}.card .list-icon.green{background-color:#2ecc71}.card .list-icon.blue{background-color:#3498db}.card .list-icon.purple{background-color:#9b59b6}.card .list-icon.gray{background-color:#95a5a6}.card .list-icon.lightgray{background-color:#bdc3c7}.card .list-icon.darkgray{background-color:#7f8c8d}.card .list-icon.orange{background-color:#e67e22}.card .list-icon.white{background-color:#fff}.card .list-icon.black{background-color:#000}.card .list-icon.inherit{background-color:inherit}.card .list-fav{display:flex;justify-content:center;align-items:center;height:100%}.card .list-fav mat-icon.gray{--mat-icon-color: var(--on-surface-variant, gray)}.card .list-fav mat-icon.accent{--mat-icon-color: var(--secondary, #6750A4)}\n"], dependencies: [{ kind: "directive", type: MatListSubheaderCssMatStyler, selector: "[mat-subheader], [matSubheader]" }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: MatListItemLine, selector: "[matListItemLine]" }, { kind: "directive", type: MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: XiriUrlPipe, name: "xiriUrl" }] }); }
|
|
5547
5990
|
}
|
|
5548
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
5991
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriListComponent, decorators: [{
|
|
5549
5992
|
type: Component,
|
|
5550
5993
|
args: [{ selector: 'xiri-list', imports: [
|
|
5551
5994
|
MatListSubheaderCssMatStyler,
|
|
@@ -5570,10 +6013,10 @@ class XiriHeaderComponent {
|
|
|
5570
6013
|
this.settings = input.required(/* @ts-ignore */
|
|
5571
6014
|
...(ngDevMode ? [{ debugName: "settings" }] : /* istanbul ignore next */ []));
|
|
5572
6015
|
}
|
|
5573
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
5574
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0
|
|
6016
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6017
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: XiriHeaderComponent, isStandalone: true, selector: "xiri-header", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"name\" [class]=\"settings().color + ' ' + settings().size\">{{ settings().text }}</div>\n", styles: [".name{font-size:1.6rem;padding-top:1rem}.name.x1{font-size:1rem}.name.x15{font-size:1.5rem}.name.x2{font-size:2rem}.name.x25{font-size:2.5rem}.name.x3{font-size:3rem}\n"] }); }
|
|
5575
6018
|
}
|
|
5576
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
6019
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriHeaderComponent, decorators: [{
|
|
5577
6020
|
type: Component,
|
|
5578
6021
|
args: [{ selector: 'xiri-header', imports: [], template: "<div class=\"name\" [class]=\"settings().color + ' ' + settings().size\">{{ settings().text }}</div>\n", styles: [".name{font-size:1.6rem;padding-top:1rem}.name.x1{font-size:1rem}.name.x15{font-size:1.5rem}.name.x2{font-size:2rem}.name.x25{font-size:2.5rem}.name.x3{font-size:3rem}\n"] }]
|
|
5579
6022
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }] } });
|
|
@@ -5756,10 +6199,10 @@ class XiriStepperComponent {
|
|
|
5756
6199
|
const url = step.url ? step.url : (this.settings().url ?? '');
|
|
5757
6200
|
return this.dataService.post(url, data);
|
|
5758
6201
|
}
|
|
5759
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
5760
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
6202
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriStepperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6203
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriStepperComponent, isStandalone: true, selector: "xiri-stepper", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "stepper", first: true, predicate: MatStepper, descendants: true, isSignal: true }], ngImport: i0, template: "<mat-stepper [orientation]=\"orientation()\" [linear]=\"true\" (selectionChange)=\"stepChanged( $event )\" [hidden]=\"done()\">\n\t@for (step of steps(); track i; let i = $index) {\n\t\t<mat-step [label]=\"step.title\" [completed]=\"step.completed()\">\n\t\t\t<div class=\"xrow\">\n\t\t\t\t<div class=\"xcol\">\n\t\t\t\t\t@if (!step.load()) {\n\t\t\t\t\t\t<xiri-form-fields [form]=\"step.fields()\" (formChange)=\"formChanged(step, $event, i)\" [disabled]=\"step.check()\"></xiri-form-fields>\n\t\t\t\t\t}\n\t\t\t\t\t@if (step.errorMsg()) {\n\t\t\t\t\t\t<xiri-error class=\"error\" [text]=\"step.errorMsg()!\"></xiri-error>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t\t@if (step.check()) {\n\t\t\t\t\t<div class=\"xcol checking\">\n\t\t\t\t\t\t<mat-spinner diameter=\"25\"></mat-spinner>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<div class=\"xcol buttons\">\n\t\t\t\t\t@for (button of step.buttons(); track button) {\n\t\t\t\t\t\t@if (!button.default) {\n\t\t\t\t\t\t\t<xiri-buttonstyle [disabled]=\"false\" (click)=\"clickButton( button )\" [button]=\"button\"></xiri-buttonstyle>\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t<xiri-buttonstyle (click)=\"clickButton( button )\" [button]=\"button\" [disabled]=\"!step.valid() || step.check()\"></xiri-buttonstyle>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</mat-step>\n\t}\n</mat-stepper>\n\n@if (done()) {\n\t<div class=\"xcol done\">\n\t\t<xiri-done></xiri-done>\n\t</div>\n}\n", styles: [".error{padding:var(--xiri-spacing-sm) 0}.xrow{padding-top:var(--xiri-spacing-md)}.checking{padding:var(--xiri-spacing-md) var(--xiri-spacing-sm);display:flex;justify-content:flex-end}.buttons{padding-top:var(--xiri-spacing-md);display:flex;justify-content:space-between}.done{font-size:3rem;display:flex;justify-content:center}[hidden]{display:none!important}\n"], dependencies: [{ kind: "component", type: MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["disableRipple", "color", "labelPosition", "headerPosition", "aria-label", "headerPrefix", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "component", type: MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: XiriFormFieldsComponent, selector: "xiri-form-fields", inputs: ["form", "display", "disabled", "check"], outputs: ["formChange"] }, { kind: "component", type: XiriErrorComponent, selector: "xiri-error", inputs: ["text"] }, { kind: "component", type: XiriButtonstyleComponent, selector: "xiri-buttonstyle", inputs: ["button", "disabled", "loading", "countdown", "pollText"] }, { kind: "component", type: XiriDoneComponent, selector: "xiri-done" }] }); }
|
|
5761
6204
|
}
|
|
5762
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
6205
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriStepperComponent, decorators: [{
|
|
5763
6206
|
type: Component,
|
|
5764
6207
|
args: [{ selector: 'xiri-stepper', imports: [MatStepper,
|
|
5765
6208
|
MatStep,
|
|
@@ -5776,6 +6219,7 @@ class XiriQueryComponent {
|
|
|
5776
6219
|
constructor() {
|
|
5777
6220
|
this.dataService = inject(XiriDataService);
|
|
5778
6221
|
this.formService = inject(XiriFormService);
|
|
6222
|
+
this.storageService = inject(XiriSessionStorageService);
|
|
5779
6223
|
this.cdr = inject(ChangeDetectorRef);
|
|
5780
6224
|
this.destroyRef = inject(DestroyRef);
|
|
5781
6225
|
this.settings = input.required(/* @ts-ignore */
|
|
@@ -5787,11 +6231,15 @@ class XiriQueryComponent {
|
|
|
5787
6231
|
...(ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []));
|
|
5788
6232
|
this.filterChange = output();
|
|
5789
6233
|
this.waiter = new Subject();
|
|
6234
|
+
this.loader = new Subject();
|
|
5790
6235
|
this.dynData = { data: null, filterData: null };
|
|
5791
6236
|
this.saveState = false;
|
|
5792
6237
|
this.saveStateId = null;
|
|
5793
6238
|
this.extra = null;
|
|
5794
6239
|
this._initialChangeDone = false;
|
|
6240
|
+
// Expansion-panel state; undefined = no panel at all, the filter is always open.
|
|
6241
|
+
this.collapsed = signal(undefined, /* @ts-ignore */
|
|
6242
|
+
...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
|
|
5795
6243
|
this.data = signal(null, /* @ts-ignore */
|
|
5796
6244
|
...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
5797
6245
|
this.error = signal(null, /* @ts-ignore */
|
|
@@ -5833,12 +6281,17 @@ class XiriQueryComponent {
|
|
|
5833
6281
|
get effectiveSaveKey() {
|
|
5834
6282
|
return this.saveStateId ? this.saveStateId + ':filter' : null;
|
|
5835
6283
|
}
|
|
6284
|
+
get collapsedSaveKey() {
|
|
6285
|
+
return this.saveStateId ? this.saveStateId + ':collapsed' : null;
|
|
6286
|
+
}
|
|
5836
6287
|
ngOnInit() {
|
|
6288
|
+
this.startLoader();
|
|
5837
6289
|
const settings = this.settings();
|
|
5838
6290
|
if (settings.dyn !== undefined && settings.dyn !== null && settings.dyn.length != 0)
|
|
5839
6291
|
this.dynData.data = settings.dyn;
|
|
5840
6292
|
this.saveState = settings.saveState === undefined ? false : settings.saveState;
|
|
5841
6293
|
this.saveStateId = settings.saveStateId === undefined ? null : settings.saveStateId;
|
|
6294
|
+
this.initCollapsed(settings.collapsed);
|
|
5842
6295
|
this.formFields.set(this.formService.loadState(this.effectiveSaveKey, settings.fields ?? []));
|
|
5843
6296
|
this.extra = settings.extra || null;
|
|
5844
6297
|
this.waiter.pipe(debounceTime(300), takeUntilDestroyed(this.destroyRef)).subscribe(event => {
|
|
@@ -5858,6 +6311,26 @@ class XiriQueryComponent {
|
|
|
5858
6311
|
this.cdr.markForCheck();
|
|
5859
6312
|
});
|
|
5860
6313
|
}
|
|
6314
|
+
// The panel only exists when the backend sent `collapsed`. A previously stored state — kept under
|
|
6315
|
+
// the same saveStateId as the filter values — wins over the backend default, so a reload restores
|
|
6316
|
+
// the panel the way the user left it.
|
|
6317
|
+
initCollapsed(fromSettings) {
|
|
6318
|
+
if (fromSettings === undefined)
|
|
6319
|
+
return;
|
|
6320
|
+
const key = this.collapsedSaveKey;
|
|
6321
|
+
const stored = key ? this.storageService.getTimeout(key, 3600) : null;
|
|
6322
|
+
this.collapsed.set(typeof stored === 'boolean' ? stored : fromSettings);
|
|
6323
|
+
}
|
|
6324
|
+
// Material owns the panel; mirror its state back so the next load can restore it. The equality
|
|
6325
|
+
// guard keeps the initial expandedChange emission from rewriting the state nobody touched.
|
|
6326
|
+
panelToggled(expanded) {
|
|
6327
|
+
if (this.collapsed() === !expanded)
|
|
6328
|
+
return;
|
|
6329
|
+
this.collapsed.set(!expanded);
|
|
6330
|
+
const key = this.collapsedSaveKey;
|
|
6331
|
+
if (key)
|
|
6332
|
+
this.storageService.set(key, !expanded);
|
|
6333
|
+
}
|
|
5861
6334
|
formChanged(event) {
|
|
5862
6335
|
this.formValid.set(event.valid);
|
|
5863
6336
|
this.rawValue.set(event.value);
|
|
@@ -5916,52 +6389,64 @@ class XiriQueryComponent {
|
|
|
5916
6389
|
// instead of flashing empty on every navigation/filter change.
|
|
5917
6390
|
this.error.set(null);
|
|
5918
6391
|
this.loading.set(true);
|
|
5919
|
-
|
|
5920
|
-
|
|
5921
|
-
|
|
5922
|
-
|
|
5923
|
-
|
|
5924
|
-
|
|
5925
|
-
|
|
5926
|
-
|
|
5927
|
-
|
|
5928
|
-
|
|
5929
|
-
|
|
5930
|
-
|
|
5931
|
-
|
|
5932
|
-
|
|
5933
|
-
else
|
|
5934
|
-
this.data.set([data]);
|
|
5935
|
-
// Pick up an optional result count from the response (backend-driven counts).
|
|
5936
|
-
const counted = res;
|
|
5937
|
-
if (typeof counted.count === 'number')
|
|
5938
|
-
this.responseCount.set({ filtered: counted.count, total: counted.total });
|
|
5939
|
-
this.cdr.markForCheck();
|
|
5940
|
-
},
|
|
5941
|
-
error: (err) => {
|
|
5942
|
-
this.loading.set(false);
|
|
5943
|
-
this.data.set(null);
|
|
5944
|
-
if (err.status === 404)
|
|
5945
|
-
this.error.set('Page not found');
|
|
5946
|
-
else if (err.status === 401)
|
|
5947
|
-
this.error.set('No permission to view page');
|
|
5948
|
-
else if (err.status === 403)
|
|
5949
|
-
this.error.set('Access denied');
|
|
5950
|
-
else if (err.status === 500)
|
|
5951
|
-
this.error.set('Internal Error');
|
|
5952
|
-
else
|
|
5953
|
-
this.error.set('Unknown Error');
|
|
5954
|
-
console.log('XiriQueryComponent error', err);
|
|
5955
|
-
this.cdr.markForCheck();
|
|
5956
|
-
}
|
|
6392
|
+
this.loader.next();
|
|
6393
|
+
}
|
|
6394
|
+
// Alle Loads laufen über einen switchMap: ein noch offener Request wird abgebrochen, sobald
|
|
6395
|
+
// ein neuer startet. Zwei Loads kurz hintereinander sind der Normalfall, sobald ein abhängiges
|
|
6396
|
+
// Feld seine Optionen nachlädt und dabei einen ungültig gewordenen Filterwert verwirft — ohne
|
|
6397
|
+
// switchMap könnte die späte Antwort des überholten Requests die neuere überschreiben.
|
|
6398
|
+
startLoader() {
|
|
6399
|
+
this.loader.pipe(switchMap(() => this.dataService.post(this.settings().url ?? '', this.dynData.filterData)
|
|
6400
|
+
.pipe(catchError((err) => of({ __error: err })))), takeUntilDestroyed(this.destroyRef)).subscribe((res) => {
|
|
6401
|
+
const failed = res?.__error;
|
|
6402
|
+
if (failed)
|
|
6403
|
+
this.loadFailed(failed);
|
|
6404
|
+
else
|
|
6405
|
+
this.loadSucceeded(res);
|
|
5957
6406
|
});
|
|
5958
6407
|
}
|
|
5959
|
-
|
|
5960
|
-
|
|
6408
|
+
loadSucceeded(res) {
|
|
6409
|
+
this.loading.set(false);
|
|
6410
|
+
if (!res) {
|
|
6411
|
+
this.data.set(null);
|
|
6412
|
+
this.error.set('Unknown Error');
|
|
6413
|
+
this.cdr.markForCheck();
|
|
6414
|
+
return;
|
|
6415
|
+
}
|
|
6416
|
+
const data = res.data;
|
|
6417
|
+
// check if res is an array
|
|
6418
|
+
if (Array.isArray(data))
|
|
6419
|
+
this.data.set(data);
|
|
6420
|
+
else
|
|
6421
|
+
this.data.set([data]);
|
|
6422
|
+
// Pick up an optional result count from the response (backend-driven counts).
|
|
6423
|
+
const counted = res;
|
|
6424
|
+
if (typeof counted.count === 'number')
|
|
6425
|
+
this.responseCount.set({ filtered: counted.count, total: counted.total });
|
|
6426
|
+
this.cdr.markForCheck();
|
|
6427
|
+
}
|
|
6428
|
+
loadFailed(err) {
|
|
6429
|
+
this.loading.set(false);
|
|
6430
|
+
this.data.set(null);
|
|
6431
|
+
if (err.status === 404)
|
|
6432
|
+
this.error.set('Page not found');
|
|
6433
|
+
else if (err.status === 401)
|
|
6434
|
+
this.error.set('No permission to view page');
|
|
6435
|
+
else if (err.status === 403)
|
|
6436
|
+
this.error.set('Access denied');
|
|
6437
|
+
else if (err.status === 500)
|
|
6438
|
+
this.error.set('Internal Error');
|
|
6439
|
+
else
|
|
6440
|
+
this.error.set('Unknown Error');
|
|
6441
|
+
console.log('XiriQueryComponent error', err);
|
|
6442
|
+
this.cdr.markForCheck();
|
|
6443
|
+
}
|
|
6444
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriQueryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6445
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriQueryComponent, isStandalone: true, selector: "xiri-query", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null }, dyncomponent: { classPropertyName: "dyncomponent", publicName: "dyncomponent", isSignal: true, isRequired: false, transformFunction: null }, count: { classPropertyName: "count", publicName: "count", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterChange: "filterChange" }, ngImport: i0, template: "<div class=\"xrow\">\n\t<div class=\"xcol\">\n\t\t@if (collapsed() !== undefined) {\n\t\t\t<mat-expansion-panel [expanded]=\"!collapsed()\" (expandedChange)=\"panelToggled($event)\" class=\"query-expansion\">\n\t\t\t\t<mat-expansion-panel-header>\n\t\t\t\t\t<mat-panel-title>\n\t\t\t\t\t\t<mat-icon>filter_list</mat-icon> Filter\n\t\t\t\t\t</mat-panel-title>\n\t\t\t\t</mat-expansion-panel-header>\n\t\t\t\t<div class=\"query\">\n\t\t\t\t\t<xiri-form-fields [form]=\"formFields()\" (formChange)=\"formChanged($event)\" display=\"line\"></xiri-form-fields>\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"filterState\"></ng-container>\n\t\t\t\t\t@if (error()) {\n\t\t\t\t\t\t<div class=\"error\">\n\t\t\t\t\t\t\t<span>{{ error() }}</span>\n\t\t\t\t\t\t\t<button mat-button type=\"button\" data-testid=\"query-retry\" (click)=\"retry()\">\n\t\t\t\t\t\t\t\t<mat-icon>refresh</mat-icon> Retry\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</mat-expansion-panel>\n\t\t} @else {\n\t\t\t<div class=\"query\">\n\t\t\t\t<xiri-form-fields [form]=\"formFields()\" (formChange)=\"formChanged($event)\" display=\"line\"></xiri-form-fields>\n\t\t\t\t<ng-container *ngTemplateOutlet=\"filterState\"></ng-container>\n\t\t\t\t@if (error()) {\n\t\t\t\t\t<div class=\"error\">\n\t\t\t\t\t\t<span>{{ error() }}</span>\n\t\t\t\t\t\t<button mat-button type=\"button\" data-testid=\"query-retry\" (click)=\"retry()\">\n\t\t\t\t\t\t\t<mat-icon>refresh</mat-icon> Retry\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n\t@if (settings().buttonline; as buttonline) {\n\t\t<div class=\"xcol formbtnline\" [class]=\"buttonline.display\">\n\t\t\t<xiri-buttonline [settings]=\"$any(buttonline.data)\" [filterData]=\"filterData()\" [disabled]=\"!formValid()\"\n\t\t\t (result)=\"clickedButton($event)\"></xiri-buttonline>\n\t\t</div>\n\t\t@if (loading()) {\n\t\t\t<div class=\"xcol\">\n\t\t\t\t<mat-spinner diameter=\"30\"></mat-spinner>\n\t\t\t</div>\n\t\t}\n\t}\n\t@if (dynData.data) {\n\t\t<div class=\"xcol\">\n\t\t\t<ng-container *ngTemplateOutlet=\"dyncomponent(); context: { $implicit: dynData }\"></ng-container>\n\t\t</div>\n\t}\n\t@if (data()) {\n\t\t<div class=\"xcol\" [class.is-loading]=\"loading()\">\n\t\t\t<ng-container *ngTemplateOutlet=\"dyncomponent(); context: { $implicit: data() }\"></ng-container>\n\t\t</div>\n\t}\n</div>\n\n<ng-template #filterState>\n\t@if (settings().showActiveFilters && activeFilters().length) {\n\t\t<div class=\"query-filter-state\">\n\t\t\t<mat-chip-set aria-label=\"Aktive Filter\">\n\t\t\t\t@for (filter of activeFilters(); track filter.id) {\n\t\t\t\t\t<mat-chip data-testid=\"query-filter-chip\" (removed)=\"removeFilter(filter.id)\">\n\t\t\t\t\t\t<span class=\"chip-label\">{{ filter.label }}: {{ filter.value }}</span>\n\t\t\t\t\t\t<button matChipRemove type=\"button\"\n\t\t\t\t\t\t [attr.aria-label]=\"'Filter entfernen: ' + filter.label + ' ' + filter.value\">\n\t\t\t\t\t\t\t<mat-icon>cancel</mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</mat-chip>\n\t\t\t\t}\n\t\t\t</mat-chip-set>\n\t\t\t<button mat-button type=\"button\" class=\"reset-filters\" data-testid=\"query-reset-filters\"\n\t\t\t (click)=\"resetFilters()\">\n\t\t\t\t<mat-icon>filter_list_off</mat-icon> Alle zur\u00FCcksetzen\n\t\t\t</button>\n\t\t</div>\n\t}\n\t@if (settings().showResultCount && resultCount(); as rc) {\n\t\t<div class=\"query-result-count\" data-testid=\"query-result-count\" aria-live=\"polite\">\n\t\t\t@if (rc.total !== undefined) {\n\t\t\t\t<span><strong>{{ rc.filtered }}</strong> von {{ rc.total }} Treffern</span>\n\t\t\t} @else {\n\t\t\t\t<span><strong>{{ rc.filtered }}</strong> Treffer</span>\n\t\t\t}\n\t\t</div>\n\t}\n</ng-template>\n", styles: [".query{padding-left:var(--xiri-spacing-md);padding-right:var(--xiri-spacing-md)}.is-loading{opacity:.5;transition:opacity .15s ease-in-out;pointer-events:none}.query-filter-state{display:flex;align-items:center;flex-wrap:wrap;gap:var(--xiri-spacing-sm);margin-top:var(--xiri-spacing-sm)}.query-filter-state .reset-filters mat-icon{margin-right:var(--xiri-spacing-xs)}.query-result-count{margin-top:var(--xiri-spacing-sm);color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, inherit));font-size:.9rem}.query-expansion .query{padding-left:0;padding-right:0}.query-expansion mat-panel-title mat-icon{margin-right:var(--xiri-spacing-sm)}\n"], dependencies: [{ kind: "component", type: XiriFormFieldsComponent, selector: "xiri-form-fields", inputs: ["form", "display", "disabled", "check"], outputs: ["formChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: XiriButtonlineComponent, selector: "xiri-buttonline", inputs: ["settings", "disabled", "filterData"], outputs: ["result"] }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: MatChipRemove, selector: "[matChipRemove]" }] }); }
|
|
5961
6446
|
}
|
|
5962
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
6447
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriQueryComponent, decorators: [{
|
|
5963
6448
|
type: Component,
|
|
5964
|
-
args: [{ selector: 'xiri-query', imports: [XiriFormFieldsComponent, NgTemplateOutlet, XiriButtonlineComponent, MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle, MatIcon, MatButton, MatProgressSpinner, MatChipSet, MatChip, MatChipRemove], template: "<div class=\"xrow\">\n\t<div class=\"xcol\">\n\t\t@if (
|
|
6449
|
+
args: [{ selector: 'xiri-query', imports: [XiriFormFieldsComponent, NgTemplateOutlet, XiriButtonlineComponent, MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle, MatIcon, MatButton, MatProgressSpinner, MatChipSet, MatChip, MatChipRemove], template: "<div class=\"xrow\">\n\t<div class=\"xcol\">\n\t\t@if (collapsed() !== undefined) {\n\t\t\t<mat-expansion-panel [expanded]=\"!collapsed()\" (expandedChange)=\"panelToggled($event)\" class=\"query-expansion\">\n\t\t\t\t<mat-expansion-panel-header>\n\t\t\t\t\t<mat-panel-title>\n\t\t\t\t\t\t<mat-icon>filter_list</mat-icon> Filter\n\t\t\t\t\t</mat-panel-title>\n\t\t\t\t</mat-expansion-panel-header>\n\t\t\t\t<div class=\"query\">\n\t\t\t\t\t<xiri-form-fields [form]=\"formFields()\" (formChange)=\"formChanged($event)\" display=\"line\"></xiri-form-fields>\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"filterState\"></ng-container>\n\t\t\t\t\t@if (error()) {\n\t\t\t\t\t\t<div class=\"error\">\n\t\t\t\t\t\t\t<span>{{ error() }}</span>\n\t\t\t\t\t\t\t<button mat-button type=\"button\" data-testid=\"query-retry\" (click)=\"retry()\">\n\t\t\t\t\t\t\t\t<mat-icon>refresh</mat-icon> Retry\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</mat-expansion-panel>\n\t\t} @else {\n\t\t\t<div class=\"query\">\n\t\t\t\t<xiri-form-fields [form]=\"formFields()\" (formChange)=\"formChanged($event)\" display=\"line\"></xiri-form-fields>\n\t\t\t\t<ng-container *ngTemplateOutlet=\"filterState\"></ng-container>\n\t\t\t\t@if (error()) {\n\t\t\t\t\t<div class=\"error\">\n\t\t\t\t\t\t<span>{{ error() }}</span>\n\t\t\t\t\t\t<button mat-button type=\"button\" data-testid=\"query-retry\" (click)=\"retry()\">\n\t\t\t\t\t\t\t<mat-icon>refresh</mat-icon> Retry\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n\t@if (settings().buttonline; as buttonline) {\n\t\t<div class=\"xcol formbtnline\" [class]=\"buttonline.display\">\n\t\t\t<xiri-buttonline [settings]=\"$any(buttonline.data)\" [filterData]=\"filterData()\" [disabled]=\"!formValid()\"\n\t\t\t (result)=\"clickedButton($event)\"></xiri-buttonline>\n\t\t</div>\n\t\t@if (loading()) {\n\t\t\t<div class=\"xcol\">\n\t\t\t\t<mat-spinner diameter=\"30\"></mat-spinner>\n\t\t\t</div>\n\t\t}\n\t}\n\t@if (dynData.data) {\n\t\t<div class=\"xcol\">\n\t\t\t<ng-container *ngTemplateOutlet=\"dyncomponent(); context: { $implicit: dynData }\"></ng-container>\n\t\t</div>\n\t}\n\t@if (data()) {\n\t\t<div class=\"xcol\" [class.is-loading]=\"loading()\">\n\t\t\t<ng-container *ngTemplateOutlet=\"dyncomponent(); context: { $implicit: data() }\"></ng-container>\n\t\t</div>\n\t}\n</div>\n\n<ng-template #filterState>\n\t@if (settings().showActiveFilters && activeFilters().length) {\n\t\t<div class=\"query-filter-state\">\n\t\t\t<mat-chip-set aria-label=\"Aktive Filter\">\n\t\t\t\t@for (filter of activeFilters(); track filter.id) {\n\t\t\t\t\t<mat-chip data-testid=\"query-filter-chip\" (removed)=\"removeFilter(filter.id)\">\n\t\t\t\t\t\t<span class=\"chip-label\">{{ filter.label }}: {{ filter.value }}</span>\n\t\t\t\t\t\t<button matChipRemove type=\"button\"\n\t\t\t\t\t\t [attr.aria-label]=\"'Filter entfernen: ' + filter.label + ' ' + filter.value\">\n\t\t\t\t\t\t\t<mat-icon>cancel</mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</mat-chip>\n\t\t\t\t}\n\t\t\t</mat-chip-set>\n\t\t\t<button mat-button type=\"button\" class=\"reset-filters\" data-testid=\"query-reset-filters\"\n\t\t\t (click)=\"resetFilters()\">\n\t\t\t\t<mat-icon>filter_list_off</mat-icon> Alle zur\u00FCcksetzen\n\t\t\t</button>\n\t\t</div>\n\t}\n\t@if (settings().showResultCount && resultCount(); as rc) {\n\t\t<div class=\"query-result-count\" data-testid=\"query-result-count\" aria-live=\"polite\">\n\t\t\t@if (rc.total !== undefined) {\n\t\t\t\t<span><strong>{{ rc.filtered }}</strong> von {{ rc.total }} Treffern</span>\n\t\t\t} @else {\n\t\t\t\t<span><strong>{{ rc.filtered }}</strong> Treffer</span>\n\t\t\t}\n\t\t</div>\n\t}\n</ng-template>\n", styles: [".query{padding-left:var(--xiri-spacing-md);padding-right:var(--xiri-spacing-md)}.is-loading{opacity:.5;transition:opacity .15s ease-in-out;pointer-events:none}.query-filter-state{display:flex;align-items:center;flex-wrap:wrap;gap:var(--xiri-spacing-sm);margin-top:var(--xiri-spacing-sm)}.query-filter-state .reset-filters mat-icon{margin-right:var(--xiri-spacing-xs)}.query-result-count{margin-top:var(--xiri-spacing-sm);color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, inherit));font-size:.9rem}.query-expansion .query{padding-left:0;padding-right:0}.query-expansion mat-panel-title mat-icon{margin-right:var(--xiri-spacing-sm)}\n"] }]
|
|
5965
6450
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }], dyncomponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "dyncomponent", required: false }] }], count: [{ type: i0.Input, args: [{ isSignal: true, alias: "count", required: false }] }], filterChange: [{ type: i0.Output, args: ["filterChange"] }] } });
|
|
5966
6451
|
// A filter counts as active unless it is null/undefined, an empty string, an empty array,
|
|
5967
6452
|
// a boolean false, or a range object with no bounds set.
|
|
@@ -5991,15 +6476,6 @@ function formatFilterValue(field, value) {
|
|
|
5991
6476
|
return field.name ?? 'Ja';
|
|
5992
6477
|
return String(value);
|
|
5993
6478
|
}
|
|
5994
|
-
// The "empty" value used to clear a control, matching the shape the control currently holds.
|
|
5995
|
-
function emptyValueForField(field) {
|
|
5996
|
-
const value = field.control?.value;
|
|
5997
|
-
if (Array.isArray(value))
|
|
5998
|
-
return [];
|
|
5999
|
-
if (typeof value === 'string')
|
|
6000
|
-
return '';
|
|
6001
|
-
return null;
|
|
6002
|
-
}
|
|
6003
6479
|
|
|
6004
6480
|
class XiriLinksComponent {
|
|
6005
6481
|
constructor() {
|
|
@@ -6030,10 +6506,10 @@ class XiriLinksComponent {
|
|
|
6030
6506
|
});
|
|
6031
6507
|
return true;
|
|
6032
6508
|
}
|
|
6033
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6034
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
6509
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriLinksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6510
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriLinksComponent, isStandalone: true, selector: "xiri-links", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.compact": "compact()" } }, ngImport: i0, template: "@if (compact()) {\n\t<div class=\"card xiri-links-flat\">\n\t\t@if (settings().header || settings().headerIcon) {\n\t\t\t<div class=\"xiri-links-header\">\n\t\t\t\t@if (settings().headerIcon) {\n\t\t\t\t\t<div class=\"header-image\">\n\t\t\t\t\t\t<mat-icon [class]=\"settings().headerIconColor || 'primary'\">{{ settings().headerIcon }}</mat-icon>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<div class=\"header-text\">\n\t\t\t\t\t@if (settings().header) {\n\t\t\t\t\t\t<div class=\"header-title\">{{ settings().header }}</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (settings().headerSub) {\n\t\t\t\t\t\t<div class=\"header-sub\">{{ settings().headerSub }}</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t}\n\t\t<ng-container *ngTemplateOutlet=\"linkList\"></ng-container>\n\t</div>\n} @else {\n\t<mat-card class=\"card mat-mdc-elevation-specific mat-elevation-z2\">\n\t\t<mat-card-header>\n\t\t\t@if (settings().headerIcon) {\n\t\t\t\t<div mat-card-avatar class=\"header-image\">\n\t\t\t\t\t<mat-icon [class]=\"settings().headerIconColor || 'primary'\">{{ settings().headerIcon }}</mat-icon>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@if (settings().headerSub) {\n\t\t\t\t<mat-card-subtitle>{{ settings().headerSub }}</mat-card-subtitle>\n\t\t\t}\n\t\t\t@if (settings().header) {\n\t\t\t\t<mat-card-title>{{ settings().header }}</mat-card-title>\n\t\t\t}\n\t\t</mat-card-header>\n\t\t<mat-card-content>\n\t\t\t<ng-container *ngTemplateOutlet=\"linkList\"></ng-container>\n\t\t</mat-card-content>\n\t</mat-card>\n}\n\n<ng-template #linkList>\n\t<mat-nav-list>\n\t\t@for (item of settings().data; track item) {\n\t\t\t@if (!item.hide && (!item.action || item.action === 'link')) {\n\t\t\t\t@let itemUrl = item.url | xiriUrl;\n\t\t\t\t<a mat-list-item [routerLink]=\"itemUrl?.path\" [queryParams]=\"itemUrl?.queryParams\">\n\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t<mat-icon matListItemIcon>{{ item.icon }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t<span matListItemTitle>{{ item.text }}</span>\n\t\t\t\t</a>\n\t\t\t} @else if (!item.hide && item.action === 'dialog') {\n\t\t\t\t<mat-list-item (click)=\"openDialog( item ) && $event.stopPropagation()\" (keydown.enter)=\"openDialog( item )\" (keydown.space)=\"openDialog( item ); $event.preventDefault()\">\n\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t<mat-icon matListItemIcon [class]=\"item.color || 'primary'\">{{ item.icon }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t<span matListItemTitle>{{ item.text }}</span>\n\t\t\t\t</mat-list-item>\n\t\t\t}\n\t\t}\n\t</mat-nav-list>\n</ng-template>\n", styles: ["mat-card{margin-bottom:2rem}mat-card mat-card-content{margin:0 -1rem}mat-card mat-nav-list .mat-mdc-list-item{border-bottom:1px solid var(--outline-variant, #E7EBEE);text-decoration:underline}:host(.compact) .xiri-links-flat{background:transparent;box-shadow:none;padding:0;margin-bottom:0}:host(.compact) .xiri-links-header{display:flex;gap:var(--xiri-spacing-sm, 8px);align-items:center;margin-bottom:var(--xiri-spacing-sm, 8px)}:host(.compact) .xiri-links-header .header-title{font-size:var(--xiri-font-size-body);font-weight:500}:host(.compact) .xiri-links-header .header-sub{font-size:var(--xiri-font-size-label);color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, #555))}:host(.compact) mat-nav-list .mat-mdc-list-item{border-bottom:1px solid var(--outline-variant, #E7EBEE);text-decoration:underline}\n"], dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: XiriUrlPipe, name: "xiriUrl" }] }); }
|
|
6035
6511
|
}
|
|
6036
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
6512
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriLinksComponent, decorators: [{
|
|
6037
6513
|
type: Component,
|
|
6038
6514
|
args: [{ selector: 'xiri-links', imports: [MatCard,
|
|
6039
6515
|
MatCardHeader,
|
|
@@ -6058,10 +6534,10 @@ class XiriCardlinkComponent {
|
|
|
6058
6534
|
this.compact = computed(() => !!this.settings().compact, /* @ts-ignore */
|
|
6059
6535
|
...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
|
|
6060
6536
|
}
|
|
6061
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6062
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
6537
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriCardlinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6538
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriCardlinkComponent, isStandalone: true, selector: "xiri-cardlink", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.compact": "compact()" } }, ngImport: i0, template: "@let cardUrl = settings().link | xiriUrl;\n<a [routerLink]=\"cardUrl?.path\" [queryParams]=\"cardUrl?.queryParams\">\n\t@if (compact()) {\n\t\t<div class=\"card xiri-cardlink-flat\" matRipple>\n\t\t\t<mat-card-header>\n\t\t\t\t@if (settings().icon) {\n\t\t\t\t\t<div mat-card-avatar>\n\t\t\t\t\t\t<mat-icon [fontSet]=\"settings().iconSet\">{{ settings().icon }}</mat-icon>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (settings().text) {\n\t\t\t\t\t<mat-card-title>{{ settings().text }}</mat-card-title>\n\t\t\t\t}\n\t\t\t\t@if (settings().sub) {\n\t\t\t\t\t<mat-card-subtitle>{{ settings().sub }}</mat-card-subtitle>\n\t\t\t\t}\n\t\t\t</mat-card-header>\n\t\t</div>\n\t} @else {\n\t\t<mat-card class=\"card mat-mdc-elevation-specific mat-elevation-z2\" matRipple>\n\t\t\t<mat-card-header>\n\t\t\t\t@if (settings().icon) {\n\t\t\t\t\t<div mat-card-avatar>\n\t\t\t\t\t\t<mat-icon [fontSet]=\"settings().iconSet\">{{ settings().icon }}</mat-icon>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (settings().text) {\n\t\t\t\t\t<mat-card-title>{{ settings().text }}</mat-card-title>\n\t\t\t\t}\n\t\t\t\t@if (settings().sub) {\n\t\t\t\t\t<mat-card-subtitle>{{ settings().sub }}</mat-card-subtitle>\n\t\t\t\t}\n\t\t\t</mat-card-header>\n\t\t</mat-card>\n\t}\n</a>\n", styles: [":host{margin-bottom:2rem}mat-card{transition:background-color var(--xiri-duration-fast, .15s) var(--xiri-easing-standard, cubic-bezier(.4, 0, .2, 1))}mat-card:hover{background-color:var(--surface-variant, #DEE3EB)}:host(.compact){margin-bottom:0}:host(.compact) .xiri-cardlink-flat{background:transparent;box-shadow:none;padding:0;display:block;transition:background-color var(--xiri-duration-fast, .15s) var(--xiri-easing-standard, cubic-bezier(.4, 0, .2, 1))}:host(.compact) .xiri-cardlink-flat:hover{background-color:var(--surface-variant, #DEE3EB)}.mat-mdc-card-avatar{background-color:var(--primary, #2892D9);border-radius:50%;color:var(--on-primary, white);text-align:center;width:4rem;height:4rem}.mat-mdc-card-avatar mat-icon{font-size:2rem;line-height:4rem;width:2rem;height:4rem}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "pipe", type: XiriUrlPipe, name: "xiriUrl" }] }); }
|
|
6063
6539
|
}
|
|
6064
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
6540
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriCardlinkComponent, decorators: [{
|
|
6065
6541
|
type: Component,
|
|
6066
6542
|
args: [{ selector: 'xiri-cardlink', imports: [RouterLink,
|
|
6067
6543
|
MatCard,
|
|
@@ -6095,10 +6571,10 @@ class XiriSkeletonComponent {
|
|
|
6095
6571
|
this.columnsArray = computed(() => Array.from({ length: this.columns() }), /* @ts-ignore */
|
|
6096
6572
|
...(ngDevMode ? [{ debugName: "columnsArray" }] : /* istanbul ignore next */ []));
|
|
6097
6573
|
}
|
|
6098
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6099
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
6574
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6575
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriSkeletonComponent, isStandalone: true, selector: "xiri-skeleton", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, lines: { classPropertyName: "lines", publicName: "lines", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, animate: { classPropertyName: "animate", publicName: "animate", isSignal: true, isRequired: false, transformFunction: null }, fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "status", "aria-label": "Laden..." }, properties: { "class.fill": "fill()" } }, ngImport: i0, template: "@switch (type()) {\n\t@case ('text') {\n\t\t<div class=\"skeleton-text\">\n\t\t\t@for (_ of linesArray(); track $index) {\n\t\t\t\t<div class=\"skeleton-line\" [class.animate]=\"animate()\"\n\t\t\t\t [style.width]=\"$last ? '60%' : width()\"\n\t\t\t\t [style.height]=\"height()\"></div>\n\t\t\t}\n\t\t</div>\n\t}\n\t@case ('circle') {\n\t\t<div class=\"skeleton-circle\" [class.animate]=\"animate()\"\n\t\t [style.width]=\"width()\"\n\t\t [style.height]=\"width()\"></div>\n\t}\n\t@case ('rect') {\n\t\t<div class=\"skeleton-rect\" [class.animate]=\"animate()\"\n\t\t [style.width]=\"width()\"\n\t\t [style.height]=\"height()\"></div>\n\t}\n\t@case ('table-row') {\n\t\t<div class=\"skeleton-table\" [class.fill-height]=\"fill()\">\n\t\t\t@for (_ of linesArray(); track $index) {\n\t\t\t\t<div class=\"skeleton-table-row\">\n\t\t\t\t\t@for (_ of columnsArray(); track $index) {\n\t\t\t\t\t\t<div class=\"skeleton-table-cell\">\n\t\t\t\t\t\t\t<div class=\"skeleton-line\" [class.animate]=\"animate()\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t}\n}\n", styles: [":host{display:block}:host.fill{height:100%}.skeleton-line,.skeleton-circle,.skeleton-rect{background-color:var(--color-gray-200, #E9ECEF);border-radius:var(--xiri-radius-xs)}.skeleton-line.animate,.skeleton-circle.animate,.skeleton-rect.animate{background-image:linear-gradient(90deg,var(--color-gray-200, #E9ECEF) 0px,var(--color-gray-100, #F8F9FA) 40px,var(--color-gray-200, #E9ECEF) 80px);background-size:200px 100%;animation:shimmer 1.5s var(--xiri-easing-standard) infinite}.skeleton-text{display:flex;flex-direction:column;gap:8px}.skeleton-text .skeleton-line{height:1em}.skeleton-circle{border-radius:50%}.skeleton-rect{border-radius:var(--xiri-radius-md)}.skeleton-table{display:flex;flex-direction:column;gap:12px}.skeleton-table.fill-height{height:100%;overflow:hidden}.skeleton-table.fill-height .skeleton-table-row{flex:1;min-height:0}.skeleton-table-row{display:flex;gap:16px}.skeleton-table-cell{flex:1}.skeleton-table-cell .skeleton-line{height:1em;width:100%}@media(prefers-reduced-motion:reduce){.skeleton-line.animate,.skeleton-circle.animate,.skeleton-rect.animate{animation:none}}\n"] }); }
|
|
6100
6576
|
}
|
|
6101
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
6577
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSkeletonComponent, decorators: [{
|
|
6102
6578
|
type: Component,
|
|
6103
6579
|
args: [{ selector: 'xiri-skeleton', host: { 'role': 'status', 'aria-label': 'Laden...', '[class.fill]': 'fill()' }, template: "@switch (type()) {\n\t@case ('text') {\n\t\t<div class=\"skeleton-text\">\n\t\t\t@for (_ of linesArray(); track $index) {\n\t\t\t\t<div class=\"skeleton-line\" [class.animate]=\"animate()\"\n\t\t\t\t [style.width]=\"$last ? '60%' : width()\"\n\t\t\t\t [style.height]=\"height()\"></div>\n\t\t\t}\n\t\t</div>\n\t}\n\t@case ('circle') {\n\t\t<div class=\"skeleton-circle\" [class.animate]=\"animate()\"\n\t\t [style.width]=\"width()\"\n\t\t [style.height]=\"width()\"></div>\n\t}\n\t@case ('rect') {\n\t\t<div class=\"skeleton-rect\" [class.animate]=\"animate()\"\n\t\t [style.width]=\"width()\"\n\t\t [style.height]=\"height()\"></div>\n\t}\n\t@case ('table-row') {\n\t\t<div class=\"skeleton-table\" [class.fill-height]=\"fill()\">\n\t\t\t@for (_ of linesArray(); track $index) {\n\t\t\t\t<div class=\"skeleton-table-row\">\n\t\t\t\t\t@for (_ of columnsArray(); track $index) {\n\t\t\t\t\t\t<div class=\"skeleton-table-cell\">\n\t\t\t\t\t\t\t<div class=\"skeleton-line\" [class.animate]=\"animate()\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t}\n}\n", styles: [":host{display:block}:host.fill{height:100%}.skeleton-line,.skeleton-circle,.skeleton-rect{background-color:var(--color-gray-200, #E9ECEF);border-radius:var(--xiri-radius-xs)}.skeleton-line.animate,.skeleton-circle.animate,.skeleton-rect.animate{background-image:linear-gradient(90deg,var(--color-gray-200, #E9ECEF) 0px,var(--color-gray-100, #F8F9FA) 40px,var(--color-gray-200, #E9ECEF) 80px);background-size:200px 100%;animation:shimmer 1.5s var(--xiri-easing-standard) infinite}.skeleton-text{display:flex;flex-direction:column;gap:8px}.skeleton-text .skeleton-line{height:1em}.skeleton-circle{border-radius:50%}.skeleton-rect{border-radius:var(--xiri-radius-md)}.skeleton-table{display:flex;flex-direction:column;gap:12px}.skeleton-table.fill-height{height:100%;overflow:hidden}.skeleton-table.fill-height .skeleton-table-row{flex:1;min-height:0}.skeleton-table-row{display:flex;gap:16px}.skeleton-table-cell{flex:1}.skeleton-table-cell .skeleton-line{height:1em;width:100%}@media(prefers-reduced-motion:reduce){.skeleton-line.animate,.skeleton-circle.animate,.skeleton-rect.animate{animation:none}}\n"] }]
|
|
6104
6580
|
}], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], lines: [{ type: i0.Input, args: [{ isSignal: true, alias: "lines", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], animate: [{ type: i0.Input, args: [{ isSignal: true, alias: "animate", required: false }] }], fill: [{ type: i0.Input, args: [{ isSignal: true, alias: "fill", required: false }] }] } });
|
|
@@ -6219,10 +6695,10 @@ class XiriCardComponent {
|
|
|
6219
6695
|
return;
|
|
6220
6696
|
this.cardResource.reload();
|
|
6221
6697
|
}
|
|
6222
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6223
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
6698
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6699
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriCardComponent, isStandalone: true, selector: "xiri-card", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<mat-card class=\"card mat-mdc-elevation-specific mat-elevation-z2\">\n\t<mat-card-header>\n\t\t@if (settings().headerIcon) {\n\t\t\t<div mat-card-avatar class=\"header-image\">\n\t\t\t\t<mat-icon [class]=\"settings().headerIconColor || 'primary'\">{{ settings().headerIcon }}</mat-icon>\n\t\t\t</div>\n\t\t}\n\t\t@if (settings().header) {\n\t\t\t<mat-card-title [class]=\"{hasHeaderSub: settings().headerSub}\">{{ settings().header }}</mat-card-title>\n\t\t}\n\t\t@if (settings().headerSub) {\n\t\t\t<mat-card-subtitle>{{ settings().headerSub }}</mat-card-subtitle>\n\t\t}\n\t\t@if (settings().buttonsTop) {\n\t\t\t<xiri-buttonline [settings]=\"settings().buttonsTop!\"></xiri-buttonline>\n\t\t}\n\t\t@if (settings().collapsible) {\n\t\t\t<button mat-icon-button (click)=\"toggleCollapse()\" class=\"collapse-btn\" aria-label=\"Auf-/Zuklappen\">\n\t\t\t\t<mat-icon>{{ isCollapsed() ? 'expand_more' : 'expand_less' }}</mat-icon>\n\t\t\t</button>\n\t\t}\n\t\t@if (settings().reload && settings().url) {\n\t\t\t<button mat-icon-button (click)=\"reload()\" [disabled]=\"loading()\" class=\"reload-btn\" aria-label=\"Neu laden\">\n\t\t\t\t<mat-icon [class.spinning]=\"loading()\">autorenew</mat-icon>\n\t\t\t</button>\n\t\t}\n\t</mat-card-header>\n\t<div class=\"collapse-wrapper\" [class.collapsed]=\"isCollapsed()\">\n\t\t<div class=\"collapse-inner\">\n\t\t\t@if (loading() && !cardData()) {\n\t\t\t\t<mat-card-content>\n\t\t\t\t\t<xiri-skeleton type=\"table-row\" [columns]=\"2\" [lines]=\"3\"></xiri-skeleton>\n\t\t\t\t</mat-card-content>\n\t\t\t} @else if (errorMsg()) {\n\t\t\t\t<mat-card-content>\n\t\t\t\t\t<div class=\"load-error\">{{ errorMsg() }}</div>\n\t\t\t\t</mat-card-content>\n\t\t\t} @else if (hasComponents()) {\n\t\t\t\t<mat-card-content class=\"hasComponents\" [style.--xiri-card-padding]=\"componentsPadding()\">\n\t\t\t\t\t<xiri-dyncomponent [data]=\"settings().components!\" class=\"xrow\"></xiri-dyncomponent>\n\t\t\t\t</mat-card-content>\n\t\t\t} @else {\n\t\t\t\t<mat-card-content class=\"hasTable\" [style.max-height]=\"settings().maxHeight || '50vh'\">\n\t\t\t\t\t@if (rawTable()) {\n\t\t\t\t\t\t<xiri-raw-table [settings]=\"rawTable()!\"></xiri-raw-table>\n\t\t\t\t\t}\n\t\t\t\t</mat-card-content>\n\t\t\t}\n\t\t\t@if (settings().buttonsBottom) {\n\t\t\t\t<mat-card-actions align=\"end\">\n\t\t\t\t\t<xiri-buttonline [settings]=\"settings().buttonsBottom!\"></xiri-buttonline>\n\t\t\t\t</mat-card-actions>\n\t\t\t}\n\t\t</div>\n\t</div>\n</mat-card>\n", styles: [":host{animation:fadeIn var(--xiri-duration-fast) var(--xiri-easing-standard)}.collapse-wrapper{display:grid;grid-template-rows:1fr;transition:grid-template-rows var(--xiri-duration-normal) var(--xiri-easing-standard)}.collapse-wrapper.collapsed{grid-template-rows:0fr}.collapse-inner{overflow:hidden;min-height:0}.spinning{animation:spin 1s linear infinite}.card{overflow:hidden}.card mat-card-header{margin:0 0 2px;box-shadow:var(--xiri-shadow-xs);padding:4px 8px 4px 16px;align-items:center;min-height:32px}.card mat-card-header .header-image{margin-bottom:0;width:var(--xiri-icon-size-lg);height:var(--xiri-icon-size-lg);align-items:center;display:flex}.card mat-card-header .header-image mat-icon{font-size:var(--xiri-icon-size-lg);height:var(--xiri-icon-size-lg);width:var(--xiri-icon-size-lg);color:var(--primary)}.card mat-card-header mat-card-title.hasHeaderSub{padding-top:2px}.card mat-card-header mat-card-subtitle{padding-bottom:2px}.card mat-card-header xiri-buttonline{display:flex;justify-content:flex-end;flex:1}.card mat-card-header xiri-buttonline ::ng-deep button{width:32px;height:32px;padding:4px}.card mat-card-header xiri-buttonline ::ng-deep button mat-icon{font-size:var(--xiri-icon-size-md);width:var(--xiri-icon-size-md);height:var(--xiri-icon-size-md)}.card .collapse-btn{margin-left:auto;width:32px;height:32px;padding:4px}.card .collapse-btn mat-icon{font-size:var(--xiri-icon-size-md);width:var(--xiri-icon-size-md);height:var(--xiri-icon-size-md)}.card .reload-btn{width:32px;height:32px;padding:4px}.card .reload-btn mat-icon{font-size:var(--xiri-icon-size-md);width:var(--xiri-icon-size-md);height:var(--xiri-icon-size-md)}.card mat-card-content{padding:0}.card mat-card-content.hasTable{overflow-x:auto}.card mat-card-content.hasComponents{padding:var(--xiri-card-padding, var(--xiri-spacing-md, 16px))}@media(max-width:575.98px){.card mat-card-content.hasComponents{padding:8px}}.card mat-card-content xiri-skeleton{padding:16px}.card mat-card-content .load-error{padding:16px;color:var(--error, #B3261E)}.card mat-card-actions{padding:4px 8px;min-height:32px;border-top:1px solid var(--outline-variant, rgba(0, 0, 0, .12))}.card mat-card-actions xiri-buttonline ::ng-deep button{width:32px;height:32px;padding:4px}.card mat-card-actions xiri-buttonline ::ng-deep button mat-icon{font-size:var(--xiri-icon-size-md);width:var(--xiri-icon-size-md);height:var(--xiri-icon-size-md)}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => MatCard), selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i0.forwardRef(() => MatCardHeader), selector: "mat-card-header" }, { kind: "directive", type: i0.forwardRef(() => MatCardAvatar), selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: i0.forwardRef(() => MatIcon), selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i0.forwardRef(() => MatIconButton), selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i0.forwardRef(() => MatCardTitle), selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i0.forwardRef(() => MatCardSubtitle), selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "component", type: i0.forwardRef(() => XiriButtonlineComponent), selector: "xiri-buttonline", inputs: ["settings", "disabled", "filterData"], outputs: ["result"] }, { kind: "directive", type: i0.forwardRef(() => MatCardContent), selector: "mat-card-content" }, { kind: "component", type: i0.forwardRef(() => XiriRawTableComponent), selector: "xiri-raw-table", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriSkeletonComponent), selector: "xiri-skeleton", inputs: ["type", "width", "height", "lines", "columns", "animate", "fill"] }, { kind: "directive", type: i0.forwardRef(() => MatCardActions), selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: i0.forwardRef(() => XiriDynComponentComponent), selector: "xiri-dyncomponent", inputs: ["data", "filterData", "dyncomponent"] }] }); }
|
|
6224
6700
|
}
|
|
6225
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
6701
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriCardComponent, decorators: [{
|
|
6226
6702
|
type: Component,
|
|
6227
6703
|
args: [{ selector: 'xiri-card', imports: [MatCard,
|
|
6228
6704
|
MatCardHeader,
|
|
@@ -6280,10 +6756,10 @@ class XiriTabsComponent {
|
|
|
6280
6756
|
return true;
|
|
6281
6757
|
return this.visitedTabs().has(index);
|
|
6282
6758
|
}
|
|
6283
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6284
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
6759
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6760
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriTabsComponent, isStandalone: true, selector: "xiri-tabs", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null }, filterData: { classPropertyName: "filterData", publicName: "filterData", isSignal: true, isRequired: false, transformFunction: null }, dyncomponent: { classPropertyName: "dyncomponent", publicName: "dyncomponent", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mat-tab-group\n\t[selectedIndex]=\"selectedIndex()\"\n\t[dynamicHeight]=\"settings().dynamicHeight ?? false\"\n\t[animationDuration]=\"settings().animationDuration ?? '225ms'\"\n\t[headerPosition]=\"settings().headerPosition ?? 'above'\"\n\t[mat-align-tabs]=\"settings().alignTabs ?? 'start'\"\n\t[mat-stretch-tabs]=\"settings().stretchTabs ?? false\"\n\t(selectedIndexChange)=\"onTabChange($event)\">\n\n\t@for (tab of settings().tabs; track tab.label; let i = $index) {\n\t\t<mat-tab [disabled]=\"tab.disabled ?? false\">\n\t\t\t<ng-template mat-tab-label>\n\t\t\t\t@if (tab.icon) {\n\t\t\t\t\t<mat-icon>{{ tab.icon }}</mat-icon>\n\t\t\t\t}\n\t\t\t\t{{ tab.label }}\n\t\t\t</ng-template>\n\n\t\t\t@if (shouldRenderContent(i, tab)) {\n\t\t\t\t<ng-container *ngTemplateOutlet=\"dyncomponent(); context: { $implicit: { data: tab.data, filterData: filterData() } }\"></ng-container>\n\t\t\t}\n\t\t</mat-tab>\n\t}\n</mat-tab-group>\n", styles: [":host{display:block}mat-icon{margin-right:8px}\n"], dependencies: [{ kind: "component", type: MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "directive", type: MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
|
|
6285
6761
|
}
|
|
6286
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
6762
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTabsComponent, decorators: [{
|
|
6287
6763
|
type: Component,
|
|
6288
6764
|
args: [{ selector: 'xiri-tabs', imports: [
|
|
6289
6765
|
MatTabGroup,
|
|
@@ -6337,10 +6813,10 @@ class XiriExpansionComponent {
|
|
|
6337
6813
|
return true;
|
|
6338
6814
|
return this.visitedPanels().has(index);
|
|
6339
6815
|
}
|
|
6340
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6341
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
6816
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriExpansionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6817
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriExpansionComponent, isStandalone: true, selector: "xiri-expansion", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null }, filterData: { classPropertyName: "filterData", publicName: "filterData", isSignal: true, isRequired: false, transformFunction: null }, dyncomponent: { classPropertyName: "dyncomponent", publicName: "dyncomponent", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mat-accordion\n\t[multi]=\"settings().multi ?? false\"\n\t[displayMode]=\"settings().displayMode ?? 'default'\"\n\t[hideToggle]=\"settings().hideToggle ?? false\"\n\t[togglePosition]=\"settings().togglePosition ?? 'after'\">\n\n\t@for (panel of settings().panels; track panel.title; let i = $index) {\n\t\t<mat-expansion-panel\n\t\t\t[disabled]=\"panel.disabled ?? false\"\n\t\t\t[expanded]=\"panel.expanded ?? false\"\n\t\t\t(opened)=\"onPanelOpened(i)\"\n\t\t\t(closed)=\"onPanelClosed(i)\">\n\n\t\t\t<mat-expansion-panel-header>\n\t\t\t\t@if (panel.icon) {\n\t\t\t\t\t<mat-icon>{{ panel.icon }}</mat-icon>\n\t\t\t\t}\n\t\t\t\t<mat-panel-title>{{ panel.title }}</mat-panel-title>\n\t\t\t\t@if (panel.description) {\n\t\t\t\t\t<mat-panel-description>{{ panel.description }}</mat-panel-description>\n\t\t\t\t}\n\t\t\t</mat-expansion-panel-header>\n\n\t\t\t@if (shouldRenderContent(i, panel)) {\n\t\t\t\t<ng-container *ngTemplateOutlet=\"dyncomponent(); context: { $implicit: { data: panel.data, filterData: filterData() } }\"></ng-container>\n\t\t\t}\n\t\t</mat-expansion-panel>\n\t}\n</mat-accordion>\n", styles: [":host{display:block}mat-icon{margin-right:8px}\n"], dependencies: [{ kind: "directive", type: MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
|
|
6342
6818
|
}
|
|
6343
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
6819
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriExpansionComponent, decorators: [{
|
|
6344
6820
|
type: Component,
|
|
6345
6821
|
args: [{ selector: 'xiri-expansion', imports: [
|
|
6346
6822
|
MatAccordion,
|
|
@@ -6360,10 +6836,10 @@ class XiriStatComponent {
|
|
|
6360
6836
|
this.compact = computed(() => !!this.settings().compact, /* @ts-ignore */
|
|
6361
6837
|
...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
|
|
6362
6838
|
}
|
|
6363
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6364
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
6839
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriStatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6840
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriStatComponent, isStandalone: true, selector: "xiri-stat", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.compact": "compact()" } }, ngImport: i0, template: "@if (compact()) {\n\t<div class=\"stat-flat\">\n\t\t<ng-container *ngTemplateOutlet=\"statBody\"></ng-container>\n\t</div>\n} @else {\n\t<mat-card class=\"stat-card mat-mdc-elevation-specific mat-elevation-z2\">\n\t\t<mat-card-content>\n\t\t\t<ng-container *ngTemplateOutlet=\"statBody\"></ng-container>\n\t\t</mat-card-content>\n\t</mat-card>\n}\n\n<ng-template #statBody>\n\t<div class=\"stat-content\">\n\t\t@if (settings().icon) {\n\t\t\t<div class=\"stat-icon\">\n\t\t\t\t<mat-icon [class]=\"settings().iconColor || 'primary'\">{{ settings().icon }}</mat-icon>\n\t\t\t</div>\n\t\t}\n\t\t<div class=\"stat-data\">\n\t\t\t<div class=\"stat-value\" [class]=\"settings().color || ''\">\n\t\t\t\t@if (settings().prefix) {\n\t\t\t\t\t<span class=\"prefix\">{{ settings().prefix }}</span>\n\t\t\t\t}\n\t\t\t\t{{ settings().value }}\n\t\t\t\t@if (settings().suffix) {\n\t\t\t\t\t<span class=\"suffix\">{{ settings().suffix }}</span>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"stat-label\">{{ settings().label }}</div>\n\t\t\t@if (settings().reference; as reference) {\n\t\t\t\t<div class=\"stat-reference\">{{ reference }}</div>\n\t\t\t}\n\t\t</div>\n\t\t@if (settings().trend; as trend) {\n\t\t\t<div class=\"stat-trend\" [class]=\"trend.direction\">\n\t\t\t\t<mat-icon>\n\t\t\t\t\t@switch (trend.direction) {\n\t\t\t\t\t\t@case ('up') { trending_up }\n\t\t\t\t\t\t@case ('down') { trending_down }\n\t\t\t\t\t\t@default { trending_flat }\n\t\t\t\t\t}\n\t\t\t\t</mat-icon>\n\t\t\t\t<span>{{ trend.value > 0 ? '+' : '' }}{{ trend.value }}%</span>\n\t\t\t</div>\n\t\t}\n\t</div>\n</ng-template>\n", styles: [":host{display:block;animation:scaleIn var(--xiri-duration-normal) var(--xiri-easing-decelerate) both}:host-context(.xiri-stat-grid):nth-child(1){animation-delay:0ms}:host-context(.xiri-stat-grid):nth-child(2){animation-delay:50ms}:host-context(.xiri-stat-grid):nth-child(3){animation-delay:.1s}:host-context(.xiri-stat-grid):nth-child(4){animation-delay:.15s}:host-context(.xiri-stat-grid):nth-child(5){animation-delay:.2s}:host-context(.xiri-stat-grid):nth-child(6){animation-delay:.25s}:host-context(.xiri-stat-grid):nth-child(7){animation-delay:.3s}:host-context(.xiri-stat-grid):nth-child(8){animation-delay:.35s}:host-context(.xiri-stat-grid):nth-child(9){animation-delay:.4s}:host-context(.xiri-stat-grid):nth-child(10){animation-delay:.45s}:host-context(.xiri-stat-grid):nth-child(11){animation-delay:.5s}:host-context(.xiri-stat-grid):nth-child(12){animation-delay:.55s}.stat-card{padding:0}.stat-card mat-card-content{padding:var(--xiri-spacing-md) var(--xiri-spacing-md)}:host(.compact){animation:none}:host(.compact) .stat-flat{padding:var(--xiri-spacing-sm) var(--xiri-spacing-sm);background:transparent;box-shadow:none}:host(.compact) .stat-icon mat-icon{font-size:24px;width:24px;height:24px}:host(.compact) .stat-value{font-size:1.25rem;font-weight:600}:host(.compact) .stat-value .prefix,:host(.compact) .stat-value .suffix{font-size:var(--xiri-font-size-label)}:host(.compact) .stat-label{font-size:var(--xiri-font-size-label)}.stat-content{display:flex;align-items:center;flex-wrap:wrap;gap:var(--xiri-spacing-md);min-width:0}.stat-icon{flex-shrink:0}.stat-icon mat-icon{font-size:36px;width:36px;height:36px;opacity:.8}.stat-data{flex:1;min-width:5rem;color:var(--on-surface, #1B1B1F)}.stat-value{font-size:1.75rem;font-weight:600;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stat-value .prefix,.stat-value .suffix{font-size:var(--xiri-font-size-body);font-weight:400;opacity:.7}.stat-label{font-size:var(--xiri-font-size-label);color:var(--on-surface-variant, #44474F);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stat-reference{font-size:var(--xiri-font-size-label);color:var(--on-surface-variant, #44474F);opacity:.7;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stat-trend{display:flex;align-items:center;flex-shrink:0;gap:2px;font-size:var(--xiri-font-size-label);font-weight:500;padding:var(--xiri-spacing-xs) var(--xiri-spacing-sm);border-radius:var(--xiri-radius-xs)}.stat-trend mat-icon{font-size:18px;width:18px;height:18px}.stat-trend.up{color:var(--color-success, #2ECC71);background-color:color-mix(in srgb,var(--color-success, #2ECC71) 10%,transparent)}.stat-trend.down{color:var(--error, #E74C3C);background-color:color-mix(in srgb,var(--error, #E74C3C) 10%,transparent)}.stat-trend.neutral{color:var(--on-surface-variant, #44474F);background-color:var(--surface-variant, #DEE3EB)}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
|
|
6365
6841
|
}
|
|
6366
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
6842
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriStatComponent, decorators: [{
|
|
6367
6843
|
type: Component,
|
|
6368
6844
|
args: [{ selector: 'xiri-stat', imports: [MatIcon, MatCard, MatCardContent, NgTemplateOutlet], host: { '[class.compact]': 'compact()' }, template: "@if (compact()) {\n\t<div class=\"stat-flat\">\n\t\t<ng-container *ngTemplateOutlet=\"statBody\"></ng-container>\n\t</div>\n} @else {\n\t<mat-card class=\"stat-card mat-mdc-elevation-specific mat-elevation-z2\">\n\t\t<mat-card-content>\n\t\t\t<ng-container *ngTemplateOutlet=\"statBody\"></ng-container>\n\t\t</mat-card-content>\n\t</mat-card>\n}\n\n<ng-template #statBody>\n\t<div class=\"stat-content\">\n\t\t@if (settings().icon) {\n\t\t\t<div class=\"stat-icon\">\n\t\t\t\t<mat-icon [class]=\"settings().iconColor || 'primary'\">{{ settings().icon }}</mat-icon>\n\t\t\t</div>\n\t\t}\n\t\t<div class=\"stat-data\">\n\t\t\t<div class=\"stat-value\" [class]=\"settings().color || ''\">\n\t\t\t\t@if (settings().prefix) {\n\t\t\t\t\t<span class=\"prefix\">{{ settings().prefix }}</span>\n\t\t\t\t}\n\t\t\t\t{{ settings().value }}\n\t\t\t\t@if (settings().suffix) {\n\t\t\t\t\t<span class=\"suffix\">{{ settings().suffix }}</span>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"stat-label\">{{ settings().label }}</div>\n\t\t\t@if (settings().reference; as reference) {\n\t\t\t\t<div class=\"stat-reference\">{{ reference }}</div>\n\t\t\t}\n\t\t</div>\n\t\t@if (settings().trend; as trend) {\n\t\t\t<div class=\"stat-trend\" [class]=\"trend.direction\">\n\t\t\t\t<mat-icon>\n\t\t\t\t\t@switch (trend.direction) {\n\t\t\t\t\t\t@case ('up') { trending_up }\n\t\t\t\t\t\t@case ('down') { trending_down }\n\t\t\t\t\t\t@default { trending_flat }\n\t\t\t\t\t}\n\t\t\t\t</mat-icon>\n\t\t\t\t<span>{{ trend.value > 0 ? '+' : '' }}{{ trend.value }}%</span>\n\t\t\t</div>\n\t\t}\n\t</div>\n</ng-template>\n", styles: [":host{display:block;animation:scaleIn var(--xiri-duration-normal) var(--xiri-easing-decelerate) both}:host-context(.xiri-stat-grid):nth-child(1){animation-delay:0ms}:host-context(.xiri-stat-grid):nth-child(2){animation-delay:50ms}:host-context(.xiri-stat-grid):nth-child(3){animation-delay:.1s}:host-context(.xiri-stat-grid):nth-child(4){animation-delay:.15s}:host-context(.xiri-stat-grid):nth-child(5){animation-delay:.2s}:host-context(.xiri-stat-grid):nth-child(6){animation-delay:.25s}:host-context(.xiri-stat-grid):nth-child(7){animation-delay:.3s}:host-context(.xiri-stat-grid):nth-child(8){animation-delay:.35s}:host-context(.xiri-stat-grid):nth-child(9){animation-delay:.4s}:host-context(.xiri-stat-grid):nth-child(10){animation-delay:.45s}:host-context(.xiri-stat-grid):nth-child(11){animation-delay:.5s}:host-context(.xiri-stat-grid):nth-child(12){animation-delay:.55s}.stat-card{padding:0}.stat-card mat-card-content{padding:var(--xiri-spacing-md) var(--xiri-spacing-md)}:host(.compact){animation:none}:host(.compact) .stat-flat{padding:var(--xiri-spacing-sm) var(--xiri-spacing-sm);background:transparent;box-shadow:none}:host(.compact) .stat-icon mat-icon{font-size:24px;width:24px;height:24px}:host(.compact) .stat-value{font-size:1.25rem;font-weight:600}:host(.compact) .stat-value .prefix,:host(.compact) .stat-value .suffix{font-size:var(--xiri-font-size-label)}:host(.compact) .stat-label{font-size:var(--xiri-font-size-label)}.stat-content{display:flex;align-items:center;flex-wrap:wrap;gap:var(--xiri-spacing-md);min-width:0}.stat-icon{flex-shrink:0}.stat-icon mat-icon{font-size:36px;width:36px;height:36px;opacity:.8}.stat-data{flex:1;min-width:5rem;color:var(--on-surface, #1B1B1F)}.stat-value{font-size:1.75rem;font-weight:600;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stat-value .prefix,.stat-value .suffix{font-size:var(--xiri-font-size-body);font-weight:400;opacity:.7}.stat-label{font-size:var(--xiri-font-size-label);color:var(--on-surface-variant, #44474F);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stat-reference{font-size:var(--xiri-font-size-label);color:var(--on-surface-variant, #44474F);opacity:.7;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stat-trend{display:flex;align-items:center;flex-shrink:0;gap:2px;font-size:var(--xiri-font-size-label);font-weight:500;padding:var(--xiri-spacing-xs) var(--xiri-spacing-sm);border-radius:var(--xiri-radius-xs)}.stat-trend mat-icon{font-size:18px;width:18px;height:18px}.stat-trend.up{color:var(--color-success, #2ECC71);background-color:color-mix(in srgb,var(--color-success, #2ECC71) 10%,transparent)}.stat-trend.down{color:var(--error, #E74C3C);background-color:color-mix(in srgb,var(--error, #E74C3C) 10%,transparent)}.stat-trend.neutral{color:var(--on-surface-variant, #44474F);background-color:var(--surface-variant, #DEE3EB)}\n"] }]
|
|
6369
6845
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }] } });
|
|
@@ -6385,10 +6861,10 @@ class XiriSectionComponent {
|
|
|
6385
6861
|
toggle() {
|
|
6386
6862
|
this.collapsed.update(v => !v);
|
|
6387
6863
|
}
|
|
6388
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6389
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
6864
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6865
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriSectionComponent, isStandalone: true, selector: "xiri-section", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null }, dyncomponent: { classPropertyName: "dyncomponent", publicName: "dyncomponent", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<section class=\"xiri-section\">\n\t@if (settings().title) {\n\t\t<div class=\"section-header\"\n\t\t [class.collapsible]=\"settings().collapsible\"\n\t\t [attr.role]=\"settings().collapsible ? 'button' : null\"\n\t\t [attr.tabindex]=\"settings().collapsible ? 0 : null\"\n\t\t (click)=\"settings().collapsible && toggle()\"\n\t\t (keydown.enter)=\"settings().collapsible && toggle()\"\n\t\t (keydown.space)=\"settings().collapsible && toggle(); settings().collapsible && $event.preventDefault()\">\n\t\t\t<div class=\"section-header-left\">\n\t\t\t\t@if (settings().icon) {\n\t\t\t\t\t<mat-icon [class]=\"settings().iconColor || ''\">{{ settings().icon }}</mat-icon>\n\t\t\t\t}\n\t\t\t\t<div>\n\t\t\t\t\t<h2>{{ settings().title }}</h2>\n\t\t\t\t\t@if (settings().subtitle) {\n\t\t\t\t\t\t<span class=\"section-subtitle\">{{ settings().subtitle }}</span>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"section-header-right\">\n\t\t\t\t@if (settings().buttons) {\n\t\t\t\t\t<xiri-buttonline [settings]=\"settings().buttons!\"></xiri-buttonline>\n\t\t\t\t}\n\t\t\t\t@if (settings().collapsible) {\n\t\t\t\t\t<mat-icon class=\"collapse-icon\" [class.collapsed]=\"collapsed()\">expand_more</mat-icon>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t\t<mat-divider></mat-divider>\n\t}\n\t<div class=\"collapse-wrapper\" [class.collapsed]=\"collapsed()\">\n\t\t<div class=\"collapse-inner\">\n\t\t\t<div class=\"section-content\">\n\t\t\t\t<ng-content></ng-content>\n\t\t\t\t@if (settings().components) {\n\t\t\t\t\t<xiri-dyncomponent [data]=\"settings().components!\" [dyncomponent]=\"dyncomponent()\" class=\"xrow\"></xiri-dyncomponent>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</section>\n", styles: [".xiri-section{margin-bottom:var(--xiri-spacing-xl, 2rem)}.xiri-section .section-header{display:flex;align-items:center;justify-content:space-between;padding:var(--xiri-spacing-sm, .5rem) 0}.xiri-section .section-header h2{font-size:var(--xiri-font-size-title);font-weight:500;margin:0}.xiri-section .section-header .section-subtitle{font-size:var(--xiri-font-size-label);color:var(--on-surface-variant)}.xiri-section .section-header.collapsible{cursor:pointer}.xiri-section .section-header .collapse-icon{transition:transform var(--xiri-duration-normal, .3s) var(--xiri-easing-standard, cubic-bezier(.4, 0, .2, 1))}.xiri-section .section-header .collapse-icon.collapsed{transform:rotate(-90deg)}.xiri-section .section-header .section-header-left,.xiri-section .section-header .section-header-right{display:flex;align-items:center;gap:var(--xiri-spacing-sm)}.xiri-section .collapse-wrapper{display:grid;grid-template-rows:1fr;transition:grid-template-rows var(--xiri-duration-normal, .3s) var(--xiri-easing-standard, cubic-bezier(.4, 0, .2, 1))}.xiri-section .collapse-wrapper.collapsed{grid-template-rows:0fr}.xiri-section .collapse-inner{overflow:hidden;min-height:0;padding:0 8px 8px;margin:0 -8px -8px}.xiri-section .section-content{padding-top:var(--xiri-spacing-md, 1rem)}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => MatIcon), selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i0.forwardRef(() => MatDivider), selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i0.forwardRef(() => XiriButtonlineComponent), selector: "xiri-buttonline", inputs: ["settings", "disabled", "filterData"], outputs: ["result"] }, { kind: "component", type: i0.forwardRef(() => XiriDynComponentComponent), selector: "xiri-dyncomponent", inputs: ["data", "filterData", "dyncomponent"] }] }); }
|
|
6390
6866
|
}
|
|
6391
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
6867
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSectionComponent, decorators: [{
|
|
6392
6868
|
type: Component,
|
|
6393
6869
|
args: [{ selector: 'xiri-section', imports: [MatIcon, MatDivider, XiriButtonlineComponent, forwardRef(() => XiriDynComponentComponent)], template: "<section class=\"xiri-section\">\n\t@if (settings().title) {\n\t\t<div class=\"section-header\"\n\t\t [class.collapsible]=\"settings().collapsible\"\n\t\t [attr.role]=\"settings().collapsible ? 'button' : null\"\n\t\t [attr.tabindex]=\"settings().collapsible ? 0 : null\"\n\t\t (click)=\"settings().collapsible && toggle()\"\n\t\t (keydown.enter)=\"settings().collapsible && toggle()\"\n\t\t (keydown.space)=\"settings().collapsible && toggle(); settings().collapsible && $event.preventDefault()\">\n\t\t\t<div class=\"section-header-left\">\n\t\t\t\t@if (settings().icon) {\n\t\t\t\t\t<mat-icon [class]=\"settings().iconColor || ''\">{{ settings().icon }}</mat-icon>\n\t\t\t\t}\n\t\t\t\t<div>\n\t\t\t\t\t<h2>{{ settings().title }}</h2>\n\t\t\t\t\t@if (settings().subtitle) {\n\t\t\t\t\t\t<span class=\"section-subtitle\">{{ settings().subtitle }}</span>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"section-header-right\">\n\t\t\t\t@if (settings().buttons) {\n\t\t\t\t\t<xiri-buttonline [settings]=\"settings().buttons!\"></xiri-buttonline>\n\t\t\t\t}\n\t\t\t\t@if (settings().collapsible) {\n\t\t\t\t\t<mat-icon class=\"collapse-icon\" [class.collapsed]=\"collapsed()\">expand_more</mat-icon>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t\t<mat-divider></mat-divider>\n\t}\n\t<div class=\"collapse-wrapper\" [class.collapsed]=\"collapsed()\">\n\t\t<div class=\"collapse-inner\">\n\t\t\t<div class=\"section-content\">\n\t\t\t\t<ng-content></ng-content>\n\t\t\t\t@if (settings().components) {\n\t\t\t\t\t<xiri-dyncomponent [data]=\"settings().components!\" [dyncomponent]=\"dyncomponent()\" class=\"xrow\"></xiri-dyncomponent>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</section>\n", styles: [".xiri-section{margin-bottom:var(--xiri-spacing-xl, 2rem)}.xiri-section .section-header{display:flex;align-items:center;justify-content:space-between;padding:var(--xiri-spacing-sm, .5rem) 0}.xiri-section .section-header h2{font-size:var(--xiri-font-size-title);font-weight:500;margin:0}.xiri-section .section-header .section-subtitle{font-size:var(--xiri-font-size-label);color:var(--on-surface-variant)}.xiri-section .section-header.collapsible{cursor:pointer}.xiri-section .section-header .collapse-icon{transition:transform var(--xiri-duration-normal, .3s) var(--xiri-easing-standard, cubic-bezier(.4, 0, .2, 1))}.xiri-section .section-header .collapse-icon.collapsed{transform:rotate(-90deg)}.xiri-section .section-header .section-header-left,.xiri-section .section-header .section-header-right{display:flex;align-items:center;gap:var(--xiri-spacing-sm)}.xiri-section .collapse-wrapper{display:grid;grid-template-rows:1fr;transition:grid-template-rows var(--xiri-duration-normal, .3s) var(--xiri-easing-standard, cubic-bezier(.4, 0, .2, 1))}.xiri-section .collapse-wrapper.collapsed{grid-template-rows:0fr}.xiri-section .collapse-inner{overflow:hidden;min-height:0;padding:0 8px 8px;margin:0 -8px -8px}.xiri-section .section-content{padding-top:var(--xiri-spacing-md, 1rem)}\n"] }]
|
|
6394
6870
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }], dyncomponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "dyncomponent", required: false }] }] } });
|
|
@@ -6429,10 +6905,10 @@ class XiriMultiStatComponent {
|
|
|
6429
6905
|
return;
|
|
6430
6906
|
this.resource.reload();
|
|
6431
6907
|
}
|
|
6432
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6433
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
6908
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriMultiStatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6909
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriMultiStatComponent, isStandalone: true, selector: "xiri-multi-stat", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<mat-card class=\"multi-stat-card mat-mdc-elevation-specific mat-elevation-z2\">\n\t<mat-card-content>\n\t\t@if (settings().title || settings().icon || (settings().reload && settings().url)) {\n\t\t\t<div class=\"multi-stat-header\">\n\t\t\t\t@if (settings().icon) {\n\t\t\t\t\t<mat-icon [class]=\"settings().iconColor || 'primary'\">{{ settings().icon }}</mat-icon>\n\t\t\t\t}\n\t\t\t\t@if (settings().title) {\n\t\t\t\t\t<h3 class=\"multi-stat-title\">{{ settings().title }}</h3>\n\t\t\t\t}\n\t\t\t\t@if (settings().reload && settings().url) {\n\t\t\t\t\t<button mat-icon-button (click)=\"reload()\" [disabled]=\"loading()\" class=\"reload-btn\" aria-label=\"Neu laden\">\n\t\t\t\t\t\t<mat-icon [class.spinning]=\"loading()\">autorenew</mat-icon>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\t@if (loading() && !items().length) {\n\t\t\t<xiri-skeleton type=\"rect\" height=\"72px\"></xiri-skeleton>\n\t\t} @else if (errorMsg()) {\n\t\t\t<div class=\"load-error\">{{ errorMsg() }}</div>\n\t\t} @else {\n\t\t\t<div class=\"multi-stat-items\" [class.vertical]=\"settings().verticalItems\">\n\t\t\t\t@for (item of items(); track $index) {\n\t\t\t\t\t<div class=\"multi-stat-item\">\n\t\t\t\t\t\t@if (item.link) {\n\t\t\t\t\t\t\t@let itemUrl = item.link | xiriUrl;\n\t\t\t\t\t\t\t<a class=\"multi-stat-link\" [routerLink]=\"itemUrl?.path\" [queryParams]=\"itemUrl?.queryParams\">\n\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"itemBody; context: { $implicit: item }\"></ng-container>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"itemBody; context: { $implicit: item }\"></ng-container>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</mat-card-content>\n</mat-card>\n\n<ng-template #itemBody let-item>\n\t@if (item.icon) {\n\t\t<div class=\"stat-icon\">\n\t\t\t<mat-icon [class]=\"item.iconColor || 'primary'\">{{ item.icon }}</mat-icon>\n\t\t</div>\n\t}\n\t<div class=\"stat-data\">\n\t\t<div class=\"stat-value\" [class]=\"item.color || ''\">\n\t\t\t@if (item.prefix) {\n\t\t\t\t<span class=\"prefix\">{{ item.prefix }}</span>\n\t\t\t}\n\t\t\t{{ item.value }}\n\t\t\t@if (item.suffix) {\n\t\t\t\t<span class=\"suffix\">{{ item.suffix }}</span>\n\t\t\t}\n\t\t</div>\n\t\t<div class=\"stat-label\">{{ item.label }}</div>\n\t</div>\n\t@if (item.trend; as trend) {\n\t\t<!-- Trend als Geschwister von .stat-data: horizontal daneben, vertikal darunter.\n\t\t ponytail: Trend-Mapping dupliziert stat.component.html; teilen wenn ein 3. Nutzer kommt -->\n\t\t<div class=\"stat-trend\" [class]=\"trend.direction\">\n\t\t\t<mat-icon>\n\t\t\t\t@switch (trend.direction) {\n\t\t\t\t\t@case ('up') { trending_up }\n\t\t\t\t\t@case ('down') { trending_down }\n\t\t\t\t\t@default { trending_flat }\n\t\t\t\t}\n\t\t\t</mat-icon>\n\t\t\t<span>{{ trend.value > 0 ? '+' : '' }}{{ trend.value }}%</span>\n\t\t</div>\n\t}\n</ng-template>\n", styles: [":host{display:block;animation:scaleIn var(--xiri-duration-normal) var(--xiri-easing-decelerate) both}.multi-stat-card{padding:0}.multi-stat-card mat-card-content{padding:var(--xiri-spacing-md) var(--xiri-spacing-md)}.multi-stat-header{display:flex;align-items:center;gap:var(--xiri-spacing-sm);margin-bottom:var(--xiri-spacing-md)}.multi-stat-header mat-icon{font-size:24px;width:24px;height:24px;opacity:.8}.multi-stat-title{margin:0;font-size:var(--xiri-font-size-body);font-weight:600;color:var(--on-surface, #1B1B1F)}.multi-stat-items{display:flex;align-items:stretch;flex-wrap:wrap;gap:var(--xiri-spacing-md);overflow-x:clip}.multi-stat-item{flex:1 1 auto;min-width:5rem;display:flex;flex-direction:row;align-items:center;gap:var(--xiri-spacing-sm);color:var(--on-surface, #1B1B1F);position:relative}.multi-stat-item:before{content:\"\";position:absolute;left:calc(var(--xiri-spacing-md) / -2);top:0;bottom:0;width:1px;background:var(--outline-variant, #C4C7CF)}.multi-stat-link{display:flex;flex-direction:row;align-items:center;gap:var(--xiri-spacing-sm);color:inherit;text-decoration:none;cursor:pointer}.multi-stat-link:hover .stat-value{text-decoration:underline}.stat-data{display:flex;flex-direction:column;gap:2px;min-width:0}.multi-stat-items.vertical .multi-stat-item,.multi-stat-items.vertical .multi-stat-link{flex-direction:column;align-items:stretch;gap:2px}.multi-stat-items.vertical .stat-trend{align-self:flex-start;margin-top:var(--xiri-spacing-xs)}.reload-btn{margin-left:auto}.reload-btn .spinning{animation:multi-stat-spin 1s linear infinite}@keyframes multi-stat-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.load-error{color:var(--error, #E74C3C);font-size:var(--xiri-font-size-label);padding:var(--xiri-spacing-sm) 0}.stat-icon mat-icon{font-size:28px;width:28px;height:28px;opacity:.8}.stat-value{font-size:1.5rem;font-weight:600;line-height:1.2}.stat-value .prefix,.stat-value .suffix{font-size:var(--xiri-font-size-body);font-weight:400;opacity:.7}.stat-label{font-size:var(--xiri-font-size-label);color:var(--on-surface-variant, #44474F)}.stat-trend{display:inline-flex;align-items:center;flex-shrink:0;gap:2px;font-size:var(--xiri-font-size-label);font-weight:500;padding:var(--xiri-spacing-xs) var(--xiri-spacing-sm);border-radius:var(--xiri-radius-xs)}.stat-trend mat-icon{font-size:18px;width:18px;height:18px}.stat-trend.up{color:var(--color-success, #2ECC71);background-color:color-mix(in srgb,var(--color-success, #2ECC71) 10%,transparent)}.stat-trend.down{color:var(--error, #E74C3C);background-color:color-mix(in srgb,var(--error, #E74C3C) 10%,transparent)}.stat-trend.neutral{color:var(--on-surface-variant, #44474F);background-color:var(--surface-variant, #DEE3EB)}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: XiriSkeletonComponent, selector: "xiri-skeleton", inputs: ["type", "width", "height", "lines", "columns", "animate", "fill"] }, { kind: "pipe", type: XiriUrlPipe, name: "xiriUrl" }] }); }
|
|
6434
6910
|
}
|
|
6435
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
6911
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriMultiStatComponent, decorators: [{
|
|
6436
6912
|
type: Component,
|
|
6437
6913
|
args: [{ selector: 'xiri-multi-stat', imports: [MatIcon, MatIconButton, MatCard, MatCardContent, RouterLink, NgTemplateOutlet, XiriUrlPipe, XiriSkeletonComponent], template: "<mat-card class=\"multi-stat-card mat-mdc-elevation-specific mat-elevation-z2\">\n\t<mat-card-content>\n\t\t@if (settings().title || settings().icon || (settings().reload && settings().url)) {\n\t\t\t<div class=\"multi-stat-header\">\n\t\t\t\t@if (settings().icon) {\n\t\t\t\t\t<mat-icon [class]=\"settings().iconColor || 'primary'\">{{ settings().icon }}</mat-icon>\n\t\t\t\t}\n\t\t\t\t@if (settings().title) {\n\t\t\t\t\t<h3 class=\"multi-stat-title\">{{ settings().title }}</h3>\n\t\t\t\t}\n\t\t\t\t@if (settings().reload && settings().url) {\n\t\t\t\t\t<button mat-icon-button (click)=\"reload()\" [disabled]=\"loading()\" class=\"reload-btn\" aria-label=\"Neu laden\">\n\t\t\t\t\t\t<mat-icon [class.spinning]=\"loading()\">autorenew</mat-icon>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\t@if (loading() && !items().length) {\n\t\t\t<xiri-skeleton type=\"rect\" height=\"72px\"></xiri-skeleton>\n\t\t} @else if (errorMsg()) {\n\t\t\t<div class=\"load-error\">{{ errorMsg() }}</div>\n\t\t} @else {\n\t\t\t<div class=\"multi-stat-items\" [class.vertical]=\"settings().verticalItems\">\n\t\t\t\t@for (item of items(); track $index) {\n\t\t\t\t\t<div class=\"multi-stat-item\">\n\t\t\t\t\t\t@if (item.link) {\n\t\t\t\t\t\t\t@let itemUrl = item.link | xiriUrl;\n\t\t\t\t\t\t\t<a class=\"multi-stat-link\" [routerLink]=\"itemUrl?.path\" [queryParams]=\"itemUrl?.queryParams\">\n\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"itemBody; context: { $implicit: item }\"></ng-container>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"itemBody; context: { $implicit: item }\"></ng-container>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</mat-card-content>\n</mat-card>\n\n<ng-template #itemBody let-item>\n\t@if (item.icon) {\n\t\t<div class=\"stat-icon\">\n\t\t\t<mat-icon [class]=\"item.iconColor || 'primary'\">{{ item.icon }}</mat-icon>\n\t\t</div>\n\t}\n\t<div class=\"stat-data\">\n\t\t<div class=\"stat-value\" [class]=\"item.color || ''\">\n\t\t\t@if (item.prefix) {\n\t\t\t\t<span class=\"prefix\">{{ item.prefix }}</span>\n\t\t\t}\n\t\t\t{{ item.value }}\n\t\t\t@if (item.suffix) {\n\t\t\t\t<span class=\"suffix\">{{ item.suffix }}</span>\n\t\t\t}\n\t\t</div>\n\t\t<div class=\"stat-label\">{{ item.label }}</div>\n\t</div>\n\t@if (item.trend; as trend) {\n\t\t<!-- Trend als Geschwister von .stat-data: horizontal daneben, vertikal darunter.\n\t\t ponytail: Trend-Mapping dupliziert stat.component.html; teilen wenn ein 3. Nutzer kommt -->\n\t\t<div class=\"stat-trend\" [class]=\"trend.direction\">\n\t\t\t<mat-icon>\n\t\t\t\t@switch (trend.direction) {\n\t\t\t\t\t@case ('up') { trending_up }\n\t\t\t\t\t@case ('down') { trending_down }\n\t\t\t\t\t@default { trending_flat }\n\t\t\t\t}\n\t\t\t</mat-icon>\n\t\t\t<span>{{ trend.value > 0 ? '+' : '' }}{{ trend.value }}%</span>\n\t\t</div>\n\t}\n</ng-template>\n", styles: [":host{display:block;animation:scaleIn var(--xiri-duration-normal) var(--xiri-easing-decelerate) both}.multi-stat-card{padding:0}.multi-stat-card mat-card-content{padding:var(--xiri-spacing-md) var(--xiri-spacing-md)}.multi-stat-header{display:flex;align-items:center;gap:var(--xiri-spacing-sm);margin-bottom:var(--xiri-spacing-md)}.multi-stat-header mat-icon{font-size:24px;width:24px;height:24px;opacity:.8}.multi-stat-title{margin:0;font-size:var(--xiri-font-size-body);font-weight:600;color:var(--on-surface, #1B1B1F)}.multi-stat-items{display:flex;align-items:stretch;flex-wrap:wrap;gap:var(--xiri-spacing-md);overflow-x:clip}.multi-stat-item{flex:1 1 auto;min-width:5rem;display:flex;flex-direction:row;align-items:center;gap:var(--xiri-spacing-sm);color:var(--on-surface, #1B1B1F);position:relative}.multi-stat-item:before{content:\"\";position:absolute;left:calc(var(--xiri-spacing-md) / -2);top:0;bottom:0;width:1px;background:var(--outline-variant, #C4C7CF)}.multi-stat-link{display:flex;flex-direction:row;align-items:center;gap:var(--xiri-spacing-sm);color:inherit;text-decoration:none;cursor:pointer}.multi-stat-link:hover .stat-value{text-decoration:underline}.stat-data{display:flex;flex-direction:column;gap:2px;min-width:0}.multi-stat-items.vertical .multi-stat-item,.multi-stat-items.vertical .multi-stat-link{flex-direction:column;align-items:stretch;gap:2px}.multi-stat-items.vertical .stat-trend{align-self:flex-start;margin-top:var(--xiri-spacing-xs)}.reload-btn{margin-left:auto}.reload-btn .spinning{animation:multi-stat-spin 1s linear infinite}@keyframes multi-stat-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.load-error{color:var(--error, #E74C3C);font-size:var(--xiri-font-size-label);padding:var(--xiri-spacing-sm) 0}.stat-icon mat-icon{font-size:28px;width:28px;height:28px;opacity:.8}.stat-value{font-size:1.5rem;font-weight:600;line-height:1.2}.stat-value .prefix,.stat-value .suffix{font-size:var(--xiri-font-size-body);font-weight:400;opacity:.7}.stat-label{font-size:var(--xiri-font-size-label);color:var(--on-surface-variant, #44474F)}.stat-trend{display:inline-flex;align-items:center;flex-shrink:0;gap:2px;font-size:var(--xiri-font-size-label);font-weight:500;padding:var(--xiri-spacing-xs) var(--xiri-spacing-sm);border-radius:var(--xiri-radius-xs)}.stat-trend mat-icon{font-size:18px;width:18px;height:18px}.stat-trend.up{color:var(--color-success, #2ECC71);background-color:color-mix(in srgb,var(--color-success, #2ECC71) 10%,transparent)}.stat-trend.down{color:var(--error, #E74C3C);background-color:color-mix(in srgb,var(--error, #E74C3C) 10%,transparent)}.stat-trend.neutral{color:var(--on-surface-variant, #44474F);background-color:var(--surface-variant, #DEE3EB)}\n"] }]
|
|
6438
6914
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }] } });
|
|
@@ -6449,10 +6925,10 @@ class XiriStatusComponent {
|
|
|
6449
6925
|
this.hostClass = computed(() => `xiri-status tone-${this.tone()} variant-${this.variant()}`, /* @ts-ignore */
|
|
6450
6926
|
...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
|
|
6451
6927
|
}
|
|
6452
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6453
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
6928
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriStatusComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6929
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriStatusComponent, isStandalone: true, selector: "xiri-status", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class": "hostClass()", "attr.role": "'status'", "attr.aria-label": "settings().ariaLabel ?? null", "attr.title": "settings().hint ?? null" } }, ngImport: i0, template: "@if (variant() === 'dot') {\n\t<span class=\"status-dot\" aria-hidden=\"true\"></span>\n}\n@if (settings().icon; as icon) {\n\t<mat-icon class=\"status-icon\" aria-hidden=\"true\">{{ icon }}</mat-icon>\n}\n<span class=\"status-label\">{{ settings().label }}</span>\n", styles: [":host{--status-tone: var(--on-surface-variant, #42474E);display:inline-flex;align-items:center;gap:var(--xiri-spacing-xs, 4px);max-width:100%;font-size:var(--xiri-font-size-label);line-height:1.35;vertical-align:middle}:host(.tone-info){--status-tone: var(--color-info)}:host(.tone-success){--status-tone: var(--color-success)}:host(.tone-warning){--status-tone: var(--color-warning)}:host(.tone-error){--status-tone: var(--error)}.status-label{min-width:0;overflow-wrap:anywhere;color:var(--on-surface)}.status-icon{flex:0 0 auto;color:var(--status-tone);font-size:var(--xiri-icon-size-sm, 18px);width:var(--xiri-icon-size-sm, 18px);height:var(--xiri-icon-size-sm, 18px)}.status-dot{flex:0 0 auto;width:.6em;height:.6em;border-radius:var(--xiri-radius-full, 999px);background:var(--status-tone)}:host(.variant-badge){padding:var(--xiri-spacing-xs, 4px) var(--xiri-spacing-sm, 8px);border-radius:var(--xiri-radius-full, 999px);background:color-mix(in srgb,var(--status-tone) 14%,var(--surface));border:1px solid color-mix(in srgb,var(--status-tone) 38%,transparent)}:host(.tone-neutral.variant-badge) .status-label{color:var(--on-surface-variant, #42474E)}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6454
6930
|
}
|
|
6455
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
6931
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriStatusComponent, decorators: [{
|
|
6456
6932
|
type: Component,
|
|
6457
6933
|
args: [{ selector: 'xiri-status', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatIcon], host: {
|
|
6458
6934
|
'[class]': 'hostClass()',
|
|
@@ -6480,10 +6956,10 @@ class XiriCalloutComponent {
|
|
|
6480
6956
|
dismiss() {
|
|
6481
6957
|
this.dismissed.set(true);
|
|
6482
6958
|
}
|
|
6483
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6484
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
6959
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriCalloutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6960
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriCalloutComponent, isStandalone: true, selector: "xiri-callout", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { buttonResult: "buttonResult" }, ngImport: i0, template: "@if (!dismissed()) {\n\t<div class=\"callout\" [class]=\"'tone-' + settings().tone\" [class.compact]=\"compact()\" [attr.role]=\"role()\">\n\t\t@if (settings().icon) {\n\t\t\t<div class=\"icon\">\n\t\t\t\t<mat-icon>{{ settings().icon }}</mat-icon>\n\t\t\t</div>\n\t\t}\n\t\t<div class=\"body\">\n\t\t\t@if (settings().title) {\n\t\t\t\t<div class=\"title\">{{ settings().title }}</div>\n\t\t\t}\n\t\t\t<div class=\"text\">{{ settings().text }}</div>\n\t\t\t@if (settings().actions?.length) {\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t@for (button of settings().actions!; track button) {\n\t\t\t\t\t\t<xiri-button [button]=\"button\" (result)=\"buttonResult.emit( $event )\"></xiri-button>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t\t@if (settings().dismissible) {\n\t\t\t<button mat-icon-button class=\"dismiss\" (click)=\"dismiss()\" aria-label=\"Hinweis schlie\u00DFen\">\n\t\t\t\t<mat-icon>close</mat-icon>\n\t\t\t</button>\n\t\t}\n\t</div>\n}\n", styles: ["@keyframes fadeInUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.callout{--callout-tone: var(--color-info);display:flex;align-items:flex-start;gap:var(--xiri-spacing-md);padding:var(--xiri-spacing-md);margin:var(--xiri-spacing-md) 0;border:1px solid transparent;border-left:4px solid var(--callout-tone);border-radius:var(--xiri-radius-sm);background-color:color-mix(in srgb,var(--callout-tone) 12%,var(--surface));color:var(--on-surface);animation:fadeInUp var(--xiri-duration-normal) var(--xiri-easing-decelerate)}.callout.tone-info{--callout-tone: var(--color-info)}.callout.tone-success{--callout-tone: var(--color-success)}.callout.tone-warning{--callout-tone: var(--color-warning)}.callout.tone-error{--callout-tone: var(--error)}.callout.compact{padding:var(--xiri-spacing-sm) var(--xiri-spacing-md);gap:var(--xiri-spacing-sm)}.icon{flex-shrink:0;line-height:1}.icon mat-icon{color:var(--callout-tone)}.body{flex-grow:1;min-width:0;overflow-wrap:anywhere}.title{font-weight:500;margin-bottom:var(--xiri-spacing-xs)}.text{line-height:1.5;max-width:70ch}.actions{display:flex;flex-wrap:wrap;gap:var(--xiri-spacing-sm);margin-top:var(--xiri-spacing-sm)}.dismiss{flex-shrink:0;margin:calc(-1 * var(--xiri-spacing-sm)) calc(-1 * var(--xiri-spacing-sm)) 0 0}.dismiss:focus-visible{outline:2px solid var(--callout-tone);outline-offset:2px}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: XiriButtonComponent, selector: "xiri-button", inputs: ["button", "disabled", "filterData", "url"], outputs: ["result"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6485
6961
|
}
|
|
6486
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
6962
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriCalloutComponent, decorators: [{
|
|
6487
6963
|
type: Component,
|
|
6488
6964
|
args: [{ selector: 'xiri-callout', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatIcon, MatIconButton, XiriButtonComponent], template: "@if (!dismissed()) {\n\t<div class=\"callout\" [class]=\"'tone-' + settings().tone\" [class.compact]=\"compact()\" [attr.role]=\"role()\">\n\t\t@if (settings().icon) {\n\t\t\t<div class=\"icon\">\n\t\t\t\t<mat-icon>{{ settings().icon }}</mat-icon>\n\t\t\t</div>\n\t\t}\n\t\t<div class=\"body\">\n\t\t\t@if (settings().title) {\n\t\t\t\t<div class=\"title\">{{ settings().title }}</div>\n\t\t\t}\n\t\t\t<div class=\"text\">{{ settings().text }}</div>\n\t\t\t@if (settings().actions?.length) {\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t@for (button of settings().actions!; track button) {\n\t\t\t\t\t\t<xiri-button [button]=\"button\" (result)=\"buttonResult.emit( $event )\"></xiri-button>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t\t@if (settings().dismissible) {\n\t\t\t<button mat-icon-button class=\"dismiss\" (click)=\"dismiss()\" aria-label=\"Hinweis schlie\u00DFen\">\n\t\t\t\t<mat-icon>close</mat-icon>\n\t\t\t</button>\n\t\t}\n\t</div>\n}\n", styles: ["@keyframes fadeInUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.callout{--callout-tone: var(--color-info);display:flex;align-items:flex-start;gap:var(--xiri-spacing-md);padding:var(--xiri-spacing-md);margin:var(--xiri-spacing-md) 0;border:1px solid transparent;border-left:4px solid var(--callout-tone);border-radius:var(--xiri-radius-sm);background-color:color-mix(in srgb,var(--callout-tone) 12%,var(--surface));color:var(--on-surface);animation:fadeInUp var(--xiri-duration-normal) var(--xiri-easing-decelerate)}.callout.tone-info{--callout-tone: var(--color-info)}.callout.tone-success{--callout-tone: var(--color-success)}.callout.tone-warning{--callout-tone: var(--color-warning)}.callout.tone-error{--callout-tone: var(--error)}.callout.compact{padding:var(--xiri-spacing-sm) var(--xiri-spacing-md);gap:var(--xiri-spacing-sm)}.icon{flex-shrink:0;line-height:1}.icon mat-icon{color:var(--callout-tone)}.body{flex-grow:1;min-width:0;overflow-wrap:anywhere}.title{font-weight:500;margin-bottom:var(--xiri-spacing-xs)}.text{line-height:1.5;max-width:70ch}.actions{display:flex;flex-wrap:wrap;gap:var(--xiri-spacing-sm);margin-top:var(--xiri-spacing-sm)}.dismiss{flex-shrink:0;margin:calc(-1 * var(--xiri-spacing-sm)) calc(-1 * var(--xiri-spacing-sm)) 0 0}.dismiss:focus-visible{outline:2px solid var(--callout-tone);outline-offset:2px}\n"] }]
|
|
6489
6965
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }], buttonResult: [{ type: i0.Output, args: ["buttonResult"] }] } });
|
|
@@ -6517,8 +6993,8 @@ class XiriDynComponentComponent {
|
|
|
6517
6993
|
return colsToClasses(obj.cols);
|
|
6518
6994
|
return fallback;
|
|
6519
6995
|
}
|
|
6520
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6521
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: XiriDynComponentComponent, isStandalone: true, selector: "xiri-dyncomponent", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, filterData: { classPropertyName: "filterData", publicName: "filterData", isSignal: true, isRequired: false, transformFunction: null }, dyncomponent: { classPropertyName: "dyncomponent", publicName: "dyncomponent", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@for (obj of dataInt(); track obj.id) {\n\n\t@switch (obj.type) {\n\t\t@case ('card') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-4')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-card [settings]=\"$any(obj.data)\"></xiri-card>\n\t\t\t</div>\n\t\t}\n\t\t@case ('buttonline') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-buttonline [settings]=\"$any(obj.data)\" [filterData]=\"filterData()\"></xiri-buttonline>\n\t\t\t</div>\n\t\t}\n\t\t@case ('table') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-table [settings]=\"$any(obj.data)\" [filterData]=\"filterData()\" [dyncomponent]=\"selfdyncomponent\"></xiri-table>\n\t\t\t</div>\n\t\t}\n\t\t@case ('cardlink') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-4 xcol-lg-3')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-cardlink [settings]=\"$any(obj.data)\"></xiri-cardlink>\n\t\t\t</div>\n\t\t}\n\t\t@case ('links') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-4 xcol-lg-3')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-links [settings]=\"$any(obj.data)\"></xiri-links>\n\t\t\t</div>\n\t\t}\n\t\t@case ('form') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol form')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<mat-card class=\"mat-mdc-elevation-specific mat-elevation-z2\">\n\t\t\t\t\t@if ($any(obj.data).header) {\n\t\t\t\t\t\t<mat-card-header>\n\t\t\t\t\t\t\t<mat-card-title>{{ $any(obj.data).header }}</mat-card-title>\n\t\t\t\t\t\t</mat-card-header>\n\t\t\t\t\t}\n\t\t\t\t\t<mat-card-content>\n\t\t\t\t\t\t<xiri-form [settings]=\"$any(obj.data)\"></xiri-form>\n\t\t\t\t\t</mat-card-content>\n\t\t\t\t</mat-card>\n\t\t\t</div>\n\t\t}\n\t\t@case ('query') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-query [settings]=\"$any(obj.data)\" [dyncomponent]=\"selfdyncomponent\"></xiri-query>\n\t\t\t</div>\n\t\t}\n\t\t@case ('stepper') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-stepper [settings]=\"$any(obj.data)\"></xiri-stepper>\n\t\t\t</div>\n\t\t}\n\t\t@case ('header') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-header [settings]=\"$any(obj.data)\"></xiri-header>\n\t\t\t</div>\n\t\t}\n\t\t@case ('list') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-list [settings]=\"$any(obj.data)\"></xiri-list>\n\t\t\t</div>\n\t\t}\n\t\t@case ('spacer') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<div class=\"spacer\"> </div>\n\t\t\t</div>\n\t\t}\n\t\t@case ('container') {\n\t\t\t@if (obj.data) {\n\t\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t\t<xiri-dyncomponent [data]=\"$any(obj.data).components\" [dyncomponent]=\"dyncomponent()\" class=\"xrow\"></xiri-dyncomponent>\n\t\t\t\t</div>\n\t\t\t}\n\t\t}\n\t\t@case ('infopoint') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-infopoint [settings]=\"$any(obj.data)\"></xiri-infopoint>\n\t\t\t</div>\n\t\t}\n\t\t@case ('multiprogress') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-4')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer (on viewport) { <xiri-multiprogress [settings]=\"$any(obj.data)\"></xiri-multiprogress> } @placeholder { <xiri-skeleton type=\"rect\" height=\"48px\" /> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('progress') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-4')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-progress [settings]=\"$any(obj.data)\"></xiri-progress>\n\t\t\t</div>\n\t\t}\n\t\t@case ('imagetext') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-4')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer (on viewport) { <xiri-imagetext [settings]=\"$any(obj.data)\"></xiri-imagetext> } @placeholder { <xiri-skeleton type=\"rect\" height=\"120px\" /> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('tabs') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-tabs [settings]=\"$any(obj.data)\" [filterData]=\"filterData()\" [dyncomponent]=\"selfdyncomponent\"></xiri-tabs>\n\t\t\t</div>\n\t\t}\n\t\t@case ('expansion') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-expansion [settings]=\"$any(obj.data)\" [filterData]=\"filterData()\" [dyncomponent]=\"selfdyncomponent\"></xiri-expansion>\n\t\t\t</div>\n\t\t}\n\t\t@case ('infotext') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@if ($any(obj.data).html) {\n\t\t\t\t\t<div class=\"infotext\" [innerHtml]=\"$any(obj.data).text | safeHtml\"></div>\n\t\t\t\t} @else {\n\t\t\t\t\t<div class=\"infotext\">{{ $any(obj.data).text }}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@case ('html') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<div class=\"html\" [innerHtml]=\"$any(obj.data).html | safeHtml\"></div>\n\t\t\t</div>\n\t\t}\n\t\t@case ('stat') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-4')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-stat [settings]=\"$any(obj.data)\"></xiri-stat>\n\t\t\t</div>\n\t\t}\n\t\t@case ('empty-state') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-empty-state [settings]=\"$any(obj.data)\"></xiri-empty-state>\n\t\t\t</div>\n\t\t}\n\t\t@case ('status') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-status [settings]=\"$any(obj.data)\"></xiri-status>\n\t\t\t</div>\n\t\t}\n\t\t@case ('callout') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-callout [settings]=\"$any(obj.data)\"></xiri-callout>\n\t\t\t</div>\n\t\t}\n\t\t@case ('timeline') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer (on viewport) { <xiri-timeline [settings]=\"$any(obj.data)\"></xiri-timeline> } @placeholder { <xiri-skeleton type=\"rect\" height=\"96px\" /> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('page-header') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer (on viewport) { <xiri-page-header [settings]=\"$any(obj.data)\"></xiri-page-header> } @placeholder { <xiri-skeleton type=\"rect\" height=\"64px\" /> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('section') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-section [settings]=\"$any(obj.data)\" [dyncomponent]=\"dyncomponent()\"></xiri-section>\n\t\t\t</div>\n\t\t}\n\t\t@case ('divider') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer (on viewport) { <xiri-divider [settings]=\"$any(obj.data)\"></xiri-divider> } @placeholder { <xiri-skeleton type=\"rect\" height=\"16px\" /> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('stat-grid') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-stat-grid [settings]=\"$any(obj.data)\"></xiri-stat-grid> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('multi-stat') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-multi-stat [settings]=\"$any(obj.data)\"></xiri-multi-stat>\n\t\t\t</div>\n\t\t}\n\t\t@case ('toolbar') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-toolbar [settings]=\"$any(obj.data)\" [filterData]=\"filterData()\"></xiri-toolbar> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('description-list') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-description-list [settings]=\"$any(obj.data)\"></xiri-description-list> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('barchart') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-3')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-barchart [mode]=\"obj.mode ?? 'simple'\" [settings]=\"$any(obj.data)\"></xiri-barchart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('linechart') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-3')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-linechart [settings]=\"$any(obj.data)\"></xiri-linechart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('piechart') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-3')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-piechart [settings]=\"$any(obj.data)\"></xiri-piechart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('gaugechart') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-3')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-gaugechart [settings]=\"$any(obj.data)\"></xiri-gaugechart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('bulletchart') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-3')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-bulletchart [settings]=\"$any(obj.data)\"></xiri-bulletchart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('heatmap') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-heatmap [settings]=\"$any(obj.data)\"></xiri-heatmap> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('calendar') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-calendar [settings]=\"$any(obj.data)\"></xiri-calendar> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('tree') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-tree [settings]=\"$any(obj.data)\"></xiri-tree> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('sankey') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-sankey [settings]=\"$any(obj.data)\"></xiri-sankey> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('gantt') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-gantt [settings]=\"$any(obj.data)\"></xiri-gantt> }\n\t\t\t</div>\n\t\t}\n\t\t@default {\n\t\t\t<ng-container *ngTemplateOutlet=\"dyncomponent() || defaultComponentUnknown; context: { $implicit: obj, filterData: filterData() }\"></ng-container>\n\t\t}\n\t}\n}\n\n<ng-template #selfdyncomponent let-obj>\n\t<xiri-dyncomponent [data]=\"$any(obj).data\" [filterData]=\"$any(obj).filterData\" [dyncomponent]=\"dyncomponent()\" class=\"xrow\"></xiri-dyncomponent>\n</ng-template>\n<ng-template #defaultComponentUnknown let-obj>\n\t<div class=\"xcol\">unknown type: {{ $any(obj).type }}</div>\n</ng-template>\n", styles: [".spacer.double{padding-top:1rem}.form mat-card-header{padding-bottom:1rem}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => XiriDynComponentComponent), selector: "xiri-dyncomponent", inputs: ["data", "filterData", "dyncomponent"] }, { kind: "component", type: i0.forwardRef(() => XiriCardComponent), selector: "xiri-card", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriButtonlineComponent), selector: "xiri-buttonline", inputs: ["settings", "disabled", "filterData"], outputs: ["result"] }, { kind: "component", type: i0.forwardRef(() => XiriTableComponent), selector: "xiri-table", inputs: ["dyncomponent", "settings", "filterData"], outputs: ["clickedRow"] }, { kind: "component", type: i0.forwardRef(() => XiriCardlinkComponent), selector: "xiri-cardlink", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriLinksComponent), selector: "xiri-links", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => MatCard), selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i0.forwardRef(() => MatCardHeader), selector: "mat-card-header" }, { kind: "directive", type: i0.forwardRef(() => MatCardTitle), selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i0.forwardRef(() => MatCardContent), selector: "mat-card-content" }, { kind: "component", type: i0.forwardRef(() => XiriFormComponent), selector: "xiri-form", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriQueryComponent), selector: "xiri-query", inputs: ["settings", "dyncomponent", "count"], outputs: ["filterChange"] }, { kind: "component", type: i0.forwardRef(() => XiriStepperComponent), selector: "xiri-stepper", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriHeaderComponent), selector: "xiri-header", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriListComponent), selector: "xiri-list", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriInfopointComponent), selector: "xiri-infopoint", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriProgressComponent), selector: "xiri-progress", inputs: ["settings"] }, { kind: "directive", type: i0.forwardRef(() => NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i0.forwardRef(() => XiriTabsComponent), selector: "xiri-tabs", inputs: ["settings", "filterData", "dyncomponent"] }, { kind: "component", type: i0.forwardRef(() => XiriExpansionComponent), selector: "xiri-expansion", inputs: ["settings", "filterData", "dyncomponent"] }, { kind: "component", type: i0.forwardRef(() => XiriStatComponent), selector: "xiri-stat", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriEmptyStateComponent), selector: "xiri-empty-state", inputs: ["settings"], outputs: ["buttonResult"] }, { kind: "component", type: i0.forwardRef(() => XiriStatusComponent), selector: "xiri-status", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriCalloutComponent), selector: "xiri-callout", inputs: ["settings"], outputs: ["buttonResult"] }, { kind: "component", type: i0.forwardRef(() => XiriSectionComponent), selector: "xiri-section", inputs: ["settings", "dyncomponent"] }, { kind: "component", type: i0.forwardRef(() => XiriSkeletonComponent), selector: "xiri-skeleton", inputs: ["type", "width", "height", "lines", "columns", "animate", "fill"] }, { kind: "component", type: i0.forwardRef(() => XiriMultiStatComponent), selector: "xiri-multi-stat", inputs: ["settings"] }, { kind: "pipe", type: i0.forwardRef(() => SafehtmlPipe), name: "safeHtml" }], deferBlockDependencies: [() => [/* @ts-ignore */
|
|
6996
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDynComponentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6997
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriDynComponentComponent, isStandalone: true, selector: "xiri-dyncomponent", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, filterData: { classPropertyName: "filterData", publicName: "filterData", isSignal: true, isRequired: false, transformFunction: null }, dyncomponent: { classPropertyName: "dyncomponent", publicName: "dyncomponent", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@for (obj of dataInt(); track obj.id) {\n\n\t@switch (obj.type) {\n\t\t@case ('card') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-4')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-card [settings]=\"$any(obj.data)\"></xiri-card>\n\t\t\t</div>\n\t\t}\n\t\t@case ('buttonline') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-buttonline [settings]=\"$any(obj.data)\" [filterData]=\"filterData()\"></xiri-buttonline>\n\t\t\t</div>\n\t\t}\n\t\t@case ('table') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-table [settings]=\"$any(obj.data)\" [filterData]=\"filterData()\" [dyncomponent]=\"selfdyncomponent\"></xiri-table>\n\t\t\t</div>\n\t\t}\n\t\t@case ('cardlink') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-4 xcol-lg-3')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-cardlink [settings]=\"$any(obj.data)\"></xiri-cardlink>\n\t\t\t</div>\n\t\t}\n\t\t@case ('links') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-4 xcol-lg-3')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-links [settings]=\"$any(obj.data)\"></xiri-links>\n\t\t\t</div>\n\t\t}\n\t\t@case ('form') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol form')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<mat-card class=\"mat-mdc-elevation-specific mat-elevation-z2\">\n\t\t\t\t\t@if ($any(obj.data).header) {\n\t\t\t\t\t\t<mat-card-header>\n\t\t\t\t\t\t\t<mat-card-title>{{ $any(obj.data).header }}</mat-card-title>\n\t\t\t\t\t\t</mat-card-header>\n\t\t\t\t\t}\n\t\t\t\t\t<mat-card-content>\n\t\t\t\t\t\t<xiri-form [settings]=\"$any(obj.data)\"></xiri-form>\n\t\t\t\t\t</mat-card-content>\n\t\t\t\t</mat-card>\n\t\t\t</div>\n\t\t}\n\t\t@case ('query') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-query [settings]=\"$any(obj.data)\" [dyncomponent]=\"selfdyncomponent\"></xiri-query>\n\t\t\t</div>\n\t\t}\n\t\t@case ('stepper') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-stepper [settings]=\"$any(obj.data)\"></xiri-stepper>\n\t\t\t</div>\n\t\t}\n\t\t@case ('header') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-header [settings]=\"$any(obj.data)\"></xiri-header>\n\t\t\t</div>\n\t\t}\n\t\t@case ('list') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-list [settings]=\"$any(obj.data)\"></xiri-list>\n\t\t\t</div>\n\t\t}\n\t\t@case ('spacer') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<div class=\"spacer\"> </div>\n\t\t\t</div>\n\t\t}\n\t\t@case ('container') {\n\t\t\t@if (obj.data) {\n\t\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t\t<xiri-dyncomponent [data]=\"$any(obj.data).components\" [dyncomponent]=\"dyncomponent()\" class=\"xrow\"></xiri-dyncomponent>\n\t\t\t\t</div>\n\t\t\t}\n\t\t}\n\t\t@case ('infopoint') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-infopoint [settings]=\"$any(obj.data)\"></xiri-infopoint>\n\t\t\t</div>\n\t\t}\n\t\t@case ('multiprogress') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-4')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer (on viewport) { <xiri-multiprogress [settings]=\"$any(obj.data)\"></xiri-multiprogress> } @placeholder { <xiri-skeleton type=\"rect\" height=\"48px\" /> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('progress') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-4')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-progress [settings]=\"$any(obj.data)\"></xiri-progress>\n\t\t\t</div>\n\t\t}\n\t\t@case ('imagetext') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-4')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer (on viewport) { <xiri-imagetext [settings]=\"$any(obj.data)\"></xiri-imagetext> } @placeholder { <xiri-skeleton type=\"rect\" height=\"120px\" /> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('tabs') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-tabs [settings]=\"$any(obj.data)\" [filterData]=\"filterData()\" [dyncomponent]=\"selfdyncomponent\"></xiri-tabs>\n\t\t\t</div>\n\t\t}\n\t\t@case ('expansion') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-expansion [settings]=\"$any(obj.data)\" [filterData]=\"filterData()\" [dyncomponent]=\"selfdyncomponent\"></xiri-expansion>\n\t\t\t</div>\n\t\t}\n\t\t@case ('infotext') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@if ($any(obj.data).html) {\n\t\t\t\t\t<div class=\"infotext\" [innerHtml]=\"$any(obj.data).text | safeHtml\"></div>\n\t\t\t\t} @else {\n\t\t\t\t\t<div class=\"infotext\">{{ $any(obj.data).text }}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@case ('html') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<div class=\"html\" [innerHtml]=\"$any(obj.data).html | safeHtml\"></div>\n\t\t\t</div>\n\t\t}\n\t\t@case ('stat') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-4')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-stat [settings]=\"$any(obj.data)\"></xiri-stat>\n\t\t\t</div>\n\t\t}\n\t\t@case ('empty-state') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-empty-state [settings]=\"$any(obj.data)\"></xiri-empty-state>\n\t\t\t</div>\n\t\t}\n\t\t@case ('status') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-status [settings]=\"$any(obj.data)\"></xiri-status>\n\t\t\t</div>\n\t\t}\n\t\t@case ('callout') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-callout [settings]=\"$any(obj.data)\"></xiri-callout>\n\t\t\t</div>\n\t\t}\n\t\t@case ('timeline') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer (on viewport) { <xiri-timeline [settings]=\"$any(obj.data)\"></xiri-timeline> } @placeholder { <xiri-skeleton type=\"rect\" height=\"96px\" /> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('page-header') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer (on viewport) { <xiri-page-header [settings]=\"$any(obj.data)\"></xiri-page-header> } @placeholder { <xiri-skeleton type=\"rect\" height=\"64px\" /> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('section') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-section [settings]=\"$any(obj.data)\" [dyncomponent]=\"dyncomponent()\"></xiri-section>\n\t\t\t</div>\n\t\t}\n\t\t@case ('divider') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer (on viewport) { <xiri-divider [settings]=\"$any(obj.data)\"></xiri-divider> } @placeholder { <xiri-skeleton type=\"rect\" height=\"16px\" /> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('stat-grid') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-stat-grid [settings]=\"$any(obj.data)\"></xiri-stat-grid> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('multi-stat') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-multi-stat [settings]=\"$any(obj.data)\"></xiri-multi-stat>\n\t\t\t</div>\n\t\t}\n\t\t@case ('toolbar') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-toolbar [settings]=\"$any(obj.data)\" [filterData]=\"filterData()\"></xiri-toolbar> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('description-list') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-description-list [settings]=\"$any(obj.data)\"></xiri-description-list> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('barchart') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-3')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-barchart [mode]=\"obj.mode ?? 'simple'\" [settings]=\"$any(obj.data)\"></xiri-barchart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('linechart') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-3')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-linechart [settings]=\"$any(obj.data)\"></xiri-linechart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('piechart') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-3')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-piechart [settings]=\"$any(obj.data)\"></xiri-piechart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('gaugechart') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-3')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-gaugechart [settings]=\"$any(obj.data)\"></xiri-gaugechart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('bulletchart') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol xcol-md-6 xcol-xl-3')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-bulletchart [settings]=\"$any(obj.data)\"></xiri-bulletchart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('heatmap') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-heatmap [settings]=\"$any(obj.data)\"></xiri-heatmap> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('calendar') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-calendar [settings]=\"$any(obj.data)\"></xiri-calendar> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('tree') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-tree [settings]=\"$any(obj.data)\"></xiri-tree> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('sankey') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-sankey [settings]=\"$any(obj.data)\"></xiri-sankey> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('gantt') {\n\t\t\t<div [class]=\"resolveClass(obj, 'xcol')\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-gantt [settings]=\"$any(obj.data)\"></xiri-gantt> }\n\t\t\t</div>\n\t\t}\n\t\t@default {\n\t\t\t<ng-container *ngTemplateOutlet=\"dyncomponent() || defaultComponentUnknown; context: { $implicit: obj, filterData: filterData() }\"></ng-container>\n\t\t}\n\t}\n}\n\n<ng-template #selfdyncomponent let-obj>\n\t<xiri-dyncomponent [data]=\"$any(obj).data\" [filterData]=\"$any(obj).filterData\" [dyncomponent]=\"dyncomponent()\" class=\"xrow\"></xiri-dyncomponent>\n</ng-template>\n<ng-template #defaultComponentUnknown let-obj>\n\t<div class=\"xcol\">unknown type: {{ $any(obj).type }}</div>\n</ng-template>\n", styles: [".spacer.double{padding-top:1rem}.form mat-card-header{padding-bottom:1rem}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => XiriDynComponentComponent), selector: "xiri-dyncomponent", inputs: ["data", "filterData", "dyncomponent"] }, { kind: "component", type: i0.forwardRef(() => XiriCardComponent), selector: "xiri-card", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriButtonlineComponent), selector: "xiri-buttonline", inputs: ["settings", "disabled", "filterData"], outputs: ["result"] }, { kind: "component", type: i0.forwardRef(() => XiriTableComponent), selector: "xiri-table", inputs: ["dyncomponent", "settings", "filterData"], outputs: ["clickedRow"] }, { kind: "component", type: i0.forwardRef(() => XiriCardlinkComponent), selector: "xiri-cardlink", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriLinksComponent), selector: "xiri-links", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => MatCard), selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i0.forwardRef(() => MatCardHeader), selector: "mat-card-header" }, { kind: "directive", type: i0.forwardRef(() => MatCardTitle), selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i0.forwardRef(() => MatCardContent), selector: "mat-card-content" }, { kind: "component", type: i0.forwardRef(() => XiriFormComponent), selector: "xiri-form", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriQueryComponent), selector: "xiri-query", inputs: ["settings", "dyncomponent", "count"], outputs: ["filterChange"] }, { kind: "component", type: i0.forwardRef(() => XiriStepperComponent), selector: "xiri-stepper", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriHeaderComponent), selector: "xiri-header", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriListComponent), selector: "xiri-list", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriInfopointComponent), selector: "xiri-infopoint", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriProgressComponent), selector: "xiri-progress", inputs: ["settings"] }, { kind: "directive", type: i0.forwardRef(() => NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i0.forwardRef(() => XiriTabsComponent), selector: "xiri-tabs", inputs: ["settings", "filterData", "dyncomponent"] }, { kind: "component", type: i0.forwardRef(() => XiriExpansionComponent), selector: "xiri-expansion", inputs: ["settings", "filterData", "dyncomponent"] }, { kind: "component", type: i0.forwardRef(() => XiriStatComponent), selector: "xiri-stat", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriEmptyStateComponent), selector: "xiri-empty-state", inputs: ["settings"], outputs: ["buttonResult"] }, { kind: "component", type: i0.forwardRef(() => XiriStatusComponent), selector: "xiri-status", inputs: ["settings"] }, { kind: "component", type: i0.forwardRef(() => XiriCalloutComponent), selector: "xiri-callout", inputs: ["settings"], outputs: ["buttonResult"] }, { kind: "component", type: i0.forwardRef(() => XiriSectionComponent), selector: "xiri-section", inputs: ["settings", "dyncomponent"] }, { kind: "component", type: i0.forwardRef(() => XiriSkeletonComponent), selector: "xiri-skeleton", inputs: ["type", "width", "height", "lines", "columns", "animate", "fill"] }, { kind: "component", type: i0.forwardRef(() => XiriMultiStatComponent), selector: "xiri-multi-stat", inputs: ["settings"] }, { kind: "pipe", type: i0.forwardRef(() => SafehtmlPipe), name: "safeHtml" }], deferBlockDependencies: [() => [/* @ts-ignore */
|
|
6522
6998
|
Promise.resolve().then(function () { return multiprogress_component; }).then(m => m.XiriMultiprogressComponent)], () => [/* @ts-ignore */
|
|
6523
6999
|
Promise.resolve().then(function () { return imagetext_component; }).then(m => m.XiriImagetextComponent)], () => [/* @ts-ignore */
|
|
6524
7000
|
Promise.resolve().then(function () { return timeline_component; }).then(m => m.XiriTimelineComponent)], () => [/* @ts-ignore */
|
|
@@ -6538,7 +7014,7 @@ class XiriDynComponentComponent {
|
|
|
6538
7014
|
Promise.resolve().then(function () { return sankey_component; }).then(m => m.XiriSankeyComponent)], () => [/* @ts-ignore */
|
|
6539
7015
|
Promise.resolve().then(function () { return gantt_component; }).then(m => m.XiriGanttComponent)]] }); }
|
|
6540
7016
|
}
|
|
6541
|
-
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.0
|
|
7017
|
+
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.1.0", ngImport: i0, type: XiriDynComponentComponent, resolveDeferredDeps: () => [/* @ts-ignore */
|
|
6542
7018
|
Promise.resolve().then(function () { return multiprogress_component; }).then(m => m.XiriMultiprogressComponent), /* @ts-ignore */
|
|
6543
7019
|
Promise.resolve().then(function () { return imagetext_component; }).then(m => m.XiriImagetextComponent), /* @ts-ignore */
|
|
6544
7020
|
Promise.resolve().then(function () { return timeline_component; }).then(m => m.XiriTimelineComponent), /* @ts-ignore */
|
|
@@ -6619,8 +7095,8 @@ class XiriSidepanelComponent {
|
|
|
6619
7095
|
this.titleId = computed(() => this.config().title ? 'xiri-sidepanel-title' : null, /* @ts-ignore */
|
|
6620
7096
|
...(ngDevMode ? [{ debugName: "titleId" }] : /* istanbul ignore next */ []));
|
|
6621
7097
|
}
|
|
6622
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6623
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
7098
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSidepanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7099
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriSidepanelComponent, isStandalone: true, selector: "xiri-sidepanel", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, ref: { classPropertyName: "ref", publicName: "ref", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { "role": "dialog", "aria-modal": "true" }, properties: { "attr.aria-labelledby": "titleId()" } }, ngImport: i0, template: `
|
|
6624
7100
|
<div class="sidepanel-header">
|
|
6625
7101
|
<span class="sidepanel-title" [id]="titleId()">{{ config().title }}</span>
|
|
6626
7102
|
<button mat-icon-button (click)="ref().close()" aria-label="Schließen"><mat-icon>close</mat-icon></button>
|
|
@@ -6632,7 +7108,7 @@ class XiriSidepanelComponent {
|
|
|
6632
7108
|
</div>
|
|
6633
7109
|
`, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;background:var(--surface, var(--mat-sys-surface, #fff));box-shadow:var(--xiri-elevation-2, 0 0 16px rgba(0, 0, 0, .2))}.sidepanel-header{display:flex;align-items:center;justify-content:space-between;padding:var(--xiri-spacing-md);border-bottom:1px solid var(--xiri-border-color, rgba(0, 0, 0, .12))}.sidepanel-title{font-size:var(--xiri-font-size-title);font-weight:500}.sidepanel-content{flex:1 1 auto;overflow-y:auto;padding:var(--xiri-spacing-md)}\n"], dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: XiriDynComponentComponent, selector: "xiri-dyncomponent", inputs: ["data", "filterData", "dyncomponent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6634
7110
|
}
|
|
6635
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
7111
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSidepanelComponent, decorators: [{
|
|
6636
7112
|
type: Component,
|
|
6637
7113
|
args: [{ selector: 'xiri-sidepanel', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatIconButton, MatIcon, XiriDynComponentComponent], host: {
|
|
6638
7114
|
role: 'dialog',
|
|
@@ -6679,10 +7155,10 @@ class XiriSidepanelService {
|
|
|
6679
7155
|
overlayRef.keydownEvents().pipe(filter(e => e.keyCode === ESCAPE)).subscribe(() => ref.close());
|
|
6680
7156
|
return ref;
|
|
6681
7157
|
}
|
|
6682
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6683
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0
|
|
7158
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSidepanelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
7159
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSidepanelService, providedIn: 'root' }); }
|
|
6684
7160
|
}
|
|
6685
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
7161
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSidepanelService, decorators: [{
|
|
6686
7162
|
type: Injectable,
|
|
6687
7163
|
args: [{ providedIn: 'root' }]
|
|
6688
7164
|
}] });
|
|
@@ -6731,10 +7207,10 @@ class XiriAlertComponent {
|
|
|
6731
7207
|
clickButton(button) {
|
|
6732
7208
|
this.dialogRef.close(button);
|
|
6733
7209
|
}
|
|
6734
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6735
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
7210
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriAlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7211
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriAlertComponent, isStandalone: true, selector: "xiri-alert", ngImport: i0, template: "@if (!loading()) {\n\t<h1 mat-dialog-title>{{ header() }}</h1>\n}\n<mat-dialog-content>\n\t@if (loading()) {\n\t\t<mat-spinner diameter=\"30\"></mat-spinner>\n\t} @else {\n\t\t<div class=\"content\">\n\t\t\t<div class=\"icon\">\n\t\t\t\t<mat-icon class=\"warn\" inline=\"true\">{{ icon() }}</mat-icon>\n\t\t\t</div>\n\t\t\t<div class=\"text\" [innerHtml]=\"text() | safeHtml\"></div>\n\t\t</div>\n\t}\n</mat-dialog-content>\n@if (!loading()) {\n\t<mat-divider></mat-divider>\n\t<mat-dialog-actions>\n\t\t@for (button of buttons(); track button) {\n\t\t\t<xiri-buttonstyle [button]=\"button\" [disabled]=\"false\" (click)=\"clickButton( button )\"></xiri-buttonstyle>\n\t\t}\n\t</mat-dialog-actions>\n}\n", styles: ["mat-spinner{margin:var(--xiri-spacing-md)}.content{display:flex;align-items:center}.content .icon{font-size:2rem;margin:var(--xiri-spacing-md) 0;flex-shrink:0;min-width:2rem;line-height:1}.content .text{flex-grow:1;padding:0 var(--xiri-spacing-md)}.mat-mdc-dialog-actions{justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: XiriButtonstyleComponent, selector: "xiri-buttonstyle", inputs: ["button", "disabled", "loading", "countdown", "pollText"] }, { kind: "pipe", type: SafehtmlPipe, name: "safeHtml" }] }); }
|
|
6736
7212
|
}
|
|
6737
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
7213
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriAlertComponent, decorators: [{
|
|
6738
7214
|
type: Component,
|
|
6739
7215
|
args: [{ selector: 'xiri-alert', imports: [MatDialogTitle,
|
|
6740
7216
|
CdkScrollable,
|
|
@@ -6756,10 +7232,10 @@ class XiriMultiprogressComponent {
|
|
|
6756
7232
|
this.compact = computed(() => !!this.settings().compact, /* @ts-ignore */
|
|
6757
7233
|
...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
|
|
6758
7234
|
}
|
|
6759
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6760
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
7235
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriMultiprogressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7236
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriMultiprogressComponent, isStandalone: true, selector: "xiri-multiprogress", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.compact": "compact()" } }, ngImport: i0, template: "@if (compact()) {\n\t<div class=\"card xiri-multiprogress-flat\">\n\t\t<div class=\"header align-items-center\">\n\t\t\t@if (settings().headerIcon) {\n\t\t\t\t<div class=\"header-image\">\n\t\t\t\t\t<mat-icon [class]=\"settings().headerIconColor || 'primary'\">{{ settings().headerIcon }}</mat-icon>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<span class=\"title\">{{ settings().header }}</span>\n\t\t\t@if (settings().show && settings().data.length > settings().show!) {\n\t\t\t\t<span class=\"open\">\n\t\t\t\t\t<button mat-icon-button class=\"d-btn\" (click)=\"isOpen.set(!isOpen())\" [attr.aria-label]=\"isOpen() ? 'Weniger anzeigen' : 'Mehr anzeigen'\" [attr.aria-expanded]=\"isOpen()\">\n\t\t\t\t\t\t@if (isOpen()) { <mat-icon>expand_less</mat-icon> } @else { <mat-icon>expand_more</mat-icon> }\n\t\t\t\t\t</button>\n\t\t\t\t</span>\n\t\t\t}\n\t\t</div>\n\t\t<div class=\"xiri-multiprogress-content\">\n\t\t\t@for (item of settings().data | slice:0:(isOpen() ? 999 : settings().show); track item) {\n\t\t\t\t<div class=\"item\">\n\t\t\t\t\t<div class=\"line\">\n\t\t\t\t\t\t<span class=\"text\">{{ item.text }}</span>\n\t\t\t\t\t\t<span class=\"value\">{{ item.value }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<mat-progress-bar mode=\"determinate\" [class]=\"item.color\" [value]=\"item.progress\" class=\"bar\"></mat-progress-bar>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t</div>\n} @else {\n\t<mat-card class=\"card mat-mdc-elevation-specific mat-elevation-z2\">\n\t\t<div class=\"header align-items-center\">\n\t\t\t@if (settings().headerIcon) {\n\t\t\t\t<div mat-card-avatar class=\"header-image\">\n\t\t\t\t\t<mat-icon [class]=\"settings().headerIconColor || 'primary'\">{{ settings().headerIcon }}</mat-icon>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<span class=\"title\">{{ settings().header }}</span>\n\t\t\t@if (settings().show && settings().data.length > settings().show!) {\n\t\t\t\t<span class=\"open\">\n\t\t\t\t\t<button mat-icon-button class=\"d-btn\" (click)=\"isOpen.set(!isOpen())\" [attr.aria-label]=\"isOpen() ? 'Weniger anzeigen' : 'Mehr anzeigen'\" [attr.aria-expanded]=\"isOpen()\">\n\t\t\t\t\t\t@if (isOpen()) { <mat-icon>expand_less</mat-icon> } @else { <mat-icon>expand_more</mat-icon> }\n\t\t\t\t\t</button>\n\t\t\t\t</span>\n\t\t\t}\n\t\t</div>\n\t\t<mat-card-content>\n\t\t\t@for (item of settings().data | slice:0:(isOpen() ? 999 : settings().show); track item) {\n\t\t\t\t<div class=\"item\">\n\t\t\t\t\t<div class=\"line\">\n\t\t\t\t\t\t<span class=\"text\">{{ item.text }}</span>\n\t\t\t\t\t\t<span class=\"value\">{{ item.value }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<mat-progress-bar mode=\"determinate\" [class]=\"item.color\" [value]=\"item.progress\" class=\"bar\"></mat-progress-bar>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</mat-card-content>\n\t</mat-card>\n}\n", styles: ["mat-card.card{padding:20px}mat-card-content{padding:0}:host(.compact) .xiri-multiprogress-flat{background:transparent;box-shadow:none;padding:0}.header{margin-top:0;margin-bottom:12px;display:flex;justify-content:space-between}.header .title{font-size:var(--xiri-font-size-title);font-weight:500}.item .line{display:flex;justify-content:space-between;padding-bottom:.3rem}.item .line .text{font-weight:400;word-break:break-all}.item .line .value{font-size:var(--xiri-font-size-label);padding-left:1rem}.item .bar{transform:scaleY(1.5);transform-origin:bottom}.item+.item{padding-top:.8rem}\n"], dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: SlicePipe, name: "slice" }] }); }
|
|
6761
7237
|
}
|
|
6762
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
7238
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriMultiprogressComponent, decorators: [{
|
|
6763
7239
|
type: Component,
|
|
6764
7240
|
args: [{ selector: 'xiri-multiprogress', imports: [MatCard, MatCardAvatar, MatIcon, MatIconButton, MatCardContent, MatProgressBar, SlicePipe], host: { '[class.compact]': 'compact()' }, template: "@if (compact()) {\n\t<div class=\"card xiri-multiprogress-flat\">\n\t\t<div class=\"header align-items-center\">\n\t\t\t@if (settings().headerIcon) {\n\t\t\t\t<div class=\"header-image\">\n\t\t\t\t\t<mat-icon [class]=\"settings().headerIconColor || 'primary'\">{{ settings().headerIcon }}</mat-icon>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<span class=\"title\">{{ settings().header }}</span>\n\t\t\t@if (settings().show && settings().data.length > settings().show!) {\n\t\t\t\t<span class=\"open\">\n\t\t\t\t\t<button mat-icon-button class=\"d-btn\" (click)=\"isOpen.set(!isOpen())\" [attr.aria-label]=\"isOpen() ? 'Weniger anzeigen' : 'Mehr anzeigen'\" [attr.aria-expanded]=\"isOpen()\">\n\t\t\t\t\t\t@if (isOpen()) { <mat-icon>expand_less</mat-icon> } @else { <mat-icon>expand_more</mat-icon> }\n\t\t\t\t\t</button>\n\t\t\t\t</span>\n\t\t\t}\n\t\t</div>\n\t\t<div class=\"xiri-multiprogress-content\">\n\t\t\t@for (item of settings().data | slice:0:(isOpen() ? 999 : settings().show); track item) {\n\t\t\t\t<div class=\"item\">\n\t\t\t\t\t<div class=\"line\">\n\t\t\t\t\t\t<span class=\"text\">{{ item.text }}</span>\n\t\t\t\t\t\t<span class=\"value\">{{ item.value }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<mat-progress-bar mode=\"determinate\" [class]=\"item.color\" [value]=\"item.progress\" class=\"bar\"></mat-progress-bar>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t</div>\n} @else {\n\t<mat-card class=\"card mat-mdc-elevation-specific mat-elevation-z2\">\n\t\t<div class=\"header align-items-center\">\n\t\t\t@if (settings().headerIcon) {\n\t\t\t\t<div mat-card-avatar class=\"header-image\">\n\t\t\t\t\t<mat-icon [class]=\"settings().headerIconColor || 'primary'\">{{ settings().headerIcon }}</mat-icon>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<span class=\"title\">{{ settings().header }}</span>\n\t\t\t@if (settings().show && settings().data.length > settings().show!) {\n\t\t\t\t<span class=\"open\">\n\t\t\t\t\t<button mat-icon-button class=\"d-btn\" (click)=\"isOpen.set(!isOpen())\" [attr.aria-label]=\"isOpen() ? 'Weniger anzeigen' : 'Mehr anzeigen'\" [attr.aria-expanded]=\"isOpen()\">\n\t\t\t\t\t\t@if (isOpen()) { <mat-icon>expand_less</mat-icon> } @else { <mat-icon>expand_more</mat-icon> }\n\t\t\t\t\t</button>\n\t\t\t\t</span>\n\t\t\t}\n\t\t</div>\n\t\t<mat-card-content>\n\t\t\t@for (item of settings().data | slice:0:(isOpen() ? 999 : settings().show); track item) {\n\t\t\t\t<div class=\"item\">\n\t\t\t\t\t<div class=\"line\">\n\t\t\t\t\t\t<span class=\"text\">{{ item.text }}</span>\n\t\t\t\t\t\t<span class=\"value\">{{ item.value }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<mat-progress-bar mode=\"determinate\" [class]=\"item.color\" [value]=\"item.progress\" class=\"bar\"></mat-progress-bar>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</mat-card-content>\n\t</mat-card>\n}\n", styles: ["mat-card.card{padding:20px}mat-card-content{padding:0}:host(.compact) .xiri-multiprogress-flat{background:transparent;box-shadow:none;padding:0}.header{margin-top:0;margin-bottom:12px;display:flex;justify-content:space-between}.header .title{font-size:var(--xiri-font-size-title);font-weight:500}.item .line{display:flex;justify-content:space-between;padding-bottom:.3rem}.item .line .text{font-weight:400;word-break:break-all}.item .line .value{font-size:var(--xiri-font-size-label);padding-left:1rem}.item .bar{transform:scaleY(1.5);transform-origin:bottom}.item+.item{padding-top:.8rem}\n"] }]
|
|
6765
7241
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }] } });
|
|
@@ -6778,10 +7254,10 @@ class XiriImagetextComponent {
|
|
|
6778
7254
|
this.compact = computed(() => !!this.settings().compact, /* @ts-ignore */
|
|
6779
7255
|
...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
|
|
6780
7256
|
}
|
|
6781
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6782
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
7257
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriImagetextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7258
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriImagetextComponent, isStandalone: true, selector: "xiri-imagetext", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.compact": "compact()" } }, ngImport: i0, template: "@if (compact()) {\n\t<div class=\"card xiri-imagetext-flat\">\n\t\t@if (settings().header || settings().headerIcon) {\n\t\t\t<div class=\"xiri-imagetext-header align-items-center\">\n\t\t\t\t@if (settings().headerIcon) {\n\t\t\t\t\t<div class=\"header-image\">\n\t\t\t\t\t\t<mat-icon [class]=\"settings().headerIconColor || 'primary'\">{{ settings().headerIcon }}</mat-icon>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t<div class=\"header-text\">\n\t\t\t\t\t@if (settings().header) {\n\t\t\t\t\t\t<div class=\"header-title\">{{ settings().header }}</div>\n\t\t\t\t\t}\n\t\t\t\t\t@if (settings().headerSub) {\n\t\t\t\t\t\t<div class=\"header-sub\">{{ settings().headerSub }}</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t}\n\t\t<div class=\"xiri-imagetext-content\">\n\t\t\t<mat-spinner [hidden]=\"!loading()\" diameter=\"30\"></mat-spinner>\n\t\t\t<img [hidden]=\"loading()\" (load)=\"loading.set(false)\" [src]=\"settings().url\" [alt]=\"settings().info\" id=\"ximg\"/>\n\t\t</div>\n\t</div>\n} @else {\n\t<mat-card class=\"card mat-mdc-elevation-specific mat-elevation-z2\">\n\t\t<mat-card-header class=\"align-items-center\">\n\t\t\t@if (settings().headerIcon) {\n\t\t\t\t<div mat-card-avatar class=\"header-image\">\n\t\t\t\t\t<mat-icon [class]=\"settings().headerIconColor || 'primary'\">{{ settings().headerIcon }}</mat-icon>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@if (settings().header) {\n\t\t\t\t<mat-card-title>{{ settings().header }}</mat-card-title>\n\t\t\t}\n\t\t\t@if (settings().headerSub) {\n\t\t\t\t<mat-card-subtitle>{{ settings().headerSub }}</mat-card-subtitle>\n\t\t\t}\n\t\t</mat-card-header>\n\t\t<mat-card-content>\n\t\t\t<mat-spinner [hidden]=\"!loading()\" diameter=\"30\"></mat-spinner>\n\t\t\t<img [hidden]=\"loading()\" (load)=\"loading.set(false)\" [src]=\"settings().url\" [alt]=\"settings().info\" id=\"ximg\"/>\n\t\t</mat-card-content>\n\t</mat-card>\n}\n", styles: [".card{margin-bottom:2rem;text-align:center}#ximg{max-width:100%}[hidden]{display:none!important}:host(.compact) .xiri-imagetext-flat{background:transparent;box-shadow:none;padding:0;margin-bottom:0}:host(.compact) .xiri-imagetext-header{display:flex;gap:var(--xiri-spacing-sm, 8px);margin-bottom:var(--xiri-spacing-sm, 8px)}:host(.compact) .header-title{font-size:var(--xiri-font-size-body);font-weight:500}:host(.compact) .header-sub{font-size:var(--xiri-font-size-label);color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, #555))}\n"], dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
|
|
6783
7259
|
}
|
|
6784
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
7260
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriImagetextComponent, decorators: [{
|
|
6785
7261
|
type: Component,
|
|
6786
7262
|
args: [{ selector: 'xiri-imagetext', imports: [MatCard,
|
|
6787
7263
|
MatCardHeader,
|
|
@@ -6868,10 +7344,10 @@ class XiriSidenavComponent {
|
|
|
6868
7344
|
field.active = matchesSelf;
|
|
6869
7345
|
return field.active;
|
|
6870
7346
|
}
|
|
6871
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6872
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
7347
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSidenavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7348
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriSidenavComponent, isStandalone: true, selector: "xiri-sidenav", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (loading) {\n\t<div class=\"loading\">\n\t\t<mat-spinner diameter=\"30\"></mat-spinner>\n\t</div>\n}\n\n@for (nav of fields; track nav) {\n\n\t<!-- One guard per level, not per branch: a hidden entry can never slip through\n\t link/menu/extern. Structural, so no routerLink is left in the DOM. -->\n\t@if (!nav.hide) {\n\t\t@if ( nav.link ) {\n\t\t\t@let navUrl = nav.link | xiriUrl;\n\t\t\t<a mat-list-item [routerLink]=\"navUrl?.path\" [queryParams]=\"navUrl?.queryParams\" [class.active]=\"nav.active\">\n\t\t\t\t@if (nav.iconSet) {\n\t\t\t\t\t<mat-icon matListItemIcon [fontSet]=\"nav.iconSet\" [class]=\"nav.active ? 'primary' : 'accent'\">{{ nav.icon }}</mat-icon>\n\t\t\t\t} @else {\n\t\t\t\t\t<mat-icon matListItemIcon [class]=\"nav.active ? 'primary' : 'accent'\">{{ nav.icon }}</mat-icon>\n\t\t\t\t}\n\t\t\t\t<span matListItemTitle>{{ nav.name }}</span>\n\t\t\t</a>\n\t\t} @else if (nav.menu) {\n\t\t\t<mat-list-item (click)=\"nav.showSubmenu = !nav.showSubmenu\" (keydown.enter)=\"nav.showSubmenu = !nav.showSubmenu\" (keydown.space)=\"nav.showSubmenu = !nav.showSubmenu; $event.preventDefault()\" [attr.aria-expanded]=\"nav.showSubmenu\" class=\"parent\">\n\t\t\t\t@if (nav.iconSet) {\n\t\t\t\t\t<mat-icon matListItemIcon [fontSet]=\"nav.iconSet\" [class]=\"nav.active ? 'primary' : 'accent'\">{{ nav.icon }}</mat-icon>\n\t\t\t\t} @else {\n\t\t\t\t\t<mat-icon matListItemIcon [class]=\"nav.active ? 'primary' : 'accent'\">{{ nav.icon }}</mat-icon>\n\t\t\t\t}\n\t\t\t\t<span matListItemTitle>{{ nav.name }}</span>\n\t\t\t\t<span matListItemMeta>\n\t\t\t\t\t<mat-icon class=\"menu-button\" [class.rotated]=\"nav.showSubmenu\">expand_more</mat-icon>\n\t\t\t\t</span>\n\t\t\t</mat-list-item>\n\t\t\t<div class=\"submenu\" [class.expanded]=\"nav.showSubmenu\">\n\t\t\t\t@for (subnav of nav.sub; track subnav) {\n\t\t\t\t\t@if (!subnav.hide) {\n\t\t\t\t\t\t@if (subnav.link) {\n\t\t\t\t\t\t\t@let subnavUrl = subnav.link | xiriUrl;\n\t\t\t\t\t\t\t<a mat-list-item [routerLink]=\"subnavUrl?.path\" [queryParams]=\"subnavUrl?.queryParams\" [class.active]=\"subnav.active\">{{ subnav.name }}</a>\n\t\t\t\t\t\t} @else if (subnav.menu) {\n\t\t\t\t\t\t\t<mat-list-item (click)=\"subnav.showSubmenu = !subnav.showSubmenu\" (keydown.enter)=\"subnav.showSubmenu = !subnav.showSubmenu\" (keydown.space)=\"subnav.showSubmenu = !subnav.showSubmenu; $event.preventDefault()\" [attr.aria-expanded]=\"subnav.showSubmenu\" class=\"parent\">\n\t\t\t\t\t\t\t\t<span matListItemTitle>{{ subnav.name }}</span>\n\t\t\t\t\t\t\t\t<span matListItemMeta>\n\t\t\t\t\t\t\t\t\t<mat-icon class=\"menu-button\" [class.rotated]=\"subnav.showSubmenu\">expand_more</mat-icon>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</mat-list-item>\n\t\t\t\t\t\t\t<div class=\"submenu submenu-nested\" [class.expanded]=\"subnav.showSubmenu\">\n\t\t\t\t\t\t\t\t@for (subsubnav of subnav.sub; track subsubnav) {\n\t\t\t\t\t\t\t\t\t@if (!subsubnav.hide) {\n\t\t\t\t\t\t\t\t\t\t@if (subsubnav.link) {\n\t\t\t\t\t\t\t\t\t\t\t@let subsubnavUrl = subsubnav.link | xiriUrl;\n\t\t\t\t\t\t\t\t\t\t\t<a mat-list-item [routerLink]=\"subsubnavUrl?.path\" [queryParams]=\"subsubnavUrl?.queryParams\" [class.active]=\"subsubnav.active\">{{ subsubnav.name }}</a>\n\t\t\t\t\t\t\t\t\t\t} @else if (subsubnav.extern) {\n\t\t\t\t\t\t\t\t\t\t\t<a mat-list-item [href]=\"subsubnav.extern\">{{ subsubnav.name }}</a>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t} @else if (subnav.extern) {\n\t\t\t\t\t\t\t<a mat-list-item [href]=\"subnav.extern\">{{ subnav.name }}</a>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t} @else if (nav.extern) {\n\t\t\t<a mat-list-item [href]=\"nav.extern\">\n\t\t\t\t@if (nav.iconSet) {\n\t\t\t\t\t<mat-icon matListItemIcon [fontSet]=\"nav.iconSet\" class=\"accent\">{{ nav.icon }}</mat-icon>\n\t\t\t\t} @else {\n\t\t\t\t\t<mat-icon matListItemIcon class=\"accent\">{{ nav.icon }}</mat-icon>\n\t\t\t\t}\n\t\t\t\t<span matListItemTitle>{{ nav.name }}</span>\n\t\t\t</a>\n\t\t}\n\t}\n}\n", styles: [":host{min-width:160px}.loading{margin:var(--xiri-spacing-md)}.mat-mdc-list-item{--mat-list-list-item-label-text-size: .9rem;--mat-list-list-item-label-text-weight: 400}.mat-mdc-list-item mat-icon{display:flex;align-items:center;justify-content:center}.mat-mdc-list-item mat-icon.mat-mdc-list-item-icon{color:var(--xiri-sidenav-icon-color, var(--secondary, #51606F))}.mat-mdc-list-item .mdc-list-item__start{margin-right:var(--xiri-spacing-md)}.mat-mdc-list-item .menu-button{font-size:var(--xiri-font-size-title);transition:var(--xiri-duration-slow) var(--xiri-easing-standard);transform:rotate(0)}.mat-mdc-list-item .menu-button.rotated{transform:rotate(180deg)}.mat-mdc-list-item.active{text-decoration:var(--xiri-sidenav-active-decoration, none);background-color:var(--xiri-sidenav-active-color, transparent)}.mat-mdc-list-item.active mat-icon.mat-mdc-list-item-icon{color:var(--xiri-sidenav-active-icon-color, var(--primary))}.submenu{overflow-y:hidden;transition:max-height var(--xiri-duration-slow) var(--xiri-easing-decelerate);max-height:0;padding-left:var(--xiri-spacing-xl)}.submenu.expanded{transition:max-height var(--xiri-duration-slow) var(--xiri-easing-standard);max-height:1000px}.submenu-nested{padding-left:var(--xiri-spacing-md)}\n"], dependencies: [{ kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "pipe", type: XiriUrlPipe, name: "xiriUrl" }] }); }
|
|
6873
7349
|
}
|
|
6874
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
7350
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSidenavComponent, decorators: [{
|
|
6875
7351
|
type: Component,
|
|
6876
7352
|
args: [{ selector: 'xiri-sidenav', imports: [
|
|
6877
7353
|
MatProgressSpinner,
|
|
@@ -6890,10 +7366,10 @@ class XiriBreadcrumbComponent {
|
|
|
6890
7366
|
this.settings = input.required(/* @ts-ignore */
|
|
6891
7367
|
...(ngDevMode ? [{ debugName: "settings" }] : /* istanbul ignore next */ []));
|
|
6892
7368
|
}
|
|
6893
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6894
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
7369
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriBreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7370
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriBreadcrumbComponent, isStandalone: true, selector: "xiri-breadcrumb", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<nav class=\"breadcrumb\" aria-label=\"Breadcrumb\">\n\t<ol>\n\t\t@for (item of settings(); track $index; let last = $last) {\n\t\t\t<li [class.active]=\"last\">\n\t\t\t\t@if (item.link) {\n\t\t\t\t\t@if (item.extern) {\n\t\t\t\t\t\t<a [href]=\"item.link\" target=\"_blank\" rel=\"noopener\">\n\t\t\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t\t\t<mat-icon>{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t@let itemUrl = item.link | xiriUrl;\n\t\t\t\t\t\t<a [routerLink]=\"itemUrl?.path\" [queryParams]=\"itemUrl?.queryParams\">\n\t\t\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t\t\t<mat-icon>{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t}\n\t\t\t\t} @else {\n\t\t\t\t\t<span>\n\t\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t\t<mat-icon>{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t</span>\n\t\t\t\t}\n\t\t\t\t@if (!last) {\n\t\t\t\t\t<mat-icon class=\"separator\">chevron_right</mat-icon>\n\t\t\t\t}\n\t\t\t</li>\n\t\t}\n\t</ol>\n</nav>\n", styles: [".breadcrumb ol{display:flex;flex-wrap:wrap;align-items:center;list-style:none;padding:0;margin:0;gap:var(--xiri-spacing-xs)}.breadcrumb li{display:flex;align-items:center;gap:var(--xiri-spacing-xs);font-size:var(--xiri-font-size-body, .875rem);color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, .6)))}.breadcrumb li a{display:flex;align-items:center;gap:.25rem;color:var(--primary, #2892D9);text-decoration:none;border-radius:var(--xiri-radius-xs);padding:.125rem .25rem;margin:-.125rem -.25rem}.breadcrumb li a:hover{text-decoration:underline;background:color-mix(in srgb,var(--primary, #2892D9) 8%,transparent)}.breadcrumb li a mat-icon{font-size:1.125rem;width:1.125rem;height:1.125rem}.breadcrumb li span{display:flex;align-items:center;gap:var(--xiri-spacing-xs)}.breadcrumb li span mat-icon{font-size:1.125rem;width:1.125rem;height:1.125rem}.breadcrumb li.active{font-weight:500;color:var(--on-surface, var(--mat-sys-on-surface, rgba(0, 0, 0, .87)))}.breadcrumb li .separator{font-size:1.125rem;width:1.125rem;height:1.125rem;color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, .6)))}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "pipe", type: XiriUrlPipe, name: "xiriUrl" }] }); }
|
|
6895
7371
|
}
|
|
6896
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
7372
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriBreadcrumbComponent, decorators: [{
|
|
6897
7373
|
type: Component,
|
|
6898
7374
|
args: [{ selector: 'xiri-breadcrumb', imports: [MatIcon, RouterLink, XiriUrlPipe], template: "<nav class=\"breadcrumb\" aria-label=\"Breadcrumb\">\n\t<ol>\n\t\t@for (item of settings(); track $index; let last = $last) {\n\t\t\t<li [class.active]=\"last\">\n\t\t\t\t@if (item.link) {\n\t\t\t\t\t@if (item.extern) {\n\t\t\t\t\t\t<a [href]=\"item.link\" target=\"_blank\" rel=\"noopener\">\n\t\t\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t\t\t<mat-icon>{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t@let itemUrl = item.link | xiriUrl;\n\t\t\t\t\t\t<a [routerLink]=\"itemUrl?.path\" [queryParams]=\"itemUrl?.queryParams\">\n\t\t\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t\t\t<mat-icon>{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t}\n\t\t\t\t} @else {\n\t\t\t\t\t<span>\n\t\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t\t<mat-icon>{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t</span>\n\t\t\t\t}\n\t\t\t\t@if (!last) {\n\t\t\t\t\t<mat-icon class=\"separator\">chevron_right</mat-icon>\n\t\t\t\t}\n\t\t\t</li>\n\t\t}\n\t</ol>\n</nav>\n", styles: [".breadcrumb ol{display:flex;flex-wrap:wrap;align-items:center;list-style:none;padding:0;margin:0;gap:var(--xiri-spacing-xs)}.breadcrumb li{display:flex;align-items:center;gap:var(--xiri-spacing-xs);font-size:var(--xiri-font-size-body, .875rem);color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, .6)))}.breadcrumb li a{display:flex;align-items:center;gap:.25rem;color:var(--primary, #2892D9);text-decoration:none;border-radius:var(--xiri-radius-xs);padding:.125rem .25rem;margin:-.125rem -.25rem}.breadcrumb li a:hover{text-decoration:underline;background:color-mix(in srgb,var(--primary, #2892D9) 8%,transparent)}.breadcrumb li a mat-icon{font-size:1.125rem;width:1.125rem;height:1.125rem}.breadcrumb li span{display:flex;align-items:center;gap:var(--xiri-spacing-xs)}.breadcrumb li span mat-icon{font-size:1.125rem;width:1.125rem;height:1.125rem}.breadcrumb li.active{font-weight:500;color:var(--on-surface, var(--mat-sys-on-surface, rgba(0, 0, 0, .87)))}.breadcrumb li .separator{font-size:1.125rem;width:1.125rem;height:1.125rem;color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, .6)))}\n"] }]
|
|
6899
7375
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }] } });
|
|
@@ -6903,10 +7379,10 @@ class XiriTimelineComponent {
|
|
|
6903
7379
|
this.settings = input.required(/* @ts-ignore */
|
|
6904
7380
|
...(ngDevMode ? [{ debugName: "settings" }] : /* istanbul ignore next */ []));
|
|
6905
7381
|
}
|
|
6906
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
6907
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
7382
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7383
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriTimelineComponent, isStandalone: true, selector: "xiri-timeline", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"timeline\" [class.horizontal]=\"settings().orientation === 'horizontal'\">\n\t@for (item of settings().items; track $index; let last = $last; let first = $first) {\n\t\t<div class=\"timeline-item\" [class.last]=\"last\" [class.first]=\"first\">\n\t\t\t<div class=\"timeline-marker\">\n\t\t\t\t<div class=\"timeline-line line-before\"></div>\n\t\t\t\t<div class=\"timeline-dot\" [class]=\"item.iconColor || 'primary'\">\n\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t<mat-icon>{{ item.icon }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"timeline-line line-after\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"timeline-content\">\n\t\t\t\t<div class=\"timeline-header\">\n\t\t\t\t\t<span class=\"timeline-title\">{{ item.title }}</span>\n\t\t\t\t\t@if (item.datetime) {\n\t\t\t\t\t\t<span class=\"timeline-datetime\">{{ item.datetime }}</span>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t\t@if (item.description && settings().orientation !== 'horizontal') {\n\t\t\t\t\t<div class=\"timeline-description\">{{ item.description }}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t}\n</div>\n", styles: [":host{display:block;container-type:inline-size}.timeline{display:flex;flex-direction:column}.timeline-item{display:flex;gap:var(--xiri-spacing-md);animation:fadeInUp var(--xiri-duration-normal, .3s) var(--xiri-easing-decelerate, cubic-bezier(0, 0, .2, 1)) both}.timeline-item:nth-child(1){animation-delay:0ms}.timeline-item:nth-child(2){animation-delay:50ms}.timeline-item:nth-child(3){animation-delay:.1s}.timeline-item:nth-child(4){animation-delay:.15s}.timeline-item:nth-child(5){animation-delay:.2s}.timeline-item:nth-child(6){animation-delay:.25s}.timeline-item:nth-child(7){animation-delay:.3s}.timeline-item:nth-child(8){animation-delay:.35s}.timeline-item:nth-child(9){animation-delay:.4s}.timeline-item:nth-child(10){animation-delay:.45s}.timeline-item:nth-child(11){animation-delay:.5s}.timeline-item:nth-child(12){animation-delay:.55s}.timeline-item:nth-child(13){animation-delay:.6s}.timeline-item:nth-child(14){animation-delay:.65s}.timeline-item:nth-child(15){animation-delay:.7s}.timeline-item:nth-child(16){animation-delay:.75s}.timeline-item:nth-child(17){animation-delay:.8s}.timeline-item:nth-child(18){animation-delay:.85s}.timeline-item:nth-child(19){animation-delay:.9s}.timeline-item:nth-child(20){animation-delay:.95s}.timeline-item .timeline-line.line-before,.timeline-item.last .timeline-line.line-after{display:none}.timeline-marker{display:flex;flex-direction:column;align-items:center;flex-shrink:0;width:2.5rem}.timeline-dot{width:2.5rem;height:2.5rem;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--primary, #2892D9);color:var(--on-primary, white)}.timeline-dot mat-icon{font-size:1.25rem;width:1.25rem;height:1.25rem}.timeline-dot.primary{background:var(--primary)}.timeline-dot.secondary{background:var(--secondary)}.timeline-dot.tertiary{background:var(--tertiary)}.timeline-dot.accent{background:var(--secondary)}.timeline-dot.warn,.timeline-dot.error{background:var(--error)}.timeline-dot.success{background:var(--color-success)}.timeline-dot.emerald{background:#2892d9}.timeline-dot.red{background:#e74c3c}.timeline-dot.yellow{background:#f1c40f}.timeline-dot.green{background:#2ecc71}.timeline-dot.blue{background:#3498db}.timeline-dot.purple{background:#9b59b6}.timeline-dot.gray{background:#95a5a6}.timeline-dot.lightgray{background:#bdc3c7}.timeline-dot.darkgray{background:#7f8c8d}.timeline-dot.orange{background:#e67e22}.timeline-dot.white{background:#fff}.timeline-dot.black{background:#000}.timeline-dot.inherit{background:inherit}.timeline-line{width:2px;flex:1;min-height:var(--xiri-spacing-lg);background:var(--outline-variant, var(--mat-sys-outline-variant, rgba(0, 0, 0, .12)))}.timeline-content{padding-bottom:var(--xiri-spacing-lg);flex:1;min-width:0}.timeline-header{display:flex;align-items:baseline;gap:.75rem;flex-wrap:wrap;min-height:2.5rem;align-content:center}.timeline-title{font-weight:500;font-size:var(--xiri-font-size-body, .875rem);color:var(--on-surface, var(--mat-sys-on-surface, rgba(0, 0, 0, .87)))}.timeline-datetime{font-size:var(--xiri-font-size-helper, .75rem);color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, .6)))}.timeline-description{margin-top:.25rem;font-size:var(--xiri-font-size-body, .875rem);color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, .6)));line-height:1.5}@container (min-width: 481px){.timeline.horizontal{flex-direction:row}.timeline.horizontal .timeline-item{flex:1;min-width:0;flex-direction:column;align-items:center;gap:var(--xiri-spacing-xs);padding-bottom:0}.timeline.horizontal .timeline-item .timeline-line.line-before{display:block}.timeline.horizontal .timeline-item.first .timeline-line.line-before{visibility:hidden}.timeline.horizontal .timeline-item.last .timeline-line.line-after{display:block;visibility:hidden}.timeline.horizontal .timeline-content,.timeline.horizontal .timeline-header{display:contents}.timeline.horizontal .timeline-title{order:-2;text-align:center;min-height:2.5em;display:flex;align-items:center;justify-content:center;padding:0 var(--xiri-spacing-xs)}.timeline.horizontal .timeline-marker{order:-1;width:100%;flex-direction:row;align-items:center;gap:0}.timeline.horizontal .timeline-datetime{order:1;text-align:center;min-height:1.5em;display:flex;align-items:center;justify-content:center}.timeline.horizontal .timeline-line{flex:1;width:auto;height:2px;min-height:0}}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
6908
7384
|
}
|
|
6909
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
7385
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTimelineComponent, decorators: [{
|
|
6910
7386
|
type: Component,
|
|
6911
7387
|
args: [{ selector: 'xiri-timeline', imports: [MatIcon], template: "<div class=\"timeline\" [class.horizontal]=\"settings().orientation === 'horizontal'\">\n\t@for (item of settings().items; track $index; let last = $last; let first = $first) {\n\t\t<div class=\"timeline-item\" [class.last]=\"last\" [class.first]=\"first\">\n\t\t\t<div class=\"timeline-marker\">\n\t\t\t\t<div class=\"timeline-line line-before\"></div>\n\t\t\t\t<div class=\"timeline-dot\" [class]=\"item.iconColor || 'primary'\">\n\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t<mat-icon>{{ item.icon }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"timeline-line line-after\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"timeline-content\">\n\t\t\t\t<div class=\"timeline-header\">\n\t\t\t\t\t<span class=\"timeline-title\">{{ item.title }}</span>\n\t\t\t\t\t@if (item.datetime) {\n\t\t\t\t\t\t<span class=\"timeline-datetime\">{{ item.datetime }}</span>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t\t@if (item.description && settings().orientation !== 'horizontal') {\n\t\t\t\t\t<div class=\"timeline-description\">{{ item.description }}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t}\n</div>\n", styles: [":host{display:block;container-type:inline-size}.timeline{display:flex;flex-direction:column}.timeline-item{display:flex;gap:var(--xiri-spacing-md);animation:fadeInUp var(--xiri-duration-normal, .3s) var(--xiri-easing-decelerate, cubic-bezier(0, 0, .2, 1)) both}.timeline-item:nth-child(1){animation-delay:0ms}.timeline-item:nth-child(2){animation-delay:50ms}.timeline-item:nth-child(3){animation-delay:.1s}.timeline-item:nth-child(4){animation-delay:.15s}.timeline-item:nth-child(5){animation-delay:.2s}.timeline-item:nth-child(6){animation-delay:.25s}.timeline-item:nth-child(7){animation-delay:.3s}.timeline-item:nth-child(8){animation-delay:.35s}.timeline-item:nth-child(9){animation-delay:.4s}.timeline-item:nth-child(10){animation-delay:.45s}.timeline-item:nth-child(11){animation-delay:.5s}.timeline-item:nth-child(12){animation-delay:.55s}.timeline-item:nth-child(13){animation-delay:.6s}.timeline-item:nth-child(14){animation-delay:.65s}.timeline-item:nth-child(15){animation-delay:.7s}.timeline-item:nth-child(16){animation-delay:.75s}.timeline-item:nth-child(17){animation-delay:.8s}.timeline-item:nth-child(18){animation-delay:.85s}.timeline-item:nth-child(19){animation-delay:.9s}.timeline-item:nth-child(20){animation-delay:.95s}.timeline-item .timeline-line.line-before,.timeline-item.last .timeline-line.line-after{display:none}.timeline-marker{display:flex;flex-direction:column;align-items:center;flex-shrink:0;width:2.5rem}.timeline-dot{width:2.5rem;height:2.5rem;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--primary, #2892D9);color:var(--on-primary, white)}.timeline-dot mat-icon{font-size:1.25rem;width:1.25rem;height:1.25rem}.timeline-dot.primary{background:var(--primary)}.timeline-dot.secondary{background:var(--secondary)}.timeline-dot.tertiary{background:var(--tertiary)}.timeline-dot.accent{background:var(--secondary)}.timeline-dot.warn,.timeline-dot.error{background:var(--error)}.timeline-dot.success{background:var(--color-success)}.timeline-dot.emerald{background:#2892d9}.timeline-dot.red{background:#e74c3c}.timeline-dot.yellow{background:#f1c40f}.timeline-dot.green{background:#2ecc71}.timeline-dot.blue{background:#3498db}.timeline-dot.purple{background:#9b59b6}.timeline-dot.gray{background:#95a5a6}.timeline-dot.lightgray{background:#bdc3c7}.timeline-dot.darkgray{background:#7f8c8d}.timeline-dot.orange{background:#e67e22}.timeline-dot.white{background:#fff}.timeline-dot.black{background:#000}.timeline-dot.inherit{background:inherit}.timeline-line{width:2px;flex:1;min-height:var(--xiri-spacing-lg);background:var(--outline-variant, var(--mat-sys-outline-variant, rgba(0, 0, 0, .12)))}.timeline-content{padding-bottom:var(--xiri-spacing-lg);flex:1;min-width:0}.timeline-header{display:flex;align-items:baseline;gap:.75rem;flex-wrap:wrap;min-height:2.5rem;align-content:center}.timeline-title{font-weight:500;font-size:var(--xiri-font-size-body, .875rem);color:var(--on-surface, var(--mat-sys-on-surface, rgba(0, 0, 0, .87)))}.timeline-datetime{font-size:var(--xiri-font-size-helper, .75rem);color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, .6)))}.timeline-description{margin-top:.25rem;font-size:var(--xiri-font-size-body, .875rem);color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, .6)));line-height:1.5}@container (min-width: 481px){.timeline.horizontal{flex-direction:row}.timeline.horizontal .timeline-item{flex:1;min-width:0;flex-direction:column;align-items:center;gap:var(--xiri-spacing-xs);padding-bottom:0}.timeline.horizontal .timeline-item .timeline-line.line-before{display:block}.timeline.horizontal .timeline-item.first .timeline-line.line-before{visibility:hidden}.timeline.horizontal .timeline-item.last .timeline-line.line-after{display:block;visibility:hidden}.timeline.horizontal .timeline-content,.timeline.horizontal .timeline-header{display:contents}.timeline.horizontal .timeline-title{order:-2;text-align:center;min-height:2.5em;display:flex;align-items:center;justify-content:center;padding:0 var(--xiri-spacing-xs)}.timeline.horizontal .timeline-marker{order:-1;width:100%;flex-direction:row;align-items:center;gap:0}.timeline.horizontal .timeline-datetime{order:1;text-align:center;min-height:1.5em;display:flex;align-items:center;justify-content:center}.timeline.horizontal .timeline-line{flex:1;width:auto;height:2px;min-height:0}}\n"] }]
|
|
6912
7388
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }] } });
|
|
@@ -7011,10 +7487,10 @@ class XiriEchartsHostComponent {
|
|
|
7011
7487
|
return;
|
|
7012
7488
|
this.chart.setOption(opt, true);
|
|
7013
7489
|
}
|
|
7014
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
7015
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
7490
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriEchartsHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7491
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriEchartsHostComponent, isStandalone: true, selector: "xiri-echarts-host", inputs: { option: { classPropertyName: "option", publicName: "option", isSignal: true, isRequired: true, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, headerIcon: { classPropertyName: "headerIcon", publicName: "headerIcon", isSignal: true, isRequired: false, transformFunction: null }, headerIconColor: { classPropertyName: "headerIconColor", publicName: "headerIconColor", isSignal: true, isRequired: false, transformFunction: null }, chartHeight: { classPropertyName: "chartHeight", publicName: "chartHeight", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, host: { properties: { "class.compact": "compact()" } }, viewQueries: [{ propertyName: "chartHostRef", first: true, predicate: ["chartHost"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (compact()) {\n\t<div class=\"xiri-echarts xiri-echarts-flat\">\n\t\t@if (hasHeader()) {\n\t\t\t<div class=\"xiri-echarts-header\">\n\t\t\t\t@if (headerIcon()) {\n\t\t\t\t\t<mat-icon [class]=\"headerIconColor() || 'primary'\">{{ headerIcon() }}</mat-icon>\n\t\t\t\t}\n\t\t\t\t@if (title()) {\n\t\t\t\t\t<div class=\"xiri-echarts-title\">{{ title() }}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t<div #chartHost class=\"xiri-echarts-host\" [style.height]=\"chartHeight()\"></div>\n\t\t@if (error()) {\n\t\t\t<div class=\"xiri-echarts-error\">{{ error() }}</div>\n\t\t}\n\t</div>\n} @else {\n\t<mat-card class=\"xiri-echarts mat-mdc-elevation-specific mat-elevation-z2\">\n\t\t<mat-card-content>\n\t\t\t@if (hasHeader()) {\n\t\t\t\t<div class=\"xiri-echarts-header\">\n\t\t\t\t\t@if (headerIcon()) {\n\t\t\t\t\t\t<mat-icon [class]=\"headerIconColor() || 'primary'\">{{ headerIcon() }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (title()) {\n\t\t\t\t\t\t<div class=\"xiri-echarts-title\">{{ title() }}</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<div #chartHost class=\"xiri-echarts-host\" [style.height]=\"chartHeight()\"></div>\n\t\t\t@if (error()) {\n\t\t\t\t<div class=\"xiri-echarts-error\">{{ error() }}</div>\n\t\t\t}\n\t\t</mat-card-content>\n\t</mat-card>\n}\n", styles: [".xiri-echarts{height:100%}.xiri-echarts .xiri-echarts-header{display:flex;align-items:center;gap:8px;margin-bottom:8px}.xiri-echarts .xiri-echarts-header mat-icon{font-size:var(--xiri-icon-size-md, 24px);width:var(--xiri-icon-size-md, 24px);height:var(--xiri-icon-size-md, 24px)}.xiri-echarts .xiri-echarts-title{font-size:14px;font-weight:500;color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, #555))}.xiri-echarts .xiri-echarts-host{width:100%;min-height:160px}.xiri-echarts .xiri-echarts-error{font-size:12px;color:var(--error, var(--mat-sys-error, #b00020));padding:8px 0}.xiri-echarts-flat{background:transparent;box-shadow:none;padding:0}\n"], dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
7016
7492
|
}
|
|
7017
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
7493
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriEchartsHostComponent, decorators: [{
|
|
7018
7494
|
type: Component,
|
|
7019
7495
|
args: [{ selector: 'xiri-echarts-host', encapsulation: ViewEncapsulation.None, imports: [MatCard, MatCardContent, MatIcon], host: { '[class.compact]': 'compact()' }, template: "@if (compact()) {\n\t<div class=\"xiri-echarts xiri-echarts-flat\">\n\t\t@if (hasHeader()) {\n\t\t\t<div class=\"xiri-echarts-header\">\n\t\t\t\t@if (headerIcon()) {\n\t\t\t\t\t<mat-icon [class]=\"headerIconColor() || 'primary'\">{{ headerIcon() }}</mat-icon>\n\t\t\t\t}\n\t\t\t\t@if (title()) {\n\t\t\t\t\t<div class=\"xiri-echarts-title\">{{ title() }}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t<div #chartHost class=\"xiri-echarts-host\" [style.height]=\"chartHeight()\"></div>\n\t\t@if (error()) {\n\t\t\t<div class=\"xiri-echarts-error\">{{ error() }}</div>\n\t\t}\n\t</div>\n} @else {\n\t<mat-card class=\"xiri-echarts mat-mdc-elevation-specific mat-elevation-z2\">\n\t\t<mat-card-content>\n\t\t\t@if (hasHeader()) {\n\t\t\t\t<div class=\"xiri-echarts-header\">\n\t\t\t\t\t@if (headerIcon()) {\n\t\t\t\t\t\t<mat-icon [class]=\"headerIconColor() || 'primary'\">{{ headerIcon() }}</mat-icon>\n\t\t\t\t\t}\n\t\t\t\t\t@if (title()) {\n\t\t\t\t\t\t<div class=\"xiri-echarts-title\">{{ title() }}</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<div #chartHost class=\"xiri-echarts-host\" [style.height]=\"chartHeight()\"></div>\n\t\t\t@if (error()) {\n\t\t\t\t<div class=\"xiri-echarts-error\">{{ error() }}</div>\n\t\t\t}\n\t\t</mat-card-content>\n\t</mat-card>\n}\n", styles: [".xiri-echarts{height:100%}.xiri-echarts .xiri-echarts-header{display:flex;align-items:center;gap:8px;margin-bottom:8px}.xiri-echarts .xiri-echarts-header mat-icon{font-size:var(--xiri-icon-size-md, 24px);width:var(--xiri-icon-size-md, 24px);height:var(--xiri-icon-size-md, 24px)}.xiri-echarts .xiri-echarts-title{font-size:14px;font-weight:500;color:var(--on-surface-variant, var(--mat-sys-on-surface-variant, #555))}.xiri-echarts .xiri-echarts-host{width:100%;min-height:160px}.xiri-echarts .xiri-echarts-error{font-size:12px;color:var(--error, var(--mat-sys-error, #b00020));padding:8px 0}.xiri-echarts-flat{background:transparent;box-shadow:none;padding:0}\n"] }]
|
|
7020
7496
|
}], ctorParameters: () => [], propDecorators: { option: [{ type: i0.Input, args: [{ isSignal: true, alias: "option", required: true }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], headerIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerIcon", required: false }] }], headerIconColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerIconColor", required: false }] }], chartHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "chartHeight", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], chartHostRef: [{ type: i0.ViewChild, args: ['chartHost', { isSignal: true }] }] } });
|
|
@@ -7340,8 +7816,8 @@ class XiriBarChartComponent {
|
|
|
7340
7816
|
}]
|
|
7341
7817
|
};
|
|
7342
7818
|
}
|
|
7343
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
7344
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0
|
|
7819
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriBarChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7820
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: XiriBarChartComponent, isStandalone: true, selector: "xiri-barchart", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
7345
7821
|
<xiri-echarts-host
|
|
7346
7822
|
[option]="option()"
|
|
7347
7823
|
[compact]="compact()"
|
|
@@ -7351,7 +7827,7 @@ class XiriBarChartComponent {
|
|
|
7351
7827
|
</xiri-echarts-host>
|
|
7352
7828
|
`, isInline: true, dependencies: [{ kind: "component", type: XiriEchartsHostComponent, selector: "xiri-echarts-host", inputs: ["option", "compact", "title", "headerIcon", "headerIconColor", "chartHeight"], outputs: ["itemClick"] }] }); }
|
|
7353
7829
|
}
|
|
7354
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
7830
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriBarChartComponent, decorators: [{
|
|
7355
7831
|
type: Component,
|
|
7356
7832
|
args: [{
|
|
7357
7833
|
selector: 'xiri-barchart',
|
|
@@ -7451,8 +7927,8 @@ class XiriLineChartComponent {
|
|
|
7451
7927
|
}, /* @ts-ignore */
|
|
7452
7928
|
...(ngDevMode ? [{ debugName: "option" }] : /* istanbul ignore next */ []));
|
|
7453
7929
|
}
|
|
7454
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
7455
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0
|
|
7930
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriLineChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7931
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: XiriLineChartComponent, isStandalone: true, selector: "xiri-linechart", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
7456
7932
|
<xiri-echarts-host
|
|
7457
7933
|
[option]="option()"
|
|
7458
7934
|
[compact]="compact()"
|
|
@@ -7461,7 +7937,7 @@ class XiriLineChartComponent {
|
|
|
7461
7937
|
</xiri-echarts-host>
|
|
7462
7938
|
`, isInline: true, dependencies: [{ kind: "component", type: XiriEchartsHostComponent, selector: "xiri-echarts-host", inputs: ["option", "compact", "title", "headerIcon", "headerIconColor", "chartHeight"], outputs: ["itemClick"] }] }); }
|
|
7463
7939
|
}
|
|
7464
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
7940
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriLineChartComponent, decorators: [{
|
|
7465
7941
|
type: Component,
|
|
7466
7942
|
args: [{
|
|
7467
7943
|
selector: 'xiri-linechart',
|
|
@@ -7530,8 +8006,8 @@ class XiriPieChartComponent {
|
|
|
7530
8006
|
}, /* @ts-ignore */
|
|
7531
8007
|
...(ngDevMode ? [{ debugName: "option" }] : /* istanbul ignore next */ []));
|
|
7532
8008
|
}
|
|
7533
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
7534
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
8009
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriPieChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8010
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriPieChartComponent, isStandalone: true, selector: "xiri-piechart", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
7535
8011
|
@if (warn()) {
|
|
7536
8012
|
<div class="chart-hint">Mehr als 4 Segmente erschweren den Vergleich — Balken- oder Tabellendarstellung erwägen.</div>
|
|
7537
8013
|
}
|
|
@@ -7542,7 +8018,7 @@ class XiriPieChartComponent {
|
|
|
7542
8018
|
</xiri-echarts-host>
|
|
7543
8019
|
`, isInline: true, dependencies: [{ kind: "component", type: XiriEchartsHostComponent, selector: "xiri-echarts-host", inputs: ["option", "compact", "title", "headerIcon", "headerIconColor", "chartHeight"], outputs: ["itemClick"] }] }); }
|
|
7544
8020
|
}
|
|
7545
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
8021
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriPieChartComponent, decorators: [{
|
|
7546
8022
|
type: Component,
|
|
7547
8023
|
args: [{
|
|
7548
8024
|
selector: 'xiri-piechart',
|
|
@@ -7612,8 +8088,8 @@ class XiriGaugeChartComponent {
|
|
|
7612
8088
|
}, /* @ts-ignore */
|
|
7613
8089
|
...(ngDevMode ? [{ debugName: "option" }] : /* istanbul ignore next */ []));
|
|
7614
8090
|
}
|
|
7615
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
7616
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0
|
|
8091
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriGaugeChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8092
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: XiriGaugeChartComponent, isStandalone: true, selector: "xiri-gaugechart", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
7617
8093
|
<xiri-echarts-host
|
|
7618
8094
|
[option]="option()"
|
|
7619
8095
|
[compact]="compact()"
|
|
@@ -7621,7 +8097,7 @@ class XiriGaugeChartComponent {
|
|
|
7621
8097
|
</xiri-echarts-host>
|
|
7622
8098
|
`, isInline: true, dependencies: [{ kind: "component", type: XiriEchartsHostComponent, selector: "xiri-echarts-host", inputs: ["option", "compact", "title", "headerIcon", "headerIconColor", "chartHeight"], outputs: ["itemClick"] }] }); }
|
|
7623
8099
|
}
|
|
7624
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
8100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriGaugeChartComponent, decorators: [{
|
|
7625
8101
|
type: Component,
|
|
7626
8102
|
args: [{
|
|
7627
8103
|
selector: 'xiri-gaugechart',
|
|
@@ -7687,8 +8163,8 @@ class XiriBulletChartComponent {
|
|
|
7687
8163
|
}, /* @ts-ignore */
|
|
7688
8164
|
...(ngDevMode ? [{ debugName: "option" }] : /* istanbul ignore next */ []));
|
|
7689
8165
|
}
|
|
7690
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
7691
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0
|
|
8166
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriBulletChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8167
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: XiriBulletChartComponent, isStandalone: true, selector: "xiri-bulletchart", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
7692
8168
|
<xiri-echarts-host
|
|
7693
8169
|
[option]="option()"
|
|
7694
8170
|
[compact]="compact()"
|
|
@@ -7696,7 +8172,7 @@ class XiriBulletChartComponent {
|
|
|
7696
8172
|
</xiri-echarts-host>
|
|
7697
8173
|
`, isInline: true, dependencies: [{ kind: "component", type: XiriEchartsHostComponent, selector: "xiri-echarts-host", inputs: ["option", "compact", "title", "headerIcon", "headerIconColor", "chartHeight"], outputs: ["itemClick"] }] }); }
|
|
7698
8174
|
}
|
|
7699
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
8175
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriBulletChartComponent, decorators: [{
|
|
7700
8176
|
type: Component,
|
|
7701
8177
|
args: [{
|
|
7702
8178
|
selector: 'xiri-bulletchart',
|
|
@@ -7788,8 +8264,8 @@ class XiriHeatmapComponent {
|
|
|
7788
8264
|
}, /* @ts-ignore */
|
|
7789
8265
|
...(ngDevMode ? [{ debugName: "option" }] : /* istanbul ignore next */ []));
|
|
7790
8266
|
}
|
|
7791
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
7792
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0
|
|
8267
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriHeatmapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8268
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: XiriHeatmapComponent, isStandalone: true, selector: "xiri-heatmap", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
7793
8269
|
<xiri-echarts-host
|
|
7794
8270
|
[option]="option()"
|
|
7795
8271
|
[compact]="compact()"
|
|
@@ -7798,7 +8274,7 @@ class XiriHeatmapComponent {
|
|
|
7798
8274
|
</xiri-echarts-host>
|
|
7799
8275
|
`, isInline: true, dependencies: [{ kind: "component", type: XiriEchartsHostComponent, selector: "xiri-echarts-host", inputs: ["option", "compact", "title", "headerIcon", "headerIconColor", "chartHeight"], outputs: ["itemClick"] }] }); }
|
|
7800
8276
|
}
|
|
7801
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
8277
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriHeatmapComponent, decorators: [{
|
|
7802
8278
|
type: Component,
|
|
7803
8279
|
args: [{
|
|
7804
8280
|
selector: 'xiri-heatmap',
|
|
@@ -7880,8 +8356,8 @@ class XiriCalendarComponent {
|
|
|
7880
8356
|
}, /* @ts-ignore */
|
|
7881
8357
|
...(ngDevMode ? [{ debugName: "option" }] : /* istanbul ignore next */ []));
|
|
7882
8358
|
}
|
|
7883
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
7884
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0
|
|
8359
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriCalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8360
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: XiriCalendarComponent, isStandalone: true, selector: "xiri-calendar", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
7885
8361
|
<xiri-echarts-host
|
|
7886
8362
|
[option]="option()"
|
|
7887
8363
|
[compact]="compact()"
|
|
@@ -7890,7 +8366,7 @@ class XiriCalendarComponent {
|
|
|
7890
8366
|
</xiri-echarts-host>
|
|
7891
8367
|
`, isInline: true, dependencies: [{ kind: "component", type: XiriEchartsHostComponent, selector: "xiri-echarts-host", inputs: ["option", "compact", "title", "headerIcon", "headerIconColor", "chartHeight"], outputs: ["itemClick"] }] }); }
|
|
7892
8368
|
}
|
|
7893
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
8369
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriCalendarComponent, decorators: [{
|
|
7894
8370
|
type: Component,
|
|
7895
8371
|
args: [{
|
|
7896
8372
|
selector: 'xiri-calendar',
|
|
@@ -7973,8 +8449,8 @@ class XiriTreeComponent {
|
|
|
7973
8449
|
}, /* @ts-ignore */
|
|
7974
8450
|
...(ngDevMode ? [{ debugName: "option" }] : /* istanbul ignore next */ []));
|
|
7975
8451
|
}
|
|
7976
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
7977
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0
|
|
8452
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8453
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: XiriTreeComponent, isStandalone: true, selector: "xiri-tree", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
7978
8454
|
<xiri-echarts-host
|
|
7979
8455
|
[option]="option()"
|
|
7980
8456
|
[compact]="compact()"
|
|
@@ -7983,7 +8459,7 @@ class XiriTreeComponent {
|
|
|
7983
8459
|
</xiri-echarts-host>
|
|
7984
8460
|
`, isInline: true, dependencies: [{ kind: "component", type: XiriEchartsHostComponent, selector: "xiri-echarts-host", inputs: ["option", "compact", "title", "headerIcon", "headerIconColor", "chartHeight"], outputs: ["itemClick"] }] }); }
|
|
7985
8461
|
}
|
|
7986
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
8462
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriTreeComponent, decorators: [{
|
|
7987
8463
|
type: Component,
|
|
7988
8464
|
args: [{
|
|
7989
8465
|
selector: 'xiri-tree',
|
|
@@ -8048,8 +8524,8 @@ class XiriSankeyComponent {
|
|
|
8048
8524
|
}, /* @ts-ignore */
|
|
8049
8525
|
...(ngDevMode ? [{ debugName: "option" }] : /* istanbul ignore next */ []));
|
|
8050
8526
|
}
|
|
8051
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
8052
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0
|
|
8527
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSankeyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8528
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: XiriSankeyComponent, isStandalone: true, selector: "xiri-sankey", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
8053
8529
|
<xiri-echarts-host
|
|
8054
8530
|
[option]="option()"
|
|
8055
8531
|
[compact]="compact()"
|
|
@@ -8058,7 +8534,7 @@ class XiriSankeyComponent {
|
|
|
8058
8534
|
</xiri-echarts-host>
|
|
8059
8535
|
`, isInline: true, dependencies: [{ kind: "component", type: XiriEchartsHostComponent, selector: "xiri-echarts-host", inputs: ["option", "compact", "title", "headerIcon", "headerIconColor", "chartHeight"], outputs: ["itemClick"] }] }); }
|
|
8060
8536
|
}
|
|
8061
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
8537
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriSankeyComponent, decorators: [{
|
|
8062
8538
|
type: Component,
|
|
8063
8539
|
args: [{
|
|
8064
8540
|
selector: 'xiri-sankey',
|
|
@@ -8156,8 +8632,8 @@ class XiriGanttComponent {
|
|
|
8156
8632
|
}, /* @ts-ignore */
|
|
8157
8633
|
...(ngDevMode ? [{ debugName: "option" }] : /* istanbul ignore next */ []));
|
|
8158
8634
|
}
|
|
8159
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
8160
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0
|
|
8635
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriGanttComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8636
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: XiriGanttComponent, isStandalone: true, selector: "xiri-gantt", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
8161
8637
|
<xiri-echarts-host
|
|
8162
8638
|
[option]="option()"
|
|
8163
8639
|
[compact]="compact()"
|
|
@@ -8166,7 +8642,7 @@ class XiriGanttComponent {
|
|
|
8166
8642
|
</xiri-echarts-host>
|
|
8167
8643
|
`, isInline: true, dependencies: [{ kind: "component", type: XiriEchartsHostComponent, selector: "xiri-echarts-host", inputs: ["option", "compact", "title", "headerIcon", "headerIconColor", "chartHeight"], outputs: ["itemClick"] }] }); }
|
|
8168
8644
|
}
|
|
8169
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
8645
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriGanttComponent, decorators: [{
|
|
8170
8646
|
type: Component,
|
|
8171
8647
|
args: [{
|
|
8172
8648
|
selector: 'xiri-gantt',
|
|
@@ -8202,10 +8678,10 @@ class XiriPageHeaderComponent {
|
|
|
8202
8678
|
this.settings = input.required(/* @ts-ignore */
|
|
8203
8679
|
...(ngDevMode ? [{ debugName: "settings" }] : /* istanbul ignore next */ []));
|
|
8204
8680
|
}
|
|
8205
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
8206
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
8681
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriPageHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8682
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriPageHeaderComponent, isStandalone: true, selector: "xiri-page-header", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"page-header\">\n\t<div class=\"page-header-content\">\n\t\t@if (settings().icon) {\n\t\t\t<div class=\"page-header-icon\" [class]=\"settings().iconColor || 'primary'\">\n\t\t\t\t<mat-icon>{{ settings().icon }}</mat-icon>\n\t\t\t</div>\n\t\t}\n\t\t<div class=\"page-header-text\">\n\t\t\t<h1>{{ settings().title }}</h1>\n\t\t\t@if (settings().subtitle) {\n\t\t\t\t<p>{{ settings().subtitle }}</p>\n\t\t\t}\n\t\t</div>\n\t</div>\n\t@if (settings().buttons) {\n\t\t<xiri-buttonline [settings]=\"settings().buttons!\"></xiri-buttonline>\n\t}\n</div>\n", styles: [".page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--xiri-spacing-md, 1rem);padding:var(--xiri-spacing-lg, 1.5rem) 0 var(--xiri-spacing-sm, .5rem);border-bottom:3px solid var(--primary);margin-bottom:var(--xiri-spacing-lg, 1.5rem)}.page-header h1{font-size:var(--xiri-font-size-headline);font-weight:500;margin:0;color:var(--on-surface)}.page-header p{font-size:var(--xiri-font-size-body);color:var(--on-surface-variant);margin:var(--xiri-spacing-xs) 0 0}.page-header .page-header-icon mat-icon{font-size:var(--xiri-font-size-headline);width:var(--xiri-font-size-headline);height:var(--xiri-font-size-headline)}.page-header .page-header-content{display:flex;align-items:center;gap:var(--xiri-spacing-md, 1rem)}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: XiriButtonlineComponent, selector: "xiri-buttonline", inputs: ["settings", "disabled", "filterData"], outputs: ["result"] }] }); }
|
|
8207
8683
|
}
|
|
8208
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
8684
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriPageHeaderComponent, decorators: [{
|
|
8209
8685
|
type: Component,
|
|
8210
8686
|
args: [{ selector: 'xiri-page-header', imports: [MatIcon, XiriButtonlineComponent], template: "<div class=\"page-header\">\n\t<div class=\"page-header-content\">\n\t\t@if (settings().icon) {\n\t\t\t<div class=\"page-header-icon\" [class]=\"settings().iconColor || 'primary'\">\n\t\t\t\t<mat-icon>{{ settings().icon }}</mat-icon>\n\t\t\t</div>\n\t\t}\n\t\t<div class=\"page-header-text\">\n\t\t\t<h1>{{ settings().title }}</h1>\n\t\t\t@if (settings().subtitle) {\n\t\t\t\t<p>{{ settings().subtitle }}</p>\n\t\t\t}\n\t\t</div>\n\t</div>\n\t@if (settings().buttons) {\n\t\t<xiri-buttonline [settings]=\"settings().buttons!\"></xiri-buttonline>\n\t}\n</div>\n", styles: [".page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--xiri-spacing-md, 1rem);padding:var(--xiri-spacing-lg, 1.5rem) 0 var(--xiri-spacing-sm, .5rem);border-bottom:3px solid var(--primary);margin-bottom:var(--xiri-spacing-lg, 1.5rem)}.page-header h1{font-size:var(--xiri-font-size-headline);font-weight:500;margin:0;color:var(--on-surface)}.page-header p{font-size:var(--xiri-font-size-body);color:var(--on-surface-variant);margin:var(--xiri-spacing-xs) 0 0}.page-header .page-header-icon mat-icon{font-size:var(--xiri-font-size-headline);width:var(--xiri-font-size-headline);height:var(--xiri-font-size-headline)}.page-header .page-header-content{display:flex;align-items:center;gap:var(--xiri-spacing-md, 1rem)}\n"] }]
|
|
8211
8687
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }] } });
|
|
@@ -8220,10 +8696,10 @@ class XiriDividerComponent {
|
|
|
8220
8696
|
this.settings = input.required(/* @ts-ignore */
|
|
8221
8697
|
...(ngDevMode ? [{ debugName: "settings" }] : /* istanbul ignore next */ []));
|
|
8222
8698
|
}
|
|
8223
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
8224
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
8699
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDividerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8700
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriDividerComponent, isStandalone: true, selector: "xiri-divider", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"xiri-divider\" [class]=\"settings().spacing || 'normal'\">\n\t@if (settings().text || settings().icon) {\n\t\t<mat-divider></mat-divider>\n\t\t<span class=\"divider-label\">\n\t\t\t@if (settings().icon) { <mat-icon>{{ settings().icon }}</mat-icon> }\n\t\t\t@if (settings().text) { {{ settings().text }} }\n\t\t</span>\n\t\t<mat-divider></mat-divider>\n\t} @else {\n\t\t<mat-divider></mat-divider>\n\t}\n</div>\n", styles: [".xiri-divider{display:flex;align-items:center;gap:var(--xiri-spacing-md)}.xiri-divider mat-divider{flex:1}.xiri-divider .divider-label{display:flex;align-items:center;gap:.25rem;color:var(--on-surface-variant);font-size:var(--xiri-font-size-label);white-space:nowrap}.xiri-divider.compact{padding:var(--xiri-spacing-xs) 0}.xiri-divider.normal{padding:var(--xiri-spacing-md) 0}.xiri-divider.large{padding:var(--xiri-spacing-xl) 0}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }] }); }
|
|
8225
8701
|
}
|
|
8226
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
8702
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDividerComponent, decorators: [{
|
|
8227
8703
|
type: Component,
|
|
8228
8704
|
args: [{ selector: 'xiri-divider', imports: [MatIcon, MatDivider], template: "<div class=\"xiri-divider\" [class]=\"settings().spacing || 'normal'\">\n\t@if (settings().text || settings().icon) {\n\t\t<mat-divider></mat-divider>\n\t\t<span class=\"divider-label\">\n\t\t\t@if (settings().icon) { <mat-icon>{{ settings().icon }}</mat-icon> }\n\t\t\t@if (settings().text) { {{ settings().text }} }\n\t\t</span>\n\t\t<mat-divider></mat-divider>\n\t} @else {\n\t\t<mat-divider></mat-divider>\n\t}\n</div>\n", styles: [".xiri-divider{display:flex;align-items:center;gap:var(--xiri-spacing-md)}.xiri-divider mat-divider{flex:1}.xiri-divider .divider-label{display:flex;align-items:center;gap:.25rem;color:var(--on-surface-variant);font-size:var(--xiri-font-size-label);white-space:nowrap}.xiri-divider.compact{padding:var(--xiri-spacing-xs) 0}.xiri-divider.normal{padding:var(--xiri-spacing-md) 0}.xiri-divider.large{padding:var(--xiri-spacing-xl) 0}\n"] }]
|
|
8229
8705
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }] } });
|
|
@@ -8238,10 +8714,10 @@ class XiriStatGridComponent {
|
|
|
8238
8714
|
this.settings = input.required(/* @ts-ignore */
|
|
8239
8715
|
...(ngDevMode ? [{ debugName: "settings" }] : /* istanbul ignore next */ []));
|
|
8240
8716
|
}
|
|
8241
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
8242
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
8717
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriStatGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8718
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriStatGridComponent, isStandalone: true, selector: "xiri-stat-grid", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (settings().title) {\n\t<h3 class=\"stat-grid-title\">{{ settings().title }}</h3>\n}\n<div class=\"stat-grid\" [style.--stat-cols]=\"settings().columns || 4\">\n\t@for (stat of settings().stats; track $index) {\n\t\t<xiri-stat [settings]=\"stat\"></xiri-stat>\n\t}\n</div>\n", styles: [".stat-grid-title{font-size:var(--xiri-font-size-title);font-weight:500;margin:0 0 var(--xiri-spacing-md)}:host{display:block;container-type:inline-size}.stat-grid{display:grid;grid-template-columns:repeat(var(--stat-cols, 4),minmax(0,1fr));gap:var(--xiri-spacing-md)}@container (max-width: 992px){.stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (max-width: 576px){.stat-grid{grid-template-columns:minmax(0,1fr)}}\n"], dependencies: [{ kind: "component", type: XiriStatComponent, selector: "xiri-stat", inputs: ["settings"] }] }); }
|
|
8243
8719
|
}
|
|
8244
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
8720
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriStatGridComponent, decorators: [{
|
|
8245
8721
|
type: Component,
|
|
8246
8722
|
args: [{ selector: 'xiri-stat-grid', imports: [XiriStatComponent], template: "@if (settings().title) {\n\t<h3 class=\"stat-grid-title\">{{ settings().title }}</h3>\n}\n<div class=\"stat-grid\" [style.--stat-cols]=\"settings().columns || 4\">\n\t@for (stat of settings().stats; track $index) {\n\t\t<xiri-stat [settings]=\"stat\"></xiri-stat>\n\t}\n</div>\n", styles: [".stat-grid-title{font-size:var(--xiri-font-size-title);font-weight:500;margin:0 0 var(--xiri-spacing-md)}:host{display:block;container-type:inline-size}.stat-grid{display:grid;grid-template-columns:repeat(var(--stat-cols, 4),minmax(0,1fr));gap:var(--xiri-spacing-md)}@container (max-width: 992px){.stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (max-width: 576px){.stat-grid{grid-template-columns:minmax(0,1fr)}}\n"] }]
|
|
8247
8723
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }] } });
|
|
@@ -8267,10 +8743,10 @@ class XiriToolbarComponent {
|
|
|
8267
8743
|
}, /* @ts-ignore */
|
|
8268
8744
|
...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
|
|
8269
8745
|
}
|
|
8270
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
8271
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
8746
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8747
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriToolbarComponent, isStandalone: true, selector: "xiri-toolbar", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null }, filterData: { classPropertyName: "filterData", publicName: "filterData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchChanged: "searchChanged" }, ngImport: i0, template: "<div class=\"xiri-toolbar\">\n\t@if (settings().icon) {\n\t\t<mat-icon>{{ settings().icon }}</mat-icon>\n\t}\n\t@if (settings().title) {\n\t\t<span class=\"toolbar-title\">{{ settings().title }}</span>\n\t}\n\t<div class=\"toolbar-spacer\"></div>\n\t@if (settings().search) {\n\t\t<xiri-search [placeholder]=\"searchPlaceholder()\" [open]=\"true\" (changed)=\"searchChanged.emit($event)\"></xiri-search>\n\t}\n\t@if (settings().buttons) {\n\t\t<xiri-buttonline [settings]=\"settings().buttons!\" [filterData]=\"filterData()\"></xiri-buttonline>\n\t}\n</div>\n", styles: [".xiri-toolbar{display:flex;align-items:center;gap:var(--xiri-spacing-sm);padding:var(--xiri-spacing-sm) var(--xiri-spacing-md);background:var(--surface-container, var(--surface));border-radius:var(--mat-card-elevated-container-shape, 12px);min-height:48px}.xiri-toolbar .toolbar-title{font-size:var(--xiri-font-size-title);font-weight:500}.xiri-toolbar .toolbar-spacer{flex:1}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: XiriButtonlineComponent, selector: "xiri-buttonline", inputs: ["settings", "disabled", "filterData"], outputs: ["result"] }, { kind: "component", type: XiriSearchComponent, selector: "xiri-search", inputs: ["placeholder", "open", "reset", "escape", "focus", "text"], outputs: ["changed"] }] }); }
|
|
8272
8748
|
}
|
|
8273
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
8749
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriToolbarComponent, decorators: [{
|
|
8274
8750
|
type: Component,
|
|
8275
8751
|
args: [{ selector: 'xiri-toolbar', imports: [MatIcon, XiriButtonlineComponent, XiriSearchComponent], template: "<div class=\"xiri-toolbar\">\n\t@if (settings().icon) {\n\t\t<mat-icon>{{ settings().icon }}</mat-icon>\n\t}\n\t@if (settings().title) {\n\t\t<span class=\"toolbar-title\">{{ settings().title }}</span>\n\t}\n\t<div class=\"toolbar-spacer\"></div>\n\t@if (settings().search) {\n\t\t<xiri-search [placeholder]=\"searchPlaceholder()\" [open]=\"true\" (changed)=\"searchChanged.emit($event)\"></xiri-search>\n\t}\n\t@if (settings().buttons) {\n\t\t<xiri-buttonline [settings]=\"settings().buttons!\" [filterData]=\"filterData()\"></xiri-buttonline>\n\t}\n</div>\n", styles: [".xiri-toolbar{display:flex;align-items:center;gap:var(--xiri-spacing-sm);padding:var(--xiri-spacing-sm) var(--xiri-spacing-md);background:var(--surface-container, var(--surface));border-radius:var(--mat-card-elevated-container-shape, 12px);min-height:48px}.xiri-toolbar .toolbar-title{font-size:var(--xiri-font-size-title);font-weight:500}.xiri-toolbar .toolbar-spacer{flex:1}\n"] }]
|
|
8276
8752
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }], filterData: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterData", required: false }] }], searchChanged: [{ type: i0.Output, args: ["searchChanged"] }] } });
|
|
@@ -8291,10 +8767,10 @@ class XiriDescriptionListComponent {
|
|
|
8291
8767
|
}, /* @ts-ignore */
|
|
8292
8768
|
...(ngDevMode ? [{ debugName: "layoutClass" }] : /* istanbul ignore next */ []));
|
|
8293
8769
|
}
|
|
8294
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
8295
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0
|
|
8770
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDescriptionListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8771
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.0", type: XiriDescriptionListComponent, isStandalone: true, selector: "xiri-description-list", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<dl class=\"description-list\" [class]=\"layoutClass()\" [style.--dl-cols]=\"settings().columns || 2\">\n\t@for (item of settings().items; track $index) {\n\t\t<div class=\"dl-item\">\n\t\t\t<dt>\n\t\t\t\t@if (item.icon) { <mat-icon [class]=\"item.color || ''\">{{ item.icon }}</mat-icon> }\n\t\t\t\t{{ item.label }}\n\t\t\t</dt>\n\t\t\t<dd>\n\t\t\t\t@switch (item.type) {\n\t\t\t\t\t@case ('link') { <a [href]=\"item.value\" target=\"_blank\" rel=\"noopener\">{{ item.value }}</a> }\n\t\t\t\t\t@case ('html') { <span [innerHTML]=\"item.value | safeHtml\"></span> }\n\t\t\t\t\t@case ('badge') { <span class=\"dl-badge\" [class]=\"item.color || 'primary'\">{{ item.value }}</span> }\n\t\t\t\t\t@default { {{ item.value || '\\u2014' }} }\n\t\t\t\t}\n\t\t\t</dd>\n\t\t</div>\n\t}\n</dl>\n", styles: [".description-list{display:grid;grid-template-columns:repeat(var(--dl-cols, 2),1fr);gap:var(--xiri-spacing-md);margin:0;padding:0}@media(max-width:768px){.description-list{grid-template-columns:1fr}}.description-list .dl-item dt{display:flex;align-items:center;gap:var(--xiri-spacing-xs);font-size:var(--xiri-font-size-label);color:var(--on-surface-variant);margin-bottom:var(--xiri-spacing-xs)}.description-list .dl-item dd{font-size:var(--xiri-font-size-body);color:var(--on-surface);margin:0}.description-list.horizontal .dl-item{display:grid;grid-template-columns:minmax(120px,auto) 1fr;gap:var(--xiri-spacing-md)}.description-list.horizontal .dl-item dt{margin-bottom:0}.description-list .dl-badge{display:inline-block;padding:.125rem .5rem;border-radius:var(--xiri-radius-xs);font-size:var(--xiri-font-size-label)}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: SafehtmlPipe, name: "safeHtml" }] }); }
|
|
8296
8772
|
}
|
|
8297
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
8773
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: XiriDescriptionListComponent, decorators: [{
|
|
8298
8774
|
type: Component,
|
|
8299
8775
|
args: [{ selector: 'xiri-description-list', imports: [MatIcon, SafehtmlPipe], template: "<dl class=\"description-list\" [class]=\"layoutClass()\" [style.--dl-cols]=\"settings().columns || 2\">\n\t@for (item of settings().items; track $index) {\n\t\t<div class=\"dl-item\">\n\t\t\t<dt>\n\t\t\t\t@if (item.icon) { <mat-icon [class]=\"item.color || ''\">{{ item.icon }}</mat-icon> }\n\t\t\t\t{{ item.label }}\n\t\t\t</dt>\n\t\t\t<dd>\n\t\t\t\t@switch (item.type) {\n\t\t\t\t\t@case ('link') { <a [href]=\"item.value\" target=\"_blank\" rel=\"noopener\">{{ item.value }}</a> }\n\t\t\t\t\t@case ('html') { <span [innerHTML]=\"item.value | safeHtml\"></span> }\n\t\t\t\t\t@case ('badge') { <span class=\"dl-badge\" [class]=\"item.color || 'primary'\">{{ item.value }}</span> }\n\t\t\t\t\t@default { {{ item.value || '\\u2014' }} }\n\t\t\t\t}\n\t\t\t</dd>\n\t\t</div>\n\t}\n</dl>\n", styles: [".description-list{display:grid;grid-template-columns:repeat(var(--dl-cols, 2),1fr);gap:var(--xiri-spacing-md);margin:0;padding:0}@media(max-width:768px){.description-list{grid-template-columns:1fr}}.description-list .dl-item dt{display:flex;align-items:center;gap:var(--xiri-spacing-xs);font-size:var(--xiri-font-size-label);color:var(--on-surface-variant);margin-bottom:var(--xiri-spacing-xs)}.description-list .dl-item dd{font-size:var(--xiri-font-size-body);color:var(--on-surface);margin:0}.description-list.horizontal .dl-item{display:grid;grid-template-columns:minmax(120px,auto) 1fr;gap:var(--xiri-spacing-md)}.description-list.horizontal .dl-item dt{margin-bottom:0}.description-list .dl-badge{display:inline-block;padding:.125rem .5rem;border-radius:var(--xiri-radius-xs);font-size:var(--xiri-font-size-label)}\n"] }]
|
|
8300
8776
|
}], propDecorators: { settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: true }] }] } });
|
|
@@ -8400,10 +8876,10 @@ class ThemeService {
|
|
|
8400
8876
|
// variables), so they have to be told to re-resolve.
|
|
8401
8877
|
notifyThemeChanged();
|
|
8402
8878
|
}
|
|
8403
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0
|
|
8404
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0
|
|
8879
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
8880
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.0", ngImport: i0, type: ThemeService }); }
|
|
8405
8881
|
}
|
|
8406
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0
|
|
8882
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: ThemeService, decorators: [{
|
|
8407
8883
|
type: Service
|
|
8408
8884
|
}], ctorParameters: () => [] });
|
|
8409
8885
|
|