@xiriframework/xiri-ng 0.2.27 → 0.2.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"xiriframework-xiri-ng.mjs","sources":["../../../projects/xiri-ng/src/lib/pipes/safehtml.pipe.ts","../../../projects/xiri-ng/src/lib/formfields/file/file.component.ts","../../../projects/xiri-ng/src/lib/formfields/file/file.component.html","../../../projects/xiri-ng/src/lib/formfields/timelimit/timelimit.component.ts","../../../projects/xiri-ng/src/lib/formfields/timelimit/timelimit.component.html","../../../projects/xiri-ng/src/lib/formfields/volume/volume.component.ts","../../../projects/xiri-ng/src/lib/formfields/volume/volume.component.html","../../../projects/xiri-ng/src/lib/services/date.service.ts","../../../projects/xiri-ng/src/lib/formfields/helper/fieldmain.ts","../../../projects/xiri-ng/src/lib/formfields/datetimerange/datetimerange.component.ts","../../../projects/xiri-ng/src/lib/formfields/datetimerange/datetimerange.component.html","../../../projects/xiri-ng/src/lib/formfields/daterange/daterange.component.ts","../../../projects/xiri-ng/src/lib/formfields/daterange/daterange.component.html","../../../projects/xiri-ng/src/lib/formfields/date/date.component.ts","../../../projects/xiri-ng/src/lib/formfields/date/date.component.html","../../../projects/xiri-ng/src/lib/formfields/yearmonth/yearmonth.component.ts","../../../projects/xiri-ng/src/lib/formfields/yearmonth/yearmonth.component.html","../../../projects/xiri-ng/src/lib/services/snackbar.service.ts","../../../projects/xiri-ng/src/lib/services/data.service.ts","../../../projects/xiri-ng/src/lib/search/search.component.ts","../../../projects/xiri-ng/src/lib/search/search.component.html","../../../projects/xiri-ng/src/lib/formfields/treeselect/treeselect.component.ts","../../../projects/xiri-ng/src/lib/formfields/treeselect/treeselect.component.html","../../../projects/xiri-ng/src/lib/formfields/select/select.directive.ts","../../../projects/xiri-ng/src/lib/formfields/chips/chips.component.ts","../../../projects/xiri-ng/src/lib/formfields/chips/chips.component.html","../../../projects/xiri-ng/src/lib/formfields/form-fields.component.ts","../../../projects/xiri-ng/src/lib/formfields/form-fields.component.html","../../../projects/xiri-ng/src/lib/raw-table/xiri-raw-table.component.ts","../../../projects/xiri-ng/src/lib/raw-table/xiri-raw-table.component.html","../../../projects/xiri-ng/src/lib/buttonstyle/buttonstyle.component.ts","../../../projects/xiri-ng/src/lib/buttonstyle/buttonstyle.component.html","../../../projects/xiri-ng/src/lib/done/done.component.ts","../../../projects/xiri-ng/src/lib/done/done.component.html","../../../projects/xiri-ng/src/lib/error/error.component.ts","../../../projects/xiri-ng/src/lib/error/error.component.html","../../../projects/xiri-ng/src/lib/services/download.service.ts","../../../projects/xiri-ng/src/lib/services/error.util.ts","../../../projects/xiri-ng/src/lib/dialog/dialog.component.ts","../../../projects/xiri-ng/src/lib/dialog/dialog.component.html","../../../projects/xiri-ng/src/lib/services/response-handler.service.ts","../../../projects/xiri-ng/src/lib/button/button.component.ts","../../../projects/xiri-ng/src/lib/button/button.component.html","../../../projects/xiri-ng/src/lib/table/inline-edit.service.ts","../../../projects/xiri-ng/src/lib/buttonline/buttonline.component.ts","../../../projects/xiri-ng/src/lib/buttonline/buttonline.component.html","../../../projects/xiri-ng/src/lib/services/sessionStorage.service.ts","../../../projects/xiri-ng/src/lib/services/number.service.ts","../../../projects/xiri-ng/src/lib/empty-state/empty-state.component.ts","../../../projects/xiri-ng/src/lib/empty-state/empty-state.component.html","../../../projects/xiri-ng/src/lib/table/table.component.ts","../../../projects/xiri-ng/src/lib/table/table.component.html","../../../projects/xiri-ng/src/lib/services/form.service.ts","../../../projects/xiri-ng/src/lib/form/form.component.ts","../../../projects/xiri-ng/src/lib/form/form.component.html","../../../projects/xiri-ng/src/lib/query/query.component.ts","../../../projects/xiri-ng/src/lib/query/query.component.html","../../../projects/xiri-ng/src/lib/skeleton/skeleton.component.ts","../../../projects/xiri-ng/src/lib/skeleton/skeleton.component.html","../../../projects/xiri-ng/src/lib/infopoint/infopoint.component.ts","../../../projects/xiri-ng/src/lib/infopoint/infopoint.component.html","../../../projects/xiri-ng/src/lib/list/list.component.ts","../../../projects/xiri-ng/src/lib/list/list.component.html","../../../projects/xiri-ng/src/lib/header/header.component.ts","../../../projects/xiri-ng/src/lib/header/header.component.html","../../../projects/xiri-ng/src/lib/stepper/stepper.component.ts","../../../projects/xiri-ng/src/lib/stepper/stepper.component.html","../../../projects/xiri-ng/src/lib/links/links.component.ts","../../../projects/xiri-ng/src/lib/links/links.component.html","../../../projects/xiri-ng/src/lib/cardlink/cardlink.component.ts","../../../projects/xiri-ng/src/lib/cardlink/cardlink.component.html","../../../projects/xiri-ng/src/lib/tabs/tabs.component.ts","../../../projects/xiri-ng/src/lib/tabs/tabs.component.html","../../../projects/xiri-ng/src/lib/expansion/expansion.component.ts","../../../projects/xiri-ng/src/lib/expansion/expansion.component.html","../../../projects/xiri-ng/src/lib/stat/stat.component.ts","../../../projects/xiri-ng/src/lib/stat/stat.component.html","../../../projects/xiri-ng/src/lib/section/section.component.ts","../../../projects/xiri-ng/src/lib/section/section.component.html","../../../projects/xiri-ng/src/lib/dyncomponent/dyncomponent.component.ts","../../../projects/xiri-ng/src/lib/dyncomponent/dyncomponent.component.html","../../../projects/xiri-ng/src/lib/card/card.component.ts","../../../projects/xiri-ng/src/lib/card/card.component.html","../../../projects/xiri-ng/src/lib/alert/alert.component.ts","../../../projects/xiri-ng/src/lib/alert/alert.component.html","../../../projects/xiri-ng/src/lib/multiprogress/multiprogress.component.ts","../../../projects/xiri-ng/src/lib/multiprogress/multiprogress.component.html","../../../projects/xiri-ng/src/lib/imagetext/imagetext.component.ts","../../../projects/xiri-ng/src/lib/imagetext/imagetext.component.html","../../../projects/xiri-ng/src/lib/sidenav/sidenav.component.ts","../../../projects/xiri-ng/src/lib/sidenav/sidenav.component.html","../../../projects/xiri-ng/src/lib/breadcrumb/breadcrumb.component.ts","../../../projects/xiri-ng/src/lib/breadcrumb/breadcrumb.component.html","../../../projects/xiri-ng/src/lib/timeline/timeline.component.ts","../../../projects/xiri-ng/src/lib/timeline/timeline.component.html","../../../projects/xiri-ng/src/lib/echarts/echarts-host.component.ts","../../../projects/xiri-ng/src/lib/echarts/echarts-host.component.html","../../../projects/xiri-ng/src/lib/echarts/color.ts","../../../projects/xiri-ng/src/lib/echarts/tooltip.ts","../../../projects/xiri-ng/src/lib/barchart/barchart.component.ts","../../../projects/xiri-ng/src/lib/linechart/linechart.component.ts","../../../projects/xiri-ng/src/lib/piechart/piechart.component.ts","../../../projects/xiri-ng/src/lib/gaugechart/gaugechart.component.ts","../../../projects/xiri-ng/src/lib/heatmap/heatmap.component.ts","../../../projects/xiri-ng/src/lib/calendar/calendar.component.ts","../../../projects/xiri-ng/src/lib/tree/tree.component.ts","../../../projects/xiri-ng/src/lib/sankey/sankey.component.ts","../../../projects/xiri-ng/src/lib/gantt/gantt.component.ts","../../../projects/xiri-ng/src/lib/page-header/page-header.component.ts","../../../projects/xiri-ng/src/lib/page-header/page-header.component.html","../../../projects/xiri-ng/src/lib/divider/divider.component.ts","../../../projects/xiri-ng/src/lib/divider/divider.component.html","../../../projects/xiri-ng/src/lib/stat-grid/stat-grid.component.ts","../../../projects/xiri-ng/src/lib/stat-grid/stat-grid.component.html","../../../projects/xiri-ng/src/lib/toolbar/toolbar.component.ts","../../../projects/xiri-ng/src/lib/toolbar/toolbar.component.html","../../../projects/xiri-ng/src/lib/description-list/description-list.component.ts","../../../projects/xiri-ng/src/lib/description-list/description-list.component.html","../../../projects/xiri-ng/src/lib/services/localStorage.service.ts","../../../projects/xiri-ng/src/lib/services/theme.service.ts","../../../projects/xiri-ng/src/lib/provider.ts","../../../projects/xiri-ng/src/public-api.ts","../../../projects/xiri-ng/src/xiriframework-xiri-ng.ts"],"sourcesContent":["import { DomSanitizer } from '@angular/platform-browser';\nimport { inject, Pipe, PipeTransform } from '@angular/core';\n\n\n@Pipe( {\n\t name: 'safeHtml'\n } )\nexport class SafehtmlPipe implements PipeTransform {\n\t\n\tprivate sanitizer: DomSanitizer = inject( DomSanitizer );\n\t\n\ttransform( style: string ): string {\n\t\treturn <string> this.sanitizer.bypassSecurityTrustHtml( style );\n\t}\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, inject, Input, OnDestroy } from '@angular/core';\nimport {\n\tMatError,\n\tMatFormField,\n\tMatFormFieldControl,\n\tMatHint,\n\tMatLabel,\n\tMatSuffix\n} from \"@angular/material/form-field\";\nimport {\n\tControlValueAccessor,\n\tFormControl,\n\tFormGroup,\n\tFormsModule,\n\tNgControl,\n\tReactiveFormsModule\n} from \"@angular/forms\";\nimport { Subject } from \"rxjs\";\nimport { FocusMonitor } from \"@angular/cdk/a11y\";\nimport { XiriFormField } from \"../field.interface\";\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatInput } from '@angular/material/input';\n\ninterface FileForm {\n\tfiles: FormControl<File[] | null>\n\ttext: FormControl<string | null>\n}\n\ninterface FileData {\n\tfile: File\n\tname: string;\n\tdata: string;\n}\n\n@Component( {\n\t selector: 'xiri-file',\n\t templateUrl: './file.component.html',\n\t styleUrls: [ './file.component.scss' ],\n\t host: {\n\t\t '[id]': 'id',\n\t\t '[attr.aria-describedby]': 'describedBy'\n\t },\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriFileComponent\n\t } ],\n\t imports: [\n\t\t MatFormField,\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatLabel,\n\t\t MatInput,\n\t\t MatIconButton,\n\t\t MatSuffix,\n\t\t MatIcon,\n\t\t MatHint,\n\t\t MatError,\n\t ]\n } )\nexport class XiriFileComponent implements ControlValueAccessor, MatFormFieldControl<any>, OnDestroy {\n\tprivate focusMonitor = inject( FocusMonitor );\n\tngControl = inject( NgControl, { optional: true, self: true } );\n\tprivate _elementRef = inject<ElementRef<HTMLElement>>( ElementRef );\n\tprivate cdr = inject( ChangeDetectorRef );\n\t\n\t\n\tstatic nextId = 0;\n\tid = `xiri-file-${ XiriFileComponent.nextId++ }`;\n\tdescribedBy = '';\n\t\n\tparts: FormGroup<FileForm>;\n\tstateChanges = new Subject<void>();\n\tfocused = false;\n\tcontrolType = 'xiri-file';\n\t\n\treadonly placeholder: string;\n\tpublic required = false;\n\tpublic disabled = false;\n\tshouldLabelFloat = true;\n\t\n\tprivate _field: XiriFormField;\n\tcurrentFiles: FileData[] = [];\n\t\n\tconstructor() {\n\t\tif ( this.ngControl != null )\n\t\t\tthis.ngControl.valueAccessor = this;\n\t\t\n\t\tthis.parts = new FormGroup<FileForm>( {\n\t\t\t files: new FormControl<File[] | null>( null ),\n\t\t\t text: new FormControl<string | null>( null )\n\t\t } );\n\t\t\n\t\tthis.focusMonitor.monitor( this._elementRef, true ).subscribe( origin => {\n\t\t\tthis.ngControl.control.markAsTouched();\n\t\t\tthis.focused = !!origin;\n\t\t\tthis.cdr.markForCheck();\n\t\t} );\n\t}\n\t\n\tonChange = ( _: any ) => {\n\t};\n\tonTouched = () => {\n\t};\n\t\n\tngOnDestroy() {\n\t\tthis.stateChanges.complete();\n\t\tthis.focusMonitor.stopMonitoring( this._elementRef );\n\t}\n\t\n\t@Input()\n\tget value() {\n\t\t\n\t\tif ( this.errorState )\n\t\t\treturn undefined;\n\t\tif ( this.currentFiles.length == 0 )\n\t\t\treturn null;\n\t\t\n\t\treturn this.currentFiles.map( ( file ) => {\n\t\t\treturn {\n\t\t\t\tname: file.name,\n\t\t\t\tdata: file.data\n\t\t\t};\n\t\t} );\n\t}\n\t\n\tset value( input ) {\n\t\t\n\t\tif ( input === null || input === undefined )\n\t\t\treturn;\n\t\t\n\t\t// console.log( 'xiriFile input', input );\n\t\t// this.onChange( this.value );\n\t\t// this.stateChanges.next();\n\t}\n\t\n\t\n\t@Input()\n\tget field(): XiriFormField {\n\t\treturn this._field;\n\t}\n\t\n\tset field( value: XiriFormField ) {\n\t\t\n\t\tthis._field = value;\n\t\t\n\t\tthis.required = value.required;\n\t\tthis.disabled = value.disabled;\n\t\tthis.disabled ? this.parts.disable() : this.parts.enable();\n\t\t\n\t\tthis.stateChanges.next();\n\t}\n\t\n\tget errorState(): boolean {\n\t\treturn this.parts.invalid && this.ngControl.touched;\n\t}\n\t\n\tget empty() {\n\t\treturn this.value === null;\n\t}\n\t\n\twriteValue( value ): void {\n\t\tthis.value = value;\n\t}\n\t\n\tregisterOnChange( fn: any ): void {\n\t\tthis.onChange = fn;\n\t}\n\t\n\tregisterOnTouched( fn: any ): void {\n\t\tthis.onTouched = fn;\n\t}\n\t\n\tsetDisabledState( isDisabled: boolean ): void {\n\t\tthis.disabled = isDisabled;\n\t}\n\t\n\tsetDescribedByIds( ids: string[] ) {\n\t\tthis.describedBy = ids.join( ' ' );\n\t}\n\t\n\tonContainerClick( event: MouseEvent ): void {\n\t}\n\t\n\tfileChange( event: Event ) {\n\t\t\n\t\tconst element = event.currentTarget as HTMLInputElement;\n\t\tlet fileList: FileList | null = element.files;\n\t\t\n\t\tif ( fileList === null || fileList.length === 0 || fileList.length > 100 )\n\t\t\treturn;\n\t\t\n\t\tlet fieldFiles = this.parts.get( 'files' );\n\t\tlet fieldText = this.parts.get( 'text' );\n\t\tlet files = [];\n\t\t\n\t\tfor ( let i = 0; i < fileList.length; i++ ) {\n\t\t\tlet file = fileList.item( i );\n\t\t\tif ( file === null || file.size > this._field.max ) {\n\t\t\t\tconsole.log( 'file too large or null', file, this._field );\n\t\t\t\tthis.currentFiles = [];\n\t\t\t\tfieldFiles.setValue( null );\n\t\t\t\tfieldText.setValue( null );\n\t\t\t\t\n\t\t\t\tthis.onChange( this.value );\n\t\t\t\tthis.stateChanges.next();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tlet reader = new FileReader();\n\t\t\t\n\t\t\treader.addEventListener( \"load\", () => {\n\t\t\t\tthis.currentFiles.push( {\n\t\t\t\t\t file: file,\n\t\t\t\t\t name: file.name,\n\t\t\t\t\t data: reader.result as string\n\t\t\t\t } );\n\n\t\t\t\tthis.onChange( this.value );\n\t\t\t\tthis.stateChanges.next();\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t}, false );\n\t\t\t\n\t\t\treader.readAsDataURL( file );\n\t\t\tfiles.push( file );\n\t\t}\n\t\t\n\t\tfieldFiles.setValue( files );\n\t\tfieldText.setValue( files.map( ( file ) => file.name ).join( ', ' ) );\n\t}\n\t\n\tpublic getErrorMessage(): string {\n\t\t\n\t\tlet errors = this.parts.get( 'text' ).errors;\n\t\t\n\t\tif ( errors.required )\n\t\t\treturn 'required';\n\t\t\n\t\tconsole.log( 'unknown error file', errors );\n\t\t\n\t\treturn 'error';\n\t}\n\t\n}\n","<mat-form-field [formGroup]=\"parts\" floatLabel=\"auto\" class=\"fileselect\" (click)=\"fileInput.click()\">\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ählen\">\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\" (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>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { MatFormField, MatFormFieldControl, MatLabel } from \"@angular/material/form-field\";\nimport {\n\tControlValueAccessor,\n\tFormControl,\n\tFormGroup,\n\tFormsModule,\n\tNgControl,\n\tReactiveFormsModule\n} from \"@angular/forms\";\nimport { Subject } from \"rxjs\";\nimport { FocusMonitor } from \"@angular/cdk/a11y\";\nimport { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { KeyValuePipe } from '@angular/common';\nimport { MatOption } from '@angular/material/core';\nimport { MatSelect } from '@angular/material/select';\nimport { MatCheckbox } from '@angular/material/checkbox';\n\ninterface TimelimitForm {\n\tcheck: FormControl<boolean>\n\twd0: FormControl<boolean>\n\twd1: FormControl<boolean>\n\twd2: FormControl<boolean>\n\twd3: FormControl<boolean>\n\twd4: FormControl<boolean>\n\twd5: FormControl<boolean>\n\twd6: FormControl<boolean>\n\tfromhour: FormControl<number>\n\tfrommin: FormControl<number>\n\ttohour: FormControl<number>\n\ttomin: FormControl<number>\n\tinout: FormControl<boolean>\n}\n\n\n@Component( {\n\t selector: 'xiri-timelimit',\n\t templateUrl: './timelimit.component.html',\n\t styleUrls: [ './timelimit.component.scss' ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t host: {\n\t\t '[id]': 'id',\n\t\t '[attr.aria-describedby]': 'describedBy'\n\t },\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriTimelimitComponent\n\t } ],\n\t imports: [\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatCheckbox,\n\t\t MatLabel,\n\t\t MatFormField,\n\t\t MatSelect,\n\t\t MatOption,\n\t\t KeyValuePipe,\n\t ]\n } )\nexport class XiriTimelimitComponent implements ControlValueAccessor, MatFormFieldControl<any>, OnInit, OnDestroy {\n\tprivate focusMonitor = inject( FocusMonitor );\n\tngControl = inject( NgControl, { optional: true, self: true } );\n\tprivate _elementRef = inject<ElementRef<HTMLElement>>( ElementRef );\n\tprivate cdr = inject( ChangeDetectorRef );\n\t\n\t\n\tstatic nextId = 0;\n\tid = `xiri-timelimit-${ XiriTimelimitComponent.nextId++ }`;\n\tdescribedBy = '';\n\t\n\treadonly autofilled: boolean;\n\t\n\terrorState = false;\n\tparts: FormGroup<TimelimitForm>;\n\tstateChanges = new Subject<void>();\n\tfocused = false;\n\tcontrolType = 'xiri-timelimit';\n\t\n\tprivate _placeholder: string = '';\n\tprivate _required = true;\n\tprivate _disabled = false;\n\tshouldLabelFloat = true;\n\t\n\thours = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09',\n\t '10', '11', '12', '13', '14', '15', '16', '17', '18', '19',\n\t '20', '21', '22', '23', '24' ];\n\tminutes = {\n\t\t0: '00',\n\t\t5: '05',\n\t\t10: '10',\n\t\t15: '15',\n\t\t20: '20',\n\t\t25: '25',\n\t\t30: '30',\n\t\t35: '35',\n\t\t40: '40',\n\t\t45: '45',\n\t\t50: '50',\n\t\t55: '55'\n\t};\n\t\n\tconstructor() {\n\t\tif ( this.ngControl != null ) {\n\t\t\tthis.ngControl.valueAccessor = this;\n\t\t}\n\t\t\n\t\tthis.parts = new FormGroup<TimelimitForm>( {\n\t\t\t check: new FormControl<boolean>( false ),\n\t\t\t wd0: new FormControl<boolean>( true ),\n\t\t\t wd1: new FormControl<boolean>( false ),\n\t\t\t wd2: new FormControl<boolean>( false ),\n\t\t\t wd3: new FormControl<boolean>( false ),\n\t\t\t wd4: new FormControl<boolean>( false ),\n\t\t\t wd5: new FormControl<boolean>( false ),\n\t\t\t wd6: new FormControl<boolean>( false ),\n\t\t\t fromhour: new FormControl<number>( 0 ),\n\t\t\t frommin: new FormControl<number>( 0 ),\n\t\t\t tohour: new FormControl<number>( 24 ),\n\t\t\t tomin: new FormControl<number>( 0 ),\n\t\t\t inout: new FormControl<boolean>( true ),\n\t\t } );\n\t\t\n\t\tthis.focusMonitor.monitor( this._elementRef.nativeElement, true ).subscribe( origin => {\n\n\t\t\tif ( this.focused && !origin ) {\n\t\t\t\tthis.onTouched();\n\t\t\t}\n\t\t\tthis.focused = !!origin;\n\t\t\tif ( this.focused )\n\t\t\t\tthis.ngControl.control?.markAllAsTouched();\n\n\t\t\tthis.onChange( this.value );\n\t\t\tthis.stateChanges.next();\n\t\t\tthis.cdr.markForCheck();\n\t\t} );\n\t}\n\t\n\tonChange = ( _: any ) => {\n\t};\n\tonTouched = () => {\n\t};\n\t\n\tngOnInit() {\n\t\t\n\t\tthis.ngControl.control?.setValidators( [ this.validate.bind( this ) ] );\n\t\tthis.ngControl.control?.updateValueAndValidity();\n\t}\n\t\n\tvalidate( { value } ) {\n\t\t\n\t\tlet isNotValid = false;\n\t\t\n\t\tif ( value === null )\n\t\t\tisNotValid = true;\n\t\telse if ( value.check ) {\n\t\t\tif ( value.tohour == 24 && value.tomin != 0 )\n\t\t\t\tisNotValid = true;\n\t\t\tif ( value.fromhour == 24 )\n\t\t\t\tisNotValid = true;\n\t\t\tif ( value.fromhour > value.tohour )\n\t\t\t\tisNotValid = true;\n\t\t\tif ( value.fromhour == value.tohour && value.frommin >= value.tomin )\n\t\t\t\tisNotValid = true;\n\t\t\tif ( ( ( value.wd[ 0 ] &&\n\t\t\t value.wd[ 1 ] &&\n\t\t\t value.wd[ 2 ] &&\n\t\t\t value.wd[ 3 ] &&\n\t\t\t value.wd[ 4 ] &&\n\t\t\t value.wd[ 5 ] &&\n\t\t\t value.wd[ 6 ] ) ||\n\t\t\t ( !value.wd[ 0 ] &&\n\t\t\t !value.wd[ 1 ] &&\n\t\t\t !value.wd[ 2 ] &&\n\t\t\t !value.wd[ 3 ] &&\n\t\t\t !value.wd[ 4 ] &&\n\t\t\t !value.wd[ 5 ] &&\n\t\t\t !value.wd[ 6 ] ) ) &&\n\t\t\t value.fromhour == 0 && value.frommin == 0 && value.tohour == 24 && value.frommin == 0 ) {\n\t\t\t\tisNotValid = true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn isNotValid && {\n\t\t\tinvalid: isNotValid\n\t\t}\n\t}\n\t\n\tngOnDestroy() {\n\t\tthis.stateChanges.complete();\n\t\tthis.focusMonitor.stopMonitoring( this._elementRef.nativeElement );\n\t}\n\t\n\tpublic changed() {\n\t\tthis.onChange( this.value );\n\t}\n\t\n\t@Input()\n\tget placeholder(): string {\n\t\treturn this._placeholder;\n\t}\n\t\n\tset placeholder( value: string ) {\n\t\tthis._placeholder = value;\n\t\tthis.stateChanges.next();\n\t}\n\t\n\t@Input()\n\tget required(): boolean {\n\t\treturn this._required;\n\t}\n\t\n\tset required( value: boolean ) {\n\t\tthis._required = coerceBooleanProperty( value );\n\t\tthis.stateChanges.next();\n\t}\n\t\n\t@Input()\n\tget disabled(): boolean {\n\t\treturn this._disabled;\n\t}\n\t\n\tset disabled( value: boolean ) {\n\t\tthis._disabled = coerceBooleanProperty( value );\n\t\tthis._disabled ? this.parts.disable() : this.parts.enable();\n\t\tthis.stateChanges.next();\n\t}\n\t\n\t@Input()\n\tget value() {\n\t\t\n\t\tconst value = this.parts.value;\n\t\treturn {\n\t\t\tcheck: value.check,\n\t\t\twd: [ value.wd0, value.wd1, value.wd2, value.wd3, value.wd4, value.wd5, value.wd6 ],\n\t\t\tfromhour: value.fromhour,\n\t\t\tfrommin: value.frommin,\n\t\t\ttohour: value.tohour,\n\t\t\ttomin: value.tomin,\n\t\t\tin: value.inout\n\t\t};\n\t}\n\t\n\tset value( input: any ) {\n\t\t\n\t\tif ( input === null || input === undefined )\n\t\t\treturn;\n\t\t\n\t\tthis.parts.setValue( {\n\t\t\t check: input.check,\n\t\t\t wd0: input.wd[ 0 ],\n\t\t\t wd1: input.wd[ 1 ],\n\t\t\t wd2: input.wd[ 2 ],\n\t\t\t wd3: input.wd[ 3 ],\n\t\t\t wd4: input.wd[ 4 ],\n\t\t\t wd5: input.wd[ 5 ],\n\t\t\t wd6: input.wd[ 6 ],\n\t\t\t fromhour: parseInt( input.fromhour ),\n\t\t\t frommin: parseInt( input.frommin ),\n\t\t\t tohour: parseInt( input.tohour ),\n\t\t\t tomin: parseInt( input.tomin ),\n\t\t\t inout: input.in\n\t\t } );\n\t\t\n\t\tthis.onChange( this.value );\n\t\tthis.stateChanges.next();\n\t}\n\t\n\tget empty() {\n\t\treturn this.value === null;\n\t}\n\t\n\twriteValue( value ): void {\n\t\tthis.value = value;\n\t}\n\t\n\tregisterOnChange( fn: any ): void {\n\t\tthis.onChange = fn;\n\t}\n\t\n\tregisterOnTouched( fn: any ): void {\n\t\tthis.onTouched = fn;\n\t}\n\t\n\tsetDisabledState( isDisabled: boolean ): void {\n\t\tthis.disabled = isDisabled;\n\t}\n\t\n\tsetDescribedByIds( ids: string[] ) {\n\t\tthis.describedBy = ids.join( ' ' );\n\t}\n\t\n\tonContainerClick( event: MouseEvent ): void {\n\t}\n\t\n\tpublic _texts;\n\t\n\t@Input()\n\tget texts() {\n\t\t\n\t\treturn this._texts;\n\t}\n\t\n\tset texts( input: object ) {\n\t\t\n\t\tif ( input === null || input === undefined )\n\t\t\treturn;\n\t\tthis._texts = input;\n\t}\n\t\n\tonCompare( _left, _right ): number {\n\t\treturn -1;\n\t}\n\t\n}\n","<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>","import {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tDoCheck,\n\tElementRef,\n\tinject,\n\tInput,\n\tOnDestroy\n} from '@angular/core';\nimport {\n\tControlValueAccessor,\n\tFormControl,\n\tFormGroup,\n\tFormsModule,\n\tNgControl,\n\tReactiveFormsModule\n} from '@angular/forms';\nimport { MatError, MatFormField, MatFormFieldControl, MatHint, MatLabel } from '@angular/material/form-field';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { Subject } from 'rxjs';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { XiriFormField } from \"../field.interface\";\nimport { MatInput } from '@angular/material/input';\n\ninterface VolumeForm {\n\tvoll: FormControl<number>\n\tvolw: FormControl<number>\n\tvolh: FormControl<number>\n}\n\n@Component( {\n\t selector: 'xiri-volume',\n\t templateUrl: './volume.component.html',\n\t styleUrls: [ './volume.component.scss' ],\n\t host: {\n\t\t '[id]': 'id',\n\t\t '[attr.aria-describedby]': 'describedBy'\n\t },\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriVolumeComponent\n\t } ],\n\t imports: [\n\t\t MatFormField,\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatLabel,\n\t\t MatInput,\n\t\t MatHint,\n\t\t MatError,\n\t ]\n } )\nexport class XiriVolumeComponent implements ControlValueAccessor, MatFormFieldControl<any>, DoCheck, OnDestroy {\n\tprivate focusMonitor = inject( FocusMonitor );\n\tngControl = inject( NgControl, { optional: true, self: true } );\n\tprivate _elementRef = inject<ElementRef<HTMLElement>>( ElementRef );\n\tprivate cdr = inject( ChangeDetectorRef );\n\t\n\t\n\tstatic nextId = 0;\n\tid = `xiri-volume-${ XiriVolumeComponent.nextId++ }`;\n\tdescribedBy = '';\n\t\n\tpublic min = null;\n\tpublic max = null;\n\t\n\treadonly autofilled: boolean;\n\t\n\tparts: FormGroup<VolumeForm>;\n\tstateChanges = new Subject<void>();\n\tfocused = false;\n\tcontrolType = 'xiri-volume';\n\t\n\treadonly placeholder: string;\n\tpublic required = false;\n\tpublic disabled = false;\n\tshouldLabelFloat = true;\n\tprivate _lastValue: [ number, number, number ] | null = null;\n\tprivate _field: XiriFormField;\n\t\n\tconstructor() {\n\t\t\n\t\tif ( this.ngControl != null )\n\t\t\tthis.ngControl.valueAccessor = this;\n\t\t\n\t\tthis.parts = new FormGroup<VolumeForm>( {\n\t\t\t voll: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t\t volw: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t\t volh: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t } );\n\t\t\n\t\tthis.focusMonitor.monitor( this._elementRef, true ).subscribe( origin => {\n\t\t\tthis.ngControl.control.markAsTouched();\n\t\t\tthis.focused = !!origin;\n\t\t\tthis.runCheck();\n\t\t\tthis.cdr.markForCheck();\n\t\t} );\n\t}\n\t\n\tonChange = ( _: any ) => {\n\t};\n\tonTouched = () => {\n\t};\n\t\n\tngDoCheck(): void {\n\t\tthis.runCheck();\n\t}\n\t\n\tngOnDestroy() {\n\t\tif ( this.changeTO )\n\t\t\tclearTimeout( this.changeTO );\n\t\t\n\t\tthis.stateChanges.complete();\n\t\tthis.focusMonitor.stopMonitoring( this._elementRef );\n\t}\n\t\n\t@Input()\n\tset field( value: XiriFormField ) {\n\t\tthis._field = value;\n\t\t\n\t\tif ( value.min )\n\t\t\tthis.min = value.min;\n\t\tif ( value.max )\n\t\t\tthis.max = value.max;\n\t\t\n\t\tthis.required = coerceBooleanProperty( value.required );\n\t\tthis.disabled = coerceBooleanProperty( value.disabled );\n\t\tthis.disabled ? this.parts.disable() : this.parts.enable();\n\t\t\n\t\tthis.stateChanges.next();\n\t}\n\t\n\tget field(): XiriFormField {\n\t\treturn this._field;\n\t}\n\t\n\t@Input()\n\tget value(): [ number, number, number ] {\n\t\t\n\t\tconst { value: { voll, volw, volh } } = this.parts;\n\t\t\n\t\tif ( this.errorState )\n\t\t\treturn undefined;\n\t\tif ( voll === null || volw === null || volh === null )\n\t\t\treturn null;\n\t\t\n\t\treturn [ voll, volw, volh ];\n\t}\n\t\n\tset value( input: [ number, number, number ] ) {\n\t\t\n\t\tif ( input === null || input === undefined )\n\t\t\treturn;\n\t\t\n\t\tthis.parts.setValue( {\n\t\t\t voll: input[ 0 ],\n\t\t\t volw: input[ 1 ],\n\t\t\t volh: input[ 2 ],\n\t\t } );\n\t\t\n\t\tthis.changeValue( this.value );\n\t}\n\t\n\tprivate runCheck(): void {\n\t\t\n\t\tif ( !this.ngControl )\n\t\t\treturn;\n\t\t\n\t\tconst val = this.value;\n\t\tif ( val === undefined || val === null || this._lastValue === null || this._lastValue === undefined ) {\n\t\t\tif ( this._lastValue === val )\n\t\t\t\tthis.stateChanges.next();\n\t\t\telse\n\t\t\t\tthis.changeValue( val );\n\t\t} else if ( val[ 0 ] ==\n\t\t this._lastValue[ 0 ] &&\n\t\t val[ 1 ] ==\n\t\t this._lastValue[ 1 ] &&\n\t\t val[ 2 ] ==\n\t\t this._lastValue[ 2 ] )\n\t\t\tthis.stateChanges.next();\n\t\telse\n\t\t\tthis.changeValue( val );\n\t}\n\t\n\tprivate changeTO = null;\n\t\n\tprivate changeValue( val ) {\n\t\t\n\t\tthis._lastValue = val;\n\t\tif ( this.changeTO )\n\t\t\tclearTimeout( this.changeTO );\n\t\t\n\t\tthis.changeTO = setTimeout( () => {\n\t\t\tthis.onChange( val );\n\t\t\tthis.stateChanges.next();\n\t\t\tthis.cdr.markForCheck();\n\t\t}, 0 );\n\t}\n\t\n\tget errorState(): boolean {\n\t\treturn this.parts.invalid && this.ngControl.touched;\n\t}\n\t\n\tpublic getErrorMessage(): string {\n\t\t\n\t\tlet err1 = this.parts.get( 'voll' ).errors;\n\t\tlet err2 = this.parts.get( 'volw' ).errors;\n\t\tlet err3 = this.parts.get( 'volh' ).errors;\n\t\t\n\t\treturn 'error';\n\t}\n\t\n\tget empty() {\n\t\treturn this.value === null;\n\t}\n\t\n\twriteValue( value: [ number, number, number ] ): void {\n\t\tthis.value = value;\n\t}\n\t\n\tregisterOnChange( fn: any ): void {\n\t\tthis.onChange = fn;\n\t}\n\t\n\tregisterOnTouched( fn: any ): void {\n\t\tthis.onTouched = fn;\n\t}\n\t\n\tsetDisabledState( isDisabled: boolean ): void {\n\t\tthis.disabled = isDisabled;\n\t}\n\t\n\tsetDescribedByIds( ids: string[] ) {\n\t\tthis.describedBy = ids.join( ' ' );\n\t}\n\t\n\tonContainerClick( event: MouseEvent ): void {\n\t}\n}\n","<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>","import { inject, Injectable } from '@angular/core';\nimport { DateAdapter } from \"@angular/material/core\";\nimport { format, fromUnixTime, Locale, transpose } from 'date-fns';\nimport { tz } from \"@date-fns/tz\";\n\n\n@Injectable( {\n\t providedIn: 'root'\n } )\nexport class XiriDateService {\n\t\n\tprivate currentTimezone: string = 'Europe/Vienna';\n\tprivate dateAdapter: DateAdapter<any> = inject( DateAdapter );\n\t\n\tpublic setTimezone( tz: string ) {\n\t\t\n\t\tthis.currentTimezone = tz;\n\t}\n\t\n\tpublic setLocale( localeString: string, locale: Locale ) {\n\t\t\n\t\tthis.dateAdapter.setLocale( locale );\n\t}\n\t\n\tpublic unixToLocal( stime: number ): Date | null {\n\t\t\n\t\tif ( stime === null || stime === undefined )\n\t\t\treturn null;\n\t\t\n\t\treturn fromUnixTime( stime, { in: tz( this.currentTimezone ) } );\n\t}\n\t\n\tpublic unixToStringDateTime( stime: number ): string {\n\t\t\n\t\treturn format( this.unixToLocal( stime ), 'yyyy-MM-dd HH:mm' );\n\t}\n\t\n\tpublic unixToStringDate( stime: number ): string {\n\t\t\n\t\treturn format( this.unixToLocal( stime ), 'd. LLL.' );\n\t}\n\t\n\tpublic unixToStringDateYear( stime: number ): string {\n\t\t\n\t\treturn format( this.unixToLocal( stime ), 'd. LLL. yy' );\n\t}\n\t\n\tpublic dateToUnix( date: Date ): number {\n\t\t\n\t\treturn Math.floor( transpose( date, tz( this.currentTimezone ) ).getTime() / 1000 );\n\t}\n}\n","import {\n\tafterRenderEffect,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tinject,\n\tInput,\n\tnumberAttribute,\n\tOnDestroy,\n\tOnInit,\n\toutput,\n\tsignal\n} from \"@angular/core\";\nimport {\n\tAbstractControl,\n\tControlValueAccessor,\n\tFormGroupDirective,\n\tNgControl,\n\tNgForm,\n\tValidators\n} from \"@angular/forms\";\nimport { MatFormFieldControl } from \"@angular/material/form-field\";\nimport { Subject, Subscription } from \"rxjs\";\nimport { _ErrorStateTracker, ErrorStateMatcher } from \"@angular/material/core\";\nimport { FocusMonitor } from \"@angular/cdk/a11y\";\n\n\n@Component( {\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriFieldMain\n\t } ],\n\t imports: [],\n\t template: ``\n } )\nexport abstract class XiriFieldMain\n\timplements ControlValueAccessor,\n\t MatFormFieldControl<any>,\n\t OnInit,\n\t OnDestroy {\n\n\tprotected _elementRef = inject<ElementRef<HTMLElement>>( ElementRef );\n\tprotected _changeDetectorRef = inject( ChangeDetectorRef );\n\tprotected _focusMonitor = inject( FocusMonitor );\n\tpublic _defaultErrorStateMatcher = inject( ErrorStateMatcher );\n\tpublic ngControl = inject( NgControl, { self: true, optional: true } );\n\tprivate _parentForm = inject( NgForm, { optional: true } );\n\tprivate _parentFormGroup = inject( FormGroupDirective, { optional: true } );\n\n\treadonly stateChanges: Subject<void> = new Subject<void>();\n\treadonly autofilled: boolean = false;\n\treadonly valueChange = output<any>();\n\n\t_onChange: ( value: any ) => void = () => {\n\t};\n\t_onTouched = () => {\n\t};\n\n\tprotected touched: boolean = false;\n\tprotected _errorStateTracker: _ErrorStateTracker;\n\tprotected _previousControl: AbstractControl | null | undefined;\n\tprotected subs: Subscription = new Subscription();\n\n\tdisableAutomaticLabeling?: boolean;\n\tcontrolType = 'xiri-form-field';\n\n\tprotected constructor() {\n\t\tthis._errorStateTracker = new _ErrorStateTracker(\n\t\t\tthis._defaultErrorStateMatcher,\n\t\t\tthis.ngControl,\n\t\t\tthis._parentFormGroup,\n\t\t\tthis._parentForm,\n\t\t\tthis.stateChanges,\n\t\t);\n\n\t\tafterRenderEffect( () => {\n\t\t\tthis.doCheckLogic();\n\t\t} );\n\t}\n\n\tngOnInit() {\n\t\tthis.subs.add( this._focusMonitor.monitor( this._elementRef, true ).subscribe( origin => {\n\t\t\tthis.focused = !!origin;\n\t\t\tif ( !this.focused ) {\n\t\t\t\tif ( !this.touched ) {\n\t\t\t\t\tthis.ngControl.control.markAsTouched();\n\t\t\t\t\tthis.touched = true;\n\t\t\t\t}\n\t\t\t\tthis.startChangeValue();\n\t\t\t}\n\t\t} ) );\n\n\t\tthis.stateChanges.next();\n\t}\n\n\tngOnDestroy() {\n\t\tthis._focusMonitor.stopMonitoring( this._elementRef );\n\t\tthis.subs.unsubscribe();\n\t\tthis.stateChanges.complete();\n\t}\n\n\tprivate doCheckLogic(): void {\n\t\tconst ngControl = this.ngControl;\n\n\t\tif ( ngControl ) {\n\t\t\tif ( this._previousControl !== ngControl.control ) {\n\t\t\t\tif (\n\t\t\t\t\tthis._previousControl !== undefined &&\n\t\t\t\t\tngControl.disabled !== null &&\n\t\t\t\t\tngControl.disabled !== this.disabled\n\t\t\t\t) {\n\t\t\t\t\tthis.disabled = ngControl.disabled;\n\t\t\t\t}\n\n\t\t\t\tthis._previousControl = ngControl.control;\n\t\t\t}\n\n\t\t\tthis.updateErrorState();\n\n\t\t\tif ( ngControl.touched != this.touched ) {\n\t\t\t\tthis.touched = true;\n\t\t\t\tthis.startChangeValue();\n\t\t\t}\n\t\t}\n\t}\n\n\n\t@Input()\n\tget id(): string {\n\t\treturn this._id;\n\t}\n\n\tset id( value: string ) {\n\t\tthis._id = value;\n\t}\n\n\tprotected _id: string;\n\n\n\t@Input( {\n\t\t transform: ( value: unknown ) => ( value == null ? 0 : numberAttribute( value ) ),\n\t } )\n\ttabIndex: number = 0;\n\n\n\t@Input()\n\tget value(): any {\n\t\treturn this._value;\n\t}\n\n\tset value( value: any ) {\n\t\tthis._value = value;\n\t}\n\n\tprotected abstract startChangeValue(): void;\n\n\tprotected runChangeValue( val: any ) {\n\t\tthis._onTouched();\n\t\tthis._onChange( val );\n\t\tthis.valueChange.emit( val );\n\t\tthis.stateChanges.next();\n\t\tthis._changeDetectorRef.markForCheck();\n\t}\n\n\tprotected _value: any = null;\n\n\tget empty() {\n\t\treturn this._value === null;\n\t}\n\n\t@Input( { transform: booleanAttribute } )\n\tget disabled(): boolean {\n\t\treturn this._disabled();\n\t}\n\n\tset disabled( value: boolean ) {\n\t\tthis._disabled.set( value );\n\t\tthis._changeDetectorRef.markForCheck();\n\t\tthis.stateChanges.next();\n\t}\n\n\tprotected _disabled = signal<boolean>( false );\n\n\tsetDisabledState( isDisabled: boolean ): void {\n\t}\n\n\n\t@Input( { transform: booleanAttribute } )\n\tget required(): boolean {\n\t\treturn this._required ?? this.ngControl?.control?.hasValidator( Validators.required ) ?? false;\n\t}\n\n\tset required( value: boolean ) {\n\t\tthis._required = value;\n\t\tthis.stateChanges.next();\n\t}\n\n\tprotected _required: boolean | undefined;\n\n\n\t@Input()\n\tget placeholder(): string {\n\t\treturn this._placeholder;\n\t}\n\n\tset placeholder( value: string ) {\n\t\tthis._placeholder = value;\n\t\tthis.stateChanges.next();\n\t}\n\n\tprotected _placeholder: string;\n\n\tpublic focused: boolean = false;\n\n\twriteValue( value: any ): void {\n\t\tthis._value = value;\n\t}\n\n\tregisterOnChange( fn: ( value: any ) => void ): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched( fn: () => void ): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\n\tsetDescribedByIds( ids: string[] ) {\n\t\tif ( ids.length ) {\n\t\t\tthis._elementRef.nativeElement.setAttribute( 'aria-describedby', ids.join( ' ' ) );\n\t\t} else {\n\t\t\tthis._elementRef.nativeElement.removeAttribute( 'aria-describedby' );\n\t\t}\n\t}\n\n\tget shouldLabelFloat(): boolean {\n\t\treturn !this.empty || this.focused;\n\t}\n\n\tonContainerClick() {\n\t\tif ( !this.focused ) {\n\t\t\tthis.focus();\n\t\t}\n\t}\n\n\tfocus( options?: FocusOptions ): void {\n\t\tthis._elementRef.nativeElement.focus( options );\n\t}\n\n\t@Input()\n\tget errorStateMatcher() {\n\t\treturn this._errorStateTracker.matcher;\n\t}\n\n\tset errorStateMatcher( value: ErrorStateMatcher ) {\n\t\tthis._errorStateTracker.matcher = value;\n\t}\n\n\tget errorState() {\n\t\treturn this._errorStateTracker.errorState;\n\t}\n\n\tset errorState( value: boolean ) {\n\t\tthis._errorStateTracker.errorState = value;\n\t}\n\n\tupdateErrorState() {\n\t\tthis._errorStateTracker.updateErrorState();\n\t}\n\n\tprotected _markAsTouched() {\n\t\tthis._onTouched();\n\t\tthis._changeDetectorRef.markForCheck();\n\t\tthis.stateChanges.next();\n\t}\n\n\t@Input( 'aria-describedby' ) userAriaDescribedBy: string;\n\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tinject,\n\tInput,\n} from '@angular/core';\nimport {\n\tControlValueAccessor,\n\tFormBuilder,\n\tFormControl,\n\tFormGroup,\n\tFormsModule,\n\tReactiveFormsModule\n} from '@angular/forms';\nimport { MatFormFieldControl, MatSuffix } from '@angular/material/form-field';\nimport { XiriDateService } from \"../../services/date.service\";\nimport { XiriFormField } from \"../field.interface\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatIcon } from '@angular/material/icon';\nimport { MatSelect } from '@angular/material/select';\nimport {\n\tMatDatepicker,\n\tMatDatepickerInput,\n\tMatDatepickerToggle,\n\tMatDatepickerToggleIcon\n} from '@angular/material/datepicker';\nimport { MatInput } from '@angular/material/input';\nimport { XiriFieldMain } from \"../helper/fieldmain\";\n\n\ninterface DateTimeRangeForm {\n\tdate: FormControl<Date | null>\n\tfhour: FormControl<number>\n\tfminute: FormControl<number>\n\tthour: FormControl<number>\n\ttminute: FormControl<number>\n}\n\nlet nextUniqueIdXiriDateTimeRange = 0;\n\nclass DateTimeRange {\n\tconstructor( public start: number, public end: number ) {\n\t}\n}\n\n\n@Component( {\n\t selector: 'xiri-date-time-range',\n\t templateUrl: './datetimerange.component.html',\n\t styleUrl: './datetimerange.component.scss',\n\t host: {\n\t\t '[id]': 'id',\n\t\t '(focus)': 'focus()',\n\t },\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriDateTimeRangeComponent\n\t } ],\n\t imports: [\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatInput,\n\t\t MatDatepickerInput,\n\t\t MatSelect,\n\t\t MatOption,\n\t\t MatDatepickerToggle,\n\t\t MatSuffix,\n\t\t MatIcon,\n\t\t MatDatepickerToggleIcon,\n\t\t MatDatepicker,\n\t ]\n } )\nexport class XiriDateTimeRangeComponent extends XiriFieldMain implements ControlValueAccessor,\n MatFormFieldControl<DateTimeRange | null | undefined> {\n\t\n\tprotected _uid = `xiri-date-${ nextUniqueIdXiriDateTimeRange++ }`;\n\t\n\tpublic minDate: Date | null = null;\n\tpublic maxDate: Date | null = null;\n\t\n\tparts: FormGroup<DateTimeRangeForm>;\n\t\n\tprivate _lastValue: DateTimeRange | null = null;\n\t\n\thours = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09',\n\t '10', '11', '12', '13', '14', '15', '16', '17', '18', '19',\n\t '20', '21', '22', '23' ];\n\tminutes = [ '00', '05', '10', '15',\n\t '20', '25', '30', '35',\n\t '40', '45', '50', '55', ];\n\t\n\tprivate dateService = inject( XiriDateService );\n\tprivate fb = inject( FormBuilder );\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._id = this._uid;\n\n\t\tif ( this.ngControl != null )\n\t\t\tthis.ngControl.valueAccessor = this;\n\n\t\tthis.parts = this.fb.group<DateTimeRangeForm>( {\n\t\t\t date: new FormControl<Date | null>( null ),\n\t\t\t fhour: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t\t fminute: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t\t thour: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t\t tminute: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t } );\n\t}\n\t\n\tngOnInit() {\n\t\tthis.subs.add( this.parts.valueChanges.subscribe( () => {\n\t\t\tthis.runCheck();\n\t\t} ) );\n\t\t\n\t\tsuper.ngOnInit();\n\t}\n\t\n\t@Input()\n\tset field( value: XiriFormField ) {\n\t\t\n\t\tif ( value.min )\n\t\t\tthis.minDate = this.dateService.unixToLocal( value.min );\n\t\tif ( value.max )\n\t\t\tthis.maxDate = this.dateService.unixToLocal( value.max );\n\t\t\n\t\tthis.required = !!value.required;\n\t\tthis.disabled = !!value.disabled;\n\t\tthis.disabled ? this.parts.disable() : this.parts.enable();\n\t\t\n\t\tthis.stateChanges.next();\n\t}\n\t\n\t@Input()\n\tget value(): DateTimeRange | null | undefined {\n\t\t\n\t\tconst { date, fhour, fminute, thour, tminute } = this.parts.value;\n\t\t\n\t\tif ( !date && !this.required && !this.parts.valid )\n\t\t\treturn this._disabled() ? null : undefined;\n\t\tif ( !date || fhour === undefined || fminute === undefined || thour === undefined || tminute === undefined )\n\t\t\treturn null;\n\t\t\n\t\tlet to = new Date( date.getTime() );\n\t\t\n\t\tdate.setHours( fhour );\n\t\tdate.setMinutes( fminute );\n\t\t\n\t\tto.setHours( thour );\n\t\tto.setMinutes( tminute );\n\t\t\n\t\tlet unixFrom = this.dateService.dateToUnix( date );\n\t\tlet unixTo = this.dateService.dateToUnix( to );\n\t\t\n\t\tif ( unixFrom > unixTo )\n\t\t\treturn new DateTimeRange( unixTo, unixFrom );\n\t\telse\n\t\t\treturn new DateTimeRange( unixFrom, unixTo );\n\t}\n\t\n\tset value( input: DateTimeRange | null | undefined ) {\n\t\t\n\t\tif ( input === null || input === undefined ) {\n\t\t\tif ( !this.required ) {\n\t\t\t\tthis.parts.setValue( {\n\t\t\t\t\t date: null,\n\t\t\t\t\t fhour: 0,\n\t\t\t\t\t fminute: 0,\n\t\t\t\t\t thour: 0,\n\t\t\t\t\t tminute: 0,\n\t\t\t\t } );\n\t\t\t\t\n\t\t\t\tthis.startChangeValue();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst fromDate = this.dateService.unixToLocal( input.start );\n\t\tconst toDate = this.dateService.unixToLocal( input.end );\n\t\t\n\t\tconst fromHour = fromDate.getHours() ?? 0;\n\t\tconst fromMinute = fromDate.getMinutes() ?? 0;\n\t\tconst toHour = toDate.getHours() ?? 0;\n\t\tconst toMinute = toDate.getMinutes() ?? 0;\n\t\t\n\t\tthis.parts.setValue( {\n\t\t\t date: fromDate,\n\t\t\t fhour: fromHour,\n\t\t\t fminute: fromMinute,\n\t\t\t thour: toHour,\n\t\t\t tminute: toMinute,\n\t\t } );\n\t\t\n\t\tthis.startChangeValue();\n\t}\n\t\n\tprivate runCheck(): void {\n\t\t\n\t\tif ( !this.ngControl )\n\t\t\treturn;\n\t\t\n\t\tconst val = this.value;\n\t\tif ( val === this._lastValue )\n\t\t\tthis.stateChanges.next();\n\t\telse if ( val === null || val === undefined || this._lastValue === null || this._lastValue === undefined )\n\t\t\tthis.changeValue( val );\n\t\telse if ( val.start == this._lastValue.start && val.end == this._lastValue.end )\n\t\t\tthis.stateChanges.next();\n\t\telse\n\t\t\tthis.changeValue( val );\n\t}\n\t\n\tprotected startChangeValue(): void {\n\t\tthis.runChangeValue( this.value );\n\t}\n\t\n\tprivate changeValue( val: DateTimeRange | null | undefined ) {\n\t\t\n\t\tthis._lastValue = val;\n\t\tthis.runChangeValue( val );\n\t}\n\t\n\tget empty() {\n\t\tconst inputElement = this._elementRef.nativeElement.childNodes[ 0 ] as HTMLInputElement;\n\t\treturn this.value === null && inputElement.value === '';\n\t}\n\t\n\twriteValue( value: DateTimeRange | null ): void {\n\t\tthis.value = value;\n\t}\n\t\n\tgetInt( num: string ): number {\n\t\t\n\t\treturn parseInt( num );\n\t}\n}\n","<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>","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tinject,\n\tInput,\n\tOnInit,\n} from '@angular/core';\nimport {\n\tControlValueAccessor,\n\tFormBuilder,\n\tFormControl,\n\tFormGroup,\n\tFormsModule,\n\tReactiveFormsModule\n} from '@angular/forms';\nimport { MatFormFieldControl, MatSuffix } from '@angular/material/form-field';\nimport { XiriDateService } from \"../../services/date.service\";\nimport { XiriFormField } from \"../field.interface\";\nimport { MatIcon } from '@angular/material/icon';\nimport {\n\tMatDatepickerToggle,\n\tMatDatepickerToggleIcon,\n\tMatDateRangeInput,\n\tMatDateRangePicker,\n\tMatEndDate,\n\tMatStartDate\n} from '@angular/material/datepicker';\nimport { XiriFieldMain } from \"../helper/fieldmain\";\n\n\ninterface DateRangeForm {\n\tstart: FormControl<Date | null>\n\tend: FormControl<Date | null>\n}\n\nlet nextUniqueIdXiriDateRange = 0;\n\nclass DateRange {\n\tconstructor( public start: number, public end: number ) {\n\t}\n}\n\n@Component( {\n\t selector: 'xiri-date-range',\n\t templateUrl: './daterange.component.html',\n\t styleUrl: './daterange.component.scss',\n\t host: {\n\t\t '[id]': 'id',\n\t\t '(focus)': 'focus()',\n\t },\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriDateRangeComponent\n\t } ],\n\t imports: [\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatDateRangeInput,\n\t\t MatStartDate,\n\t\t MatEndDate,\n\t\t MatDatepickerToggle,\n\t\t MatSuffix,\n\t\t MatIcon,\n\t\t MatDatepickerToggleIcon,\n\t\t MatDateRangePicker,\n\t ]\n } )\nexport class XiriDateRangeComponent extends XiriFieldMain implements OnInit,\n ControlValueAccessor,\n MatFormFieldControl<DateRange | null | undefined> {\n\t\n\tprotected _uid = `xiri-date-${ nextUniqueIdXiriDateRange++ }`;\n\t\n\tpublic minDate: Date | null = null;\n\tpublic maxDate: Date | null = null;\n\t\n\tparts: FormGroup<DateRangeForm>;\n\t\n\tprivate _lastValue: DateRange | null = null;\n\t\n\tprivate dateService = inject( XiriDateService );\n\tprivate fb = inject( FormBuilder );\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._id = this._uid;\n\n\t\tif ( this.ngControl != null )\n\t\t\tthis.ngControl.valueAccessor = this;\n\n\t\tthis.parts = this.fb.group<DateRangeForm>( {\n\t\t\t start: new FormControl<Date | null>( null ),\n\t\t\t end: new FormControl<Date | null>( null ),\n\t\t } );\n\t}\n\t\n\tngOnInit() {\n\t\t\n\t\tthis.subs.add( this.parts.valueChanges.subscribe( () => {\n\t\t\tthis.runCheck();\n\t\t} ) );\n\t\t\n\t\tsuper.ngOnInit();\n\t}\n\t\n\t@Input()\n\tset field( value: XiriFormField ) {\n\t\t\n\t\tif ( value.min )\n\t\t\tthis.minDate = this.dateService.unixToLocal( value.min );\n\t\tif ( value.max )\n\t\t\tthis.maxDate = this.dateService.unixToLocal( value.max );\n\t\t\n\t\tthis.required = !!value.required;\n\t\tthis.disabled = !!value.disabled;\n\t\tthis.disabled ? this.parts.disable() : this.parts.enable();\n\t\t\n\t\tthis.stateChanges.next();\n\t}\n\t\n\t@Input()\n\tget value(): DateRange | null | undefined {\n\t\t\n\t\tconst { start, end } = this.parts.value;\n\t\t\n\t\tif ( start === null || end === null ) {\n\t\t\tif ( this.required ) {\n\t\t\t\treturn this.parts.valid ? null : this._disabled() ? null : undefined;\n\t\t\t} else {\n\t\t\t\tif ( start === end )\n\t\t\t\t\treturn this.parts.valid ? null : this._disabled() ? null : undefined;\n\t\t\t\telse\n\t\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\t\t\n\t\tlet unixFrom = this.dateService.dateToUnix( start );\n\t\tlet unixTo = this.dateService.dateToUnix( end );\n\t\t\n\t\tif ( unixFrom > unixTo )\n\t\t\treturn new DateRange( unixTo, unixFrom );\n\t\telse\n\t\t\treturn new DateRange( unixFrom, unixTo );\n\t}\n\t\n\tset value( input: DateRange | null | undefined ) {\n\t\t\n\t\tif ( input === null || input === undefined ) {\n\t\t\tif ( !this.required ) {\n\t\t\t\tthis.parts.setValue( {\n\t\t\t\t\t start: null,\n\t\t\t\t\t end: null,\n\t\t\t\t } );\n\t\t\t\t\n\t\t\t\tthis.startChangeValue();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst start = this.dateService.unixToLocal( input?.start );\n\t\tconst end = this.dateService.unixToLocal( input?.end );\n\t\t\n\t\tthis.parts.setValue( {\n\t\t\t start: start,\n\t\t\t end: end,\n\t\t } );\n\t\t\n\t\tthis.startChangeValue();\n\t}\n\t\n\tprivate runCheck(): void {\n\t\t\n\t\tif ( !this.ngControl )\n\t\t\treturn;\n\t\t\n\t\tconst val = this.value;\n\t\tif ( val === this._lastValue )\n\t\t\tthis.stateChanges.next();\n\t\telse if ( val === null || val === undefined || this._lastValue === null || this._lastValue === undefined )\n\t\t\tthis.changeValue( val );\n\t\telse if ( val.start == this._lastValue.start && val.end == this._lastValue.end )\n\t\t\tthis.stateChanges.next();\n\t\telse\n\t\t\tthis.changeValue( val );\n\t}\n\t\n\tprotected startChangeValue(): void {\n\t\tthis.runChangeValue( this.value );\n\t}\n\t\n\tprivate changeValue( val: DateRange | null | undefined ) {\n\t\t\n\t\tthis._lastValue = val;\n\t\tthis.runChangeValue( val );\n\t}\n\t\n\tget empty() {\n\t\tconst inputElement1 = this._elementRef.nativeElement.childNodes[ 0 ].childNodes[ 0 ] as HTMLInputElement;\n\t\tconst inputElement2 = this._elementRef.nativeElement.childNodes[ 0 ].childNodes[ 1 ] as HTMLInputElement;\n\t\treturn this.value === null && inputElement1.value === '' && inputElement2.value === '';\n\t}\n\t\n\twriteValue( value: DateRange | null ): void {\n\t\tthis.value = value;\n\t}\n}\n","<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>","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tinject,\n\tInput,\n\tOnInit,\n} from '@angular/core';\nimport {\n\tControlValueAccessor,\n\tFormControl,\n\tFormGroup,\n\tFormBuilder,\n\tFormsModule,\n\tReactiveFormsModule\n} from '@angular/forms';\nimport { MatFormFieldControl, MatSuffix } from '@angular/material/form-field';\nimport { XiriDateService } from \"../../services/date.service\";\nimport { XiriFormField } from \"../field.interface\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatIcon } from '@angular/material/icon';\nimport { MatSelect } from '@angular/material/select';\nimport {\n\tMatDatepickerInput,\n\tMatDatepickerToggle,\n\tMatDatepickerToggleIcon,\n\tMatDatepicker\n} from '@angular/material/datepicker';\nimport { MatInput } from '@angular/material/input';\nimport { XiriFieldMain } from \"../helper/fieldmain\";\n\ninterface DateForm {\n\tdate: FormControl<Date | null>\n\thour: FormControl<number>\n\tminute: FormControl<number>\n}\n\nlet nextUniqueIdXiriDate = 0;\n\n\n@Component( {\n\t selector: 'xiri-date',\n\t templateUrl: './date.component.html',\n\t styleUrl: './date.component.scss',\n\t host: {\n\t\t '[id]': 'id',\n\t\t '(focus)': 'focus()',\n\t },\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriDateComponent\n\t } ],\n\t imports: [\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatInput,\n\t\t MatDatepickerInput,\n\t\t MatSelect,\n\t\t MatOption,\n\t\t MatDatepickerToggle,\n\t\t MatSuffix,\n\t\t MatIcon,\n\t\t MatDatepickerToggleIcon,\n\t\t MatDatepicker,\n\t ]\n } )\nexport class XiriDateComponent extends XiriFieldMain implements OnInit,\n ControlValueAccessor,\n MatFormFieldControl<number | null | undefined> {\n\t\n\tprotected _uid = `xiri-date-${ nextUniqueIdXiriDate++ }`;\n\n\tpublic minDate: Date | null = null;\n\tpublic maxDate: Date | null = null;\n\n\tparts: FormGroup<DateForm>;\n\n\tprivate _lastValue: number | null = null;\n\tpublic type: string = 'date';\n\t\n\t\n\thours = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09',\n\t '10', '11', '12', '13', '14', '15', '16', '17', '18', '19',\n\t '20', '21', '22', '23' ];\n\tminutes = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09',\n\t '10', '11', '12', '13', '14', '15', '16', '17', '18', '19',\n\t '20', '21', '22', '23', '24', '25', '26', '27', '28', '29',\n\t '30', '31', '32', '33', '34', '35', '36', '37', '38', '39',\n\t '40', '41', '42', '43', '44', '45', '46', '47', '48', '49',\n\t '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', ];\n\t\n\tprivate dateService = inject( XiriDateService );\n\tprivate fb = inject( FormBuilder );\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._id = this._uid;\n\n\t\tif ( this.ngControl != null )\n\t\t\tthis.ngControl.valueAccessor = this;\n\n\t\tthis.parts = this.fb.group<DateForm>( {\n\t\t\t date: new FormControl<Date | null>( null ),\n\t\t\t hour: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t\t minute: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t } );\n\t}\n\t\n\tngOnInit() {\n\t\t\n\t\tthis.subs.add( this.parts.valueChanges.subscribe( () => {\n\t\t\tthis.runCheck();\n\t\t} ) );\n\t\t\n\t\tsuper.ngOnInit();\n\t}\n\t\n\t@Input()\n\tset field( value: XiriFormField ) {\n\t\t\n\t\tthis.type = value.subtype ? value.subtype : 'date';\n\t\t\n\t\tif ( value.min )\n\t\t\tthis.minDate = this.dateService.unixToLocal( value.min );\n\t\tif ( value.max )\n\t\t\tthis.maxDate = this.dateService.unixToLocal( value.max );\n\t\t\n\t\tthis.required = !!value.required;\n\t\tthis.disabled = !!value.disabled;\n\t\tthis.disabled ? this.parts.disable() : this.parts.enable();\n\t\t\n\t\tthis.stateChanges.next();\n\t}\n\t\n\t@Input()\n\tget value(): number | null | undefined {\n\t\t\n\t\tconst { date, hour, minute } = this.parts.value;\n\t\t\n\t\tif ( !date && !this.required && !this.parts.valid )\n\t\t\treturn this._disabled() ? null : undefined;\n\t\tif ( !date || hour === undefined || minute === undefined )\n\t\t\treturn null;\n\t\t\n\t\tdate.setHours( hour );\n\t\tdate.setMinutes( minute );\n\t\t\n\t\treturn this.dateService.dateToUnix( date );\n\t}\n\t\n\tset value( input: number | null | undefined ) {\n\n\t\tif ( input === null || input === undefined ) {\n\t\t\tif ( !this.required ) {\n\t\t\t\tthis.parts.setValue( {\n\t\t\t\t\t date: null,\n\t\t\t\t\t hour: 0,\n\t\t\t\t\t minute: 0,\n\t\t\t\t } );\n\n\t\t\t\tthis.startChangeValue();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst current = this.dateService.unixToLocal( input );\n\t\tconst hour = current?.getHours() ?? 0;\n\t\tconst minute = current?.getMinutes() ?? 0;\n\n\t\tthis.parts.setValue( {\n\t\t\t date: current,\n\t\t\t hour: hour,\n\t\t\t minute: minute,\n\t\t } );\n\n\t\tthis.startChangeValue();\n\t}\n\t\n\tprivate runCheck(): void {\n\t\t\n\t\tif ( !this.ngControl )\n\t\t\treturn;\n\t\t\n\t\tconst val = this.value;\n\t\tif ( val === this._lastValue )\n\t\t\tthis.stateChanges.next();\n\t\telse\n\t\t\tthis.changeValue( val );\n\t}\n\t\n\tprotected startChangeValue(): void {\n\t\tthis.runChangeValue( this.value );\n\t}\n\t\n\tprivate changeValue( val: number | null | undefined ) {\n\t\t\n\t\tthis._lastValue = val;\n\t\tthis.runChangeValue( val );\n\t}\n\t\n\toverride get empty() {\n\t\tconst inputElement = this._elementRef.nativeElement.childNodes[ 0 ] as HTMLInputElement;\n\t\treturn this.value === null && inputElement.value === '';\n\t}\n\t\n\toverride writeValue( value: number | null ): void {\n\t\tthis.value = value;\n\t}\n}\n","<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>","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tinject,\n\tInput,\n\tOnInit,\n\tViewChild,\n} from '@angular/core';\nimport {\n\tControlValueAccessor,\n\tFormControl,\n\tFormsModule,\n\tReactiveFormsModule\n} from '@angular/forms';\nimport { MatFormFieldControl, MatSuffix } from '@angular/material/form-field';\nimport { MAT_DATE_FORMATS } from '@angular/material/core';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n\tMatDatepicker,\n\tMatDatepickerInput,\n\tMatDatepickerToggle,\n\tMatDatepickerToggleIcon\n} from '@angular/material/datepicker';\nimport { MatInput } from '@angular/material/input';\nimport { XiriDateService } from '../../services/date.service';\nimport { XiriFormField } from '../field.interface';\nimport { XiriFieldMain } from '../helper/fieldmain';\n\nlet nextUniqueIdXiriYearMonth = 0;\n\nexport const XIRI_YEAR_MONTH_FORMATS = {\n\tparse: { dateInput: 'MM.yyyy' },\n\tdisplay: {\n\t\tdateInput: 'MM.yyyy',\n\t\tmonthYearLabel: 'MMM yyyy',\n\t\tdateA11yLabel: 'LL',\n\t\tmonthYearA11yLabel: 'MMMM yyyy',\n\t},\n};\n\n@Component( {\n\t selector: 'xiri-yearmonth',\n\t templateUrl: './yearmonth.component.html',\n\t styleUrl: './yearmonth.component.scss',\n\t host: {\n\t\t '[id]': 'id',\n\t\t '(focus)': 'focus()',\n\t },\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [\n\t\t { provide: MatFormFieldControl, useExisting: XiriYearMonthComponent },\n\t\t { provide: MAT_DATE_FORMATS, useValue: XIRI_YEAR_MONTH_FORMATS },\n\t ],\n\t imports: [\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatInput,\n\t\t MatDatepickerInput,\n\t\t MatDatepickerToggle,\n\t\t MatSuffix,\n\t\t MatIcon,\n\t\t MatDatepickerToggleIcon,\n\t\t MatDatepicker,\n\t ]\n } )\nexport class XiriYearMonthComponent extends XiriFieldMain implements OnInit,\n ControlValueAccessor,\n MatFormFieldControl<number | null | undefined> {\n\n\tprotected _uid = `xiri-yearmonth-${ nextUniqueIdXiriYearMonth++ }`;\n\n\tpublic minDate: Date | null = null;\n\tpublic maxDate: Date | null = null;\n\n\tdateControl = new FormControl<Date | null>( null );\n\n\t@ViewChild( 'picker' ) picker?: MatDatepicker<Date>;\n\n\tprivate _lastValue: number | null = null;\n\tpublic type: string = 'yearmonth';\n\n\tprivate dateService = inject( XiriDateService );\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis._id = this._uid;\n\n\t\tif ( this.ngControl != null )\n\t\t\tthis.ngControl.valueAccessor = this;\n\t}\n\n\tngOnInit() {\n\t\tthis.subs.add( this.dateControl.valueChanges.subscribe( () => {\n\t\t\tthis.runCheck();\n\t\t} ) );\n\n\t\tsuper.ngOnInit();\n\t}\n\n\t@Input()\n\tset field( value: XiriFormField ) {\n\t\tif ( value.min )\n\t\t\tthis.minDate = this.dateService.unixToLocal( value.min );\n\t\tif ( value.max )\n\t\t\tthis.maxDate = this.dateService.unixToLocal( value.max );\n\n\t\tthis.required = !!value.required;\n\t\tthis.disabled = !!value.disabled;\n\t\tthis.disabled ? this.dateControl.disable() : this.dateControl.enable();\n\n\t\tthis.stateChanges.next();\n\t}\n\n\t@Input()\n\tget value(): number | null | undefined {\n\t\tconst date = this.dateControl.value;\n\n\t\tif ( !date && !this.required && !this.dateControl.valid )\n\t\t\treturn this._disabled() ? null : undefined;\n\t\tif ( !date )\n\t\t\treturn null;\n\n\t\treturn this.dateService.dateToUnix( date );\n\t}\n\n\tset value( input: number | null | undefined ) {\n\t\tif ( input === null || input === undefined ) {\n\t\t\tif ( !this.required ) {\n\t\t\t\tthis.dateControl.setValue( null );\n\t\t\t\tthis.startChangeValue();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst current = this.dateService.unixToLocal( input );\n\n\t\tif ( current ) {\n\t\t\tcurrent.setDate( 1 );\n\t\t\tcurrent.setHours( 0, 0, 0, 0 );\n\t\t}\n\n\t\tthis.dateControl.setValue( current );\n\t\tthis.startChangeValue();\n\t}\n\n\tonYearMonthSelected( date: Date ): void {\n\t\tconst normalized = new Date( date.getFullYear(), date.getMonth(), 1, 0, 0, 0, 0 );\n\t\tthis.dateControl.setValue( normalized );\n\t\tthis.picker?.close();\n\t}\n\n\tprivate runCheck(): void {\n\t\tif ( !this.ngControl )\n\t\t\treturn;\n\n\t\tconst val = this.value;\n\t\tif ( val === this._lastValue )\n\t\t\tthis.stateChanges.next();\n\t\telse\n\t\t\tthis.changeValue( val );\n\t}\n\n\tprotected startChangeValue(): void {\n\t\tthis.runChangeValue( this.value );\n\t}\n\n\tprivate changeValue( val: number | null | undefined ) {\n\t\tthis._lastValue = val;\n\t\tthis.runChangeValue( val );\n\t}\n\n\toverride get empty() {\n\t\treturn this.dateControl.value === null;\n\t}\n\n\toverride writeValue( value: number | null ): void {\n\t\tthis.value = value;\n\t}\n}\n","<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","import { inject, Injectable } from '@angular/core';\nimport { MatSnackBar, MatSnackBarConfig, MatSnackBarRef, TextOnlySnackBar } from '@angular/material/snack-bar';\n\nexport type XiriSnackbarType = 'success' | 'error' | 'info' | 'warning';\n\n@Injectable( {\n\t providedIn: 'root',\n } )\nexport class XiriSnackbarService {\n\n\tprivate snackbar = inject( MatSnackBar );\n\n\tsuccess( message: string, duration = 3000, action?: string ): MatSnackBarRef<TextOnlySnackBar> {\n\t\treturn this.show( message, 'success', duration, action );\n\t}\n\n\terror( message: string, duration = 5000, action?: string ): MatSnackBarRef<TextOnlySnackBar> {\n\t\treturn this.show( message, 'error', duration, action );\n\t}\n\n\tinfo( message: string, duration = 3000, action?: string ): MatSnackBarRef<TextOnlySnackBar> {\n\t\treturn this.show( message, 'info', duration, action );\n\t}\n\n\twarning( message: string, duration = 4000, action?: string ): MatSnackBarRef<TextOnlySnackBar> {\n\t\treturn this.show( message, 'warning', duration, action );\n\t}\n\n\thandleResponse( response: any ): boolean {\n\t\tif ( !response?.message || !response?.messageType ) return false;\n\t\tswitch ( response.messageType as XiriSnackbarType ) {\n\t\t\tcase 'success': this.success( response.message ); break;\n\t\t\tcase 'error': this.error( response.message ); break;\n\t\t\tcase 'info': this.info( response.message ); break;\n\t\t\tcase 'warning': this.warning( response.message ); break;\n\t\t\tdefault: this.info( response.message );\n\t\t}\n\t\treturn true;\n\t}\n\n\tprivate show( message: string, type: XiriSnackbarType, duration: number, action?: string ): MatSnackBarRef<TextOnlySnackBar> {\n\t\tconst config: MatSnackBarConfig = {\n\t\t\tduration: duration,\n\t\t\thorizontalPosition: 'center',\n\t\t\tverticalPosition: 'bottom',\n\t\t\tpanelClass: [ `xiri-snackbar-${ type }` ],\n\t\t\tpoliteness: type === 'error' ? 'assertive' : 'polite',\n\t\t};\n\n\t\treturn this.snackbar.open( message, action || undefined, config );\n\t}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, tap } from 'rxjs';\nimport { XiriSnackbarService } from './snackbar.service';\n\nexport class XiriDataServiceConfig {\n\tapi = '/api/';\n}\n\nexport const defaultXiriDataServiceConfig: XiriDataServiceConfig = {\n\tapi: '/api/',\n};\n\n@Injectable( {\n\t providedIn: 'root',\n } )\nexport class XiriDataService {\n\t\n\tprivate http: HttpClient = inject( HttpClient );\n\tprivate config: XiriDataServiceConfig = inject( XiriDataServiceConfig );\n\tprivate snackbar = inject( XiriSnackbarService );\n\n\tpublic get( url: string ): Observable<Object> {\n\t\treturn this.http.get( this.config.api + url ).pipe(\n\t\t\ttap( ( res: any ) => this.snackbar.handleResponse( res ) )\n\t\t);\n\t}\n\n\tpublic post( url: string, data: any ): Observable<any> {\n\t\treturn this.http.post( this.config.api + url, data ).pipe(\n\t\t\ttap( ( res: any ) => this.snackbar.handleResponse( res ) )\n\t\t);\n\t}\n\t\n\tpublic postFile( url: string, data: any ): Observable<any> {\n\t\treturn this.http.post( this.config.api + url, data, { responseType: 'blob' } );\n\t}\n\t\n\tpublic postFileResponse( url: string, data: any ): Observable<any> {\n\t\treturn this.http.post( this.config.api + url, data, { observe: 'response', responseType: 'blob' } );\n\t}\n\t\n\t/** @deprecated Use postFileResponse() + XiriDownloadService.download() instead */\n\tpublic postDownload( url: string, data: any ) {\n\t\tconsole.warn( 'XiriDataService.postDownload() is deprecated. Use postFileResponse() + XiriDownloadService.download() instead.' );\n\t\tconst downForm = <any> document.createElement( 'form' );\n\t\tdownForm.target = '_blank';\n\t\tdownForm.method = 'POST';\n\t\tdownForm.action = url;\n\t\t\n\t\tconst input = document.createElement( 'input' );\n\t\tinput.type = 'hidden';\n\t\tinput.name = 'data';\n\t\tinput.setAttribute( 'value', JSON.stringify( data ) );\n\t\tdownForm.appendChild( input );\n\t\t\n\t\tdocument.body.appendChild( downForm );\n\t\tdownForm.submit();\n\t}\n\t\n\tpublic getConfigApi(): string {\n\t\treturn this.config.api;\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tDestroyRef,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tOnInit,\n\toutput,\n\tviewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { debounceTime, distinctUntilChanged, Subject } from \"rxjs\";\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { FormsModule } from '@angular/forms';\n\n@Component( {\n\t selector: 'xiri-search',\n\t templateUrl: './search.component.html',\n\t styleUrls: [ './search.component.scss' ],\n\t host: {\n\t\t '(document:keydown.escape)': 'onKeydownHandler()'\n\t },\n\t imports: [\n\t\t FormsModule,\n\t\t CdkTrapFocus,\n\t\t MatIconButton,\n\t\t MatIcon,\n\t ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriSearchComponent implements OnInit {\n\n\tchanged = output<string>();\n\tplaceholder = input<string>( '' );\n\n\topen = input<boolean>( false );\n\treset = input<number>( -1 );\n\tescape = input<boolean>( true );\n\tfocus = input<number>( -1 );\n\n\tprivate _search = viewChild<ElementRef>( 'search' );\n\tprivate destroyRef = inject( DestroyRef );\n\tprivate filter: Subject<string> = new Subject<string>();\n\t\n\tpublic _text: string = '';\n\tpublic show: boolean = false;\n\t\n\tconstructor() {\n\t\t\n\t\teffect( () => {\n\t\t\tlet num = this.reset();\n\t\t\tif ( num != -1 ) {\n\t\t\t\tthis.show = this.open();\n\t\t\t\tthis._text = '';\n\t\t\t\tthis.filter.next( this._text );\n\t\t\t}\n\t\t} );\n\t\teffect( () => {\n\t\t\tlet num = this.focus();\n\t\t\tif ( num != -1 ) {\n\t\t\t\tthis.show = true;\n\t\t\t\tthis._search()?.nativeElement.focus();\n\t\t\t}\n\t\t} );\n\t\teffect( () => {\n\t\t\tconst value = this.text();\n\t\t\tif ( value ) {\n\t\t\t\tthis._text = value;\n\t\t\t\tthis.show = true;\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tngOnInit(): void {\n\t\tthis.filter.pipe( debounceTime( 200 ), distinctUntilChanged(), takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe( value => {\n\t\t\t\tthis.changed.emit( value );\n\t\t\t} );\n\t\t\n\t\tif ( this.open() )\n\t\t\tthis.show = true;\n\t}\n\t\n\tonKeydownHandler() {\n\t\t\n\t\tif ( this.escape() && this.show ) {\n\t\t\tthis.show = this.open() ? true : !this.show;\n\t\t\tthis._text = '';\n\t\t\tthis.filter.next( this._text );\n\t\t}\n\t}\n\t\n\ttext = input<string>( '' );\n\t\n\tsearchDo() {\n\t\tthis.filter.next( this._text );\n\t}\n\n\tclick(): void {\n\t\tthis.show = this.open() ? true : !this.show;\n\t\tthis._text = '';\n\t\t\n\t\tthis.filter.next( this._text );\n\t}\n\t\n}\n","<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ßen' : 'Suche öffnen'\">\n\t\t<mat-icon>{{ show ? 'close' : 'search' }}</mat-icon>\n\t</button>\n</div>","import {\n\tAfterViewInit,\n\tChangeDetectionStrategy,\n\tComponent,\n\tinject,\n\tInput,\n\tsignal,\n\tviewChild\n} from '@angular/core';\nimport { MatFormFieldControl } from \"@angular/material/form-field\";\nimport { ControlValueAccessor } from \"@angular/forms\";\nimport { BehaviorSubject } from \"rxjs\";\nimport {\n\tMatTree,\n\tMatTreeNestedDataSource,\n\tMatTreeNode, MatTreeNodeDef,\n\tMatTreeNodePadding,\n\tMatTreeNodeToggle\n} from \"@angular/material/tree\";\nimport { SelectionModel } from \"@angular/cdk/collections\";\nimport { XiriDataService } from \"../../services/data.service\";\nimport { XiriSnackbarService } from '../../services/snackbar.service';\nimport { XiriFormField } from \"../field.interface\";\nimport { MatIcon } from '@angular/material/icon';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { XiriSearchComponent } from '../../search/search.component';\nimport { XiriFieldMain } from \"../helper/fieldmain\";\n\n\nclass XiriTreeselectTreeNode {\n\tchildren: XiriTreeselectTreeNode[];\n\tid: number;\n\tname: string;\n\thidden: boolean;\n\tstate: number;\n\tparent: XiriTreeselectTreeNode;\n}\n\nlet nextUniqueIdXiriTreeselect = 0;\n\n@Component( {\n\t selector: 'xiri-treeselect',\n\t templateUrl: './treeselect.component.html',\n\t styleUrl: './treeselect.component.scss',\n\t host: {\n\t\t '[id]': 'id',\n\t\t '(focus)': 'focus()',\n\t },\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriTreeselectComponent\n\t } ],\n\t imports: [\n\t\t XiriSearchComponent,\n\t\t MatProgressSpinner,\n\t\t MatTree,\n\t\t MatTreeNode,\n\t\t MatTreeNodeToggle,\n\t\t MatTreeNodePadding,\n\t\t MatIconButton,\n\t\t MatCheckbox,\n\t\t MatIcon,\n\t\t MatTreeNodeDef,\n\t ]\n } )\nexport class XiriTreeselectComponent extends XiriFieldMain implements ControlValueAccessor,\n MatFormFieldControl<number[] | undefined>,\n AfterViewInit {\n\t\n\tprivate dataService = inject( XiriDataService );\n\tprivate snackbar = inject( XiriSnackbarService );\n\t\n\tprotected _uid = `xiri-treeselect-${ nextUniqueIdXiriTreeselect++ }`;\n\t\n\tpublic loading = signal<boolean>( true );\n\tprivate _field: XiriFormField;\n\t\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._id = this._uid;\n\n\t\tif ( this.ngControl != null )\n\t\t\tthis.ngControl.valueAccessor = this;\n\n\t\tthis.dataSource = new MatTreeNestedDataSource();\n\t\tthis.dataSource.data = [];\n\t}\n\t\n\tpublic ngAfterViewInit(): void {\n\t\t\n\t\tthis.subs.add( this.dataChange.subscribe( data => {\n\t\t\t\n\t\t\tif ( data === null )\n\t\t\t\treturn;\n\t\t\t\n\t\t\tthis.dataSource.data = data;\n\t\t\t// this.tree().expandAll();\n\t\t\t\n\t\t\tthis._input.forEach( x => {\n\t\t\t\tthis.dataSource.data.forEach( d => {\n\t\t\t\t\tconst node = this.findNodeById( x, d );\n\t\t\t\t\tif ( node )\n\t\t\t\t\t\tthis.treeItemSelectionToggle( node );\n\t\t\t\t} );\n\t\t\t} );\n\t\t\t\n\t\t\tthis.loading.set( false );\n\t\t} ) );\n\t}\n\t\n\t@Input()\n\tset field( value: XiriFormField ) {\n\t\t\n\t\tthis._field = value;\n\t\t\n\t\tthis.required = !!value.required;\n\t\tthis.disabled = !!value.disabled;\n\t\t\n\t\tif ( value.url ) {\n\t\t\tthis.dataService.get( value.url ).subscribe(\n\t\t\t\t{\n\t\t\t\t\tnext: ( data: any ) => {\n\t\t\t\t\t\tlet groups: any[];\n\t\t\t\t\t\tif ( data.data === undefined || data.data === null || data.data.length === 0 )\n\t\t\t\t\t\t\tgroups = [];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tgroups = [ data.data ];\n\t\t\t\t\t\tthis.buildTree( groups, null );\n\t\t\t\t\t\tthis.dataChange.next( groups );\n\t\t\t\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t\t\t\t},\n\t\t\t\t\terror: ( err ) => {\n\t\t\t\t\t\tconsole.log( 'error database-tree', err );\n\t\t\t\t\t\tthis.snackbar.error( 'Unknown Error! Please try again later' );\n\t\t\t\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t} else {\n\t\t\tlet groups = value.list;\n\t\t\tif ( !groups || groups.length === 0 )\n\t\t\t\tgroups = [];\n\t\t\t\n\t\t\tthis.buildTree( groups, null );\n\t\t\tthis.dataChange.next( <any> groups );\n\t\t}\n\t\t\n\t\tthis.stateChanges.next();\n\t}\n\t\n\tget field(): XiriFormField {\n\t\treturn this._field;\n\t}\n\t\n\tprivate buildTree( input: any, parent: XiriTreeselectTreeNode ) {\n\t\tfor ( let i = 0; i != input.length; i++ ) {\n\t\t\tinput[ i ].parent = parent;\n\t\t\tinput[ i ].state = 0;\n\t\t\tif ( input[ i ].children ) {\n\t\t\t\tthis.buildTree( input[ i ].children, input[ i ] );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t@Input()\n\tget value(): number[] | undefined {\n\t\t\n\t\tconst result = this.checklistSelection.selected.filter( x => x.state === 1 && !x.children ).map( x => x.id );\n\t\tif ( this.required && result.length == 0 )\n\t\t\treturn this._disabled() ? null : undefined;\n\t\t\n\t\treturn result;\n\t}\n\t\n\tprivate _input: number[] = [];\n\t\n\tset value( input: number[] | undefined ) {\n\t\t\n\t\tif ( input === null || input === undefined )\n\t\t\tinput = [];\n\t\t\n\t\tthis._input = input;\n\t\tthis.startChangeValue();\n\t}\n\t\n\tprivate runCheck(): void {\n\t\t\n\t\tif ( !this.ngControl )\n\t\t\treturn;\n\t\t\n\t\tconst val = this.value;\n\t\tthis.runChangeValue( val );\n\t}\n\t\n\tprotected startChangeValue(): void {\n\t\tthis.runChangeValue( this.value );\n\t}\n\t\n\tget empty() {\n\t\treturn this.value === undefined || this.value.length === 0;\n\t}\n\t\n\twriteValue( value: number[] ): void {\n\t\tthis.value = value;\n\t}\n\t\n\t/**\n\t * Tree\n\t */\n\tpublic tree = viewChild.required<MatTree<XiriTreeselectTreeNode>>( MatTree );\n\tprivate dataChange = new BehaviorSubject<XiriTreeselectTreeNode[]>( null );\n\tpublic dataSource: MatTreeNestedDataSource<XiriTreeselectTreeNode>;\n\tprivate checklistSelection = new SelectionModel<XiriTreeselectTreeNode>( true /* multiple */ );\n\t\n\tgetChildren = ( node: XiriTreeselectTreeNode ): XiriTreeselectTreeNode[] => node.children;\n\t\n\thasChild = ( _: number, node: XiriTreeselectTreeNode ) => !!node.children && node.children.length != 0;\n\t\n\ttreeItemSelectionToggle( node: XiriTreeselectTreeNode ): void {\n\t\t\n\t\tthis.checklistSelection.toggle( node );\n\t\tconst state = this.checklistSelection.isSelected( node );\n\t\t\n\t\tnode.state = state ? 1 : 0;\n\t\tif ( node.children ) {\n\t\t\tfor ( let i = 0; i != node.children.length; i++ ) {\n\t\t\t\tthis.treeItemSelectionChildren( node.children[ i ], state );\n\t\t\t}\n\t\t}\n\t\t\n\t\tif ( node.parent )\n\t\t\tthis.treeItemSelectionParent( node.parent );\n\t\t\n\t\tthis.runCheck();\n\t}\n\t\n\tprivate treeItemSelectionParent( node: XiriTreeselectTreeNode ): void {\n\t\t\n\t\tconst result0 = node.children.filter( child => child.state === 0 );\n\t\tconst result1 = node.children.filter( child => child.state === 1 );\n\t\t\n\t\tif ( result1.length === node.children.length ) {\n\t\t\tthis.checklistSelection.select( node );\n\t\t\tnode.state = 1;\n\t\t} else if ( result0.length === node.children.length ) {\n\t\t\tthis.checklistSelection.deselect( node );\n\t\t\tnode.state = 0;\n\t\t} else {\n\t\t\tthis.checklistSelection.deselect( node );\n\t\t\tnode.state = 2;\n\t\t}\n\t\t\n\t\tif ( node.parent )\n\t\t\tthis.treeItemSelectionParent( node.parent );\n\t}\n\t\n\tprivate treeItemSelectionChildren( node: XiriTreeselectTreeNode, state: boolean ): void {\n\t\t\n\t\tif ( state )\n\t\t\tthis.checklistSelection.select( node );\n\t\telse\n\t\t\tthis.checklistSelection.deselect( node );\n\t\t\n\t\tnode.state = state ? 1 : 0;\n\t\t\n\t\tif ( node.children ) {\n\t\t\tfor ( let i = 0; i != node.children.length; i++ ) {\n\t\t\t\tthis.treeItemSelectionChildren( node.children[ i ], state );\n\t\t\t}\n\t\t}\n\t}\n\t\n\tpublic searchDo( value: string ) {\n\t\t\n\t\tif ( value && value.length )\n\t\t\tthis.dataSource.data.forEach( x => this.filterByName( x, value.toLowerCase(), false ) );\n\t\telse\n\t\t\tthis.dataSource.data.forEach( x => this.filterClear( x ) );\n\t}\n\t\n\tprivate filterByName( node: XiriTreeselectTreeNode, search: string, value: boolean ): boolean {\n\t\t\n\t\tif ( value ) {\n\t\t\tnode.hidden = false;\n\t\t\tif ( node.children ) {\n\t\t\t\tnode.children.forEach( x => this.filterByName( x, search, true ) );\n\t\t\t\t\n\t\t\t\tif ( search.length > 3 )\n\t\t\t\t\tthis.tree().expand( node );\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\tif ( node.name.toLowerCase().indexOf( search ) === -1 ) {\n\t\t\tnode.hidden = true;\n\t\t\tif ( node.children ) {\n\t\t\t\tconst ret = node.children.filter( x => this.filterByName( x, search, false ) );\n\t\t\t\tif ( ret.length ) {\n\t\t\t\t\tthis.tree().expand( node );\n\t\t\t\t\tnode.hidden = false\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn !node.hidden;\n\t\t} else {\n\t\t\tnode.hidden = false;\n\t\t\tif ( node.children ) {\n\t\t\t\tnode.children.forEach( x => this.filterByName( x, search, true ) );\n\t\t\t\t\n\t\t\t\tif ( search.length > 3 )\n\t\t\t\t\tthis.tree().expand( node );\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tprivate filterClear( node: XiriTreeselectTreeNode ): void {\n\t\t\n\t\tnode.hidden = false;\n\t\tif ( node.children ) {\n\t\t\tnode.children.forEach( x => this.filterClear( x ) );\n\t\t}\n\t}\n\t\n\tprivate findNodeById( id: any, node: XiriTreeselectTreeNode ): XiriTreeselectTreeNode {\n\t\t\n\t\tif ( node.id == id )\n\t\t\treturn node;\n\t\t\n\t\tif ( node.children ) {\n\t\t\tfor ( let i = 0; i != node.children.length; i++ ) {\n\t\t\t\tconst result = this.findNodeById( id, node.children[ i ] );\n\t\t\t\tif ( result )\n\t\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn null;\n\t}\n}\n","<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>","import { ChangeDetectorRef, Directive, effect, inject, input } from \"@angular/core\";\nimport { UntypedFormControl } from \"@angular/forms\";\nimport {\n\tcatchError,\n\tdebounceTime,\n\tof,\n\tReplaySubject,\n\tSubject,\n\tswitchMap,\n\ttap\n} from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { XiriFormFieldSelectOption } from \"../field.interface\";\nimport { XiriDataService } from \"../../services/data.service\";\n\nexport type XiriSelectPredicate = <T>( filter: string, element: XiriFormFieldSelectOption ) => boolean;\nexport const DEFAULT_PREDICATE: XiriSelectPredicate = <T>( filter: string,\n el: XiriFormFieldSelectOption ): boolean => el.name.toLowerCase()\n\t .indexOf(\n\t\t filter ) >\n -1;\n\nexport type XiriSelectCompare = <T>( a: XiriFormFieldSelectOption, b: XiriFormFieldSelectOption ) => boolean;\nexport const DEFAULT_COMPARE: XiriSelectCompare = <T>( a: XiriFormFieldSelectOption,\n b: XiriFormFieldSelectOption ) => a && b && a.id === b.id;\n\n@Directive( {\n\t selector: \"[xiriSelect]\",\n\t exportAs: \"xiriSelect\"\n } )\nexport class XiriSelectDirective<T> {\n\tprivate dataService = inject( XiriDataService );\n\tprivate cdr = inject( ChangeDetectorRef );\n\t\n\tget formControl() {\n\t\treturn this._filterFormControl;\n\t}\n\t\n\tget filter() {\n\t\treturn this._filteredValuesSubject.asObservable();\n\t}\n\t\n\t/** control for the MatSelect filter keyword multi-selection */\n\tprivate _filterFormControl: UntypedFormControl = new UntypedFormControl();\n\t\n\t/** list of _allValues filtered by search keyword */\n\tprivate _filteredValuesSubject: ReplaySubject<XiriFormFieldSelectOption[]> = new ReplaySubject<XiriFormFieldSelectOption[]>(\n\t\t1\n\t);\n\t\n\t/** indicate search operation is in progress */\n\tpublic searching = false;\n\t\n\t// @ViewChild('multiSelect', { static: true }) multiSelect: MatSelect;\n\t\n\t/** Subject that emits when the component has been destroyed. */\n\tprotected _onDestroy = new Subject<void>();\n\t\n\t\n\tsearchPredicate = input<XiriSelectPredicate>(DEFAULT_PREDICATE, { alias: 'predicate' });\n\n\tcompareWith = input<XiriSelectCompare>(DEFAULT_COMPARE, { alias: 'compare' });\n\t\n\tserverSideSearch = input<boolean>(false, { alias: 'serverSideSearch' });\n\t\n\tserverUrl = input<string>('', { alias: 'serverUrl' });\n\t\n\tserverParams = input<any>({}, { alias: 'serverParams' });\n\t\n\t/** list of _allValues */\n\tprivate _allValues: XiriFormFieldSelectOption[] = [] as XiriFormFieldSelectOption[];\n\tallValues = input<XiriFormFieldSelectOption[]>([], { alias: 'values' });\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tlet value = this.allValues();\n\t\t\tif ( value === undefined )\n\t\t\t\tvalue = [];\n\n\t\t\tthis._allValues = value;\n\t\t\tthis._filteredValuesSubject.next( this._allValues.slice() );\n\t\t});\n\t}\n\n\tngOnInit() {\n\t\tif ( this.serverSideSearch() ) {\n\t\t\tthis._filterFormControl.valueChanges\n\t\t\t\t.pipe(\n\t\t\t\t\tfilter( search => !!search ),\n\t\t\t\t\ttap( () => this.searching = true ),\n\t\t\t\t\tdebounceTime( 200 ),\n\t\t\t\t\tswitchMap( ( search: string ) => {\n\t\t\t\t\t\treturn this.dataService.post( this.serverUrl(),\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t ...this.serverParams(),\n\t\t\t\t\t\t\t search: search\n\t\t\t\t\t\t } )\n\t\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\t\tcatchError( ( err ) => {\n\t\t\t\t\t\t\t\t\tconsole.log( 'catch 1', err );\n\t\t\t\t\t\t\t\t\treturn of( [] );\n\t\t\t\t\t\t\t\t} ) )\n\t\t\t\t\t} ),\n\t\t\t\t\ttap( ( filteredList ) => {\n\t\t\t\t\t\tthis._filteredValuesSubject.next( this._allValues.slice().concat( filteredList ) )\n\t\t\t\t\t} ),\n\t\t\t\t\ttap( () => {\n\t\t\t\t\t\tthis.searching = false;\n\t\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t\t} ),\n\t\t\t\t\ttakeUntil( this._onDestroy ),\n\t\t\t\t).subscribe();\n\t\t} else {\n\t\t\tthis._filterFormControl.valueChanges\n\t\t\t\t.pipe( takeUntil( this._onDestroy ) )\n\t\t\t\t.subscribe( () => {\n\t\t\t\t\tthis.searching = true;\n\t\t\t\t\tthis.applyFilter();\n\t\t\t\t\tthis.searching = false;\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t} );\n\t\t}\n\n\t}\n\t\n\tngOnDestroy() {\n\t\tthis._onDestroy.next();\n\t\tthis._onDestroy.complete();\n\t}\n\t\n\tprivate applyFilter() {\n\t\tif ( !this._allValues ) {\n\t\t\treturn;\n\t\t}\n\t\t// get the search keyword\n\t\tlet search = this._filterFormControl.value;\n\t\tif ( !search ) {\n\t\t\tthis._filteredValuesSubject.next( this._allValues.slice() );\n\t\t\treturn;\n\t\t} else {\n\t\t\tsearch = search.toLowerCase();\n\t\t}\n\t\t// filter the _allValues\n\t\tthis._filteredValuesSubject.next(\n\t\t\tthis._allValues.filter( el => this.searchPredicate()<T>( search, el ) )\n\t\t);\n\t}\n\t\n\t// [showToggleAllCheckbox]=\"field.multiple\" (toggleAll)=\"xiriSelect.toggleSelectAll($event)\"\n\t/**\n\ttoggleSelectAll(selectAllValue: boolean) {\n\t\tthis._filteredValuesSubject.pipe(take(1), takeUntil(this._onDestroy))\n\t\t\t.subscribe(val => {\n\t\t\t\tif (selectAllValue) {\n\t\t\t\t\tthis._filterFormControl.patchValue(val);\n\t\t\t\t} else {\n\t\t\t\t\tthis._filterFormControl.patchValue([]);\n\t\t\t\t}\n\t\t\t});\n\t}\n\t **/\n}\n","import { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tforwardRef,\n\tinput,\n\tsignal,\n\tviewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete';\nimport { MatChipGrid, MatChipInput, MatChipInputEvent, MatChipRemove, MatChipRow } from '@angular/material/chips';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { XiriFormField, XiriFormFieldSelectOption } from '../field.interface';\nimport { MatOption } from '@angular/material/core';\n\n@Component( {\n\t selector: 'xiri-chips',\n\t templateUrl: './chips.component.html',\n\t styleUrl: './chips.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: NG_VALUE_ACCESSOR,\n\t\t useExisting: forwardRef( () => XiriChipsComponent ),\n\t\t multi: true\n\t } ],\n\t imports: [\n\t\t MatFormField,\n\t\t MatLabel,\n\t\t MatChipGrid,\n\t\t MatChipRow,\n\t\t MatChipRemove,\n\t\t MatChipInput,\n\t\t MatAutocompleteTrigger,\n\t\t MatAutocomplete,\n\t\t MatOption,\n\t\t MatIcon\n\t ]\n } )\nexport class XiriChipsComponent implements ControlValueAccessor {\n\n\tfield = input.required<XiriFormField>();\n\n\tchips = signal<string[]>( [] );\n\tfilteredOptions = signal<XiriFormFieldSelectOption[]>( [] );\n\n\treadonly separatorKeyCodes = [ ENTER, COMMA ] as const;\n\n\tchipInput = viewChild<ElementRef<HTMLInputElement>>( 'chipInput' );\n\n\tprivate onChange: ( value: string[] ) => void = () => {};\n\tprivate onTouched: () => void = () => {};\n\n\twriteValue( value: string[] ): void {\n\t\tthis.chips.set( value || [] );\n\t}\n\n\tregisterOnChange( fn: ( value: string[] ) => void ): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched( fn: () => void ): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tadd( event: MatChipInputEvent ): void {\n\t\tconst value = ( event.value || '' ).trim();\n\t\tif ( !value ) return;\n\n\t\tconst current = [ ...this.chips() ];\n\t\tif ( !current.includes( value ) ) {\n\t\t\tcurrent.push( value );\n\t\t\tthis.chips.set( current );\n\t\t\tthis.onChange( current );\n\t\t}\n\t\tevent.chipInput.clear();\n\t}\n\n\tremove( chip: string ): void {\n\t\tconst current = this.chips().filter( c => c !== chip );\n\t\tthis.chips.set( current );\n\t\tthis.onChange( current );\n\t}\n\n\tselected( event: MatAutocompleteSelectedEvent ): void {\n\t\tconst value = event.option.viewValue;\n\t\tconst current = [ ...this.chips() ];\n\t\tif ( !current.includes( value ) ) {\n\t\t\tcurrent.push( value );\n\t\t\tthis.chips.set( current );\n\t\t\tthis.onChange( current );\n\t\t}\n\t\tif ( this.chipInput() ) {\n\t\t\tthis.chipInput().nativeElement.value = '';\n\t\t}\n\t}\n\n\tfilterOptions( value: string ): void {\n\t\tconst list = this.field().list || [];\n\t\tif ( !value ) {\n\t\t\tthis.filteredOptions.set( list );\n\t\t\treturn;\n\t\t}\n\t\tconst filterValue = value.toLowerCase();\n\t\tthis.filteredOptions.set(\n\t\t\tlist.filter( option => option.name.toLowerCase().includes( filterValue ) )\n\t\t);\n\t}\n\n\tonInputChange( event: Event ): void {\n\t\tconst input = event.target as HTMLInputElement;\n\t\tthis.filterOptions( input.value );\n\t\tthis.onTouched();\n\t}\n\n\tonFocus(): void {\n\t\tthis.filterOptions( '' );\n\t}\n\n\tchipColor( chip: string ): string {\n\t\tconst option = this.field().list?.find( o => o.name === chip );\n\t\treturn option?.color ? 'chip-' + option.color : '';\n\t}\n}\n","<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{{ chip }}\n\t\t\t\t<button matChipRemove>\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.name\">{{ option.name }}</mat-option>\n\t\t}\n\t</mat-autocomplete>\n</mat-form-field>\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tDestroyRef,\n\teffect,\n\tinject,\n\tinput,\n\tOnInit,\n\toutput,\n\tsignal,\n\tuntracked\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n\tAbstractControl,\n\tFormsModule,\n\tReactiveFormsModule,\n\tUntypedFormBuilder,\n\tUntypedFormGroup,\n\tValidationErrors,\n\tValidatorFn,\n\tValidators\n} from '@angular/forms';\nimport { XiriFormField, XiriFormFieldCondition } from './field.interface';\nimport { Observable } from \"rxjs\";\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { XiriFileComponent } from './file/file.component';\nimport { XiriTimelimitComponent } from './timelimit/timelimit.component';\nimport { XiriVolumeComponent } from './volume/volume.component';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { XiriDateTimeRangeComponent } from './datetimerange/datetimerange.component';\nimport { XiriDateRangeComponent } from './daterange/daterange.component';\nimport { XiriDateComponent } from './date/date.component';\nimport { XiriYearMonthComponent } from './yearmonth/yearmonth.component';\nimport { XiriTreeselectComponent } from './treeselect/treeselect.component';\nimport { XiriSelectDirective } from './select/select.directive';\nimport { NgxMatSelectSearchModule } from 'ngx-mat-select-search';\nimport { MatOption } from '@angular/material/core';\nimport { MatSelect } from '@angular/material/select';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { AsyncPipe } from '@angular/common';\nimport { MatError, MatFormField, MatHint, MatLabel, MatPrefix, MatSuffix } from '@angular/material/form-field';\nimport { SafehtmlPipe } from \"../pipes/safehtml.pipe\";\nimport { XiriChipsComponent } from './chips/chips.component';\n\nexport type XiriFormFieldDisplay = 'full' | 'line' | 'small';\n\n\n@Component( {\n\t selector: 'xiri-form-fields',\n\t templateUrl: './form-fields.component.html',\n\t styleUrl: './form-fields.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatFormField,\n\t\t MatLabel,\n\t\t MatInput,\n\t\t MatPrefix,\n\t\t MatSuffix,\n\t\t MatIcon,\n\t\t MatHint,\n\t\t MatError,\n\t\t MatIconButton,\n\t\t MatSelect,\n\t\t MatOption,\n\t\t NgxMatSelectSearchModule,\n\t\t XiriSelectDirective,\n\t\t XiriTreeselectComponent,\n\t\t XiriDateComponent,\n\t\t XiriYearMonthComponent,\n\t\t XiriDateRangeComponent,\n\t\t XiriDateTimeRangeComponent,\n\t\t MatCheckbox,\n\t\t XiriVolumeComponent,\n\t\t XiriTimelimitComponent,\n\t\t XiriFileComponent,\n\t\t MatProgressSpinner,\n\t\t AsyncPipe,\n\t\t SafehtmlPipe,\n\t\t XiriChipsComponent,\n\t ]\n } )\nexport class XiriFormFieldsComponent implements OnInit {\n\t\n\tprivate formBuilder = inject( UntypedFormBuilder );\n\tprivate destroyRef = inject( DestroyRef );\n\t\n\tform = input<XiriFormField[] | null>( null );\n\tdisplay = input<XiriFormFieldDisplay>( 'full' );\n\tdisabled = input<boolean>( false );\n\tformChange = output<any>();\n\tcheck = input<Observable<void>>( null );\n\t\n\t// fields: XiriFormField[] = [];\n\tformGroup: UntypedFormGroup;\n\tprivate lastValue: any = null;\n\tprivate _fields: XiriFormField[] | null = null;\n\tcollapsedSections = signal<Set<string>>( new Set() );\n\tprivate _fieldsLoaded: boolean = false;\n\tprivate _initialEmitDone: boolean = false;\n\t\n\tconstructor() {\n\t\t\n\t\tthis.formGroup = this.formBuilder.group( {} );\n\t\t\n\t\teffect( () => {\n\t\t\tconst isDisabled = this.disabled();\n\t\t\tif ( isDisabled ) {\n\t\t\t\tthis.formGroup.disable( { emitEvent: false } );\n\t\t\t} else {\n\t\t\t\tthis.formGroup.enable( { emitEvent: false } );\n\t\t\t\t// Felder die vom Backend als disabled kamen, wieder deaktivieren\n\t\t\t\tif ( this._fields ) {\n\t\t\t\t\tfor ( const field of this._fields ) {\n\t\t\t\t\t\tif ( field.disabled ) {\n\t\t\t\t\t\t\tthis.formGroup.get( field.id )?.disable( { emitEvent: false } );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t\t\n\t\t// Track form input changes and emit after controls are created\n\t\teffect( () => {\n\t\t\tconst formInput = this.form();\n\t\t\tif ( formInput !== null ) {\n\t\t\t\t// Force evaluation of computed to create controls\n\t\t\t\tthis.fields();\n\t\t\t\t// Schedule emission for next microtask to ensure view is ready\n\t\t\t\tif ( this._fieldsLoaded && !this._initialEmitDone ) {\n\t\t\t\t\tthis._initialEmitDone = true;\n\t\t\t\t\t// Use queueMicrotask to emit after current change detection cycle\n\t\t\t\t\tqueueMicrotask( () => {\n\t\t\t\t\t\tthis.formChange.emit( this.formGroup );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tngOnInit(): void {\n\t\t\n\t\tthis.check()?.pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe( () => {\n\t\t\tthis.validateAllFormFields();\n\t\t} );\n\t\t\n\t\tthis.formGroup.valueChanges.pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe( () => {\n\t\t\tif ( this._fieldsLoaded ) {\n\t\t\t\tconst currentValue = JSON.stringify( this.formGroup.value );\n\t\t\t\tif ( currentValue === this.lastValue )\n\t\t\t\t\treturn;\n\t\t\t\tthis.lastValue = currentValue;\n\t\t\t\tthis.formChange.emit( this.formGroup );\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tfields = computed( () => {\n\t\t\n\t\tthis._fieldsLoaded = false;\n\t\tif ( this._fields !== null ) {\n\t\t\tfor ( let i = 0; i != this._fields.length; i++ ) {\n\t\t\t\tthis.formGroup.removeControl( this._fields[ i ].id );\n\t\t\t}\n\t\t\tthis._fields = null;\n\t\t}\n\t\t\n\t\tlet fields = this.form();\n\t\tif ( fields == null ) {\n\t\t\treturn null;\n\t\t}\n\t\t\n\t\tthis._fields = fields;\n\n\t\tconst initialCollapsed = new Set<string>();\n\t\tfor ( const f of fields ) {\n\t\t\tif ( f.type === 'header' && f.collapsible && f.collapsed )\n\t\t\t\tinitialCollapsed.add( f.id );\n\t\t}\n\t\tuntracked( () => this.collapsedSections.set( initialCollapsed ) );\n\n\t\tthis.createControl();\n\t\t\n\t\tthis.lastValue = JSON.stringify( this.formGroup.value );\n\t\tthis._fieldsLoaded = true;\n\t\treturn this._fields;\n\t} );\n\t\n\tprivate createControl(): void {\n\t\t\n\t\tfor ( let i = 0; i != this._fields.length; i++ ) {\n\t\t\tconst field = this._fields[ i ];\n\t\t\t\n\t\t\tif ( field.formtype )\n\t\t\t\tfield.type = field.formtype;\n\t\t\tif ( !field.subtype )\n\t\t\t\tfield.subtype = field.type;\n\t\t\tif ( !field.class )\n\t\t\t\tfield.class = 'xcol';\n\t\t\t\n\t\t\tswitch ( field.type ) {\n\t\t\t\tcase 'email':\n\t\t\t\t\tfield.type = 'text';\n\t\t\t\t\tfield.subtype = 'email';\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'password':\n\t\t\t\t\tfield.subtype = 'password';\n\t\t\t\t\tfield.pwdhide = true;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'objectlist':\n\t\t\t\t\tfield.multiple = true;\n\t\t\t\t\tif ( field.subtype != 'objectlist' )\n\t\t\t\t\t\tfield.type = field.subtype;\n\t\t\t\t\telse {\n\t\t\t\t\t\tif ( field.tree === undefined )\n\t\t\t\t\t\t\tfield.tree = true;\n\t\t\t\t\t\tif ( field.required === undefined )\n\t\t\t\t\t\t\tfield.required = true;\n\t\t\t\t\t\tfield.type = 'treeselect';\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'volume':\n\t\t\t\t\tfield.required = true;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'treeselect':\n\t\t\t\t\tfield.tree = true;\n\t\t\t\t\tif ( field.required === undefined )\n\t\t\t\t\t\tfield.required = true;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'multiselect':\n\t\t\t\t\tfield.tree = false;\n\t\t\t\t\tfield.type = 'treeselect';\n\t\t\t\t\t\n\t\t\t\t\tif ( field.required === undefined )\n\t\t\t\t\t\tfield.required = true;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'select':\n\t\t\t\tcase 'object':\n\t\t\t\tcase 'model':\n\t\t\t\t\tif ( field.type == 'object' || field.type == 'model' ) {\n\t\t\t\t\t\tfield.type = 'select';\n\t\t\t\t\t\tfield.subtype = 'model';\n\t\t\t\t\t\tfield.multiple = false;\n\t\t\t\t\t}\n\t\t\t\t\tif ( field.subtype == 'object' )\n\t\t\t\t\t\tfield.subtype = 'model';\n\t\t\t\t\t\n\t\t\t\t\tif ( field.list === undefined && field.array !== undefined ) {\n\t\t\t\t\t\tfield.list = [];\n\t\t\t\t\t\tfield.array.forEach( val => {\n\t\t\t\t\t\t\tfield.list.push( {\n\t\t\t\t\t\t\t\t id: val,\n\t\t\t\t\t\t\t\t name: val,\n\t\t\t\t\t\t\t } )\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif ( field.subtype === 'model' ) {\n\t\t\t\t\t\tif ( field.value === undefined && field.list.length != 0 )\n\t\t\t\t\t\t\tfield.value = field.list[ 0 ].id;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( field.value === undefined || field.value === null )\n\t\t\t\t\t\t\tfield.value = [];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif ( field.required === undefined )\n\t\t\t\t\t\tfield.required = true;\n\t\t\t\t\t\n\t\t\t\t\tfield.serverSideSearch = !!field.url;\n\t\t\t\t\t\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'date':\n\t\t\t\tcase 'datetime':\n\t\t\t\t\tfield.type = 'date';\n\t\t\t\t\tif ( field.required === undefined )\n\t\t\t\t\t\tfield.required = true;\n\t\t\t\t\tif ( field.subtype == 'datetime' )\n\t\t\t\t\t\tfield.class += ' datetime';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'yearmonth':\n\t\t\t\t\tif ( field.required === undefined )\n\t\t\t\t\t\tfield.required = true;\n\t\t\t\t\tfield.class += ' yearmonth';\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'daterange':\n\t\t\t\tcase 'datetimerange':\n\t\t\t\t\tif ( field.required === undefined )\n\t\t\t\t\t\tfield.required = true;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'bool':\n\t\t\t\t\tif ( field.name === undefined && field.placeholder )\n\t\t\t\t\t\tfield.name = field.placeholder;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'question':\n\t\t\t\t\tif ( ( <any> field ).question )\n\t\t\t\t\t\tfield.value = ( <any> field ).question;\n\t\t\t\t\t\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\t// if ( field.hint || (field.type == 'textarea' && field.max) )\n\t\t\t//\tfield.class += ' hashint';\n\t\t\t\n\t\t\tif ( field.value === undefined ) {\n\t\t\t\tif ( field.type == 'text' || field.type == 'textarea' )\n\t\t\t\t\tfield.value = '';\n\t\t\t\telse if ( field.type == 'bool' )\n\t\t\t\t\tfield.value = false;\n\t\t\t}\n\t\t\t\n\t\t\tfield.required = !!field.required;\n\t\t\tfield.disabled = !!field.disabled;\n\t\t\t\n\t\t\tconst control = this.formBuilder.control(\n\t\t\t\tfield.value,\n\t\t\t\tthis.bindValidations( field )\n\t\t\t);\n\t\t\t\n\t\t\tfield.control = control;\n\t\t\tthis.formGroup.addControl( field.id, control );\n\t\t}\n\t}\n\t\n\tprivate bindValidations( field: XiriFormField ) {\n\t\t\n\t\tconst validList = [];\n\t\t\n\t\tif ( field.validations === undefined ) {\n\t\t\t\n\t\t\tfield.validations = [];\n\t\t\t\n\t\t\tif ( field.min !== undefined ) {\n\t\t\t\tif ( field.type == 'number' || field.type == 'date' )\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'min',\n\t\t\t\t\t\t validator: Validators.min( field.min ),\n\t\t\t\t\t\t message: 'Minimum not reached'\n\t\t\t\t\t } );\n\t\t\t\telse if ( field.type == 'daterange' || field.type == 'datetimerange' )\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'min',\n\t\t\t\t\t\t validator: validatorDateRangeStart( field.min ),\n\t\t\t\t\t\t message: 'Check Minimum Date'\n\t\t\t\t\t } );\n\t\t\t\telse if ( field.type == 'multiselect' || field.type == 'treeselect' )\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'min',\n\t\t\t\t\t\t validator: validatorArrayMin( field.min ),\n\t\t\t\t\t\t message: 'Minimum not reached'\n\t\t\t\t\t } );\n\t\t\t\telse\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'min',\n\t\t\t\t\t\t validator: Validators.minLength( field.min ),\n\t\t\t\t\t\t message: 'Check Format'\n\t\t\t\t\t } );\n\t\t\t}\n\t\t\tif ( field.max !== undefined ) {\n\t\t\t\tif ( field.type == 'number' || field.type == 'date' )\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'max',\n\t\t\t\t\t\t validator: Validators.max( field.max ),\n\t\t\t\t\t\t message: 'Maximum reached'\n\t\t\t\t\t } );\n\t\t\t\telse if ( field.type == 'daterange' || field.type == 'datetimerange' )\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'max',\n\t\t\t\t\t\t validator: validatorDateRangeEnd( field.max ),\n\t\t\t\t\t\t message: 'Max Date reached'\n\t\t\t\t\t } );\n\t\t\t\telse if ( field.type == 'multiselect' || field.type == 'treeselect' )\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'max',\n\t\t\t\t\t\t validator: validatorArrayMax( field.max ),\n\t\t\t\t\t\t message: 'Maximum reached'\n\t\t\t\t\t } );\n\t\t\t\telse\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'max',\n\t\t\t\t\t\t validator: Validators.maxLength( field.max ),\n\t\t\t\t\t\t message: 'Maximum reached'\n\t\t\t\t\t } );\n\t\t\t}\n\t\t\t\n\t\t\tif ( field.pattern !== undefined ) {\n\t\t\t\tfield.validations.push( {\n\t\t\t\t\t id: 'pattern',\n\t\t\t\t\t validator: Validators.pattern( field.pattern ),\n\t\t\t\t\t message: 'Check Format'\n\t\t\t\t } );\n\t\t\t} else {\n\t\t\t\tif ( field.type == 'text' && field.subtype == 'email' ) {\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'email',\n\t\t\t\t\t\t validator: Validators.email,\n\t\t\t\t\t\t message: 'Check Format'\n\t\t\t\t\t } );\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif ( field.required == true ) {\n\t\t\t\tfield.validations.push( {\n\t\t\t\t\t id: 'required',\n\t\t\t\t\t validator: Validators.required,\n\t\t\t\t\t message: 'Required',\n\t\t\t\t } );\n\t\t\t} else {\n\t\t\t\tfield.validations.push( {\n\t\t\t\t\t id: 'undefined',\n\t\t\t\t\t validator: validatorUndefined(),\n\t\t\t\t\t message: 'Check Format',\n\t\t\t\t } );\n\t\t\t}\n\t\t}\n\t\t\n\t\tfield.validations.forEach( valid => {\n\t\t\tvalidList.push( valid.validator );\n\t\t} );\n\t\t\n\t\treturn validList.length ? Validators.compose( validList ) : null;\n\t}\n\t\n\tprivate validateAllFormFields() {\n\n\t\tthis.formGroup.markAsDirty();\n\t\tthis.formGroup.markAllAsTouched();\n\t\tthis.formGroup.updateValueAndValidity();\n\t}\n\t\n\tisFieldVisible( field: XiriFormField ): boolean {\n\t\t\n\t\t// Check if field is inside a collapsed section\n\t\tif ( this.isInCollapsedSection( field ) )\n\t\t\treturn false;\n\t\t\n\t\tif ( !field.showWhen )\n\t\t\treturn true;\n\t\t\n\t\tconst conditions: XiriFormFieldCondition[] = Array.isArray( field.showWhen )\n\t\t ? field.showWhen\n\t\t : [ field.showWhen ];\n\t\t\n\t\treturn conditions.every( condition => this.evaluateCondition( condition ) );\n\t}\n\t\n\ttoggleSection( header: XiriFormField ): void {\n\t\tthis.collapsedSections.update( set => {\n\t\t\tconst next = new Set( set );\n\t\t\tif ( next.has( header.id ) )\n\t\t\t\tnext.delete( header.id );\n\t\t\telse\n\t\t\t\tnext.add( header.id );\n\t\t\treturn next;\n\t\t} );\n\t}\n\t\n\tisSectionCollapsed( headerId: string ): boolean {\n\t\treturn this.collapsedSections().has( headerId );\n\t}\n\n\tprivate isInCollapsedSection( field: XiriFormField ): boolean {\n\t\tconst fields = this._fields;\n\t\tif ( !fields ) return false;\n\n\t\tconst idx = fields.indexOf( field );\n\t\tif ( idx <= 0 ) return false;\n\n\t\t// Walk backwards to find the nearest header or divider\n\t\tfor ( let i = idx - 1; i >= 0; i-- ) {\n\t\t\tconst f = fields[ i ];\n\t\t\tif ( f.type === 'header' ) {\n\t\t\t\treturn f.collapsible && this.collapsedSections().has( f.id );\n\t\t\t}\n\t\t\tif ( f.type === 'divider' ) {\n\t\t\t\treturn false; // Divider breaks the section\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\t\n\tprivate evaluateCondition( condition: XiriFormFieldCondition ): boolean {\n\t\t\n\t\tconst control = this.formGroup.get( condition.field );\n\t\tif ( !control )\n\t\t\treturn false;\n\t\t\n\t\tconst fieldValue = control.value;\n\t\t\n\t\tswitch ( condition.operator ) {\n\t\t\tcase 'equals':\n\t\t\t\treturn fieldValue === condition.value;\n\t\t\tcase 'notEquals':\n\t\t\t\treturn fieldValue !== condition.value;\n\t\t\tcase 'contains':\n\t\t\t\treturn typeof fieldValue === 'string' && fieldValue.includes( condition.value );\n\t\t\tcase 'greaterThan':\n\t\t\t\treturn fieldValue > condition.value;\n\t\t\tcase 'lessThan':\n\t\t\t\treturn fieldValue < condition.value;\n\t\t\tcase 'in':\n\t\t\t\treturn Array.isArray( condition.value ) && condition.value.includes( fieldValue );\n\t\t\tcase 'notEmpty':\n\t\t\t\treturn fieldValue !== null && fieldValue !== undefined && fieldValue !== '';\n\t\t\tdefault:\n\t\t\t\treturn true;\n\t\t}\n\t}\n}\n\nfunction validatorDateRangeStart( min: number ): ValidatorFn {\n\treturn ( control: AbstractControl ): ValidationErrors | null => {\n\t\tif ( control.value === undefined || control.value === null || control.value.start === null )\n\t\t\treturn null;\n\t\tconst ok = min < control.value.start;\n\t\treturn ok ? null : { min: { value: control.value } };\n\t};\n}\n\nfunction validatorDateRangeEnd( max: number ): ValidatorFn {\n\treturn ( control: AbstractControl ): ValidationErrors | null => {\n\t\tif ( control.value === undefined || control.value === null || control.value.end === null )\n\t\t\treturn null;\n\t\tconst ok = max > control.value.end;\n\t\treturn ok ? null : { max: { value: control.value } };\n\t};\n}\n\nfunction validatorUndefined(): ValidatorFn {\n\treturn ( control: AbstractControl ): ValidationErrors | null => {\n\t\treturn control.value === undefined ? { undefined: { value: control.value } } : null;\n\t};\n}\n\nfunction validatorArrayMin( min: number ): ValidatorFn {\n\treturn ( control: AbstractControl ): ValidationErrors | null => {\n\t\tif ( control.value === null || control.value === undefined )\n\t\t\treturn null;\n\t\tconst ok = control.value.length >= min;\n\t\treturn ok ? null : { min: { value: control.value } };\n\t};\n}\n\nfunction validatorArrayMax( max: number ): ValidatorFn {\n\treturn ( control: AbstractControl ): ValidationErrors | null => {\n\t\tif ( control.value === null || control.value === undefined )\n\t\t\treturn null;\n\t\tconst ok = control.value.length <= max;\n\t\treturn ok ? null : { max: { value: control.value } };\n\t};\n}\n","<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\"\n\t\t\t\t\t [placeholder]=\"field.name\"\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 [placeholder]=\"field.name || ''\"\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 [placeholder]=\"field.name\"\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 ('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\" [placeholder]=\"field.name\" [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]=\"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","import { ChangeDetectionStrategy, Component, computed, effect, inject, input } from '@angular/core';\nimport {\n\tMatTableDataSource,\n\tMatTable,\n\tMatColumnDef,\n\tMatHeaderCellDef,\n\tMatHeaderCell,\n\tMatCellDef,\n\tMatCell,\n\tMatHeaderRowDef,\n\tMatHeaderRow,\n\tMatRowDef,\n\tMatRow\n} from \"@angular/material/table\";\nimport { XiriTableField } from \"./tabefield.interface\";\nimport { XiriNumberService } from \"../services/number.service\";\nimport { SafehtmlPipe } from '../pipes/safehtml.pipe';\nimport { RouterLink } from '@angular/router';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatIcon } from '@angular/material/icon';\n\n\nexport interface XiriRawTableSettings {\n\tdata: any\n\tfields?: XiriTableField[]\n\tdense?: number\n\tforceMinWidth?: boolean\n\tshowHeader?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-raw-table',\n\t templateUrl: './xiri-raw-table.component.html',\n\t styleUrl: './xiri-raw-table.component.scss',\n\t imports: [ MatTable,\n\t MatColumnDef,\n\t MatHeaderCellDef,\n\t MatHeaderCell,\n\t MatCellDef,\n\t MatCell,\n\t MatIcon,\n\t MatTooltip,\n\t RouterLink,\n\t MatHeaderRowDef,\n\t MatHeaderRow,\n\t MatRowDef,\n\t MatRow,\n\t SafehtmlPipe ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriRawTableComponent {\n\t\n\tsettings = input.required<XiriRawTableSettings>();\n\tshowHeader = computed( () => this.settings().showHeader === true );\n\n\tdisplayedColumns: any[] = [];\n\tcolumnsToDisplay: string[] = [];\n\tdataSource: MatTableDataSource<any> = new MatTableDataSource();\n\ttableClass: string = 'dense-6';\n\t\n\tconstructor() {\n\t\teffect( () => {\n\t\t\tif ( this.settings().dense )\n\t\t\t\tthis.tableClass = 'dense-' + this.settings().dense;\n\t\t\tif ( this.settings().forceMinWidth )\n\t\t\t\tthis.tableClass += ' force-min-width';\n\t\t\t\n\t\t\tthis.loadFields( this.settings().fields );\n\t\t\tthis.dataSource.data = this.settings().data;\n\t\t} );\n\t}\n\t\n\tprivate loadFields( fields: XiriTableField[] ) {\n\t\t\n\t\tthis.displayedColumns = [];\n\t\tthis.columnsToDisplay = [];\n\t\t\n\t\tfor ( let fid = 0; fid != fields.length; fid++ ) {\n\t\t\tconst column = fields[ fid ];\n\t\t\t\n\t\t\tif ( column.format == 'id' )\n\t\t\t\tcontinue;\n\t\t\tif ( !column.display )\n\t\t\t\tcolumn.display = '';\n\t\t\tif ( column.align )\n\t\t\t\tcolumn.display += ` align-${ column.align }`;\n\t\t\t\n\t\t\tthis.displayedColumns.push( column );\n\t\t\tthis.columnsToDisplay.push( column.name );\n\t\t}\n\t}\n}\n","<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 (column.icons[ row[ column.id ] ]) {\n\t\t\t\t\t\t\t\t<mat-icon [class]=\"column.icons[ row[ column.id ] ][ 'color' ] || 'primary'\"\n\t\t\t\t\t\t\t\t [matTooltip]=\"column.icons[ row[ column.id ] ][ 'hint' ]\"\n\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!column.icons[ row[ column.id ] ][ 'hint' ]\">{{ column.icons[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]=\"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 (row[column.id + 'Link']) {\n\t\t\t\t\t\t\t\t<a [routerLink]=\"row[column.id + 'Link']\" class=\"tablelink\">{{ row[column.id] }}</a>\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t<span>{{ 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>{{ row[column.id][0] }}</div>\n\t\t\t\t\t\t\t<div>{{ 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 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 (row[column.id + 'Link']) {\n\t\t\t\t\t\t\t\t<a [routerLink]=\"row[column.id + 'Link']\">\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 (row['icon']) {\n\t\t\t\t\t\t\t\t\t\t\t@if (row['iconSet']) {\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"row['iconColor'] || 'primary'\" [fontSet]=\"row['iconSet']\">{{ 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]=\"row['iconColor'] || 'primary'\">{{ 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]=\"row['icon']\">{{ 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 }}{{ 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 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\">{{ 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>","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { MatButton, MatFabButton, MatIconButton, MatMiniFabButton } from \"@angular/material/button\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { XiriButton } from \"../button/button.component\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { MatProgressSpinner } from \"@angular/material/progress-spinner\";\n\n@Component( {\n\t selector: 'xiri-buttonstyle',\n\t imports: [\n\t\t MatButton,\n\t\t MatFabButton,\n\t\t MatIcon,\n\t\t MatIconButton,\n\t\t MatMiniFabButton,\n\t\t MatTooltip,\n\t\t MatProgressSpinner\n\t ],\n\t templateUrl: './buttonstyle.component.html',\n\t styleUrl: './buttonstyle.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriButtonstyleComponent {\n\tbutton = input.required<XiriButton>();\n\tdisabled = input.required<boolean>();\n\tloading = input<boolean>( false );\n}\n","@switch (button().type) {\n\t@case ('icon') {\n\t\t<button mat-icon-button [matTooltip]=\"button().hint\" [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\" [disabled]=\"disabled() || loading()\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t<mat-icon>{{ button().icon }}</mat-icon>\n\t\t\t}\n\t\t</button>\n\t}\n\t@case ('icontext') {\n\t\t<button mat-fab extended=\"true\"\n\t\t class=\"icontext\"\n\t\t [matTooltip]=\"button().hint\"\n\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\"\n\t\t [disabled]=\"disabled() || loading()\"\n\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t<mat-icon>{{ button().icon }}</mat-icon>\n\t\t\t}\n\t\t\t{{ button().text }}\n\t\t</button>\n\t}\n\t@case ('raised') {\n\t\t<button mat-raised-button\n\t\t [matTooltip]=\"button().hint\"\n\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\"\n\t\t [disabled]=\"disabled() || loading()\"\n\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t{{ button().text }}\n\t\t\t}\n\t\t</button>\n\t}\n\t@case ('basic') {\n\t\t<button mat-button\n\t\t [matTooltip]=\"button().hint\"\n\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\"\n\t\t [disabled]=\"disabled() || loading()\"\n\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t{{ button().text }}\n\t\t\t}\n\t\t</button>\n\t}\n\t@case ('stroked') {\n\t\t<button mat-stroked-button\n\t\t [matTooltip]=\"button().hint\"\n\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\"\n\t\t [disabled]=\"disabled() || loading()\"\n\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t{{ button().text }}\n\t\t\t}\n\t\t</button>\n\t}\n\t@case ('flat') {\n\t\t<button mat-flat-button\n\t\t [matTooltip]=\"button().hint\"\n\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\"\n\t\t [disabled]=\"disabled() || loading()\"\n\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t{{ button().text }}\n\t\t\t}\n\t\t</button>\n\t}\n\t@case ('minifab') {\n\t\t<button mat-mini-fab [matTooltip]=\"button().hint\" [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\" [disabled]=\"disabled() || loading()\"\n\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t<mat-icon>{{ button().icon }}</mat-icon>\n\t\t\t}\n\t\t</button>\n\t}\n\t@case ('fab') {\n\t\t<button mat-fab [matTooltip]=\"button().hint\" [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\" [disabled]=\"disabled() || loading()\"\n\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"24\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t<mat-icon>{{ button().icon }}</mat-icon>\n\t\t\t}\n\t\t</button>\n\t}\n\t@default {\n\t\t@if (button().icon) {\n\t\t\t<button mat-icon-button [matTooltip]=\"button().hint\" [matTooltipDisabled]=\"!button().hint\"\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@if (button().text) {\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@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{{ button().text }}\n\t\t\t\t}\n\t\t\t</button>\n\t\t}\n\t}\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component( {\n\t selector: 'xiri-done',\n\t templateUrl: './done.component.html',\n\t styleUrl: './done.component.scss',\n\t imports: [ MatIcon ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriDoneComponent {\n}\n","<mat-icon aria-label=\"Erfolgreich abgeschlossen\" role=\"status\">done</mat-icon>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component( {\n\t selector: 'xiri-error',\n\t templateUrl: './error.component.html',\n\t styleUrl: './error.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriErrorComponent {\n\t\n\ttext = input.required<string>();\n}\n","<div class=\"error\">\n\t{{ text() }}\n</div>\n","import { Injectable } from '@angular/core';\n\n\n@Injectable( {\n\t providedIn: 'root',\n } )\nexport class XiriDownloadService {\n\t\n\tpublic download( result: any, filename: string, open: boolean ): boolean {\n\t\t\n\t\tif ( result.headers.get( 'content-disposition' ) ) {\n\t\t\tfilename = result.headers.get( 'content-disposition' ).split( 'filename=' )[ 1 ];\n\t\t\tfilename = filename.replace( /\"/g, '' );\n\t\t}\n\t\t\n\t\tlet contentType = result.headers.get( 'content-type' );\n\t\tlet file = new File( [ result.body ], filename, { type: contentType } );\n\t\tlet fileData = URL.createObjectURL( file );\n\t\t\n\t\tif ( open ) {\n\t\t\tlet ret = window.open( fileData, '_blank' )\n\t\t\treturn !( ret === null || typeof ( ret ) == 'undefined' );\n\t\t}\n\t\t\n\t\tconst a: any = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'a' )\n\t\ta.download = filename;\n\t\ta.rel = 'noopener';\n\t\ta.href = fileData;\n\t\t// a.target = '_blank';\n\t\t\n\t\tsetTimeout( () => {\n\t\t\tURL.revokeObjectURL( fileData );\n\t\t}, 2 * 1000 )\n\t\tsetTimeout( () => a.click(), 0 )\n\t\t\n\t\treturn true;\n\t}\n}\n","import { HttpErrorResponse } from '@angular/common/http';\n\nexport function parseHttpError( err: HttpErrorResponse ): string {\n\tif ( err.status === 400 || err.status === 424 )\n\t\treturn err.error?.error || 'Format Error';\n\tif ( err.status === 403 )\n\t\treturn err.error?.error || 'Access denied';\n\tif ( err.status === 404 )\n\t\treturn 'Not found';\n\tif ( err.status === 0 )\n\t\treturn 'Connection error';\n\treturn 'Unknown error';\n}\n","import { ChangeDetectionStrategy, Component, DestroyRef, inject, OnDestroy, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n\tMAT_DIALOG_DATA,\n\tMatDialogActions,\n\tMatDialogContent,\n\tMatDialogRef,\n\tMatDialogTitle\n} from '@angular/material/dialog';\nimport { Subject } from 'rxjs';\nimport { BreakpointObserver, Breakpoints, BreakpointState } from '@angular/cdk/layout';\nimport { XiriDataService } from '../services/data.service';\nimport { XiriButton } from \"../button/button.component\";\nimport { XiriSnackbarService } from '../services/snackbar.service';\nimport { XiriRawTableComponent, XiriRawTableSettings } from \"../raw-table/xiri-raw-table.component\";\nimport { Router } from \"@angular/router\";\nimport { XiriButtonstyleComponent } from '../buttonstyle/buttonstyle.component';\nimport { MatDivider } from '@angular/material/divider';\nimport { XiriDoneComponent } from '../done/done.component';\nimport { XiriErrorComponent } from '../error/error.component';\nimport { XiriFormFieldsComponent } from '../formfields/form-fields.component';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { XiriFormField } from \"../formfields/field.interface\";\nimport { XiriDownloadService } from \"../services/download.service\";\nimport { parseHttpError } from '../services/error.util';\n\n\nexport interface XiriDialogSettings {\n\turl?: string\n\tsize?: string\n\t\n\ttype: \"form\" | \"data\" | \"question\" | \"waiting\" | \"table\"\n\tdata?: any\n\tfilter?: any\n}\n\n@Component( {\n\t selector: 'xiri-dialog',\n\t templateUrl: './dialog.component.html',\n\t styleUrls: [ './dialog.component.scss' ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatDialogTitle,\n\t MatDialogContent,\n\t MatProgressSpinner,\n\t XiriRawTableComponent,\n\t XiriFormFieldsComponent,\n\t XiriErrorComponent,\n\t XiriDoneComponent,\n\t MatDivider,\n\t MatDialogActions,\n\t XiriButtonstyleComponent ]\n } )\nexport class XiriDialogComponent implements OnDestroy {\n\tdialogRef = inject<MatDialogRef<XiriDialogComponent>>( MatDialogRef );\n\tinitData = inject( MAT_DIALOG_DATA );\n\tprivate breakpointObserver = inject( BreakpointObserver );\n\tprivate dataService = inject( XiriDataService );\n\tprivate router = inject( Router );\n\tprivate snackbar = inject( XiriSnackbarService );\n\t\n\t\n\ttype = signal('form');\n\theader = signal('');\n\tpublic buttons = signal<XiriButton[]>([]);\n\tprivate url = '';\n\tprivate extra = {};\n\tprivate destroyRef = inject( DestroyRef );\n\n\tprivate downloadService = inject( XiriDownloadService );\n\t\n\tpublic formFields = signal<XiriFormField[]>( null );\n\tpublic loading = signal<boolean>( true );\n\tpublic done = signal<boolean>( false );\n\tpublic error = signal<string>( '' );\n\t\n\tprivate formValues: any = null;\n\tpublic formValid = signal<boolean>(false);\n\tpublic checkSubject: Subject<void> = new Subject<void>();\n\t\n\tprivate to = null;\n\tprivate refreshTime = 2000;\n\trawTable: XiriRawTableSettings;\n\t\n\tconstructor() {\n\t\t\n\t\tthis.breakpointObserver\n\t\t\t.observe( [ Breakpoints.XSmall, Breakpoints.Small ] )\n\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe( ( state: BreakpointState ) => {\n\t\t\t\tif ( state.matches )\n\t\t\t\t\tthis.dialogRef.updateSize( '90vw' );\n\t\t\t\telse\n\t\t\t\t\tthis.dialogRef.updateSize( this.initData.size || '600px' );\n\t\t\t} );\n\t\t\n\t\tif ( this.initData.url )\n\t\t\tthis.url = this.initData.url;\n\t\t\n\t\tif ( this.initData.type == 'form' )\n\t\t\tthis.loadData( this.initData );\n\t\telse if ( this.initData.type == 'data' )\n\t\t\tthis.send( { data: this.initData.data } );\n\t\telse if ( this.initData.filter )\n\t\t\tthis.send( this.initData.filter );\n\t\telse\n\t\t\tthis.send( null );\n\t\t\n\t}\n\t\n\tprivate send( data: any ) {\n\t\t\n\t\tthis.loading.set( true );\n\t\tthis.error.set( '' );\n\t\t\n\t\tconst req = data === null ?\n\t\t this.dataService.get( this.url ) :\n\t\t this.dataService.post( this.url, { ...data, ...this.extra } );\n\t\t\n\t\t// this.buttons = [];\n\t\t\n\t\treq.pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe(\n\t\t\t{\n\t\t\t\tnext: ( res: any ) => {\n\t\t\t\t\tif ( res )\n\t\t\t\t\t\tthis.loadData( res );\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.showError( { status: 500 } );\n\t\t\t\t},\n\t\t\t\terror: ( err ) => {\n\t\t\t\t\tthis.showError( err );\n\t\t\t\t}\n\t\t\t} );\n\t}\n\t\n\tprivate showError( err: any ) {\n\t\tthis.loading.set( false );\n\t\tthis.error.set( parseHttpError( err ) );\n\t\t\n\t\t// this.header = 'Error';\n\t\tif ( this.buttons().length == 0 ) {\n\t\t\tthis.buttons.set( [ {\n\t\t\t\ttext: 'Close',\n\t\t\t\taction: 'close',\n\t\t\t\ttype: 'raised',\n\t\t\t} ] );\n\t\t}\n\t}\n\t\n\tprivate loadData( res: any ): void {\n\t\t\n\t\tif ( res.buttons ) {\n\t\t\tif ( res.url )\n\t\t\t\tthis.url = res.url;\n\t\t\t\n\t\t\tlet formData = [];\n\t\t\tlet inFields = res.content || res.fields;\n\t\t\tconst model = res.model || {};\n\t\t\tthis.header.set( res.header );\n\t\t\tthis.buttons.set( res.buttons );\n\t\t\tthis.type.set( res.type ? res.type : 'form' );\n\t\t\tthis.extra = res.extra || {};\n\n\t\t\tif ( this.type() == 'form' ) {\n\t\t\t\tinFields.forEach( ( field: any ) => {\n\t\t\t\t\tif ( field.hide == true )\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif ( model[ field.id ] !== undefined )\n\t\t\t\t\t\tfield.value = model[ field.id ];\n\t\t\t\t\t\n\t\t\t\t\tformData.push( field );\n\t\t\t\t} );\n\t\t\t} else if ( this.type() == 'question' ) {\n\t\t\t\tinFields.type = 'question';\n\t\t\t\tformData.push( inFields );\n\t\t\t\tthis.formValid.set( true );\n\t\t\t} else if ( this.type() == 'waiting' ) {\n\t\t\t\tinFields.type = 'waiting';\n\t\t\t\tinFields.done = false;\n\t\t\t\tinFields.value = inFields.text;\n\t\t\t\tformData.push( inFields );\n\t\t\t} else if ( this.type() == 'table' ) {\n\t\t\t\tthis.rawTable = inFields;\n\t\t\t\tformData = [];\n\t\t\t} else {\n\t\t\t\tthis.formValid.set( true );\n\t\t\t\tformData = inFields;\n\t\t\t}\n\t\t\t\n\t\t\tthis.formFields.set( formData );\n\n\t\t\tif ( this.type() == 'waiting' ) {\n\t\t\t\tthis.dialogRef.disableClose = true;\n\t\t\t\tthis.refreshTime = res.time || 2000;\n\t\t\t\t// formData.done = false;\n\t\t\t\t// this.formFields.set( formData );\n\t\t\t\tthis.refresh();\n\t\t\t}\n\t\t\t\n\t\t} else if ( res.done ) {\n\t\t\t\n\t\t\tthis.done.set( true );\n\t\t\tthis.formFields.set( null );\n\n\t\t\tthis.type.set( '' );\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.dialogRef.close( res );\n\t\t\t}, 1000 );\n\t\t} else {\n\t\t\tthis.dialogRef.close( res );\n\t\t}\n\t\t\n\t\tthis.loading.set( false );\n\t}\n\t\n\tprivate refresh() {\n\t\t\n\t\tthis.to = setTimeout( () => {\n\t\t\tthis.to = null;\n\t\t\t\n\t\t\tthis.dataService.get( this.url ).pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe(\n\t\t\t\t{\n\t\t\t\t\tnext: ( res: any ) => {\n\t\t\t\t\t\tif ( res.done ) {\n\t\t\t\t\t\t\tif ( res.error ) {\n\t\t\t\t\t\t\t\tthis.dialogRef.disableClose = false;\n\t\t\t\t\t\t\t\tthis.error.set( res.error );\n\t\t\t\t\t\t\t\tthis.formFields.set( null );\n\t\t\t\t\t\t\t\tthis.snackbar.error( res.error );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.url = res.url;\n\t\t\t\t\t\t\t\tthis.extra = res;\n\t\t\t\t\t\t\t\tthis.download( null );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tthis.refresh();\n\t\t\t\t\t},\n\t\t\t\t\terror: ( err ) => {\n\t\t\t\t\t\tconsole.log( \"dialog refresh error\", err );\n\t\t\t\t\t\tthis.snackbar.error( err.error?.error || 'Unknown Error' );\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( this.refreshTime < 10000 )\n\t\t\t\t\t\t\tthis.refreshTime += 2000;\n\t\t\t\t\t\tthis.refresh();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, this.refreshTime );\n\t}\n\t\n\tpublic download( data: any ) {\n\t\t\n\t\tif ( data === null ) {\n\t\t\t// TODO: fix, this is actually an external link\n\t\t\t\n\t\t\tlet file = window.open( this.dataService.getConfigApi() + this.url, 'Report' );\n\t\t\tif ( file === null || typeof ( file ) == 'undefined' ) {\n\t\t\t\tthis.buttons.set( [ {\n\t\t\t\t\ttext: 'Download',\n\t\t\t\t\taction: 'download',\n\t\t\t\t\ttype: 'raised',\n\t\t\t\t\tdefault: true,\n\t\t\t\t} ] );\n\t\t\t} else\n\t\t\t\tthis.dialogRef.close( this.extra );\n\t\t\t\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.dataService.postFileResponse( this.url, data )\n\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe(\n\t\t\t\t\t{\n\t\t\t\t\t\tnext: ( result: any ) => {\n\n\t\t\t\t\t\t\tlet ret = this.downloadService.download( result, 'Report', false );\n\t\t\t\t\t\t\tif ( !ret )\n\t\t\t\t\t\t\t\tthis.buttons.set( [ {\n\t\t\t\t\t\t\t\t\ttext: 'Download',\n\t\t\t\t\t\t\t\t\taction: 'href',\n\t\t\t\t\t\t\t\t\ttype: 'raised',\n\t\t\t\t\t\t\t\t\tdefault: true,\n\t\t\t\t\t\t\t\t\turl: this.url\n\t\t\t\t\t\t\t\t} ] );\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tthis.dialogRef.close( this.extra );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}, error: ( err: any ) => {\n\t\t\t\t\t\t\tthis.snackbar.error( err.error?.error || 'Unknown Error' );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t}\n\t\n\tclickButton( button: XiriButton ): void {\n\n\t\tif ( button.default && !this.formValid() )\n\t\t\treturn;\n\n\t\tif ( button.action == 'close' )\n\t\t\tthis.dialogRef.close( null );\n\t\telse if ( button.action == 'return' )\n\t\t\tthis.dialogRef.close( {\n\t\t\t\t valid: this.formValid(),\n\t\t\t\t values: this.formValues\n\t\t\t } );\n\t\telse if ( button.action == 'get' ) {\n\t\t\tthis.url = button.url ? button.url : '';\n\t\t\tthis.startSend( null );\n\t\t} else if ( button.action == 'post' ) {\n\t\t\tthis.url = button.url ? button.url : '';\n\t\t\tthis.startSend( button.data );\n\t\t} else if ( button.action == 'download' ) {\n\t\t\tthis.download( this.type() == 'form' ? this.formValues : null );\n\t\t} else if ( button.action == 'link' ) {\n\t\t\tthis.router.navigate( [ button.url ] ).then();\n\t\t} else if ( button.action == 'href' ) {\n\t\t\twindow.location.href = button.url;\n\t\t} else {\n\t\t\tif ( this.loading() )\n\t\t\t\treturn;\n\n\t\t\tif ( this.type() == 'form' )\n\t\t\t\tthis.startSend( this.formValues );\n\t\t\telse\n\t\t\t\tthis.startSend( [] );\n\t\t}\n\t}\n\t\n\tprivate startSend( data: any ): void {\n\n\t\tsetTimeout( () => {\n\t\t\tif ( this.formValid() )\n\t\t\t\tthis.send( data );\n\t\t\telse\n\t\t\t\tthis.checkSubject.next();\n\t\t}, 10 );\n\t}\n\n\tpublic formChanged( event: any ) {\n\n\t\tthis.formValid.set( event.valid );\n\t\tthis.formValues = event.value;\n\t}\n\t\n\tngOnDestroy() {\n\t\tif ( this.to )\n\t\t\tclearTimeout( this.to );\n\t}\n}\n","<div class=\"dialog\">\n\t<h1 mat-dialog-title>{{ header() }}</h1>\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 (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 (!loading() && !done()) {\n\t\t<mat-divider></mat-divider>\n\t\t<mat-dialog-actions [class.one]=\"buttons().length==1\">\n\t\t\t@for (button of buttons(); track $index) {\n\t\t\t\t<xiri-buttonstyle [button]=\"button\" (click)=\"clickButton( button )\" [disabled]=\"button.default && !formValid()\"></xiri-buttonstyle>\n\t\t\t}\n\t\t</mat-dialog-actions>\n\t}\n</div>","import { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\n\n@Injectable( {\n\t providedIn: 'root',\n } )\nexport class XiriResponseHandlerService {\n\n\tprivate router = inject( Router );\n\n\thandle( result: any, callbacks?: {\n\t\tonTableRefresh?: () => void;\n\t\tonTableUpdate?: ( id: any, field: string, content: any ) => void;\n\t} ): void {\n\t\tif ( !result )\n\t\t\treturn;\n\t\tif ( result.page == 'refresh' || result.refresh == 'page' )\n\t\t\tthis.router.navigate( [ this.router.url ] ).then();\n\t\telse if ( result.table == 'refresh' || result.refresh == 'table' ) {\n\t\t\tif ( callbacks?.onTableRefresh )\n\t\t\t\tcallbacks.onTableRefresh();\n\t\t\telse\n\t\t\t\tthis.router.navigate( [ this.router.url ] ).then();\n\t\t}\n\t\telse if ( result.goto )\n\t\t\tthis.router.navigate( [ result.goto ] ).then();\n\t\telse if ( result.table == 'update' || result.update == 'table' )\n\t\t\tcallbacks?.onTableUpdate?.( result.id, result.field, result.content );\n\t}\n}\n","import { ChangeDetectionStrategy, Component, computed, DestroyRef, inject, input, OnDestroy, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { XiriDialogComponent } from \"../dialog/dialog.component\";\nimport { XiriColor } from '../types/color.type';\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\nimport { XiriDataService } from \"../services/data.service\";\nimport { RouterLink } from \"@angular/router\";\nimport { Location } from \"@angular/common\";\nimport { XiriButtonstyleComponent } from \"../buttonstyle/buttonstyle.component\";\nimport { XiriDownloadService } from \"../services/download.service\";\nimport { XiriResponseHandlerService } from \"../services/response-handler.service\";\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from \"@angular/material/menu\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\n\n\nexport interface XiriButton {\n\ttext: string\n\ttype: string\n\taction: string\n\t\n\tdefault?: boolean\n\turl?: string\n\thide?: boolean\n\tcolor?: XiriColor\n\ticon?: string\n\ticonColor?: XiriColor\n\tfontIcon?: string\n\tfontSet?: string\n\tclass?: string\n\thint?: string\n\ttabIndex?: number\n\tinline?: boolean\n\tdisabled?: boolean\n\t\n\tdata?: Record<string, any>\n\ttarget?: string\n\tloading?: boolean\n\tfilename?: string\n\n\t// send btns\n\tcheck?: any\n\tsend?: any\n\n\t// menu items (for action \"menu\")\n\tmenuItems?: { action: string, url?: string, icon?: string, color?: string, text?: string, data?: Record<string, any> }[]\n}\n\nexport interface XiriButtonResult {\n\tbutton: XiriButton\n\tresult: any\n\tdone: boolean\n\tloading: boolean\n}\n\n\n@Component( {\n\t selector: 'xiri-button',\n\t templateUrl: './button.component.html',\n\t styleUrl: './button.component.scss',\n\t imports: [\n\t\t XiriButtonstyleComponent,\n\t\t RouterLink,\n\t\t MatMenu, MatMenuItem, MatMenuTrigger,\n\t\t MatIcon, MatIconButton, MatTooltip\n\t ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriButtonComponent implements OnDestroy {\n\tbutton = input.required<XiriButton>();\n\tdisabled = input<boolean>( false );\n\tfilterData = input<any>( undefined );\n\turl = input<string>( undefined );\n\t\n\t// \t\tif ( JSON.stringify( this._filterData ) === JSON.stringify( values ) )\n\t// \t\t\treturn;\n\t\n\tresult = output<XiriButtonResult>();\n\t\n\tprivate dialogRef?: MatDialogRef<any> = undefined;\n\tprivate destroyRef = inject( DestroyRef );\n\tprotected loading = signal<boolean>( false );\n\t\n\tprivate dataService = inject( XiriDataService );\n\tprivate location = inject( Location );\n\tprivate dialog = inject( MatDialog );\n\tprivate downloadService = inject( XiriDownloadService );\n\tprivate responseHandler = inject( XiriResponseHandlerService );\n\t\n\t_disabled = computed( () => {\n\t\t\n\t\tif ( this.filterData() === null )\n\t\t\treturn true;\n\t\telse if ( this.button().disabled )\n\t\t\treturn true;\n\t\telse if ( this.loading() )\n\t\t\treturn true;\n\t\t\n\t\treturn this.disabled();\n\t} );\n\t\n\t_url = computed( () => {\n\t\tif ( this.url() )\n\t\t\treturn this.url();\n\t\treturn this.button().url;\n\t} );\n\t\n\tclicked( event: MouseEvent ) {\n\t\t\n\t\tevent.stopPropagation();\n\t\t\n\t\tif ( this._disabled() ) {\n\t\t\tthis.result.emit( {\n\t\t\t\t button: this.button(),\n\t\t\t\t result: null,\n\t\t\t\t done: false,\n\t\t\t\t loading: false,\n\t\t\t } );\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tswitch ( this.button().action ) {\n\t\t\tcase 'link':\n\t\t\tcase 'href':\n\t\t\tcase 'close':\n\t\t\tcase 'return':\n\t\t\t\tthis.result.emit( {\n\t\t\t\t\t button: this.button(),\n\t\t\t\t\t result: null,\n\t\t\t\t\t done: true,\n\t\t\t\t\t loading: false,\n\t\t\t\t } );\n\t\t\t\tbreak;\n\t\t\tcase 'dialog':\n\t\t\t\tthis.actionDialog();\n\t\t\t\tbreak;\n\t\t\tcase 'api':\n\t\t\t\tthis.actionApi();\n\t\t\t\tbreak;\n\t\t\tcase 'download':\n\t\t\t\tthis.actionDownload();\n\t\t\t\tbreak;\n\t\t\tcase 'back':\n\t\t\t\tthis.location.back();\n\t\t\t\tbreak;\n\t\t\tcase 'debug':\n\t\t\tcase 'simulate':\n\t\t\t\tthis.result.emit( {\n\t\t\t\t\t button: this.button(),\n\t\t\t\t\t result: true,\n\t\t\t\t\t done: true,\n\t\t\t\t\t loading: false,\n\t\t\t\t } );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconsole.log( \"xiri-button unknown action\", this.button().action );\n\t\t}\n\t}\n\t\n\tprivate actionDialog( dialogData?: any ) {\n\n\t\tlet data: any;\n\t\tif ( dialogData ) {\n\t\t\tdata = dialogData;\n\t\t} else {\n\t\t\tdata = <any> Object.assign( {}, this.button() );\n\t\t\tdata.type = 'load';\n\t\t}\n\t\tdata.filter = this.filterData();\n\n\t\tthis.loading.set( true );\n\n\t\tthis.dialogRef = this.dialog.open( XiriDialogComponent, {\n\t\t\tdata: data,\n\t\t} );\n\n\t\tthis.dialogRef.afterClosed().pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe( result => {\n\t\t\tthis.responseHandler.handle( result );\n\t\t\tthis.loading.set( false );\n\t\t\tthis.result.emit( {\n\t\t\t\t button: this.button(),\n\t\t\t\t result: result,\n\t\t\t\t done: true,\n\t\t\t\t loading: false,\n\t\t\t } );\n\t\t} );\n\t}\n\n\topenMenuDialog( event: MouseEvent, item: any ) {\n\t\tevent.stopPropagation();\n\t\tlet data = <any> Object.assign( {}, item );\n\t\tdata.type = 'load';\n\t\tthis.actionDialog( data );\n\t}\n\t\n\tprivate actionApi() {\n\t\t\n\t\tlet data = { ...this.filterData(), ...this.button().data };\n\t\tthis.loading.set( true );\n\t\t\n\t\tthis.result.emit( {\n\t\t\t button: this.button(),\n\t\t\t result: null,\n\t\t\t done: false,\n\t\t\t loading: true,\n\t\t } );\n\t\t\n\t\tthis.dataService.post( this.button().url, data )\n\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe( {\n\t\t\t\t next: ( result: any ) => {\n\t\t\t\t\t\t this.responseHandler.handle( result );\n\t\t\t\t\t\t this.result.emit( {\n\t\t\t\t\t\t\t button: this.button(),\n\t\t\t\t\t\t\t result: result,\n\t\t\t\t\t\t\t done: true,\n\t\t\t\t\t\t\t loading: false,\n\t\t\t\t\t\t } );\n\t\t\t\t\t\t this.loading.set( false );\n\t\t\t\t\t },\n\t\t\t\t\t error: ( err: any ) => {\n\t\t\t\t\t\t console.log( \"xiri-button api error\", err );\n\t\t\t\t\t\t this.result.emit( {\n\t\t\t\t\t\t\t button: this.button(),\n\t\t\t\t\t\t\t result: null,\n\t\t\t\t\t\t\t done: true,\n\t\t\t\t\t\t\t loading: false,\n\t\t\t\t\t\t } );\n\t\t\t\t\t\t this.loading.set( false );\n\t\t\t\t\t }\n\t\t\t\t } );\n\t}\n\n\tprivate actionDownload() {\n\n\t\tlet data = { ...this.filterData(), ...this.button().data };\n\t\tthis.loading.set( true );\n\n\t\tthis.dataService.postFileResponse( this._url(), data )\n\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe(\n\t\t\t\t\t{\n\t\t\t\t\t\tnext: ( result: any ) => {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlet filename: string;\n\t\t\t\t\t\t\tif ( this.button().filename != undefined )\n\t\t\t\t\t\t\t\tfilename = this.button().filename;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tfilename =\n\t\t\t\t\t\t\t\t\t( this.button().text != undefined ? this.button().text : 'Download' ) + '.csv'\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.downloadService.download( result, filename, false );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.result.emit( {\n\t\t\t\t\t\t\t\t button: this.button(),\n\t\t\t\t\t\t\t\t result: result,\n\t\t\t\t\t\t\t\t done: true,\n\t\t\t\t\t\t\t\t loading: false,\n\t\t\t\t\t\t\t } );\n\t\t\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror: ( err: any ) => {\n\t\t\t\t\t\t\tconsole.log( \"xiri-button download error\", err );\n\t\t\t\t\t\t\tthis.result.emit( {\n\t\t\t\t\t\t\t\t button: this.button(),\n\t\t\t\t\t\t\t\t result: null,\n\t\t\t\t\t\t\t\t done: true,\n\t\t\t\t\t\t\t\t loading: false,\n\t\t\t\t\t\t\t } );\n\t\t\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t}\n\n\tngOnDestroy(): void {\n\t\tif ( this.dialogRef ) {\n\t\t\tthis.dialogRef.close( null );\n\t\t}\n\t}\n}\n","@switch (button().action) {\n\t@case ('link') {\n\t\t<a [routerLink]=\"_url()\" [href]=\"_url()\" (click)=\"clicked($event)\">\n\t\t\t<xiri-buttonstyle [button]=\"button()\" [disabled]=\"_disabled()\" [loading]=\"loading()\"></xiri-buttonstyle>\n\t\t</a>\n\t}\n\t@case ('href') {\n\t\t<a [href]=\"_url()\" [target]=\"button().target\" (click)=\"clicked($event)\">\n\t\t\t<xiri-buttonstyle [button]=\"button()\" [disabled]=\"_disabled()\" [loading]=\"loading()\"></xiri-buttonstyle>\n\t\t</a>\n\t}\n\t@case ('menu') {\n\t\t<button mat-icon-button [matMenuTriggerFor]=\"menuRef\"\n\t\t [class]=\"button().color || 'primary'\"\n\t\t [matTooltip]=\"button().hint\"\n\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t (click)=\"$event.stopPropagation()\">\n\t\t\t<mat-icon>{{ button().icon }}</mat-icon>\n\t\t</button>\n\t\t<mat-menu #menuRef=\"matMenu\">\n\t\t\t@for (item of button().menuItems; track item) {\n\t\t\t\t@switch (item.action) {\n\t\t\t\t\t@case ('link') {\n\t\t\t\t\t\t<a mat-menu-item [routerLink]=\"item.url\">\n\t\t\t\t\t\t\t@if (item.icon) {\n\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}\n\t\t\t\t\t\t\t<span>{{ item.text }}</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t}\n\t\t\t\t\t@case ('href') {\n\t\t\t\t\t\t<a mat-menu-item [href]=\"item.url\" target=\"_blank\">\n\t\t\t\t\t\t\t@if (item.icon) {\n\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}\n\t\t\t\t\t\t\t<span>{{ item.text }}</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t}\n\t\t\t\t\t@case ('dialog') {\n\t\t\t\t\t\t<button mat-menu-item (click)=\"openMenuDialog($event, item)\">\n\t\t\t\t\t\t\t@if (item.icon) {\n\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}\n\t\t\t\t\t\t\t<span>{{ item.text }}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t</mat-menu>\n\t}\n\t@default {\n\t\t<xiri-buttonstyle [button]=\"button()\" [disabled]=\"_disabled()\" [loading]=\"loading()\" (click)=\"clicked($event)\"></xiri-buttonstyle>\n\t}\n}\n","import { afterNextRender, inject, Injectable, Injector, signal } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { XiriDataService } from '../services/data.service';\nimport { XiriSnackbarService } from '../services/snackbar.service';\nimport { XiriTableField } from '../raw-table/tabefield.interface';\n\n\n@Injectable()\nexport class XiriTableInlineEditService {\n\n\tprivate dataService = inject( XiriDataService );\n\tprivate snackbar = inject( XiriSnackbarService );\n\tprivate injector = inject( Injector );\n\n\teditingCell = signal<{ row: any; field: string } | null>( null );\n\teditingChipsValues = signal<string[]>( [] );\n\teditableOptionsLoading = signal( false );\n\tloadedEditableOptions = signal<{ value: string; label: string; color?: string }[]>( [] );\n\tsavingCell = signal<{ row: any; field: string } | null>( null );\n\n\tprivate editingOriginalValue: any = null;\n\tprivate editableOptionsSub: Subscription | null = null;\n\n\tprivate getEditUrl: () => string;\n\tprivate getDisplayedColumns: () => XiriTableField[];\n\tprivate abort$: Subject<void>;\n\tprivate onSaved: ( row: any, fieldId: string ) => void;\n\tprivate onDataUpdate: () => void;\n\tprivate onCallReturn: ( result: any ) => void;\n\n\tprivate get editUrl(): string { return this.getEditUrl?.(); }\n\tprivate get displayedColumns(): XiriTableField[] { return this.getDisplayedColumns?.() ?? []; }\n\n\tinit( config: {\n\t\tgetEditUrl: () => string;\n\t\tgetDisplayedColumns: () => XiriTableField[];\n\t\tabort$: Subject<void>;\n\t\tonSaved: ( row: any, fieldId: string ) => void;\n\t\tonDataUpdate: () => void;\n\t\tonCallReturn: ( result: any ) => void;\n\t} ): void {\n\t\tthis.getEditUrl = config.getEditUrl;\n\t\tthis.getDisplayedColumns = config.getDisplayedColumns;\n\t\tthis.abort$ = config.abort$;\n\t\tthis.onSaved = config.onSaved;\n\t\tthis.onDataUpdate = config.onDataUpdate;\n\t\tthis.onCallReturn = config.onCallReturn;\n\t}\n\n\tstart( row: any, column: XiriTableField, skipSavingCheck = false ): void {\n\t\tif ( !column.editable || !this.editUrl || ( !skipSavingCheck && this.savingCell() ) )\n\t\t\treturn;\n\t\tconst val = row[ column.id ];\n\t\tthis.editingOriginalValue = Array.isArray( val ) ? JSON.parse( JSON.stringify( val ) ) : val;\n\t\tif ( column.format === 'chips' && Array.isArray( val ) && !column.editableOptionsUrl ) {\n\t\t\tthis.editingChipsValues.set( val.map( ( c: any ) => {\n\t\t\t\tconst opt = column.editableOptions?.find( o => o.label === c.label );\n\t\t\t\treturn opt?.value || c.label;\n\t\t\t} ) );\n\t\t}\n\t\tthis.editingCell.set( { row, field: column.id } );\n\n\t\tif ( column.editableOptionsUrl ) {\n\t\t\tthis.editableOptionsLoading.set( true );\n\t\t\tthis.loadedEditableOptions.set( [] );\n\t\t\tthis.editableOptionsSub?.unsubscribe();\n\t\t\tconst separator = column.editableOptionsUrl.includes( '?' ) ? '&' : '?';\n\t\t\tconst optionsUrl = column.editableOptionsUrl + separator + 'id=' + encodeURIComponent( row.id ) + '&field=' + encodeURIComponent( column.id );\n\t\t\tthis.editableOptionsSub = this.dataService.get( optionsUrl ).subscribe( {\n\t\t\t\tnext: ( result: any ) => {\n\t\t\t\t\tthis.loadedEditableOptions.set( result );\n\t\t\t\t\tthis.editableOptionsLoading.set( false );\n\t\t\t\t\tif ( column.format === 'chips' && Array.isArray( val ) ) {\n\t\t\t\t\t\tthis.editingChipsValues.set( val.map( ( c: any ) => {\n\t\t\t\t\t\t\tconst opt = result.find( ( o: any ) => o.label === c.label );\n\t\t\t\t\t\t\treturn opt?.value || c.label;\n\t\t\t\t\t\t} ) );\n\t\t\t\t\t}\n\t\t\t\t\tthis.editableOptionsSub = null;\n\t\t\t\t\tthis.focus();\n\t\t\t\t},\n\t\t\t\terror: () => {\n\t\t\t\t\tthis.editableOptionsLoading.set( false );\n\t\t\t\t\tthis.editableOptionsSub = null;\n\t\t\t\t\tthis.cancel();\n\t\t\t\t\tthis.snackbar.error( 'Optionen konnten nicht geladen werden' );\n\t\t\t\t}\n\t\t\t} );\n\t\t} else {\n\t\t\tthis.focus();\n\t\t}\n\t}\n\n\tcancel(): void {\n\t\tconst editing = this.editingCell();\n\t\tif ( editing ) {\n\t\t\tediting.row[ editing.field ] = this.editingOriginalValue;\n\t\t\tthis.editingCell.set( null );\n\t\t\tthis.editingOriginalValue = null;\n\t\t}\n\t\tthis.editableOptionsSub?.unsubscribe();\n\t\tthis.editableOptionsSub = null;\n\t\tthis.loadedEditableOptions.set( [] );\n\t\tthis.editableOptionsLoading.set( false );\n\t}\n\n\tsave( row: any, column: XiriTableField ): void {\n\t\tconst editing = this.editingCell();\n\t\tif ( !editing || editing.row !== row || editing.field !== column.id ) return;\n\t\tconst newValue = row[ column.id ];\n\t\tconst originalValue = this.editingOriginalValue;\n\t\tthis.editingCell.set( null );\n\t\tthis.editingOriginalValue = null;\n\t\tthis.loadedEditableOptions.set( [] );\n\t\tthis.editableOptionsLoading.set( false );\n\n\t\tconst unchanged = Array.isArray( newValue )\n\t\t\t? JSON.stringify( newValue ) === JSON.stringify( originalValue )\n\t\t\t: newValue === originalValue;\n\t\tif ( unchanged ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = column.format === 'chips' && Array.isArray( newValue )\n\t\t\t? newValue.map( ( c: any ) => c.label )\n\t\t\t: newValue;\n\t\tconst payload = { id: row.id, field: column.id, value };\n\t\tthis.savingCell.set( { row, field: column.id } );\n\t\tthis.dataService.post( this.editUrl, payload ).pipe( takeUntil( this.abort$ ) ).subscribe( {\n\t\t\tnext: ( result: any ) => {\n\t\t\t\tthis.savingCell.set( null );\n\t\t\t\tif ( result?.updates ) {\n\t\t\t\t\tObject.keys( result.updates ).forEach( key => {\n\t\t\t\t\t\trow[ key ] = result.updates[ key ];\n\t\t\t\t\t} );\n\t\t\t\t\tthis.onDataUpdate();\n\t\t\t\t}\n\t\t\t\tthis.onSaved( row, column.id );\n\t\t\t\tthis.onCallReturn( result );\n\t\t\t},\n\t\t\terror: ( err: any ) => {\n\t\t\t\tthis.savingCell.set( null );\n\t\t\t\trow[ column.id ] = originalValue;\n\t\t\t\tthis.onDataUpdate();\n\t\t\t\tthis.snackbar.error( err.error?.error || 'Unknown Error' );\n\t\t\t}\n\t\t} );\n\t}\n\n\tisEditing( row: any, fieldId: string ): boolean {\n\t\tconst editing = this.editingCell();\n\t\treturn editing !== null && editing.row === row && editing.field === fieldId;\n\t}\n\n\tisSaving( row: any, fieldId: string ): boolean {\n\t\tconst saving = this.savingCell();\n\t\treturn saving !== null && saving.row === row && saving.field === fieldId;\n\t}\n\n\tonKeydown( event: KeyboardEvent, row: any, column: XiriTableField ): void {\n\t\tif ( event.key === 'Enter' ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.save( row, column );\n\t\t} else if ( event.key === 'Escape' ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.cancel();\n\t\t} else if ( event.key === 'Tab' ) {\n\t\t\tconst matSelect = ( event.target as HTMLElement ).closest( 'mat-select' );\n\t\t\tif ( matSelect && matSelect.classList.contains( 'mat-mdc-select-open' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tconst direction = event.shiftKey ? -1 : 1;\n\t\t\tconst nextColumn = this.getAdjacentEditableColumn( column.id, direction );\n\t\t\tthis.save( row, column );\n\t\t\tif ( nextColumn ) {\n\t\t\t\tthis.start( row, nextColumn, true );\n\t\t\t}\n\t\t}\n\t}\n\n\tfocus(): void {\n\t\tafterNextRender( () => {\n\t\t\tconst el = document.querySelector( '.xiri-inline-edit input, .xiri-inline-edit mat-select' ) as HTMLElement;\n\t\t\tel?.focus();\n\t\t}, { injector: this.injector } );\n\t}\n\n\tgetAdjacentEditableColumn( currentField: string, direction: 1 | -1 ): XiriTableField | null {\n\t\tconst noInlineEdit = new Set( [ 'buttons', 'icon', 'html', 'link', 'input', 'text2', 'textn', 'number', 'header' ] );\n\t\tconst currentIndex = this.displayedColumns.findIndex( c => c.id === currentField );\n\t\tif ( currentIndex === -1 ) return null;\n\t\tfor ( let i = currentIndex + direction; i >= 0 && i < this.displayedColumns.length; i += direction ) {\n\t\t\tconst col = this.displayedColumns[ i ];\n\t\t\tif ( col.editable && !noInlineEdit.has( col.format ) ) {\n\t\t\t\treturn col;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tflashSaved( row: any, fieldId: string, dataSource: any ): void {\n\t\tafterNextRender( () => {\n\t\t\tconst rowIndex = dataSource.data.indexOf( row );\n\t\t\tconst colIndex = this.displayedColumns.findIndex( c => c.id === fieldId );\n\t\t\tif ( rowIndex === -1 || colIndex === -1 ) return;\n\t\t\tconst rows = document.querySelectorAll( '.xiritable tr.mat-mdc-row' );\n\t\t\tconst rowEl = rows[ rowIndex ];\n\t\t\tif ( !rowEl ) return;\n\t\t\tconst cells = rowEl.querySelectorAll( 'td.mat-mdc-cell' );\n\t\t\tconst cell = cells[ colIndex ] as HTMLElement;\n\t\t\tif ( !cell ) return;\n\t\t\tcell.classList.add( 'xiri-cell-saved' );\n\t\t\tsetTimeout( () => cell.classList.remove( 'xiri-cell-saved' ), 500 );\n\t\t}, { injector: this.injector } );\n\t}\n\n\tgetOptions( column: XiriTableField ): { value: string; label: string; color?: string }[] {\n\t\treturn column.editableOptions ?? this.loadedEditableOptions();\n\t}\n\n\tonChipsChange( row: any, column: XiriTableField, selectedValues: string[] ): void {\n\t\tthis.editingChipsValues.set( selectedValues );\n\t\tconst opts = this.getOptions( column );\n\t\trow[ column.id ] = selectedValues.map( val => {\n\t\t\tconst opt = opts.find( o => o.value === val );\n\t\t\treturn { label: opt?.label || val, color: opt?.color || '' };\n\t\t} );\n\t}\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { XiriButton, XiriButtonComponent, XiriButtonResult } from \"../button/button.component\";\n\n\nexport interface XiriButtonlineSettings {\n\tbuttons: XiriButton[]\n\tclass: string\n}\n\n@Component( {\n\t selector: 'xiri-buttonline',\n\t templateUrl: './buttonline.component.html',\n\t styleUrl: './buttonline.component.scss',\n\t imports: [\n\t\t XiriButtonComponent\n\t ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriButtonlineComponent {\n\t\n\tsettings = input.required<XiriButtonlineSettings>();\n\tdisabled = input<boolean>( false );\n\tfilterData = input<any>( undefined );\n\t\n\tresult = output<XiriButtonResult>();\n}\n","<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","import { Injectable } from '@angular/core';\n\n\n@Injectable( {\n\t providedIn: 'root'\n } )\nexport class XiriSessionStorageService {\n\t\n\tprivate readonly isSupported: boolean = false;\n\tprivate data: { [ name: string ]: any } = {};\n\t\n\tconstructor() {\n\t\t\n\t\tif ( window.sessionStorage )\n\t\t\tthis.isSupported = true;\n\t}\n\t\n\tpublic clear() {\n\t\t\n\t\tthis.data = {};\n\t\tif ( this.isSupported )\n\t\t\tsessionStorage.clear();\n\t}\n\t\n\tpublic set( name: string, value: any ) {\n\t\t\n\t\tlet val = {\n\t\t\ttime: Date.now(),\n\t\t\tvalue: value,\n\t\t}\n\t\t\n\t\tthis.data[ name ] = val;\n\t\tif ( this.isSupported )\n\t\t\tsessionStorage.setItem( name, JSON.stringify( val ) );\n\t}\n\t\n\tprivate getStruct( name: string ): any {\n\t\t\n\t\tif ( this.data[ name ] )\n\t\t\treturn this.data[ name ];\n\t\t\n\t\tif ( this.isSupported ) {\n\t\t\tconst valstr = sessionStorage.getItem( name );\n\t\t\tif ( valstr ) {\n\t\t\t\tconst val = JSON.parse( valstr );\n\t\t\t\tthis.data[ name ] = val;\n\t\t\t\treturn val;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn null;\n\t}\n\t\n\tpublic remove( name: string ) {\n\t\t\n\t\tdelete this.data[ name ];\n\t\tif ( this.isSupported )\n\t\t\tsessionStorage.removeItem( name );\n\t}\n\t\n\tpublic get( name: string ): any {\n\t\t\n\t\tlet val = this.getStruct( name );\n\t\tif ( !val )\n\t\t\treturn null;\n\t\t\n\t\treturn val.value;\n\t}\n\t\n\t/**\n\t * @param name\n\t * @param maxTime in seconds\n\t */\n\tpublic getTimeout( name: string, maxTime: number ): any {\n\t\t\n\t\tlet val = this.getStruct( name );\n\t\tif ( !val )\n\t\t\treturn null;\n\t\t\n\t\tif ( val.time < Date.now() - maxTime * 1000 ) {\n\t\t\tthis.remove( name );\n\t\t\treturn null;\n\t\t}\n\t\t\n\t\treturn val.value;\n\t}\n\t\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable( {\n\t providedIn: 'root'\n } )\nexport class XiriNumberService {\n\t\n\tprivate currentLocale: string = 'de-DE';\n\t\n\tpublic setLocale( locale: string ) {\n\t\tthis.currentLocale = locale;\n\t}\n\t\n\tpublic formatNumber( value: number, webformat?: string ): string {\n\t\tif ( value === null || value === undefined ) {\n\t\t\treturn '';\n\t\t}\n\t\t\n\t\tlet options: Intl.NumberFormatOptions;\n\t\t\n\t\tswitch ( webformat ) {\n\t\t\tcase 'integer':\n\t\t\t\toptions = {\n\t\t\t\t\tstyle: 'decimal',\n\t\t\t\t\tminimumFractionDigits: 0,\n\t\t\t\t\tmaximumFractionDigits: 0\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'float1':\n\t\t\t\toptions = {\n\t\t\t\t\tstyle: 'decimal',\n\t\t\t\t\tminimumFractionDigits: 1,\n\t\t\t\t\tmaximumFractionDigits: 1\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'float2':\n\t\t\t\toptions = {\n\t\t\t\t\tstyle: 'decimal',\n\t\t\t\t\tminimumFractionDigits: 2,\n\t\t\t\t\tmaximumFractionDigits: 2\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'float3':\n\t\t\t\toptions = {\n\t\t\t\t\tstyle: 'decimal',\n\t\t\t\t\tminimumFractionDigits: 3,\n\t\t\t\t\tmaximumFractionDigits: 3\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'float4':\n\t\t\t\toptions = {\n\t\t\t\t\tstyle: 'decimal',\n\t\t\t\t\tminimumFractionDigits: 4,\n\t\t\t\t\tmaximumFractionDigits: 4\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\toptions = { style: 'decimal' };\n\t\t}\n\t\t\n\t\treturn new Intl.NumberFormat( this.currentLocale, options ).format( value );\n\t}\n}","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { XiriButton, XiriButtonComponent, XiriButtonResult } from '../button/button.component';\nimport { XiriColor } from '../types/color.type';\n\nexport interface XiriEmptyStateSettings {\n\ticon?: string\n\ticonColor?: XiriColor\n\ttitle?: string\n\tdescription?: string\n\tbutton?: XiriButton\n}\n\n@Component( {\n\t selector: 'xiri-empty-state',\n\t templateUrl: './empty-state.component.html',\n\t styleUrl: './empty-state.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, XiriButtonComponent ]\n } )\nexport class XiriEmptyStateComponent {\n\n\tsettings = input.required<XiriEmptyStateSettings>();\n\tbuttonResult = output<XiriButtonResult>();\n}\n","<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","import {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tcomputed,\n\tDestroyRef,\n\teffect,\n\tinject,\n\tinput,\n\tOnDestroy,\n\tOnInit,\n\toutput,\n\tsignal,\n\tTemplateRef,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort, MatSortable, MatSortHeader } from '@angular/material/sort';\nimport {\n\tMatCell, MatCellDef,\n\tMatColumnDef, MatFooterCell, MatFooterCellDef, MatFooterRow, MatFooterRowDef,\n\tMatHeaderCell, MatHeaderCellDef,\n\tMatHeaderRow, MatHeaderRowDef,\n\tMatRow, MatRowDef,\n\tMatTable,\n\tMatTableDataSource\n} from '@angular/material/table';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { Router, RouterLink } from '@angular/router';\nimport { Observable, Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { XiriDialogComponent } from \"../dialog/dialog.component\";\nimport { XiriDataService } from '../services/data.service';\nimport { XiriButton, XiriButtonComponent, XiriButtonResult } from \"../button/button.component\";\nimport { XiriSnackbarService } from '../services/snackbar.service';\nimport { XiriResponseHandlerService } from '../services/response-handler.service';\nimport { XiriDownloadService } from '../services/download.service';\nimport { XiriTableInlineEditService } from './inline-edit.service';\nimport { XiriButtonlineComponent, XiriButtonlineSettings } from \"../buttonline/buttonline.component\";\nimport { XiriDynData } from \"../dyncomponent/dyndata.interface\";\nimport { XiriTableField } from \"../raw-table/tabefield.interface\";\nimport { XiriSessionStorageService } from \"../services/sessionStorage.service\";\nimport { XiriNumberService } from \"../services/number.service\";\nimport { SafehtmlPipe } from '../pipes/safehtml.pipe';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { FormsModule } from '@angular/forms';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatSuffix } from '@angular/material/form-field';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { XiriButtonstyleComponent } from '../buttonstyle/buttonstyle.component';\nimport { XiriSearchComponent } from '../search/search.component';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\nimport { MatSelect, MatOption } from '@angular/material/select';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MatCard } from '@angular/material/card';\nimport { XiriEmptyStateComponent } from '../empty-state/empty-state.component';\nimport { XiriColor } from '../types/color.type';\n\n\nexport interface XiriTableEmptyState {\n\ticon?: string\n\ticonColor?: XiriColor\n\ttitle?: string\n\tdescription?: string\n}\n\nexport interface XiriTableOptions {\n\treload?: boolean\n\tdense?: boolean\n\tsort?: boolean\n\tsearch?: boolean\n\tclass?: string\n\tpagination?: boolean\n\titemsPerPage?: number\n\tpageSizes?: number[]\n\tselect?: boolean\n\tselectButtons?: XiriButton[]\n\ttitle?: string\n\ttextNoData?: string\n\temptyState?: XiriTableEmptyState\n\tbuttons?: XiriButtonlineSettings\n\tminWidth?: string\n\tsaveState?: boolean\n\tsaveStateId?: string\n\tsaveInput?: string\n\tsaveInputUrl?: string\n\tborders?: boolean\n\tbordersHeader?: boolean\n\tfooter?: boolean\n\tserverSide?: boolean\n\tscrollHeight?: string\n\teditUrl?: string\n}\n\nexport interface XiriTableSettings {\n\turl?: string\n\tdata?: any\n\tfields?: XiriTableField[]\n\toptions?: XiriTableOptions\n\thasFilter?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-table',\n\t templateUrl: './table.component.html',\n\t styleUrl: './table.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t encapsulation: ViewEncapsulation.None,\n\t providers: [ XiriTableInlineEditService ],\n\t imports: [ MatCard,\n\t MatIconButton,\n\t MatIcon,\n\t XiriButtonlineComponent,\n\t XiriSearchComponent,\n\t MatButton,\n\t MatTable,\n\t MatSort,\n\t MatColumnDef,\n\t MatHeaderCell,\n\t MatSortHeader,\n\t MatCell,\n\t RouterLink,\n\t XiriButtonstyleComponent,\n\t MatTooltip,\n\t MatFormField, MatSuffix,\n\t MatInput,\n\t FormsModule,\n\t MatCheckbox,\n\t MatHeaderRow,\n\t MatRow,\n\t MatProgressSpinner,\n\t MatPaginator,\n\t NgTemplateOutlet,\n\t SafehtmlPipe, XiriButtonComponent, MatHeaderCellDef, MatCellDef, MatHeaderRowDef, MatRowDef,\n\t MatFooterRow, MatFooterRowDef, MatFooterCell, MatFooterCellDef,\n\t MatMenu, MatMenuItem, MatMenuTrigger,\n\t MatSelect, MatOption,\n\t XiriEmptyStateComponent ]\n } )\nexport class XiriTableComponent implements OnInit, OnDestroy {\n\t\n\tprivate dialog: MatDialog = inject( MatDialog );\n\tprivate dataService: XiriDataService = inject( XiriDataService );\n\tprivate router: Router = inject( Router );\n\tprivate sessionStorageService: XiriSessionStorageService = inject( XiriSessionStorageService );\n\tprivate numberService: XiriNumberService = inject( XiriNumberService );\n\tprivate snackbar = inject( XiriSnackbarService );\n\tprivate responseHandler = inject( XiriResponseHandlerService );\n\tprivate downloadService = inject( XiriDownloadService );\n\tinlineEdit = inject( XiriTableInlineEditService );\n\tprotected _changeDetectorRef: ChangeDetectorRef = inject( ChangeDetectorRef );\n\tprivate destroyRef = inject( DestroyRef );\n\t\n\tdyncomponent = input<TemplateRef<any>>();\n\tsettings = input.required<XiriTableSettings>();\n\tfilterData = input<any>( undefined );\n\tclickedRow = output<any>();\n\n\tpaginator = viewChild.required<MatPaginator>( MatPaginator );\n\tsort = viewChild.required<MatSort>( MatSort );\n\ttable = viewChild.required<MatTable<any>>( MatTable );\n\tloading = signal<boolean>( true );\n\tprivate _totalCount = signal<number>( 0 );\n\t\n\tdisplayedColumns: XiriTableField[] = [];\n\tcolumnsToDisplay: string[] = [];\n\tcolumnsToSearch: string[] = [];\n\tdataSource: MatTableDataSource<any> = new MatTableDataSource();\n\tprotected _displayeddata: readonly any[];\n\t_alldata = signal<any[] | null>( null );\n\tfooter = [];\n\t\n\textraHeaderFields: XiriTableField[] = [];\n\textraHeaders: string[] = [];\n\t\n\tpublic selection = new SelectionModel<any>( true, [] );\n\tprivate dialogRef?: MatDialogRef<any>;\n\tprivate reloadAbort$ = new Subject<void>();\n\tpublic options: XiriTableOptions = {\n\t\treload: false,\n\t\tdense: false,\n\t\tsort: true,\n\t\tsearch: true,\n\t\tpagination: true,\n\t\titemsPerPage: 50,\n\t\tpageSizes: [ 10, 25, 50, 100, 500 ],\n\t\tselect: false,\n\t\ttitle: '',\n\t\ttextNoData: 'no data found',\n\t\tsaveInput: null,\n\t\tsaveInputUrl: null,\n\t\tsaveState: false,\n\t\tsaveStateId: null,\n\t\tborders: false,\n\t\tbordersHeader: false,\n\t\tfooter: false,\n\t\tserverSide: false,\n\t};\n\t\n\tpublic dynData: {\n\t\tdata: XiriDynData[],\n\t\tfilterData: any,\n\t} = { data: null, filterData: undefined };\n\tpublic errorMsg: string = '';\n\tprivate _firstData: boolean = true;\n\tpublic searchText: string = '';\n\tpublic searchTextInit: string = '';\n\n\tprivate tableStateKey(): string | null {\n\t\treturn this.options.saveStateId ? this.options.saveStateId + ':table' : null;\n\t}\n\n\ttrackByRowId = ( _: number, row: any ): any => row.id ?? _;\n\n\t// Inline edit signals delegated to inlineEdit service\n\tget editingCell() { return this.inlineEdit.editingCell; }\n\tget editingChipsValues() { return this.inlineEdit.editingChipsValues; }\n\tget editableOptionsLoading() { return this.inlineEdit.editableOptionsLoading; }\n\tget loadedEditableOptions() { return this.inlineEdit.loadedEditableOptions; }\n\tget savingCell() { return this.inlineEdit.savingCell; }\n\t\n\t_filterData = computed( () => {\n\t\t\n\t\tlet values = this.filterData();\n\t\t\n\t\tif ( values === undefined )\n\t\t\treturn undefined;\n\t\telse if ( values === null )\n\t\t\treturn null;\n\t\t\n\t\treturn values;\n\t} );\n\t\n\tconstructor() {\n\t\t\n\t\teffect( () => {\n\t\t\tconst filterData = this._filterData();\n\n\t\t\tthis.loading.set( true );\n\t\t\tthis.reloadAbort$.next();\n\n\t\t\tif ( filterData === null )\n\t\t\t\treturn;\n\n\t\t\tthis.loadData();\n\t\t} );\n\t\t\n\t\teffect( () => {\n\t\t\tif ( this._alldata() === null )\n\t\t\t\tthis.dataSource.data = [];\n\t\t\telse\n\t\t\t\tthis.dataSource.data = this._alldata();\n\t\t} );\n\t}\n\t\n\tpublic ngOnInit() {\n\t\t\n\t\tif ( this.settings().options )\n\t\t\tthis.options = { ...this.options, ...this.settings().options };\n\t\tif ( this.settings().fields )\n\t\t\tthis.loadFields( this.settings().fields );\n\n\t\tthis.inlineEdit.init( {\n\t\t\tgetEditUrl: () => this.options.editUrl,\n\t\t\tgetDisplayedColumns: () => this.displayedColumns,\n\t\t\tabort$: this.reloadAbort$,\n\t\t\tonSaved: ( row, fieldId ) => this.inlineEdit.flashSaved( row, fieldId, this.dataSource ),\n\t\t\tonDataUpdate: () => this.dataSource._updateChangeSubscription(),\n\t\t\tonCallReturn: ( result ) => this.callReturn( result ),\n\t\t} );\n\n\t\tif ( this.options.pagination )\n\t\t\tthis.paginator().pageSize = <number> this.options.itemsPerPage;\n\t\tif ( this.options.pagination && !this.options.serverSide )\n\t\t\tthis.dataSource.paginator = this.paginator();\n\t\tif ( this.options.sort && !this.options.serverSide ) {\n\t\t\tthis.dataSource.sort = this.sort();\n\t\t\tthis.dataSource.sortingDataAccessor = this.getSortingDataAccessor();\n\t\t\tif ( this.options.pagination )\n\t\t\t\tthis.sort().sortChange.subscribe( () => this.paginator().firstPage() );\n\t\t}\n\n\t\tif ( this.options.serverSide ) {\n\t\t\tthis.paginator().page\n\t\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t\t.subscribe( () => {\n\t\t\t\t\tthis.reload();\n\t\t\t\t} );\n\n\t\t\tif ( this.options.sort ) {\n\t\t\t\tthis.sort().sortChange\n\t\t\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t\t\t.subscribe( () => {\n\t\t\t\t\t\tthis.paginator().firstPage();\n\t\t\t\t\t\tthis.reload();\n\t\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\t\n\t\tif ( this.options.search && !this.options.serverSide ) {\n\t\t\tthis.dataSource.filterPredicate = ( data: object, filter: string ): boolean => {\n\t\t\t\tconst dataStr = this.columnsToSearch.reduce( ( currentTerm: string, key: string ) => {\n\t\t\t\t\treturn currentTerm + ( data as { [ key: string ]: any } )[ key ] + '◬';\n\t\t\t\t}, '' ).toLowerCase();\n\t\t\t\treturn dataStr.indexOf( filter ) != -1;\n\t\t\t};\n\t\t}\n\t\t\n\t\tif ( this.options.buttons )\n\t\t\tthis.options.buttons.class = 'small';\n\t\t\n\t\tthis.dataSource.connect()\n\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe( data => {\n\t\t\t\t\tthis._displayeddata = data || [];\n\t\t\t\t\t\n\t\t\t\t\tif ( this.options.saveState && this._firstData === false && this.tableStateKey() ) {\n\t\t\t\t\t\tthis.sessionStorageService.set( this.tableStateKey(), {\n\t\t\t\t\t\t\tpageIndex: this.paginator()?.pageIndex,\n\t\t\t\t\t\t\tpageSize: this.paginator()?.pageSize,\n\t\t\t\t\t\t\tfilter: this.searchText,\n\t\t\t\t\t\t\tsort: this.sort()?.active,\n\t\t\t\t\t\t\tsortDirection: this.sort()?.direction,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif ( this.options.footer ) {\n\t\t\t\t\t\tthis.displayedColumns.forEach( ( column: XiriTableField ) => {\n\t\t\t\t\t\t\tif ( column.footer === 'no' )\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif ( column.footer === 'count' ) {\n\t\t\t\t\t\t\t\tthis.footer[ column.id ] = this._displayeddata.length + '#';\n\t\t\t\t\t\t\t} else if ( column.footer === 'sum' ) {\n\t\t\t\t\t\t\t\tlet sum = 0;\n\t\t\t\t\t\t\t\tthis._displayeddata.forEach( ( row: any ) => {\n\t\t\t\t\t\t\t\t\tsum += +row[ column.id ][ 1 ];\n\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\tif ( !column.webformat )\n\t\t\t\t\t\t\t\t\tthis.footer[ column.id ] = sum;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tthis.footer[ column.id ] = this.numberService.formatNumber( sum, column.webformat );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t} );\n\n\t\t// if ( !this.settings().hasFilter )\n\t\t//\tthis.loadData();\n\t}\n\t\n\tprivate loadData() {\n\t\t\n\t\tthis.errorMsg = '';\n\t\tthis.selection.clear();\n\t\tthis.dynData.data = null;\n\t\t\n\t\tif ( this.settings().data ) {\n\t\t\tthis.options.reload = false;\n\t\t\tthis.setData( this.settings().data );\n\t\t\tthis.loading.set( false );\n\t\t} else if ( this.settings().url ) {\n\n\t\t\tlet api: Observable<any>;\n\t\t\tlet payload: any = this.settings().hasFilter ? { ...this._filterData() } : {};\n\n\t\t\tif ( this.options.serverSide ) {\n\t\t\t\tpayload._page = this.paginator().pageIndex;\n\t\t\t\tpayload._pageSize = this.paginator().pageSize;\n\t\t\t\tif ( this.sort().active ) {\n\t\t\t\t\tpayload._sort = this.sort().active;\n\t\t\t\t\tpayload._sortDir = this.sort().direction;\n\t\t\t\t}\n\t\t\t\tif ( this.searchText ) {\n\t\t\t\t\tpayload._search = this.searchText;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tapi = this.dataService.post( this.settings().url, Object.keys( payload ).length > 0 ? payload : null );\n\t\t\t\n\t\t\tapi.pipe( takeUntil( this.reloadAbort$ ) ).subscribe( {\n\t\t\t\tnext: ( res: any ) => {\n\n\t\t\t\t\tif ( !res || !res.data ) {\n\t\t\t\t\t\tthis.errorMsg = 'ERROR: unknown server response';\n\t\t\t\t\t\tthis._alldata.set( [] );\n\t\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( res.fields )\n\t\t\t\t\t\tthis.loadFields( res.fields );\n\t\t\t\t\tif ( res.summary )\n\t\t\t\t\t\tthis.dynData.data = res.summary;\n\t\t\t\t\telse if ( res.components )\n\t\t\t\t\t\tthis.dynData.data = res.components;\n\n\t\t\t\t\tif ( res.footer )\n\t\t\t\t\t\tthis.setFooter( res.footer );\n\t\t\t\t\tif ( res.totalCount !== undefined && this.options.serverSide ) {\n\t\t\t\t\t\tthis._totalCount.set( res.totalCount );\n\t\t\t\t\t\tthis.paginator().length = res.totalCount;\n\t\t\t\t\t}\n\t\t\t\t\tthis.setData( res.data );\n\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t\t\t}, error: ( err: any ) => {\n\t\t\t\t\tthis.errorMsg = err.error?.error ? err.error.error : err.statusText;\n\t\t\t\t\tthis._alldata.set( [] );\n\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\t\n\tprivate loadFields( fields: XiriTableField[] ) {\n\t\t\n\t\tthis.displayedColumns = [];\n\t\tthis.columnsToDisplay = [];\n\t\tthis.columnsToSearch = [];\n\t\tthis.extraHeaderFields = [];\n\t\tthis.extraHeaders = [];\n\t\t\n\t\tif ( this.options.select )\n\t\t\tthis.columnsToDisplay.push( 'select' );\n\t\t\n\t\tfor ( let fid = 0; fid != fields.length; fid++ ) {\n\t\t\tconst column = fields[ fid ];\n\t\t\t\n\t\t\tif ( column.format == 'header' ) {\n\t\t\t\tthis.extraHeaderFields.push( column );\n\t\t\t\tthis.extraHeaders.push( column.id );\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\tif ( column.id === undefined )\n\t\t\t\tcolumn.id = '' + fid;\n\t\t\tif ( column.format == 'id' )\n\t\t\t\tcontinue;\n\t\t\tif ( !column.display )\n\t\t\t\tcolumn.display = '';\n\t\t\tif ( column.format )\n\t\t\t\tcolumn.display = column.format + ' ' + column.display;\n\t\t\tif ( column.align )\n\t\t\t\tcolumn.display += ` align-${ column.align }`;\n\t\t\t\n\t\t\tcolumn.sort = column.sort === undefined ? true : column.sort;\n\t\t\tcolumn.search = column.search === undefined ? true : column.search;\n\t\t\tcolumn.sticky = column.sticky === undefined ? false : column.sticky;\n\t\t\tcolumn.hide = column.hide === undefined ? false : column.hide;\n\t\t\t\n\t\t\tif ( !column.hide ) {\n\t\t\t\tthis.displayedColumns.push( column );\n\t\t\t\tthis.columnsToDisplay.push( column.id );\n\t\t\t}\n\t\t\t\n\t\t\tif ( column.search )\n\t\t\t\tthis.columnsToSearch.push( column.id );\n\t\t}\n\t}\n\t\n\tprivate setData( data: any[] ): void {\n\t\t\n\t\tthis._alldata.set( data );\n\t\t\n\t\tif ( this._firstData ) {\n\t\t\tthis._firstData = false;\n\t\t\t\n\t\t\tif ( this.options.saveState && this.tableStateKey() ) {\n\t\t\t\tlet data = this.sessionStorageService.getTimeout( this.tableStateKey(), 3600 );\n\t\t\t\tif ( !data )\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\tif ( data.filter !== undefined ) {\n\t\t\t\t\tthis.searchText = data.filter;\n\t\t\t\t\tthis.searchTextInit = data.filter;\n\t\t\t\t}\n\t\t\t\tif ( data.sort !== undefined && data.sortDirection !== undefined )\n\t\t\t\t\tthis.sort().sort( ( { id: data.sort, start: data.sortDirection } ) as MatSortable );\n\t\t\t\tif ( data.pageSize !== undefined && data.pageIndex !== undefined ) {\n\t\t\t\t\tthis.paginator().pageIndex = data.pageIndex;\n\t\t\t\t\tthis.paginator()._changePageSize( data.pageSize );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tprivate setFooter( footer: any ): void {\n\t\tthis.footer = footer;\n\t\t\n\t\tthis.displayedColumns.forEach( ( column: XiriTableField ) => {\n\t\t\tif ( Array.isArray( this.footer[ column.id ] ) )\n\t\t\t\tthis.footer[ column.id ] = this.footer[ column.id ][ 0 ];\n\t\t} );\n\t}\n\t\n\treload(): void {\n\t\tif ( this.loading() )\n\t\t\treturn;\n\t\t\n\t\tthis.loading.set( true );\n\t\tthis.loadData();\n\t}\n\t\n\tsearchDo( $event: any ) {\n\t\tthis.searchText = $event.trim().toLowerCase();\n\n\t\tif ( this.options.serverSide ) {\n\t\t\tthis.paginator().firstPage();\n\t\t\tthis.reload();\n\t\t} else {\n\t\t\tthis.dataSource.filter = this.searchText;\n\t\t\tif ( this.dataSource.paginator ) {\n\t\t\t\tthis.dataSource.paginator.firstPage();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tisAllSelected() {\n\t\tlet found: number = 0;\n\t\tthis._displayeddata.forEach( row => {\n\t\t\tif ( row.select !== false ) {\n\t\t\t\tif ( !this.selection.isSelected( row ) )\n\t\t\t\t\tfound++;\n\t\t\t}\n\t\t} );\n\t\treturn found === 0;\n\t}\n\t\n\tmasterToggle() {\n\t\tthis.isAllSelected() ? this.selection.clear() : this._displayeddata.forEach( row => {\n\t\t\tif ( row.select !== false )\n\t\t\t\tthis.selection.select( row );\n\t\t} );\n\t}\n\t\n\tclicked( row: any ) {\n\t\tthis.clickedRow.emit( row );\n\t}\n\t\n\topenDialog( event: MouseEvent, button: any, id: any, subid: any, row: any ) {\n\t\t\n\t\tevent.stopPropagation();\n\t\tlet data = Object.assign( {}, button );\n\t\tdata.type = 'load';\n\t\tdata.url = row[ id ][ subid ];\n\t\t\n\t\tthis.startDialog( data );\n\t}\n\t\n\topenMenuDialog( event: MouseEvent, item: any, columnId: string, buttonIndex: number, menuItemIndex: number, row: any ) {\n\t\tevent.stopPropagation();\n\t\tlet data = Object.assign( {}, item );\n\t\tdata.type = 'load';\n\t\tdata.url = row[ columnId ][ buttonIndex ][ menuItemIndex ];\n\t\tthis.startDialog( data );\n\t}\n\n\topenDialogSelection( event: MouseEvent, button: XiriButton ) {\n\t\t\n\t\tevent.stopPropagation();\n\t\tif ( this.selection.isEmpty() )\n\t\t\treturn true;\n\t\t\n\t\tlet data = <any> Object.assign( {}, button );\n\t\tdata.type = 'data';\n\t\tdata.data = this.getSelectionIDs();\n\t\t\n\t\tthis.startDialog( data );\n\t\treturn true;\n\t}\n\t\n\tprivate startDialog( data: object ) {\n\t\t\n\t\tthis.dialogRef = this.dialog.open( XiriDialogComponent, {\n\t\t\tdata: data,\n\t\t} );\n\t\t\n\t\tthis.dialogRef.afterClosed().subscribe( {\n\t\t\t next: ( result ) => this.callReturn( result )\n\t\t } );\n\t}\n\t\n\tapiCall( event: MouseEvent, url: string ) {\n\t\tevent.stopPropagation();\n\t\tthis.makeApiCall( this.dataService.get( url ) );\n\t}\n\t\n\tapiCallSelection( event: MouseEvent, button: XiriButton ) {\n\t\tevent.stopPropagation();\n\t\tif ( this.selection.isEmpty() )\n\t\t\treturn;\n\t\t\n\t\tlet data = { data: this.getSelectionIDs() };\n\t\t\n\t\tthis.makeApiCall( this.dataService.post( button.url ? button.url : '', data ) );\n\t}\n\t\n\tsaveCall( event: MouseEvent, button: XiriButton, row, url: string ) {\n\t\tevent.stopPropagation();\n\t\t\n\t\tif ( !this.saveCallCheck( button, row ) )\n\t\t\treturn;\n\t\t\n\t\tlet data = {};\n\t\tfor ( let i = 0; i != button.send.length; i++ ) {\n\t\t\tlet k = button.send[ i ];\n\t\t\tdata[ k ] = row[ k ];\n\t\t}\n\t\t\n\t\tthis.dataService.post( url, data ).pipe( takeUntil( this.reloadAbort$ ) ).subscribe( {\n\t\t\tnext: ( result ) => this.callReturn( result ),\n\t\t\terror: ( err: any ) => {\n\t\t\t\tconsole.log( \"table save error\", err );\n\t\t\t\tthis.snackbar.error( err.error?.error || 'Unknown Error' );\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tsaveCallCheck( button: XiriButton, row ): boolean {\n\t\t\n\t\tfor ( let i = 0; i != button.check.length; i++ ) {\n\t\t\tlet k = button.check[ i ];\n\t\t\t\n\t\t\tif ( row[ k ] === null || row[ k ] === undefined || row[ k ] === '' ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn true;\n\t}\n\t\n\tdownloadSelection( event: MouseEvent, button: XiriButton ) {\n\t\tevent.stopPropagation();\n\t\tif ( this.selection.isEmpty() )\n\t\t\treturn;\n\n\t\tconst url = button.url ? button.url : '';\n\t\tthis.dataService.postFileResponse( url, this.getSelectionIDs() ).pipe( takeUntil( this.reloadAbort$ ) ).subscribe( {\n\t\t\tnext: ( result: any ) => {\n\t\t\t\tthis.downloadService.download( result, 'download.csv', false );\n\t\t\t},\n\t\t\terror: ( err: any ) => {\n\t\t\t\tthis.snackbar.error( err.error?.error || 'Download Error' );\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tprivate makeApiCall( apicall: Observable<object> ) {\n\t\t\n\t\tapicall.pipe( takeUntil( this.reloadAbort$ ) ).subscribe( {\n\t\t\tnext: ( result ) => this.callReturn( result ),\n\t\t\terror: ( err: any ) => {\n\t\t\t\tconsole.log( \"table api error\", err );\n\t\t\t\tthis.snackbar.error( err.error?.error || 'Unknown Error' );\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tpublic buttonReturn( event: XiriButtonResult ) {\n\t\t\n\t\tif ( !event.done )\n\t\t\treturn;\n\t\t\n\t\tthis.callReturn( event.result );\n\t}\n\t\n\tprivate callReturn( result: any ) {\n\t\tthis.responseHandler.handle( result, {\n\t\t\tonTableRefresh: () => this.reload(),\n\t\t\tonTableUpdate: ( id, field, content ) => {\n\t\t\t\tconst i = this.dataSource.data.findIndex( ( x: any ) => x.id === id );\n\t\t\t\tif ( i == -1 )\n\t\t\t\t\treturn;\n\t\t\t\tthis.dataSource.data[ i ][ field ] = content;\n\t\t\t\tthis.dataSource._updateChangeSubscription();\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tprivate getSelectionIDs(): number[] {\n\t\t\n\t\treturn this.selection.selected.map( ( item ) => {\n\t\t\treturn +item[ 'id' ];\n\t\t} );\n\t}\n\t\n\tstartInlineEdit( row: any, column: XiriTableField, skipSavingCheck = false ): void {\n\t\tthis.inlineEdit.start( row, column, skipSavingCheck );\n\t}\n\n\tcancelInlineEdit(): void {\n\t\tthis.inlineEdit.cancel();\n\t}\n\n\tsaveInlineEdit( row: any, column: XiriTableField ): void {\n\t\tthis.inlineEdit.save( row, column );\n\t}\n\n\tisEditing( row: any, fieldId: string ): boolean {\n\t\treturn this.inlineEdit.isEditing( row, fieldId );\n\t}\n\n\tisSaving( row: any, fieldId: string ): boolean {\n\t\treturn this.inlineEdit.isSaving( row, fieldId );\n\t}\n\n\tonInlineEditKeydown( event: KeyboardEvent, row: any, column: XiriTableField ): void {\n\t\tthis.inlineEdit.onKeydown( event, row, column );\n\t}\n\n\tgetEditableOptions( column: XiriTableField ): { value: string; label: string; color?: string }[] {\n\t\treturn this.inlineEdit.getOptions( column );\n\t}\n\n\tonChipsSelectionChange( row: any, column: XiriTableField, selectedValues: string[] ): void {\n\t\tthis.inlineEdit.onChipsChange( row, column, selectedValues );\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.reloadAbort$.next();\n\t\tthis.reloadAbort$.complete();\n\t\tif ( this.dialogRef )\n\t\t\tthis.dialogRef.close( null );\n\t}\n\t\n\tpublic pasteInput( $event: any, row: any, column: XiriTableField ) {\n\t\t\n\t\tif ( column.inputPaste !== true )\n\t\t\treturn false;\n\t\t\n\t\t// Get the clipboard text\n\t\tconst clipboardText = $event.clipboardData.getData( 'text' );\n\t\t\n\t\t// Split into rows\n\t\tlet clipRowsArray = clipboardText.split( \"\\n\" );\n\t\t\n\t\t// Split rows into columns\n\t\tfor ( let i = 0; i < clipRowsArray.length; i++ ) {\n\t\t\tclipRowsArray[ i ] = clipRowsArray[ i ].split( \"\\t\" );\n\t\t}\n\t\t\n\t\tif ( clipRowsArray.length < 2 ) {\n\t\t\tif ( clipRowsArray[ 0 ].length < 2 )\n\t\t\t\treturn null;\n\t\t}\n\t\t\n\t\tconst startRow = this.dataSource.data.findIndex( ( x: any ) => x.id === row.id );\n\t\tif ( startRow == -1 )\n\t\t\treturn false;\n\t\tconst startCol = this.displayedColumns.findIndex( ( x: any ) => x.id === column.id );\n\t\tif ( startCol == -1 )\n\t\t\treturn false;\n\t\t\n\t\tfor ( let i = 0; i < clipRowsArray.length; i++ ) {\n\t\t\tlet curRow = i + startRow;\n\t\t\tif ( curRow >= this.dataSource.data.length )\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tlet result = this.dataSource.data[ curRow ];\n\t\t\tfor ( let j = 0; j < clipRowsArray[ i ].length; j++ ) {\n\t\t\t\tlet curCol = j + startCol;\n\t\t\t\tif ( curCol >= this.displayedColumns.length )\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tlet col = this.displayedColumns[ curCol ];\n\t\t\t\tresult[ col.id ] = clipRowsArray[ i ][ j ];\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.dataSource._updateChangeSubscription();\n\t\treturn false;\n\t}\n\t\n\tpublic saveInputData() {\n\t\t\n\t\t// this.loading.set( true );\n\t\tlet data = this.dataSource.data;\n\t\tif ( this.settings().url ) {\n\t\t\tthis._alldata.set( [] );\n\t\t\t// this.dataSource.data = [];\n\t\t\tthis.dataSource._updateChangeSubscription();\n\t\t}\n\t\tthis._changeDetectorRef.markForCheck();\n\t\t\n\t\tthis.dataService.post( this.options.saveInputUrl, data ).pipe( takeUntil( this.reloadAbort$ ) ).subscribe( {\n\t\t\tnext: ( result ) => {\n\t\t\t\tthis.callReturn( result );\n\t\t\t},\n\t\t\terror: ( err: any ) => {\n\t\t\t\tthis._alldata.set( data );\n\t\t\t\tthis.dataSource._updateChangeSubscription();\n\t\t\t\tconsole.log( \"table save error\", err );\n\t\t\t\tthis.snackbar.error( err.error?.error || 'Unknown Error' );\n\t\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tprivate getSortingDataAccessor(): ( data: any, sortHeaderId: string ) => string | number {\n\t\treturn ( data: any, sortHeaderId: string ): string | number => {\n\t\t\tconst column = this.displayedColumns.find( col => col.id === sortHeaderId );\n\t\t\tif ( column && column.format === 'number' )\n\t\t\t\treturn data[ sortHeaderId ][ 1 ];\n\t\t\t\n\t\t\treturn data[ sortHeaderId ];\n\t\t};\n\t}\n}\n","<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<div class=\"header\">\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<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.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) {\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 (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<a mat-menu-item [routerLink]=\"row[column.id][i][j]\">\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[ row[ column.id ] ]) {\n\t\t\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"column.icons[ row[ column.id ] ][ 'color' ] || 'primary'\"\n\t\t\t\t\t\t\t\t\t\t\t [matTooltip]=\"column.icons[ row[ column.id ] ][ 'hint' ] \"\n\t\t\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!column.icons[ row[ column.id ] ][ 'hint' ]\">{{ column.icons[row[column.id]]['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\t@if (row[column.id + 'Link']) {\n\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"row[column.id + 'Link']\" 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</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\"\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@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\" (click)=\"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\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) {\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@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 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\" (click)=\"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</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 (options.select) {\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 (row.select !== false) {\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 ? selection.toggle(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)\"></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\">{{ errorMsg }}</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@switch (button.action) {\n\t\t\t\t\t\t\t\t@case ('dialog') {\n\t\t\t\t\t\t\t\t\t<button mat-icon-button\n\t\t\t\t\t\t\t\t\t (click)=\"openDialogSelection( $event, button )\"\n\t\t\t\t\t\t\t\t\t [disabled]=\"selection.isEmpty()\"\n\t\t\t\t\t\t\t\t\t [color]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t\t\t [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\">\n\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</button>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('api') {\n\t\t\t\t\t\t\t\t\t<button mat-icon-button\n\t\t\t\t\t\t\t\t\t (click)=\"apiCallSelection( $event, button )\"\n\t\t\t\t\t\t\t\t\t [disabled]=\"selection.isEmpty()\"\n\t\t\t\t\t\t\t\t\t [color]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t\t\t [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\">\n\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</button>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('download') {\n\t\t\t\t\t\t\t\t\t<button mat-icon-button\n\t\t\t\t\t\t\t\t\t (click)=\"downloadSelection( $event, button )\"\n\t\t\t\t\t\t\t\t\t [disabled]=\"selection.isEmpty()\"\n\t\t\t\t\t\t\t\t\t [color]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t\t\t [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\">\n\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</button>\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","import { inject, Injectable } from '@angular/core';\nimport { XiriDataService } from './data.service';\nimport { Router } from \"@angular/router\";\nimport { XiriButton } from \"../button/button.component\";\nimport { XiriFormField } from \"../formfields/field.interface\";\nimport { catchError, map, Observable, throwError, timer } from \"rxjs\";\nimport { HttpErrorResponse } from \"@angular/common/http\";\nimport { XiriSessionStorageService } from \"./sessionStorage.service\";\nimport { parseHttpError } from './error.util';\n\n\ninterface XiriFormServiceReturn {\n\turl?: string\n\tfields?: XiriFormField[]\n\tbuttons?: XiriButton[]\n\tdone?: boolean\n\tgoto?: string\n\tmodel?: object\n\textra?: object\n\n\t// dialog\n\ttype?: string\n\theader?: string\n\ttime?: number\n}\n\nexport interface XiriFormServiceData {\n\turl: string\n\tfields?: XiriFormField[]\n\tbuttons?: XiriButton[]\n\textra?: object\n\tdone?: Observable<void>\n\n\t// dialog\n\ttype?: string // form, data\n\theader?: string\n\ttime?: number\n}\n\nexport interface XiriFormServiceError {\n\terror: string\n}\n\n@Injectable( {\n\tprovidedIn: 'root',\n} )\nexport class XiriFormService {\n\n\tprivate dataService: XiriDataService = inject( XiriDataService );\n\tprivate router: Router = inject( Router );\n\tprivate sessionStorageService: XiriSessionStorageService = inject( XiriSessionStorageService );\n\t\n\t\n\tpublic get( url: string, data?: any, extra?: any ): Observable<XiriFormServiceData> {\n\n\t\tconst req: Observable<XiriFormServiceReturn> = data === null ? this.dataService.get( url ) : this.dataService.post( url, { ...data, ...extra } );\n\n\t\treturn req.pipe(\n\t\t\tmap( res => this.parse( res ) ),\n\t\t\tcatchError( ( err: HttpErrorResponse ): Observable<never> => {\n\t\t\t\treturn throwError( () => <XiriFormServiceError>{\n\t\t\t\t\terror: parseHttpError( err )\n\t\t\t\t} );\n\t\t\t} )\n\t\t);\n\t}\n\n\tpublic parse( res: XiriFormServiceReturn ): XiriFormServiceData {\n\n\t\tif ( res.buttons ) {\n\t\t\tlet fields: XiriFormField[] = [];\n\t\t\tlet model = res.model || {};\n\t\t\tlet type = res.type ? res.type : 'form';\n\n\t\t\tif ( type == 'form' ) {\n\t\t\t\tres.fields.forEach( ( field: any ) => {\n\t\t\t\t\tif ( field.hide == true )\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif ( model[ field.id ] !== undefined )\n\t\t\t\t\t\tfield.value = model[ field.id ];\n\n\t\t\t\t\tfields.push( field );\n\t\t\t\t} );\n\t\t\t} else if ( type == 'question' ) {\n\t\t\t\tlet obj = <any>res.fields;\n\t\t\t\tobj.type = 'question';\n\t\t\t\tfields.push( obj );\n\t\t\t} else if ( type == 'waiting' ) {\n\t\t\t\tlet obj = <any>res.fields;\n\t\t\t\tobj.type = 'waiting';\n\t\t\t\tobj.done = false;\n\t\t\t\tobj.value = obj.text;\n\t\t\t\tfields.push( obj );\n\t\t\t} else {\n\t\t\t\tconsole.log( 'XiriFormService unknown form type', type );\n\n\t\t\t}\n\n\t\t\treturn <XiriFormServiceData>{\n\t\t\t\turl: res.url,\n\t\t\t\tbuttons: res.buttons,\n\t\t\t\textra: res.extra || {},\n\t\t\t\tfields: fields,\n\n\t\t\t\ttype: type,\n\t\t\t\ttime: res.time || 2000,\n\t\t\t};\n\n\t\t} else if ( res.goto ) {\n\t\t\treturn <XiriFormServiceData>{\n\t\t\t\tdone: timer( res.done ? 1000 : 0 ).pipe( map( () => {\n\t\t\t\t\tthis.router.navigate( [res.goto] ).then();\n\t\t\t\t} ) )\n\t\t\t};\n\t\t} else {\n\t\t\treturn <XiriFormServiceData>{\n\t\t\t\tdone: timer( res.done ? 1000 : 0 ).pipe( map( () => {\n\t\t\t\t} ) )\n\t\t\t};\n\t\t}\n\t}\n\t\n\tpublic loadState( saveStateId: string|null|undefined, fields: XiriFormField[] ): XiriFormField[] {\n\t\t\n\t\tif ( !saveStateId )\n\t\t\treturn fields;\n\t\t\n\t\tlet data = this.sessionStorageService.getTimeout( saveStateId, 3600 );\n\t\tif ( !data )\n\t\t\treturn fields;\n\t\t\n\t\tfor ( let field of fields ) {\n\t\t\t\n\t\t\tif ( data[ field.id ] === undefined )\n\t\t\t\tcontinue;\n\t\t\t\n\t\t\tlet value = data[ field.id ];\n\t\t\t\n\t\t\tswitch ( field.type ) {\n\t\t\t\tcase 'bool':\n\t\t\t\t\tfield.value = value;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'select':\n\t\t\t\tcase 'object':\n\t\t\t\tcase 'model':\n\t\t\t\t\tif ( !field.list )\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tfor ( let item of field.list ) {\n\t\t\t\t\t\tif ( item.id == value ) {\n\t\t\t\t\t\t\tfield.value = value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n\t\t\t\t\tif ( field.min && field.min > value )\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tif ( field.max && field.max < value )\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tfield.value = value;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'daterange':\n\t\t\t\tcase 'datetimerange':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn fields;\n\t}\n\t\n\tpublic saveState( saveStateId: string|null|undefined, values: any ): void {\n\t\t\n\t\tif ( !saveStateId )\n\t\t\treturn;\n\t\t\n\t\tthis.sessionStorageService.set( saveStateId, values );\n\t}\n}\n","import { ChangeDetectionStrategy, Component, DestroyRef, inject, input, OnInit, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subject } from \"rxjs\";\nimport { Location } from '@angular/common';\nimport { XiriButton } from \"../button/button.component\";\nimport { XiriFormService, XiriFormServiceData, XiriFormServiceError } from \"../services/form.service\";\nimport { XiriButtonstyleComponent } from '../buttonstyle/buttonstyle.component';\nimport { XiriDoneComponent } from '../done/done.component';\nimport { XiriErrorComponent } from '../error/error.component';\nimport { XiriFormFieldsComponent } from '../formfields/form-fields.component';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { XiriFormField } from \"../formfields/field.interface\";\n\nexport interface XiriFormSettings {\n\tload?: boolean\n\turl: string\n\tfields?: any[]\n\tbuttons?: XiriButton[]\n\theader?: string\n}\n\n@Component( {\n\t selector: 'xiri-form',\n\t templateUrl: './form.component.html',\n\t styleUrl: './form.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ CdkTrapFocus,\n\t MatProgressSpinner,\n\t XiriFormFieldsComponent,\n\t XiriErrorComponent,\n\t XiriDoneComponent,\n\t XiriButtonstyleComponent ]\n } )\nexport class XiriFormComponent implements OnInit {\n\n\tsettings = input.required<XiriFormSettings>();\n\n\tprivate location = inject( Location );\n\tprivate formService = inject( XiriFormService );\n\tprivate destroyRef = inject( DestroyRef );\n\n\tpublic formFields = signal<XiriFormField[]>( null );\n\tpublic loading = signal<boolean>( true );\n\tpublic loadingButton = signal<XiriButton | null>( null );\n\tpublic done = signal<boolean>( false );\n\tpublic error = signal<string>( '' );\n\n\tprivate url: string;\n\tpublic buttons: XiriButton[] = [];\n\tprivate extra = {};\n\tprivate formValues: any = null;\n\tpublic formValid: boolean = true;\n\tpublic checkSubject: Subject<void> = new Subject<void>();\n\t\n\t\n\tngOnInit(): void {\n\t\t\n\t\tthis.url = this.settings().url;\n\t\t\n\t\tif ( this.settings().load ) {\n\t\t\tthis.send( null );\n\t\t} else\n\t\t\tthis.loadData( this.formService.parse( this.settings() ) );\n\t}\n\t\n\tprivate send( data: any ) {\n\t\t\n\t\tthis.loading.set( true );\n\t\tthis.error.set( '' );\n\t\t\n\t\tthis.formService.get( this.url, data, this.extra ).pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe(\n\t\t\t{\n\t\t\t\tnext: ( res: XiriFormServiceData ) => {\n\t\t\t\t\tthis.loadData( res );\n\t\t\t\t},\n\t\t\t\terror: ( err: XiriFormServiceError ) => {\n\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t\tthis.loadingButton.set( null );\n\t\t\t\t\tthis.error.set( err.error ?? 'Unknown Error' );\n\t\t\t\t\t\n\t\t\t\t\tif ( this.buttons.length == 0 ) {\n\t\t\t\t\t\tthis.buttons = [ {\n\t\t\t\t\t\t\ttext: 'Close',\n\t\t\t\t\t\t\taction: 'close',\n\t\t\t\t\t\t\ttype: 'raised',\n\t\t\t\t\t\t} ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t}\n\n\tprivate loadData( res: XiriFormServiceData ): void {\n\t\t\n\t\tif ( res.buttons ) {\n\t\t\tif ( res.url )\n\t\t\t\tthis.url = res.url;\n\t\t\tthis.buttons = res.buttons;\n\t\t\tthis.extra = res.extra;\n\t\t\tthis.formFields.set( res.fields );\n\t\t} else if ( res.done ) {\n\t\t\tthis.done.set( true );\n\t\t\tthis.formFields.set( null );\n\t\t\tthis.buttons = [];\n\t\t\tres.done.pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe();\n\t\t}\n\t\t\n\t\tthis.loading.set( false );\n\t\tthis.loadingButton.set( null );\n\t}\n\t\n\tclickButton( button: XiriButton ): void {\n\n\t\tif ( button.action == 'back' )\n\t\t\tthis.location.back();\n\t\telse if ( button.action == 'get' ) {\n\t\t\tthis.url = <string> button.url;\n\t\t\tthis.loadingButton.set( button );\n\t\t\tthis.startSend( null );\n\t\t} else if ( button.action == 'post' ) {\n\t\t\tthis.url = <string> button.url;\n\t\t\tthis.loadingButton.set( button );\n\t\t\tthis.startSend( button.data );\n\t\t} else if ( button.action == 'debug' ) {\n\t\t\tthis.checkSubject.next();\n\t\t} else if ( button.action == 'simulate' ) {\n\t\t\tif ( this.formValid ) {\n\t\t\t\tthis.loadingButton.set( button );\n\t\t\t\tthis.loading.set( true );\n\t\t\t\tthis.error.set( '' );\n\t\t\t\tsetTimeout( () => {\n\t\t\t\t\tthis.loadData( this.formService.parse( {\n\t\t\t\t\t\t done: true,\n\t\t\t\t\t } ) );\n\t\t\t\t}, 5000 );\n\t\t\t} else\n\t\t\t\tthis.checkSubject.next();\n\n\n\t\t} else {\n\t\t\tif ( this.loading() )\n\t\t\t\treturn;\n\n\t\t\tthis.loadingButton.set( button );\n\t\t\tthis.startSend( this.formValues );\n\t\t}\n\t}\n\t\n\tprivate startSend( data: any ): void {\n\t\t\n\t\tsetTimeout( () => {\n\t\t\tif ( this.formValid )\n\t\t\t\tthis.send( data );\n\t\t\telse\n\t\t\t\tthis.checkSubject.next();\n\t\t}, 10 );\n\t}\n\t\n\tpublic formChanged( event: any ) {\n\t\t\n\t\tthis.formValid = event.valid;\n\t\tthis.formValues = event.value;\n\t\t\n\t\t// data = { ...data, ...this.extra }\n\t\t// this.events.push( '' + this.formValid + ' => ' + JSON.stringify( event.value ) );\n\t}\n\t\n}\n","<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","import {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tDestroyRef,\n\tinject,\n\tinput,\n\tOnInit,\n\toutput,\n\tsignal,\n\tTemplateRef\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { debounceTime, Subject } from \"rxjs\";\nimport { XiriFormField } from \"../formfields/field.interface\";\nimport { XiriDynData } from \"../dyncomponent/dyndata.interface\";\nimport { NgTemplateOutlet } from '@angular/common';\nimport { XiriFormFieldsComponent } from '../formfields/form-fields.component';\nimport { XiriDataService } from \"../services/data.service\";\nimport { XiriFormService } from \"../services/form.service\";\nimport { XiriButtonlineComponent } from \"../buttonline/buttonline.component\";\nimport { XiriButtonResult } from \"../button/button.component\";\nimport { MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle } from \"@angular/material/expansion\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatProgressSpinner } from \"@angular/material/progress-spinner\";\n\nexport interface XiriQuerySettings {\n\tfields?: XiriFormField[]\n\tdyn?: any[]\n\turl?: string\n\tbuttonline?: XiriDynData\n\textra?: any\n\tsaveState?: boolean\n\tsaveStateId?: string\n\tcollapsed?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-query',\n\t templateUrl: './query.component.html',\n\t styleUrl: './query.component.scss',\n\t imports: [ XiriFormFieldsComponent, NgTemplateOutlet, XiriButtonlineComponent, MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle, MatIcon, MatProgressSpinner ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriQueryComponent implements OnInit {\n\n\tprivate dataService: XiriDataService = inject( XiriDataService );\n\tprivate formService = inject( XiriFormService );\n\tprivate cdr = inject( ChangeDetectorRef );\n\tprivate destroyRef = inject( DestroyRef );\n\n\tsettings = input.required<XiriQuerySettings>();\n\tdyncomponent = input<TemplateRef<any>>();\n\tchange = output<any>();\n\n\tprivate waiter: Subject<any> = new Subject<any>();\n\t\n\tpublic dynData: {\n\t\tdata: XiriDynData[],\n\t\tfilterData: any,\n\t} = { data: null, filterData: null };\n\t\n\tprivate saveState: boolean = false;\n\tprivate saveStateId: string | null = null;\n\tprivate extra: any = null;\n\tprivate _initialChangeDone: boolean = false;\n\n\tprivate get effectiveSaveKey(): string | null {\n\t\treturn this.saveStateId ? this.saveStateId + ':filter' : null;\n\t}\n\t\n\tpublic data = signal<XiriDynData[] | null>( null );\n\tpublic error = signal<string | null>( null );\n\tpublic formFields = signal<XiriFormField[]>( null );\n\tpublic formValid = signal<boolean>( true );\n\tpublic filterData = signal<any>( null );\n\tpublic loading = signal<boolean>( false );\n\t\n\tngOnInit(): void {\n\t\t\n\t\tlet settings = this.settings();\n\t\tif ( settings.dyn !== undefined && settings.dyn !== null && settings.dyn.length != 0 )\n\t\t\tthis.dynData.data = settings.dyn;\n\t\t\n\t\tthis.saveState = settings.saveState === undefined ? false : settings.saveState;\n\t\tthis.saveStateId = settings.saveStateId === undefined ? null : settings.saveStateId;\n\t\tthis.formFields.set( this.formService.loadState( this.effectiveSaveKey, settings.fields ) );\n\t\tthis.extra = settings.extra || null;\n\t\t\n\t\tthis.waiter.pipe( debounceTime( 300 ), takeUntilDestroyed( this.destroyRef ) ).subscribe( event => {\n\n\t\t\tif ( event.valid ) {\n\t\t\t\tthis.dynData.filterData = this.filterData();\n\t\t\t\tthis.change.emit( this.filterData() );\n\t\t\t\tif ( this.saveState )\n\t\t\t\t\tthis.formService.saveState( this.effectiveSaveKey, event.value );\n\n\t\t\t\tif ( this.settings().url )\n\t\t\t\t\tthis.load();\n\t\t\t} else {\n\t\t\t\tthis.data.set( null );\n\t\t\t\tthis.dynData.filterData = null;\n\t\t\t\tthis.change.emit( null );\n\t\t\t}\n\t\t\tthis.cdr.markForCheck();\n\t\t} );\n\t}\n\n\tpublic formChanged( event: any ) {\n\t\tthis.formValid.set( event.valid );\n\n\t\tif ( this.extra !== null ) {\n\t\t\tif ( event.value && typeof event.value === 'object' )\n\t\t\t\tthis.filterData.set( { ...this.extra, ...event.value } );\n\t\t\telse\n\t\t\t\tthis.filterData.set( this.extra );\n\t\t} else\n\t\t\tthis.filterData.set( event.value );\n\n\t\t// Emit immediately on first valid change (for initial load), debounce subsequent changes\n\t\tif ( !this._initialChangeDone && event.valid ) {\n\t\t\tthis._initialChangeDone = true;\n\t\t\tthis.dynData.filterData = this.filterData();\n\t\t\tthis.change.emit( this.filterData() );\n\t\t\tif ( this.saveState )\n\t\t\t\tthis.formService.saveState( this.effectiveSaveKey, event.value );\n\t\t\tif ( this.settings().url )\n\t\t\t\tthis.load();\n\t\t} else {\n\t\t\tthis.waiter.next( event );\n\t\t}\n\t}\n\t\n\tpublic clickedButton( event: XiriButtonResult ) {\n\t\t\n\t\tif ( !event.loading && event.done ) {\n\t\t\tthis.data.set( event.result );\n\t\t\tthis.error.set( null );\n\t\t\tthis.change.emit( this.filterData() );\n\t\t} else {\n\t\t\tthis.data.set( null );\n\t\t\tthis.error.set( null );\n\t\t}\n\t\t\n\t\tthis.loading.set( event.loading );\n\t}\n\t\n\tprivate load() {\n\t\t\n\t\tthis.data.set( null );\n\t\tthis.error.set( null );\n\t\t\n\t\tlet call = this.dataService.post( this.settings().url, this.dynData.filterData );\n\t\t\n\t\tcall.pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe(\n\t\t\t{\n\t\t\t\tnext: ( res: any ) => {\n\t\t\t\t\tif ( !res ) {\n\t\t\t\t\t\tthis.error.set( 'Unknown Error' );\n\t\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// check if res is an array\n\t\t\t\t\tif ( Array.isArray( res.data ) )\n\t\t\t\t\t\tthis.data.set( res.data );\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.data.set( [ res.data ] );\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t},\n\t\t\t\terror: ( err: any ) => {\n\t\t\t\t\tif ( err.status === 404 )\n\t\t\t\t\t\tthis.error.set( 'Page not found' );\n\t\t\t\t\telse if ( err.status === 401 )\n\t\t\t\t\t\tthis.error.set( 'No permission to view page' );\n\t\t\t\t\telse if ( err.status === 403 )\n\t\t\t\t\t\tthis.error.set( 'Access denied' );\n\t\t\t\t\telse if ( err.status === 500 )\n\t\t\t\t\t\tthis.error.set( 'Internal Error' );\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.error.set( 'Unknown Error' );\n\n\t\t\t\t\tconsole.log( 'XiriQueryComponent error', err );\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t}\n\t\t\t} );\n\t}\n}\n","<div class=\"xrow\">\n\t<div class=\"xcol\">\n\t\t@if (settings().collapsed !== undefined) {\n\t\t\t<mat-expansion-panel [expanded]=\"!settings().collapsed\" 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@if (error()) {\n\t\t\t\t\t\t<div class=\"error\">{{ error() }}</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@if (error()) {\n\t\t\t\t\t<div class=\"error\">{{ error() }}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n\t@if (settings().buttonline) {\n\t\t<div class=\"xcol formbtnline\" [class]=\"settings().buttonline.display\">\n\t\t\t<xiri-buttonline [settings]=\"settings().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\">\n\t\t\t<ng-container *ngTemplateOutlet=\"dyncomponent(); context: { $implicit: data() }\"></ng-container>\n\t\t</div>\n\t}\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nexport type XiriSkeletonType = 'text' | 'circle' | 'rect' | 'table-row';\n\n@Component( {\n\t selector: 'xiri-skeleton',\n\t templateUrl: './skeleton.component.html',\n\t styleUrl: './skeleton.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t host: { 'role': 'status', 'aria-label': 'Laden...', '[class.fill]': 'fill()' }\n } )\nexport class XiriSkeletonComponent {\n\n\ttype = input<XiriSkeletonType>( 'text' );\n\twidth = input<string>( '100%' );\n\theight = input<string>( '1em' );\n\tlines = input<number>( 1 );\n\tcolumns = input<number>( 4 );\n\tanimate = input<boolean>( true );\n\tfill = input<boolean>( false );\n\n\tlinesArray = computed( () => Array.from( { length: this.lines() } ) );\n\tcolumnsArray = computed( () => Array.from( { length: this.columns() } ) );\n}\n","@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","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport { RouterLink } from '@angular/router';\nimport { XiriColor } from '../types/color.type';\n\n\nexport interface XiriInfopointSettings {\n\ttext: string\n\tinfo: string\n\n\turl?: string\n\turlParams?: object\n\n\ticon: string\n\ticonSet?: string;\n\ticonColor: XiriColor\n\n\tdense?: boolean\n\tcompact?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-infopoint',\n\t templateUrl: './infopoint.component.html',\n\t styleUrl: './infopoint.component.scss',\n\t imports: [ RouterLink, MatCard, MatCardContent, MatIcon ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t host: { '[class.compact]': 'compact()' }\n } )\nexport class XiriInfopointComponent {\n\n\tsettings = input.required<XiriInfopointSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n}\n","<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<div class=\"text\">{{ settings().text }}</div>\n\t\t\t\t}\n\t\t\t\t<div class=\"info\">{{ settings().info }}</div>\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<div class=\"text\">{{ settings().text }}</div>\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"info\">{{ settings().info }}</div>\n\t\t\t\t</div>\n\t\t\t</mat-card-content>\n\t\t</mat-card>\n\t}\n</div>\n","import { ChangeDetectionStrategy, Component, DestroyRef, inject, input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { XiriDataService } from \"../services/data.service\";\nimport { XiriColor } from '../types/color.type';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { RouterLink } from '@angular/router';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport {\n\tMatListItem,\n\tMatListItemIcon,\n\tMatListItemLine,\n\tMatListItemMeta,\n\tMatListItemTitle,\n\tMatListSubheaderCssMatStyler,\n\tMatNavList\n} from '@angular/material/list';\n\nexport interface XiriListSettings {\n\tsections: XiriListSection[];\n}\n\nexport interface XiriListSection {\n\tname: string;\n\tdata: XiriListItem[];\n}\n\nexport interface XiriListItem {\n\tname: string;\n\tinfo: string;\n\ticon: string;\n\ticonSet?: string;\n\ticonColor: XiriColor;\n\turl: string;\n\thasFavorite?: boolean;\n\tisFavorite?: boolean;\n\tfavoriteUrl?: string;\n\tfavoriteHint?: string;\n}\n\n@Component( {\n\t selector: 'xiri-list',\n\t templateUrl: './list.component.html',\n\t styleUrl: './list.component.scss',\n\t imports: [\n\t\t MatListSubheaderCssMatStyler,\n\t\t MatCard,\n\t\t MatCardContent,\n\t\t MatNavList,\n\t\t MatListItem,\n\t\t RouterLink,\n\t\t MatListItemIcon,\n\t\t MatIcon,\n\t\t MatListItemTitle,\n\t\t MatListItemLine,\n\t\t MatListItemMeta,\n\t\t MatIconButton,\n\t\t MatTooltip,\n\t ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriListComponent {\n\n\tsettings = input.required<XiriListSettings>();\n\tprivate dataService = inject( XiriDataService );\n\tprivate destroyRef = inject( DestroyRef );\n\n\tchangeFavorite( item: XiriListItem, event: Event ) {\n\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\n\t\tlet url = item.favoriteUrl + ( item.isFavorite ? '0' : '1' );\n\t\tthis.dataService.get( url ).pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe();\n\t\titem.isFavorite = !item.isFavorite;\n\t}\n}\n","@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<a mat-list-item [routerLink]=\"item.url\" 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\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","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport interface XiriHeaderSettings {\n\ttext: string\n\tcolor: string\n\tsize: string\n}\n\n@Component( {\n\t selector: 'xiri-header',\n\t templateUrl: './header.component.html',\n\t styleUrl: './header.component.scss',\n\t imports: [],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriHeaderComponent {\n\t\n\tsettings = input.required<XiriHeaderSettings>();\n}\n","<div class=\"name\" [class]=\"settings().color + ' ' + settings().size\">{{ settings().text }}</div>\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tDestroyRef,\n\tinject,\n\tinput,\n\tOnInit,\n\tsignal,\n\tviewChild,\n\tWritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { XiriButton } from \"../button/button.component\";\nimport { Observable, Subscription } from \"rxjs\";\nimport { MatStep, MatStepper } from \"@angular/material/stepper\";\nimport { XiriDataService } from \"../services/data.service\";\nimport { Location } from \"@angular/common\";\nimport { Router } from \"@angular/router\";\nimport { StepperSelectionEvent } from \"@angular/cdk/stepper\";\nimport { XiriFormField } from \"../formfields/field.interface\";\nimport { XiriDoneComponent } from '../done/done.component';\nimport { XiriButtonstyleComponent } from '../buttonstyle/buttonstyle.component';\nimport { XiriErrorComponent } from '../error/error.component';\nimport { XiriFormFieldsComponent } from '../formfields/form-fields.component';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\n\nexport interface XiriStepperSettings {\n\turl?: string\n\tsteps: XiriStepperStep[]\n}\n\nexport interface XiriStepperStep {\n\turl?: string\n\ttitle: string\n\tfields: XiriFormField[]\n\tdata?: any\n\textra?: any\n\tbuttons: XiriButton[]\n}\n\ninterface StepState {\n\turl?: string\n\ttitle: string\n\tcompleted: WritableSignal<boolean>\n\tcheck: WritableSignal<boolean>\n\tvalid: WritableSignal<boolean>\n\tload: WritableSignal<boolean>\n\tgotonext: WritableSignal<boolean>\n\terrorMsg: WritableSignal<string | null>\n\tfields: WritableSignal<XiriFormField[]>\n\tbuttons: WritableSignal<XiriButton[]>\n\tdata?: any\n\textra?: any\n}\n\n\n@Component( {\n\t selector: 'xiri-stepper',\n\t templateUrl: './stepper.component.html',\n\t styleUrl: './stepper.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatStepper,\n\t MatStep,\n\t MatProgressSpinner,\n\t XiriFormFieldsComponent,\n\t XiriErrorComponent,\n\t XiriButtonstyleComponent,\n\t XiriDoneComponent ]\n } )\nexport class XiriStepperComponent implements OnInit {\n\n\tprivate dataService: XiriDataService = inject( XiriDataService );\n\tprivate location: Location = inject( Location );\n\tprivate router: Router = inject( Router );\n\tprivate destroyRef = inject( DestroyRef );\n\n\tsettings = input.required<XiriStepperSettings>();\n\n\tpublic done = signal( false );\n\tprivate calls: Subscription[] = [];\n\n\tstepper = viewChild.required<MatStepper>( MatStepper );\n\n\tpublic steps = signal<StepState[]>( [] );\n\n\n\tngOnInit(): void {\n\t\tconst steps: StepState[] = [];\n\t\tfor ( let i = 0; i != this.settings().steps.length; i++ ) {\n\t\t\tconst step = this.settings().steps[ i ];\n\n\t\t\tsteps.push( {\n\t\t\t\turl: step.url,\n\t\t\t\ttitle: step.title,\n\t\t\t\tcompleted: signal( false ),\n\t\t\t\tcheck: signal( false ),\n\t\t\t\tvalid: signal( false ),\n\t\t\t\tload: signal( i > 0 ),\n\t\t\t\tgotonext: signal( false ),\n\t\t\t\terrorMsg: signal( null ),\n\t\t\t\tfields: signal<XiriFormField[]>( step.fields ),\n\t\t\t\tbuttons: signal<XiriButton[]>( step.buttons ),\n\t\t\t\tdata: step.data,\n\t\t\t\textra: step.extra\n\t\t\t} );\n\t\t}\n\t\tthis.steps.set( steps );\n\t}\n\n\tstepChanged( $event: StepperSelectionEvent ) {\n\t\tconst step = this.steps()[ $event.selectedIndex ];\n\n\t\tif ( step.gotonext() ) {\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.stepper().next();\n\t\t\t}, 10 );\n\t\t}\n\t}\n\n\tformChanged( step: StepState, event: any, i: number ) {\n\n\t\tif ( event.valid )\n\t\t\tstep.data = event.value;\n\t\tif ( !event.pristine ) {\n\t\t\tstep.completed.set( false );\n\t\t\tconst steps = this.steps();\n\t\t\tfor ( let x = i + 1; x < steps.length; x++ ) {\n\t\t\t\tsteps[ x ].completed.set( false );\n\t\t\t\tsteps[ x ].load.set( true );\n\t\t\t\tsteps[ x ].gotonext.set( false );\n\t\t\t}\n\t\t}\n\n\t\tstep.valid.set( event.valid );\n\t}\n\n\tclickButton( button: XiriButton ): void {\n\n\t\tif ( button.action == 'back' )\n\t\t\tthis.location.back();\n\t\telse if ( button.action == 'prev' ) {\n\t\t\tthis.calls.forEach( c => c.unsubscribe() );\n\t\t\tthis.calls = [];\n\n\t\t\tif ( this.stepper().selectedIndex != 0 ) {\n\t\t\t\tfor ( let i = this.stepper().selectedIndex - 1; i != 0; i-- ) {\n\t\t\t\t\tif ( this.steps()[ i ].gotonext() )\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tthis.stepper().selectedIndex = i;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.stepper().selectedIndex = 0;\n\t\t\t} else\n\t\t\t\tthis.location.back();\n\t\t} else if ( button.action == 'next' ) {\n\t\t\tconst step = this.steps()[ this.stepper().selectedIndex ];\n\t\t\tif ( step.valid() && !step.check() )\n\t\t\t\tthis.checkStep( this.stepper().selectedIndex );\n\t\t}\n\t\telse if ( button.action == 'get' ) {\n\t\t\t//\n\t\t} else if ( button.action == 'post' ) {\n\t\t\t//\n\t\t}\n\t}\n\n\tprivate checkStep( current: number ) {\n\t\tconst steps = this.steps();\n\t\tconst stepCurrent = steps[ current ];\n\t\tlet stepNext: StepState | null = null;\n\t\tlet needLoad: boolean;\n\n\t\tif ( current + 1 < steps.length ) {\n\t\t\tstepNext = steps[ current + 1 ];\n\t\t\tneedLoad = stepNext.load();\n\t\t} else {\n\t\t\tneedLoad = true;\n\t\t}\n\n\t\tif ( !needLoad ) {\n\t\t\tthis.stepper().next();\n\t\t\treturn;\n\t\t}\n\n\t\tstepCurrent.check.set( true );\n\t\tstepCurrent.errorMsg.set( null );\n\n\t\tconst x = this.sendStep( current ).pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe(\n\t\t\t{\n\t\t\t\tnext: ( res: any ) => {\n\n\t\t\t\t\tif ( res == null ) {\n\t\t\t\t\t\tthis.showError( stepCurrent, null );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( res.step && res.step != current + 1 ) {\n\n\t\t\t\t\t\tfor ( let i = current + 1; i != res.step; i++ ) {\n\t\t\t\t\t\t\tsteps[ i ].completed.set( true );\n\t\t\t\t\t\t\tsteps[ i ].gotonext.set( true );\n\t\t\t\t\t\t\tsteps[ i ].load.set( false );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstepNext = steps[ res.step ];\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( res.fields )\n\t\t\t\t\t\tstepNext.fields.set( res.fields );\n\t\t\t\t\tif ( res.buttons )\n\t\t\t\t\t\tstepNext.buttons.set( res.buttons );\n\t\t\t\t\tif ( res.url )\n\t\t\t\t\t\tstepNext.url = res.url;\n\t\t\t\t\tif ( stepNext ) {\n\t\t\t\t\t\tstepNext.load.set( false );\n\t\t\t\t\t\tstepNext.gotonext.set( false );\n\t\t\t\t\t}\n\n\t\t\t\t\tstepCurrent.check.set( false );\n\t\t\t\t\tstepCurrent.completed.set( true );\n\n\t\t\t\t\tif ( res.step && stepNext ) {\n\t\t\t\t\t\tsetTimeout( () => {\n\t\t\t\t\t\t\tthis.stepper().selectedIndex = res.step;\n\t\t\t\t\t\t}, 0 )\n\t\t\t\t\t} else if ( res.goto ) {\n\t\t\t\t\t\tthis.done.set( true );\n\t\t\t\t\t\tsetTimeout( () => {\n\t\t\t\t\t\t\tthis.router.navigate( [ res.goto ] ).then();\n\t\t\t\t\t\t}, 1000 );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: ( err ) => {\n\t\t\t\t\tthis.showError( stepCurrent, err );\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.calls.push( x );\n\t}\n\n\tprivate showError( stepCurrent: StepState, err: any ) {\n\n\t\tif ( err == null )\n\t\t\tstepCurrent.errorMsg.set( 'Unknown error' );\n\t\telse if ( err.status == 400 )\n\t\t\tstepCurrent.errorMsg.set( err.error.error || 'Format Error' );\n\t\telse if ( err.status == 403 )\n\t\t\tstepCurrent.errorMsg.set( 'Access denied' );\n\t\telse\n\t\t\tstepCurrent.errorMsg.set( 'Unknown error' );\n\n\t\tstepCurrent.check.set( false );\n\t\tstepCurrent.completed.set( false );\n\t}\n\n\tprivate sendStep( i: number ): Observable<any> {\n\t\tconst steps = this.steps();\n\t\tlet data = {};\n\t\tconst step = steps[ i ];\n\n\t\tfor ( let x = 0; x <= i; x++ )\n\t\t\tdata = { ...data, ...steps[ x ].data };\n\n\t\tif ( step.extra )\n\t\t\tdata = { ...data, ...step.extra };\n\n\t\tconst url = step.url ? step.url : this.settings().url;\n\t\treturn this.dataService.post( url, data );\n\t}\n\n}\n","<mat-horizontal-stepper [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-horizontal-stepper>\n\n@if (done()) {\n\t<div class=\"xcol done\">\n\t\t<xiri-done></xiri-done>\n\t</div>\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, OnDestroy } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MatLine } from \"@angular/material/core\";\nimport { XiriButton } from \"../button/button.component\";\nimport { XiriColor } from '../types/color.type';\nimport { XiriDialogComponent } from \"../dialog/dialog.component\";\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\nimport { Router, RouterLink } from \"@angular/router\";\nimport { MatIconButton } from '@angular/material/button';\nimport { MatListItem, MatNavList } from '@angular/material/list';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n\tMatCard,\n\tMatCardAvatar,\n\tMatCardContent,\n\tMatCardHeader,\n\tMatCardSubtitle,\n\tMatCardTitle\n} from '@angular/material/card';\n\nexport interface XiriLinksSettings {\n\tdata: XiriButton[]\n\theaderIcon?: string\n\theaderIconColor?: XiriColor\n\theaderSub?: string\n\theader?: string\n\tcompact?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-links',\n\t templateUrl: './links.component.html',\n\t styleUrl: './links.component.scss',\n\t imports: [ MatCard,\n\t MatCardHeader,\n\t MatCardAvatar,\n\t MatIcon,\n\t MatCardSubtitle,\n\t MatCardTitle,\n\t MatCardContent,\n\t MatNavList,\n\t MatListItem,\n\t RouterLink,\n\t MatLine,\n\t MatIconButton,\n\t NgTemplateOutlet ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t host: { '[class.compact]': 'compact()' }\n } )\nexport class XiriLinksComponent implements OnDestroy {\n\n\tsettings = input.required<XiriLinksSettings>();\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\tprivate dialog = inject( MatDialog );\n\tprivate router = inject( Router );\n\t\n\tprivate dialogRef?: MatDialogRef<any>;\n\t\n\tngOnDestroy(): void {\n\t\tif ( this.dialogRef )\n\t\t\tthis.dialogRef.close( null );\n\t}\n\t\n\topenDialog( item: XiriButton ) {\n\t\t\n\t\tconst data = {\n\t\t\ttype: 'load',\n\t\t\turl: item.url,\n\t\t};\n\t\t\n\t\tthis.dialogRef = this.dialog.open( XiriDialogComponent, {\n\t\t\tdata: data,\n\t\t} );\n\t\t\n\t\tthis.dialogRef.afterClosed().subscribe( ( result: any ) => {\n\t\t\tif ( !result )\n\t\t\t\treturn;\n\t\t\tif ( result.page == 'refresh' || result.refresh == 'page' )\n\t\t\t\tthis.router.navigate( [ this.router.url ] ).then();\n\t\t} );\n\t\t\n\t\treturn true;\n\t}\n\t\n}\n","@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.action || item.action == 'link') {\n\t\t\t\t<a mat-list-item [routerLink]=\"item.url\">\n\t\t\t\t\t<div matLine>{{ item.text }}</div>\n\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t<button mat-icon-button [attr.aria-label]=\"item.text\">\n\t\t\t\t\t\t\t<mat-icon>{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t</a>\n\t\t\t} @else if (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<div matLine>{{ item.text }}</div>\n\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t<button mat-icon-button [attr.aria-label]=\"item.text\">\n\t\t\t\t\t\t\t<mat-icon [class]=\"item.color || 'primary'\">{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t</mat-list-item>\n\t\t\t}\n\t\t}\n\t</mat-nav-list>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatRipple } from '@angular/material/core';\nimport { MatCard, MatCardHeader, MatCardAvatar, MatCardTitle, MatCardSubtitle } from '@angular/material/card';\nimport { RouterLink } from '@angular/router';\n\nexport interface XiriCardlinkSettings {\n\tlink: string\n\ticon?: string\n\ticonSet: string\n\ttext?: string\n\tsub?: string\n\tcompact?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-cardlink',\n\t templateUrl: './cardlink.component.html',\n\t styleUrls: [ './cardlink.component.scss' ],\n\t imports: [ RouterLink,\n\t MatCard,\n\t MatRipple,\n\t MatCardHeader,\n\t MatCardAvatar,\n\t MatIcon,\n\t MatCardTitle,\n\t MatCardSubtitle ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t host: { '[class.compact]': 'compact()' }\n } )\nexport class XiriCardlinkComponent {\n\n\tsettings = input.required<XiriCardlinkSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n}\n","<a [routerLink]=\"settings().link\">\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","import { ChangeDetectionStrategy, Component, effect, input, signal, TemplateRef } from '@angular/core';\nimport { MatTabGroup, MatTab, MatTabLabel } from '@angular/material/tabs';\nimport { MatIcon } from '@angular/material/icon';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { XiriDynData } from '../dyncomponent/dyndata.interface';\n\nexport interface XiriTabSettings {\n\tlabel: string\n\ticon?: string\n\tdisabled?: boolean\n\tdata: XiriDynData[]\n\tlazy?: boolean\n\tunload?: boolean\n}\n\nexport interface XiriTabsSettings {\n\ttabs: XiriTabSettings[]\n\tselectedIndex?: number\n\tdynamicHeight?: boolean\n\tanimationDuration?: string\n\tlazy?: boolean\n\tunload?: boolean\n\theaderPosition?: 'above' | 'below'\n\talignTabs?: 'start' | 'center' | 'end'\n\tstretchTabs?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-tabs',\n\t templateUrl: './tabs.component.html',\n\t styleUrl: './tabs.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [\n\t\t MatTabGroup,\n\t\t MatTab,\n\t\t MatTabLabel,\n\t\t MatIcon,\n\t\t NgTemplateOutlet\n\t ]\n } )\nexport class XiriTabsComponent {\n\t\n\tsettings = input.required<XiriTabsSettings>();\n\tfilterData = input<any>( undefined );\n\tdyncomponent = input<TemplateRef<any>>();\n\t\n\tselectedIndex = signal( 0 );\n\tvisitedTabs = signal<Set<number>>( new Set( [ 0 ] ) );\n\t\n\tconstructor() {\n\t\teffect( () => {\n\t\t\tconst idx = this.settings().selectedIndex ?? 0;\n\t\t\tthis.selectedIndex.set( idx );\n\t\t\tthis.visitedTabs.update( set => {\n\t\t\t\tconst newSet = new Set( set );\n\t\t\t\tnewSet.add( idx );\n\t\t\t\treturn newSet;\n\t\t\t} );\n\t\t} );\n\t}\n\t\n\tonTabChange( index: number ): void {\n\t\tthis.selectedIndex.set( index );\n\t\tthis.visitedTabs.update( set => {\n\t\t\tconst newSet = new Set( set );\n\t\t\tnewSet.add( index );\n\t\t\treturn newSet;\n\t\t} );\n\t}\n\t\n\tshouldRenderContent( index: number, tab: XiriTabSettings ): boolean {\n\t\tconst globalUnload = this.settings().unload ?? false;\n\t\tconst tabUnload = tab.unload ?? globalUnload;\n\n\t\tif ( tabUnload )\n\t\t\treturn this.selectedIndex() === index;\n\n\t\tconst globalLazy = this.settings().lazy ?? false;\n\t\tconst tabLazy = tab.lazy ?? globalLazy;\n\n\t\tif ( !tabLazy ) return true;\n\t\treturn this.visitedTabs().has( index );\n\t}\n}\n","<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","import { ChangeDetectionStrategy, Component, input, signal, TemplateRef } from '@angular/core';\nimport { MatAccordion, MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription } from '@angular/material/expansion';\nimport { MatIcon } from '@angular/material/icon';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { XiriDynData } from '../dyncomponent/dyndata.interface';\n\nexport interface XiriExpansionPanelSettings {\n\ttitle: string\n\tdescription?: string\n\ticon?: string\n\tdisabled?: boolean\n\texpanded?: boolean\n\tdata: XiriDynData[]\n\tlazy?: boolean\n\tunload?: boolean\n}\n\nexport interface XiriExpansionSettings {\n\tpanels: XiriExpansionPanelSettings[]\n\tmulti?: boolean\n\tdisplayMode?: 'default' | 'flat'\n\ttogglePosition?: 'before' | 'after'\n\thideToggle?: boolean\n\tlazy?: boolean\n\tunload?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-expansion',\n\t templateUrl: './expansion.component.html',\n\t styleUrl: './expansion.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [\n\t\t MatAccordion,\n\t\t MatExpansionPanel,\n\t\t MatExpansionPanelHeader,\n\t\t MatExpansionPanelTitle,\n\t\t MatExpansionPanelDescription,\n\t\t MatIcon,\n\t\t NgTemplateOutlet\n\t ]\n } )\nexport class XiriExpansionComponent {\n\n\tsettings = input.required<XiriExpansionSettings>();\n\tfilterData = input<any>( undefined );\n\tdyncomponent = input<TemplateRef<any>>();\n\n\topenedPanels = signal<Set<number>>( new Set() );\n\tvisitedPanels = signal<Set<number>>( new Set() );\n\n\tonPanelOpened( index: number ): void {\n\t\tthis.openedPanels.update( set => {\n\t\t\tconst newSet = new Set( set );\n\t\t\tnewSet.add( index );\n\t\t\treturn newSet;\n\t\t} );\n\t\tthis.visitedPanels.update( set => {\n\t\t\tconst newSet = new Set( set );\n\t\t\tnewSet.add( index );\n\t\t\treturn newSet;\n\t\t} );\n\t}\n\n\tonPanelClosed( index: number ): void {\n\t\tthis.openedPanels.update( set => {\n\t\t\tconst newSet = new Set( set );\n\t\t\tnewSet.delete( index );\n\t\t\treturn newSet;\n\t\t} );\n\t}\n\n\tshouldRenderContent( index: number, panel: XiriExpansionPanelSettings ): boolean {\n\t\tconst globalUnload = this.settings().unload ?? false;\n\t\tconst panelUnload = panel.unload ?? globalUnload;\n\n\t\tif ( panelUnload )\n\t\t\treturn this.openedPanels().has( index );\n\n\t\tconst globalLazy = this.settings().lazy ?? false;\n\t\tconst panelLazy = panel.lazy ?? globalLazy;\n\n\t\tif ( !panelLazy ) return true;\n\t\treturn this.visitedPanels().has( index );\n\t}\n}\n","<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","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport { XiriColor } from '../types/color.type';\n\nexport interface XiriStatTrend {\n\tvalue: number\n\tdirection: 'up' | 'down' | 'neutral'\n}\n\nexport interface XiriStatSettings {\n\tvalue: string | number\n\tlabel: string\n\ticon?: string\n\ticonColor?: XiriColor\n\ttrend?: XiriStatTrend\n\tprefix?: string\n\tsuffix?: string\n\tcolor?: XiriColor\n\tcompact?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-stat',\n\t templateUrl: './stat.component.html',\n\t styleUrl: './stat.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, MatCard, MatCardContent, NgTemplateOutlet ],\n\t host: { '[class.compact]': 'compact()' }\n } )\nexport class XiriStatComponent {\n\n\tsettings = input.required<XiriStatSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n}\n","@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</div>\n\t\t@if (settings().trend) {\n\t\t\t<div class=\"stat-trend\" [class]=\"settings().trend.direction\">\n\t\t\t\t<mat-icon>\n\t\t\t\t\t@switch (settings().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>{{ settings().trend.value > 0 ? '+' : '' }}{{ settings().trend.value }}%</span>\n\t\t\t</div>\n\t\t}\n\t</div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, forwardRef, input, signal, TemplateRef } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatDivider } from '@angular/material/divider';\nimport { XiriButtonlineComponent, XiriButtonlineSettings } from '../buttonline/buttonline.component';\nimport { XiriDynComponentComponent } from '../dyncomponent/dyncomponent.component';\nimport { XiriDynData } from '../dyncomponent/dyndata.interface';\n\nexport interface XiriSectionSettings {\n\ttitle?: string\n\tsubtitle?: string\n\ticon?: string\n\ticonColor?: string\n\tcollapsible?: boolean\n\tcollapsed?: boolean\n\tbuttons?: XiriButtonlineSettings\n\tcomponents?: XiriDynData[]\n}\n\n@Component( {\n\t selector: 'xiri-section',\n\t templateUrl: './section.component.html',\n\t styleUrl: './section.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, MatDivider, XiriButtonlineComponent, forwardRef( () => XiriDynComponentComponent ) ]\n } )\nexport class XiriSectionComponent {\n\n\tsettings = input.required<XiriSectionSettings>();\n\tdyncomponent = input<TemplateRef<any>>();\n\n\tcollapsed = signal<boolean>( false );\n\n\tconstructor() {\n\t}\n\n\tngOnInit() {\n\t\tif ( this.settings().collapsed ) {\n\t\t\tthis.collapsed.set( true );\n\t\t}\n\t}\n\n\ttoggle() {\n\t\tthis.collapsed.update( v => !v );\n\t}\n}\n","<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 (click)=\"settings().collapsible && toggle()\">\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","import { ChangeDetectionStrategy, Component, computed, forwardRef, input, TemplateRef } from '@angular/core';\nimport { XiriDynData } from \"./dyndata.interface\";\nimport { SafehtmlPipe } from '../pipes/safehtml.pipe';\nimport { XiriImagetextComponent } from '../imagetext/imagetext.component';\nimport { XiriMultiprogressComponent } from '../multiprogress/multiprogress.component';\nimport { XiriInfopointComponent } from '../infopoint/infopoint.component';\nimport { XiriListComponent } from '../list/list.component';\nimport { XiriHeaderComponent } from '../header/header.component';\nimport { XiriStepperComponent } from '../stepper/stepper.component';\nimport { XiriQueryComponent } from '../query/query.component';\nimport { XiriFormComponent } from '../form/form.component';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';\nimport { XiriLinksComponent } from '../links/links.component';\nimport { XiriCardlinkComponent } from '../cardlink/cardlink.component';\nimport { XiriTableComponent } from '../table/table.component';\nimport { XiriButtonlineComponent } from '../buttonline/buttonline.component';\nimport { XiriCardComponent } from '../card/card.component';\nimport { XiriTabsComponent } from '../tabs/tabs.component';\nimport { XiriExpansionComponent } from '../expansion/expansion.component';\nimport { XiriStatComponent } from '../stat/stat.component';\nimport { XiriEmptyStateComponent } from '../empty-state/empty-state.component';\nimport { XiriTimelineComponent } from '../timeline/timeline.component';\nimport { XiriPageHeaderComponent } from '../page-header/page-header.component';\nimport { XiriSectionComponent } from '../section/section.component';\nimport { XiriDividerComponent } from '../divider/divider.component';\nimport { XiriStatGridComponent } from '../stat-grid/stat-grid.component';\nimport { XiriToolbarComponent } from '../toolbar/toolbar.component';\nimport { XiriDescriptionListComponent } from '../description-list/description-list.component';\nimport { XiriBarChartComponent } from '../barchart/barchart.component';\nimport { XiriLineChartComponent } from '../linechart/linechart.component';\nimport { XiriPieChartComponent } from '../piechart/piechart.component';\nimport { XiriGaugeChartComponent } from '../gaugechart/gaugechart.component';\nimport { XiriHeatmapComponent } from '../heatmap/heatmap.component';\nimport { XiriCalendarComponent } from '../calendar/calendar.component';\nimport { XiriTreeComponent } from '../tree/tree.component';\nimport { XiriSankeyComponent } from '../sankey/sankey.component';\nimport { XiriGanttComponent } from '../gantt/gantt.component';\n\n\n@Component( {\n\t selector: 'xiri-dyncomponent',\n\t templateUrl: './dyncomponent.component.html',\n\t styleUrl: './dyncomponent.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ forwardRef( () => XiriCardComponent ),\n\t XiriButtonlineComponent,\n\t XiriTableComponent,\n\t XiriCardlinkComponent,\n\t XiriLinksComponent,\n\t MatCard,\n\t MatCardHeader,\n\t MatCardTitle,\n\t MatCardContent,\n\t XiriFormComponent,\n\t XiriQueryComponent,\n\t XiriStepperComponent,\n\t XiriHeaderComponent,\n\t XiriListComponent,\n\t XiriInfopointComponent,\n\t XiriMultiprogressComponent,\n\t XiriImagetextComponent,\n\t NgTemplateOutlet,\n\t SafehtmlPipe,\n\t XiriTabsComponent,\n\t XiriExpansionComponent,\n\t XiriStatComponent,\n\t XiriEmptyStateComponent,\n\t XiriTimelineComponent,\n\t XiriPageHeaderComponent,\n\t XiriSectionComponent,\n\t XiriDividerComponent,\n\t XiriStatGridComponent,\n\t XiriToolbarComponent,\n\t XiriDescriptionListComponent,\n\t XiriBarChartComponent,\n\t XiriLineChartComponent,\n\t XiriPieChartComponent,\n\t XiriGaugeChartComponent,\n\t XiriHeatmapComponent,\n\t XiriCalendarComponent,\n\t XiriTreeComponent,\n\t XiriSankeyComponent,\n\t XiriGanttComponent ]\n } )\nexport class XiriDynComponentComponent {\n\t\n\tdata = input.required<XiriDynData[]>();\n\tfilterData = input<any>( undefined );\n\tdyncomponent = input<TemplateRef<any>>();\n\t\n\tdataInt = computed( () => {\n\t\t\n\t\tlet data = this.data();\n\t\t\n\t\tif ( data === undefined || data === null )\n\t\t\treturn [];\n\t\tif ( !Array.isArray( data ) )\n\t\t\tdata = [ data ];\n\t\t\n\t\treturn data.map( ( d: XiriDynData ) => {\n\t\t\t\n\t\t\tif ( d.id === undefined )\n\t\t\t\td.id = Math.floor( Math.random() * 1000000 );\n\t\t\t\n\t\t\treturn d;\n\t\t} );\n\t} );\n}\n","@for (obj of dataInt(); track obj.id) {\n\n\t@switch (obj.type) {\n\t\t@case ('card') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-6 xcol-xl-4'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-card [settings]=\"obj.data\"></xiri-card>\n\t\t\t</div>\n\t\t}\n\t\t@case ('buttonline') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-buttonline [settings]=\"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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-table [settings]=\"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]=\"obj.display || 'xcol xcol-md-4 xcol-lg-3'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-cardlink [settings]=\"obj.data\"></xiri-cardlink>\n\t\t\t</div>\n\t\t}\n\t\t@case ('links') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-4 xcol-lg-3'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-links [settings]=\"obj.data\"></xiri-links>\n\t\t\t</div>\n\t\t}\n\t\t@case ('form') {\n\t\t\t<div [class]=\"obj.display || '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 (obj.data.header) {\n\t\t\t\t\t\t<mat-card-header>\n\t\t\t\t\t\t\t<mat-card-title>{{ 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]=\"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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-query [settings]=\"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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-stepper [settings]=\"obj.data\"></xiri-stepper>\n\t\t\t</div>\n\t\t}\n\t\t@case ('header') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-header [settings]=\"obj.data\"></xiri-header>\n\t\t\t</div>\n\t\t}\n\t\t@case ('list') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-list [settings]=\"obj.data\"></xiri-list>\n\t\t\t</div>\n\t\t}\n\t\t@case ('spacer') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<div class=\"spacer\">&nbsp;</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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t\t<xiri-dyncomponent [data]=\"obj.data\" [dyncomponent]=\"dyncomponent()\" class=\"row\"></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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-infopoint [settings]=\"obj.data\"></xiri-infopoint>\n\t\t\t</div>\n\t\t}\n\t\t@case ('multiprogress') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-4'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-multiprogress [settings]=\"obj.data\"></xiri-multiprogress> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('imagetext') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-4'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-imagetext [settings]=\"obj.data\"></xiri-imagetext> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('tabs') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-tabs [settings]=\"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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-expansion [settings]=\"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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<div class=\"infotext\">{{ obj.data.text }}</div>\n\t\t\t</div>\n\t\t}\n\t\t@case ('html') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<div class=\"html\" [innerHtml]=\"obj.data.html | safeHtml\"></div>\n\t\t\t</div>\n\t\t}\n\t\t@case ('stat') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-6 xcol-xl-4'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-stat [settings]=\"obj.data\"></xiri-stat>\n\t\t\t</div>\n\t\t}\n\t\t@case ('empty-state') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-empty-state [settings]=\"obj.data\"></xiri-empty-state>\n\t\t\t</div>\n\t\t}\n\t\t@case ('timeline') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-timeline [settings]=\"obj.data\"></xiri-timeline> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('page-header') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-page-header [settings]=\"obj.data\"></xiri-page-header> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('section') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-section [settings]=\"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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-divider [settings]=\"obj.data\"></xiri-divider> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('stat-grid') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-stat-grid [settings]=\"obj.data\"></xiri-stat-grid> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('toolbar') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-toolbar [settings]=\"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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-description-list [settings]=\"obj.data\"></xiri-description-list> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('barchart') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-6 xcol-xl-3'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-barchart [mode]=\"obj.mode\" [settings]=\"obj.data\"></xiri-barchart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('linechart') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-6 xcol-xl-3'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-linechart [settings]=\"obj.data\"></xiri-linechart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('piechart') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-6 xcol-xl-3'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-piechart [settings]=\"obj.data\"></xiri-piechart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('gaugechart') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-6 xcol-xl-3'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-gaugechart [settings]=\"obj.data\"></xiri-gaugechart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('heatmap') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-heatmap [settings]=\"obj.data\"></xiri-heatmap> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('calendar') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-calendar [settings]=\"obj.data\"></xiri-calendar> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('tree') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-tree [settings]=\"obj.data\"></xiri-tree> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('sankey') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-sankey [settings]=\"obj.data\"></xiri-sankey> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('gantt') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-gantt [settings]=\"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]=\"obj.data\" [filterData]=\"obj.filterData\" [dyncomponent]=\"dyncomponent()\" class=\"xrow\"></xiri-dyncomponent>\n</ng-template>\n<ng-template #defaultComponentUnknown let-obj>\n\t<div class=\"xcol\">unknown type: {{ obj.type }}</div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, forwardRef, inject, input, signal, Signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { XiriButton } from \"../button/button.component\";\nimport { XiriButtonlineSettings, XiriButtonlineComponent } from \"../buttonline/buttonline.component\";\nimport { XiriColor } from '../types/color.type';\nimport { XiriRawTableSettings, XiriRawTableComponent } from \"../raw-table/xiri-raw-table.component\";\nimport { XiriTableField } from \"../raw-table/tabefield.interface\";\nimport { XiriDataService } from '../services/data.service';\nimport { XiriSkeletonComponent } from '../skeleton/skeleton.component';\nimport { XiriDynData } from '../dyncomponent/dyndata.interface';\nimport { XiriDynComponentComponent } from '../dyncomponent/dyncomponent.component';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\nimport {\n\tMatCard,\n\tMatCardHeader,\n\tMatCardAvatar,\n\tMatCardTitle,\n\tMatCardSubtitle,\n\tMatCardContent,\n\tMatCardActions\n} from '@angular/material/card';\n\nexport interface XiriCardSettings {\n\turl?: string\n\treload?: boolean\n\tdata?: any\n\tfields?: XiriTableField[]\n\tcomponents?: XiriDynData[]\n\theader?: string\n\theaderSub?: string\n\theaderIcon?: string\n\theaderIconColor?: XiriColor\n\tbuttonsTop?: XiriButtonlineSettings\n\tbuttonsBottom?: XiriButtonlineSettings\n\tdense?: number\n\tforceMinWidth?: boolean\n\tshowHeader?: boolean\n\tcollapsible?: boolean\n\tcollapsed?: boolean\n\tmaxHeight?: string\n\tpadding?: string // Token 'xs'|'sm'|'md'|'lg'|'xl' oder freier CSS-Wert ('16px', '1rem', 'var(--…)').\n\t // Wirkt nur im Multi-Component-Modus (settings.components).\n\t // Auf xs-Viewport (<576px) immer 8px.\n}\n\n@Component( {\n\t selector: 'xiri-card',\n\t templateUrl: './card.component.html',\n\t styleUrl: './card.component.scss',\n\t imports: [ MatCard,\n\t MatCardHeader,\n\t MatCardAvatar,\n\t MatIcon,\n\t MatIconButton,\n\t MatCardTitle,\n\t MatCardSubtitle,\n\t XiriButtonlineComponent,\n\t MatCardContent,\n\t XiriRawTableComponent,\n\t XiriSkeletonComponent,\n\t MatCardActions,\n\t forwardRef( () => XiriDynComponentComponent ) ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriCardComponent {\n\n\tprivate dataService = inject( XiriDataService );\n\tprivate destroyRef = inject( DestroyRef );\n\n\tsettings = input.required<XiriCardSettings>();\n\n\tloading = signal<boolean>( false );\n\terrorMsg = signal<string>( '' );\n\tisCollapsed = signal<boolean>( false );\n\tprivate _data = signal<any>( null );\n\n\tcardData = computed( () => this._data() ?? this.settings().data );\n\n\thasComponents = computed( () => ( this.settings().components?.length ?? 0 ) > 0 );\n\n\t/** Resolves padding setting (token or free CSS value) into a CSS length string. */\n\tcomponentsPadding = computed<string>( () => {\n\t\tconst v = this.settings().padding;\n\t\tif ( !v ) return 'var(--xiri-spacing-md, 16px)';\n\t\tswitch ( v ) {\n\t\t\tcase 'xs': return 'var(--xiri-spacing-xs, 4px)';\n\t\t\tcase 'sm': return 'var(--xiri-spacing-sm, 8px)';\n\t\t\tcase 'md': return 'var(--xiri-spacing-md, 16px)';\n\t\t\tcase 'lg': return 'var(--xiri-spacing-lg, 24px)';\n\t\t\tcase 'xl': return 'var(--xiri-spacing-xl, 32px)';\n\t\t\tdefault: return v; // freier CSS-Wert\n\t\t}\n\t} );\n\n\trawTable: Signal<XiriRawTableSettings | null> = computed( () => {\n\n\t\tconst data = this.cardData();\n\t\tif ( data == null ) return null;\n\n\t\tlet rt: XiriRawTableSettings = {\n\t\t\tdata: data,\n\t\t\tfields: this.settings().fields,\n\t\t\tdense: this.settings().dense,\n\t\t\tforceMinWidth: this.settings().forceMinWidth,\n\t\t\tshowHeader: this.settings().showHeader,\n\t\t};\n\n\t\tif ( !this.settings().fields && data.length !== 0 ) {\n\n\t\t\tlet fields: XiriTableField[] = [];\n\t\t\tif ( Array.isArray( data ) ) {\n\t\t\t\tfields.push( {\n\t\t\t\t\t id: '0',\n\t\t\t\t\t name: '0',\n\t\t\t\t\t format: 'text',\n\t\t\t\t\t display: 'info',\n\t\t\t\t\t minWidth: '30px',\n\t\t\t\t } );\n\t\t\t\tfields.push( {\n\t\t\t\t\t id: '1',\n\t\t\t\t\t name: '1',\n\t\t\t\t\t format: 'html',\n\t\t\t\t\t display: 'right',\n\t\t\t\t\t minWidth: '30px',\n\t\t\t\t } );\n\t\t\t} else {\n\n\t\t\t\tfields.push( {\n\t\t\t\t\t id: 'f0',\n\t\t\t\t\t name: 'f0',\n\t\t\t\t\t format: 'text',\n\t\t\t\t\t display: 'info',\n\t\t\t\t\t minWidth: '30px',\n\t\t\t\t } );\n\t\t\t\tfields.push( {\n\t\t\t\t\t id: 'f1',\n\t\t\t\t\t name: 'f1',\n\t\t\t\t\t format: 'html',\n\t\t\t\t\t display: 'right',\n\t\t\t\t\t minWidth: '30px',\n\t\t\t\t } );\n\n\t\t\t\tlet transformedData = [];\n\t\t\t\tfor ( let key in data ) {\n\t\t\t\t\tif ( data.hasOwnProperty( key ) ) {\n\t\t\t\t\t\ttransformedData.push( {\n\t\t\t\t\t\t\t 'f0': key,\n\t\t\t\t\t\t\t 'f1': data[ key ],\n\t\t\t\t\t\t } );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trt.data = transformedData;\n\t\t\t}\n\n\t\t\trt.fields = fields;\n\t\t}\n\n\t\treturn rt;\n\t} );\n\n\tconstructor() {\n\t\teffect( () => {\n\t\t\tconst s = this.settings();\n\t\t\tif ( s.collapsed !== undefined ) {\n\t\t\t\tthis.isCollapsed.set( s.collapsed );\n\t\t\t}\n\t\t} );\n\t\teffect( () => {\n\t\t\tconst url = this.settings().url;\n\t\t\tif ( url ) {\n\t\t\t\tthis.loadData();\n\t\t\t}\n\t\t} );\n\t}\n\n\ttoggleCollapse(): void {\n\t\tthis.isCollapsed.update( v => !v );\n\t}\n\n\tprivate loadData() {\n\t\tthis.loading.set( true );\n\t\tthis.errorMsg.set( '' );\n\t\tthis.dataService.post( this.settings().url!, null )\n\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe( {\n\t\t\t\tnext: ( res ) => {\n\t\t\t\t\tthis._data.set( res.data ?? res );\n\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t},\n\t\t\t\terror: ( err ) => {\n\t\t\t\t\tthis.errorMsg.set( err.error?.error || 'Fehler beim Laden' );\n\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t}\n\t\t\t} );\n\t}\n\n\treload() {\n\t\tif ( this.loading() ) return;\n\t\tthis.loadData();\n\t}\n\n}\n","<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","import { ChangeDetectionStrategy, Component, DestroyRef, OnInit, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n\tMAT_DIALOG_DATA,\n\tMatDialogRef,\n\tMatDialogTitle,\n\tMatDialogContent,\n\tMatDialogActions\n} from '@angular/material/dialog';\nimport { BreakpointObserver, Breakpoints, BreakpointState } from '@angular/cdk/layout';\nimport { XiriButton } from \"../button/button.component\";\nimport { SafehtmlPipe } from '../pipes/safehtml.pipe';\nimport { XiriButtonstyleComponent } from '../buttonstyle/buttonstyle.component';\nimport { MatDivider } from '@angular/material/divider';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\n\n\nexport interface XiriAlertConfig {\n\theader: string\n\ttext: string\n\ticon: string\n\tbuttons: XiriButton[]\n}\n\n@Component( {\n\t selector: 'xiri-alert',\n\t templateUrl: './alert.component.html',\n\t styleUrls: [ './alert.component.scss' ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatDialogTitle,\n\t CdkScrollable,\n\t MatDialogContent,\n\t MatProgressSpinner,\n\t MatIcon,\n\t MatDivider,\n\t MatDialogActions,\n\t XiriButtonstyleComponent,\n\t SafehtmlPipe ]\n } )\nexport class XiriAlertComponent implements OnInit {\n\tdialogRef = inject<MatDialogRef<XiriAlertComponent>>( MatDialogRef );\n\tinitData = inject( MAT_DIALOG_DATA );\n\tprivate breakpointObserver = inject( BreakpointObserver );\n\tprivate destroyRef = inject( DestroyRef );\n\n\n\tloading = signal(true);\n\theader = signal('');\n\tbuttons = signal<XiriButton[]>([]);\n\ttext = signal('');\n\ticon = signal('warning');\n\n\tngOnInit() {\n\n\t\tthis.breakpointObserver\n\t\t\t.observe( [ Breakpoints.XSmall, Breakpoints.Small ] )\n\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe( ( state: BreakpointState ) => {\n\t\t\t\tif ( state.matches )\n\t\t\t\t\tthis.dialogRef.updateSize( '80vw' );\n\t\t\t\telse\n\t\t\t\t\tthis.dialogRef.updateSize( '600px' );\n\t\t\t} );\n\n\t\tthis.loadData( this.initData );\n\t}\n\t\n\tprivate loadData( res: XiriAlertConfig ): void {\n\n\t\tif ( res.buttons ) {\n\t\t\tthis.header.set( res.header );\n\t\t\tthis.buttons.set( res.buttons );\n\t\t\tthis.text.set( res.text );\n\t\t\tthis.icon.set( res.icon ? res.icon : 'warning' );\n\t\t} else {\n\t\t\tthis.dialogRef.close( res );\n\t\t}\n\n\t\tthis.loading.set( false );\n\t}\n\t\n\tclickButton( button: XiriButton ): void {\n\n\t\tthis.dialogRef.close( button );\n\t}\n}\n","@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","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core';\nimport { SlicePipe } from '@angular/common';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatCard, MatCardAvatar, MatCardContent } from '@angular/material/card';\nimport { XiriColor } from '../types/color.type';\n\n\nexport interface XiriMultiprogressSettings {\n\tdata: XiriMultiprogressItem[]\n\theaderIcon?: string\n\theaderIconColor?: XiriColor\n\theader?: string\n\tshow?: number\n\tcompact?: boolean\n}\n\nexport interface XiriMultiprogressItem {\n\ttext: string\n\tvalue: string\n\tprogress: number\n\tcolor?: XiriColor\n}\n\n@Component( {\n\t selector: 'xiri-multiprogress',\n\t templateUrl: './multiprogress.component.html',\n\t styleUrls: [ './multiprogress.component.scss' ],\n\t imports: [ MatCard, MatCardAvatar, MatIcon, MatIconButton, MatCardContent, MatProgressBar, SlicePipe ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t host: { '[class.compact]': 'compact()' }\n } )\nexport class XiriMultiprogressComponent {\n\tpublic isOpen = signal<boolean>(false);\n\n\tsettings = input.required<XiriMultiprogressSettings>();\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n}\n","@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","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { XiriColor } from '../types/color.type';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n\tMatCard,\n\tMatCardAvatar,\n\tMatCardContent,\n\tMatCardHeader,\n\tMatCardSubtitle,\n\tMatCardTitle\n} from '@angular/material/card';\n\nexport interface XiriImagetextSettings {\n\turl: string;\n\tinfo: string;\n\n\theaderIcon?: string\n\theaderIconColor?: XiriColor\n\theaderSub?: string\n\theader?: string\n\tcompact?: boolean\n}\n\n\n@Component( {\n\t selector: 'xiri-imagetext',\n\t templateUrl: './imagetext.component.html',\n\t styleUrl: './imagetext.component.scss',\n\t imports: [ MatCard,\n\t MatCardHeader,\n\t MatCardAvatar,\n\t MatIcon,\n\t MatCardTitle,\n\t MatCardSubtitle,\n\t MatCardContent,\n\t MatProgressSpinner ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t host: { '[class.compact]': 'compact()' }\n } )\nexport class XiriImagetextComponent {\n\n\tsettings = input.required<XiriImagetextSettings>();\n\tloading = signal<boolean>( true )\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n}\n","@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","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, effect, inject, input } from '@angular/core';\nimport { filter } from \"rxjs\";\nimport { Event, NavigationEnd, Router, RouterLink } from \"@angular/router\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { MatIcon } from '@angular/material/icon';\nimport { MatListItem, MatListItemIcon, MatListItemMeta, MatListItemTitle } from '@angular/material/list';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\n\nexport interface XiriSidebarSettings {\n\t\n\tprefix: string\n\tfields: XiriNavigationField[]\n}\n\nexport interface XiriNavigationField {\n\tname: string\n\tlink?: string\n\ticon: string\n\ticonSet?: string\n\textern?: string\n\tactive?: boolean\n\tpath?: string\n\tregex?: RegExp\n\t\n\tmenu?: boolean\n\tshowSubmenu?: boolean\n\tsub?: XiriNavigationField[]\n}\n\n@Component( {\n\t selector: 'xiri-sidenav',\n\t templateUrl: './sidenav.component.html',\n\t styleUrls: [ './sidenav.component.scss' ],\n\t imports: [\n\t\t MatProgressSpinner,\n\t\t MatListItem,\n\t\t RouterLink,\n\t\t MatIcon,\n\t\t MatListItemIcon,\n\t\t MatListItemTitle,\n\t\t MatListItemMeta,\n\t ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriSidenavComponent {\n\t\n\tprivate router: Router = inject( Router );\n\tprivate cdr: ChangeDetectorRef = inject( ChangeDetectorRef );\n\t\n\tsettings = input<XiriSidebarSettings>();\n\tloading: boolean = true;\n\tfields: XiriNavigationField[] = [];\n\tprivate prefix: string;\n\t\n\tconstructor() {\n\n\t\tthis.router.events.pipe(\n\t\t\tfilter( ( event: Event ) => event instanceof NavigationEnd ),\n\t\t\ttakeUntilDestroyed()\n\t\t).subscribe( ( route: NavigationEnd ) => {\n\t\t\tthis.checkUrl( route.urlAfterRedirects );\n\t\t} );\n\n\t\teffect( () => {\n\t\t\tconst value = this.settings();\n\n\t\t\tthis.loading = value == null || value.fields == null;\n\n\t\t\tif ( !this.loading ) {\n\t\t\t\tthis.fields = value.fields;\n\t\t\t\tthis.prefix = value.prefix;\n\n\t\t\t\tfor ( let i = 0; i != this.fields.length; i++ ) {\n\t\t\t\t\tlet field = this.fields[ i ];\n\n\t\t\t\t\tif ( field.path )\n\t\t\t\t\t\tfield.regex = new RegExp( '^' + field.path )\n\t\t\t\t}\n\n\t\t\t\tthis.checkUrl( this.router.url );\n\t\t\t} else {\n\t\t\t\tthis.fields = [];\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tprivate checkUrl( url: string ): void {\n\t\t\n\t\tif ( !this.fields )\n\t\t\treturn;\n\t\t\n\t\tif ( this.prefix ) {\n\t\t\tif ( url.startsWith( this.prefix ) )\n\t\t\t\turl = url.substring( this.prefix.length );\n\t\t}\n\t\t\n\t\tfor ( let i = 0; i != this.fields.length; i++ ) {\n\t\t\t\n\t\t\tlet field = this.fields[ i ];\n\t\t\t\n\t\t\tif ( field.menu ) {\n\t\t\t\t\n\t\t\t\tlet found = false;\n\t\t\t\tfor ( let j = 0; j != field.sub.length; j++ ) {\n\t\t\t\t\tlet sub = field.sub[ j ];\n\t\t\t\t\tsub.active = sub.link == url;\n\t\t\t\t\tif ( sub.active || ( field.regex && field.regex.test( url ) ) ) {\n\t\t\t\t\t\tfield.active = true;\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfield.active = found;\n\t\t\t\tfield.showSubmenu = found;\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tfield.active = field.link == url;\n\t\t\t\tif ( field.active )\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif ( field.regex && field.regex.test( url ) )\n\t\t\t\t\tfield.active = true;\n\t\t\t}\n\t\t}\n\n\t\tthis.cdr.markForCheck();\n\t}\n\t\n}\n","@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@if ( nav.link ) {\n\t\t<a mat-list-item [routerLink]=\"nav.link\" [class.active]=\"nav.active\">\n\t\t\t@if (nav.iconSet) {\n\t\t\t\t<mat-icon matListItemIcon [fontSet]=\"nav.iconSet\" [class]=\"nav.active ? 'primary' : 'accent'\">{{ nav.icon }}</mat-icon>\n\t\t\t} @else {\n\t\t\t\t<mat-icon matListItemIcon [class]=\"nav.active ? 'primary' : 'accent'\">{{ nav.icon }}</mat-icon>\n\t\t\t}\n\t\t\t<span matListItemTitle>{{ nav.name }}</span>\n\t\t</a>\n\t} @else if (nav.menu) {\n\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@if (nav.iconSet) {\n\t\t\t\t<mat-icon matListItemIcon [fontSet]=\"nav.iconSet\" [class]=\"nav.active ? 'primary' : 'accent'\">{{ nav.icon }}</mat-icon>\n\t\t\t} @else {\n\t\t\t\t<mat-icon matListItemIcon [class]=\"nav.active ? 'primary' : 'accent'\">{{ nav.icon }}</mat-icon>\n\t\t\t}\n\t\t\t<span matListItemTitle>{{ nav.name }}</span>\n\t\t\t<span matListItemMeta>\n\t\t\t\t<mat-icon class=\"menu-button\" [class.rotated]=\"nav.showSubmenu\">expand_more</mat-icon>\n\t\t\t</span>\n\t\t</mat-list-item>\n\t\t<div class=\"submenu\" [class.expanded]=\"nav.showSubmenu\">\n\t\t\t@for (subnav of nav.sub; track subnav) {\n\t\t\t\t@if (subnav.link) {\n\t\t\t\t\t<a mat-list-item [routerLink]=\"subnav.link\" [class.active]=\"subnav.active\">{{ subnav.name }}</a>\n\t\t\t\t} @else if (subnav.extern) {\n\t\t\t\t\t<a mat-list-item [href]=\"subnav.extern\">{{ subnav.name }}</a>\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t} @else if (nav.extern) {\n\t\t<a mat-list-item [href]=\"nav.extern\">\n\t\t\t@if (nav.iconSet) {\n\t\t\t\t<mat-icon matListItemIcon [fontSet]=\"nav.iconSet\" class=\"accent\">{{ nav.icon }}</mat-icon>\n\t\t\t} @else {\n\t\t\t\t<mat-icon matListItemIcon class=\"accent\">{{ nav.icon }}</mat-icon>\n\t\t\t}\n\t\t\t<span matListItemTitle>{{ nav.name }}</span>\n\t\t</a>\n\t}\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { RouterLink } from '@angular/router';\n\nexport interface XiriBreadcrumbItem {\n\tlabel: string;\n\tlink?: string;\n\ticon?: string;\n\textern?: boolean;\n}\n\n@Component( {\n\t selector: 'xiri-breadcrumb',\n\t templateUrl: './breadcrumb.component.html',\n\t styleUrl: './breadcrumb.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, RouterLink ]\n } )\nexport class XiriBreadcrumbComponent {\n\n\tsettings = input.required<XiriBreadcrumbItem[]>();\n}\n","<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<a [routerLink]=\"item.link\">\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","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { XiriColor } from '../types/color.type';\n\nexport interface XiriTimelineItem {\n\ttitle: string;\n\tdescription?: string;\n\tdatetime?: string;\n\ticon?: string;\n\ticonColor?: XiriColor;\n}\n\nexport interface XiriTimelineSettings {\n\titems: XiriTimelineItem[];\n\torientation?: 'horizontal' | 'vertical';\n}\n\n@Component( {\n\t selector: 'xiri-timeline',\n\t templateUrl: './timeline.component.html',\n\t styleUrl: './timeline.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon ]\n } )\nexport class XiriTimelineComponent {\n\n\tsettings = input.required<XiriTimelineSettings>();\n}\n","<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","import {\n\tAfterViewInit,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tDestroyRef,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tNgZone,\n\tOnDestroy,\n\tsignal,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport { MatIcon } from '@angular/material/icon';\nimport { XiriColor } from '../types/color.type';\n\n/**\n * `xiri-echarts-host` — shared echarts plumbing for all chart components.\n *\n * Handles lazy `import('echarts')`, init / setOption / dispose, ResizeObserver,\n * the optional mat-card surface (with header + compact mode), and a flat\n * variant when nested inside another card.\n *\n * Specialized chart components (`xiri-barchart`, `xiri-linechart`, …) build\n * a typed echarts option from their settings and feed it via the `option`\n * input. Each re-emit of `option` re-renders the chart with `setOption(option, true)`.\n *\n * Compact-Mode strips the outer mat-card so the chart sits flat inside an\n * outer xiri-card without card-in-card visuals.\n */\n@Component( {\n\tselector: 'xiri-echarts-host',\n\ttemplateUrl: './echarts-host.component.html',\n\tstyleUrl: './echarts-host.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\timports: [ MatCard, MatCardContent, MatIcon ],\n\thost: { '[class.compact]': 'compact()' }\n} )\nexport class XiriEchartsHostComponent implements AfterViewInit, OnDestroy {\n\n\toption = input.required<any>();\n\tcompact = input<boolean>( false );\n\ttitle = input<string | undefined>( undefined );\n\theaderIcon = input<string | undefined>( undefined );\n\theaderIconColor = input<XiriColor | undefined>( undefined );\n\tchartHeight = input<string>( '200px' );\n\n\tchartHostRef = viewChild.required<ElementRef<HTMLDivElement>>( 'chartHost' );\n\n\tprivate zone = inject( NgZone );\n\tprivate destroyRef = inject( DestroyRef );\n\n\tprivate chart: any | null = null;\n\tprivate echarts: any | null = null;\n\tprivate resizeObserver: ResizeObserver | null = null;\n\tprivate loadError = signal<string | null>( null );\n\n\treadonly error = this.loadError.asReadonly();\n\treadonly hasHeader = computed( () => !!( this.title() || this.headerIcon() ) );\n\n\tconstructor() {\n\t\teffect( () => {\n\t\t\t// Re-render whenever the option changes.\n\t\t\tthis.option();\n\t\t\tif ( this.chart ) {\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t} );\n\t}\n\n\tasync ngAfterViewInit(): Promise<void> {\n\t\ttry {\n\t\t\tthis.echarts = await import( 'echarts' );\n\t\t} catch {\n\t\t\tthis.loadError.set( 'echarts is not installed. Add `npm install echarts` to your app.' );\n\t\t\treturn;\n\t\t}\n\n\t\tthis.zone.runOutsideAngular( () => {\n\t\t\tthis.chart = this.echarts.init( this.chartHostRef().nativeElement );\n\t\t\tthis.render();\n\n\t\t\tthis.resizeObserver = new ResizeObserver( () => this.chart?.resize() );\n\t\t\tthis.resizeObserver.observe( this.chartHostRef().nativeElement );\n\t\t} );\n\n\t\tthis.destroyRef.onDestroy( () => this.dispose() );\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.dispose();\n\t}\n\n\tprivate dispose(): void {\n\t\tthis.resizeObserver?.disconnect();\n\t\tthis.resizeObserver = null;\n\t\tthis.chart?.dispose();\n\t\tthis.chart = null;\n\t}\n\n\tprivate render(): void {\n\t\tif ( !this.chart ) return;\n\t\tconst opt = this.option();\n\t\tif ( !opt ) return;\n\t\tthis.chart.setOption( opt, true );\n\t}\n}\n","@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","import { XiriColor } from '../types/color.type';\n\n/**\n * Maps semantic XiriColor names to concrete CSS color values.\n *\n * Theme tokens use Material 3 system variables; extended tokens use\n * fixed brand colors that work both in light and dark themes.\n */\nexport const COLOR_CSS_VAR: Record<string, string> = {\n\tprimary: 'var(--mat-sys-primary)',\n\tsecondary: 'var(--mat-sys-secondary)',\n\ttertiary: 'var(--mat-sys-tertiary)',\n\taccent: 'var(--mat-sys-tertiary)',\n\twarn: '#f5a623',\n\terror: 'var(--mat-sys-error)',\n\tsuccess: '#2e7d32',\n\temerald: '#10b981',\n\tred: '#e53935',\n\tyellow: '#fbc02d',\n\tgreen: '#43a047',\n\tblue: '#1e88e5',\n\tpurple: '#8b5cf6',\n\torange: '#fb8c00',\n\tgray: '#9e9e9e',\n\tlightgray: '#cfcfcf',\n\tdarkgray: '#616161',\n\twhite: '#ffffff',\n\tblack: '#000000',\n\tinherit: 'currentColor'\n};\n\n/**\n * Resolves a XiriColor token (or a freeform CSS color) to a CSS-color string\n * usable in echarts options. Unknown tokens fall back to the given fallback.\n */\nexport function resolveColor( color: XiriColor | string | undefined, fallback = '#8b5cf6' ): string {\n\tif ( !color ) return fallback;\n\treturn COLOR_CSS_VAR[ color ] ?? fallback;\n}\n","/** Escapes characters that would otherwise be interpreted as HTML in echarts tooltip strings. */\nexport function escapeHtml( s: string ): string {\n\treturn String( s ?? '' )\n\t\t.replace( /&/g, '&amp;' )\n\t\t.replace( /</g, '&lt;' )\n\t\t.replace( />/g, '&gt;' )\n\t\t.replace( /\"/g, '&quot;' );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriColor } from '../types/color.type';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { resolveColor } from '../echarts/color';\nimport { escapeHtml } from '../echarts/tooltip';\n\nexport type XiriBarChartMode = 'simple' | 'stacked' | 'heatmap';\n\nexport interface XiriBarChartSegment {\n\tvalue: number;\n\tcolor?: XiriColor;\n\tname?: string;\n}\n\nexport interface XiriBarChartBar {\n\tlabel: string;\n\tvalue?: number;\n\tsegments?: XiriBarChartSegment[];\n\tname?: string;\n}\n\nexport interface XiriBarChartPoint {\n\ttime: number;\n\tvalue: number;\n\tname?: string;\n}\n\nexport interface XiriBarChartSettings {\n\ttitle?: string;\n\tyMin?: number;\n\tyMax?: number;\n\tcolor?: XiriColor;\n\tbars?: XiriBarChartBar[];\n\tpoints?: XiriBarChartPoint[];\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-barchart',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriBarChartComponent {\n\n\tmode = input<XiriBarChartMode | string>( 'simple' );\n\tsettings = input.required<XiriBarChartSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\toption = computed( () => {\n\t\tconst m = this.mode();\n\t\tswitch ( m ) {\n\t\t\tcase 'stacked': return this.stackedOption();\n\t\t\tcase 'heatmap': return this.heatmapOption();\n\t\t\tdefault: return this.simpleOption();\n\t\t}\n\t} );\n\n\tprivate baseGrid() {\n\t\t// Compact mode: outer card already provides padding — shrink the\n\t\t// echarts grid so we don't get a \"double margin\".\n\t\tif ( this.compact() ) {\n\t\t\treturn { left: 0, right: 0, top: 4, bottom: 0, containLabel: true };\n\t\t}\n\t\treturn { left: 32, right: 16, top: 24, bottom: 24, containLabel: true };\n\t}\n\n\tprivate simpleOption() {\n\t\tconst s = this.settings();\n\t\tconst bars = s.bars ?? [];\n\t\tconst color = resolveColor( s.color, '#8b5cf6' );\n\t\treturn {\n\t\t\tgrid: this.baseGrid(),\n\t\t\ttooltip: {\n\t\t\t\ttrigger: 'axis',\n\t\t\t\tformatter: ( params: any ) => {\n\t\t\t\t\tconst arr = Array.isArray( params ) ? params : [ params ];\n\t\t\t\t\tif ( !arr.length ) return '';\n\t\t\t\t\tconst p = arr[ 0 ];\n\t\t\t\t\tconst bar = bars[ p.dataIndex ];\n\t\t\t\t\tconst header = bar?.name ?? bar?.label ?? p.axisValueLabel ?? '';\n\t\t\t\t\treturn `<b>${ escapeHtml( header ) }</b><br/>${ p.marker }${ p.value }`;\n\t\t\t\t}\n\t\t\t},\n\t\t\txAxis: {\n\t\t\t\ttype: 'category',\n\t\t\t\tdata: bars.map( b => b.label ),\n\t\t\t\taxisLine: { show: false },\n\t\t\t\taxisTick: { show: false }\n\t\t\t},\n\t\t\tyAxis: {\n\t\t\t\ttype: 'value',\n\t\t\t\tmin: s.yMin,\n\t\t\t\tmax: s.yMax,\n\t\t\t\tsplitLine: { lineStyle: { color: '#eee' } }\n\t\t\t},\n\t\t\tseries: [ {\n\t\t\t\ttype: 'bar',\n\t\t\t\tdata: bars.map( b => b.value ?? 0 ),\n\t\t\t\titemStyle: { color, borderRadius: [ 3, 3, 0, 0 ] },\n\t\t\t\tbarCategoryGap: '40%'\n\t\t\t} ]\n\t\t};\n\t}\n\n\tprivate stackedOption() {\n\t\tconst s = this.settings();\n\t\tconst bars = s.bars ?? [];\n\t\tconst segCount = Math.max( 0, ...bars.map( b => b.segments?.length ?? 0 ) );\n\n\t\t// Derive a default series name per segment-position from the first bar that has it.\n\t\tconst seriesNames: string[] = [];\n\t\tfor ( let i = 0; i < segCount; i++ ) {\n\t\t\tconst found = bars.find( b => b.segments?.[ i ]?.name )?.segments?.[ i ]?.name;\n\t\t\tseriesNames.push( found ?? '' );\n\t\t}\n\n\t\tconst series: any[] = [];\n\t\tfor ( let i = 0; i < segCount; i++ ) {\n\t\t\tseries.push( {\n\t\t\t\ttype: 'bar',\n\t\t\t\tstack: 'total',\n\t\t\t\tname: seriesNames[ i ] || `Segment ${ i + 1 }`,\n\t\t\t\tbarCategoryGap: '40%',\n\t\t\t\tdata: bars.map( b => {\n\t\t\t\t\tconst seg = b.segments?.[ i ];\n\t\t\t\t\tif ( !seg ) return { value: 0, itemStyle: { color: 'transparent' } };\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvalue: seg.value,\n\t\t\t\t\t\tname: seg.name ?? seriesNames[ i ] ?? '',\n\t\t\t\t\t\titemStyle: { color: resolveColor( seg.color, '#9e9e9e' ) }\n\t\t\t\t\t};\n\t\t\t\t} )\n\t\t\t} );\n\t\t}\n\n\t\treturn {\n\t\t\tgrid: this.baseGrid(),\n\t\t\ttooltip: {\n\t\t\t\ttrigger: 'axis',\n\t\t\t\tformatter: ( params: any ) => {\n\t\t\t\t\tconst arr = Array.isArray( params ) ? params : [ params ];\n\t\t\t\t\tif ( !arr.length ) return '';\n\t\t\t\t\tconst idx = arr[ 0 ].dataIndex;\n\t\t\t\t\tconst bar = bars[ idx ];\n\t\t\t\t\tconst header = bar?.name ?? bar?.label ?? '';\n\t\t\t\t\tlet body = '';\n\t\t\t\t\tfor ( const p of arr ) {\n\t\t\t\t\t\tif ( !p.value && p.value !== 0 ) continue;\n\t\t\t\t\t\tif ( p.value === 0 ) continue;\n\t\t\t\t\t\tconst seg = bar?.segments?.[ p.seriesIndex ];\n\t\t\t\t\t\tconst label = seg?.name ?? p.seriesName ?? '';\n\t\t\t\t\t\tbody += `<br/>${ p.marker }${ escapeHtml( label ) }: <b>${ p.value }</b>`;\n\t\t\t\t\t}\n\t\t\t\t\treturn `<b>${ escapeHtml( header ) }</b>${ body }`;\n\t\t\t\t}\n\t\t\t},\n\t\t\txAxis: {\n\t\t\t\ttype: 'category',\n\t\t\t\tdata: bars.map( b => b.label ),\n\t\t\t\taxisLine: { show: false },\n\t\t\t\taxisTick: { show: false }\n\t\t\t},\n\t\t\tyAxis: {\n\t\t\t\ttype: 'value',\n\t\t\t\tmin: s.yMin,\n\t\t\t\tmax: s.yMax,\n\t\t\t\tsplitLine: { lineStyle: { color: '#eee' } }\n\t\t\t},\n\t\t\tseries\n\t\t};\n\t}\n\n\tprivate heatmapOption() {\n\t\tconst s = this.settings();\n\t\tconst points = s.points ?? [];\n\t\tconst color = resolveColor( s.color, '#8b5cf6' );\n\t\treturn {\n\t\t\tgrid: { ...this.baseGrid(), left: 8, right: 8 },\n\t\t\ttooltip: {\n\t\t\t\ttrigger: 'axis',\n\t\t\t\tformatter: ( params: any ) => {\n\t\t\t\t\tconst arr = Array.isArray( params ) ? params : [ params ];\n\t\t\t\t\tif ( !arr.length ) return '';\n\t\t\t\t\tconst p = arr[ 0 ];\n\t\t\t\t\tconst point = points[ p.dataIndex ];\n\t\t\t\t\tconst date = new Date( p.value[ 0 ] ).toLocaleString();\n\t\t\t\t\tconst head = point?.name ? `<b>${ escapeHtml( point.name ) }</b><br/>` : '';\n\t\t\t\t\treturn `${ head }${ escapeHtml( date ) }<br/>${ p.marker }<b>${ p.value[ 1 ] }</b>`;\n\t\t\t\t}\n\t\t\t},\n\t\t\txAxis: {\n\t\t\t\ttype: 'time',\n\t\t\t\taxisLine: { show: false },\n\t\t\t\taxisTick: { show: false },\n\t\t\t\tsplitLine: { show: false }\n\t\t\t},\n\t\t\tyAxis: {\n\t\t\t\ttype: 'value',\n\t\t\t\tmin: s.yMin ?? 0,\n\t\t\t\tmax: s.yMax,\n\t\t\t\tshow: false\n\t\t\t},\n\t\t\tseries: [ {\n\t\t\t\ttype: 'bar',\n\t\t\t\tbarMinWidth: 1,\n\t\t\t\tbarMaxWidth: 3,\n\t\t\t\tdata: points.map( p => [ p.time, p.value ] ),\n\t\t\t\titemStyle: { color }\n\t\t\t} ]\n\t\t};\n\t}\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriColor } from '../types/color.type';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { resolveColor } from '../echarts/color';\nimport { escapeHtml } from '../echarts/tooltip';\n\nexport interface XiriLineChartLine {\n\tname: string;\n\tvalues: number[];\n\tcolor?: XiriColor;\n\tdashed?: boolean;\n\tarea?: boolean; // fill area below the line\n}\n\nexport interface XiriLineChartSettings {\n\ttitle?: string;\n\txLabels: string[];\n\tlines: XiriLineChartLine[];\n\tyMin?: number;\n\tyMax?: number;\n\tsmooth?: boolean;\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-linechart',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriLineChartComponent {\n\n\tsettings = input.required<XiriLineChartSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst lines = s.lines ?? [];\n\t\tconst labels = s.xLabels ?? [];\n\n\t\tconst series = lines.map( ( line, i ) => {\n\t\t\tconst color = resolveColor( line.color, FALLBACK_COLORS[ i % FALLBACK_COLORS.length ] );\n\t\t\treturn {\n\t\t\t\ttype: 'line',\n\t\t\t\tname: line.name,\n\t\t\t\tsmooth: !!s.smooth,\n\t\t\t\tsymbol: 'circle',\n\t\t\t\tsymbolSize: 6,\n\t\t\t\tlineStyle: {\n\t\t\t\t\twidth: 2,\n\t\t\t\t\ttype: line.dashed ? 'dashed' : 'solid',\n\t\t\t\t\tcolor,\n\t\t\t\t},\n\t\t\t\titemStyle: { color },\n\t\t\t\tareaStyle: line.area ? { color, opacity: 0.15 } : undefined,\n\t\t\t\tdata: line.values,\n\t\t\t};\n\t\t} );\n\n\t\treturn {\n\t\t\tgrid: this.compact()\n\t\t\t\t? { left: 0, right: 0, top: 4, bottom: 0, containLabel: true }\n\t\t\t\t: { left: 32, right: 16, top: 24, bottom: 24, containLabel: true },\n\t\t\ttooltip: {\n\t\t\t\ttrigger: 'axis',\n\t\t\t\tformatter: ( params: any ) => {\n\t\t\t\t\tconst arr = Array.isArray( params ) ? params : [ params ];\n\t\t\t\t\tif ( !arr.length ) return '';\n\t\t\t\t\tconst header = escapeHtml( String( arr[ 0 ].axisValueLabel ?? arr[ 0 ].name ?? '' ) );\n\t\t\t\t\tlet body = '';\n\t\t\t\t\tfor ( const p of arr ) {\n\t\t\t\t\t\tbody += `<br/>${ p.marker }${ escapeHtml( String( p.seriesName ?? '' ) ) }: <b>${ p.value }</b>`;\n\t\t\t\t\t}\n\t\t\t\t\treturn `<b>${ header }</b>${ body }`;\n\t\t\t\t}\n\t\t\t},\n\t\t\tlegend: lines.length > 1 ? { top: 0, right: 0, type: 'scroll' } : undefined,\n\t\t\txAxis: {\n\t\t\t\ttype: 'category',\n\t\t\t\tdata: labels,\n\t\t\t\tboundaryGap: false,\n\t\t\t\taxisLine: { show: false },\n\t\t\t\taxisTick: { show: false }\n\t\t\t},\n\t\t\tyAxis: {\n\t\t\t\ttype: 'value',\n\t\t\t\tmin: s.yMin,\n\t\t\t\tmax: s.yMax,\n\t\t\t\tsplitLine: { lineStyle: { color: '#eee' } }\n\t\t\t},\n\t\t\tseries,\n\t\t};\n\t} );\n}\n\n/** Fallback color rotation when a line has no explicit color. */\nconst FALLBACK_COLORS = [ '#8b5cf6', '#10b981', '#1e88e5', '#fb8c00', '#e53935', '#fbc02d', '#43a047', '#616161' ];\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriColor } from '../types/color.type';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { resolveColor } from '../echarts/color';\nimport { escapeHtml } from '../echarts/tooltip';\n\nexport interface XiriPieChartSlice {\n\tname: string;\n\tvalue: number;\n\tcolor?: XiriColor;\n}\n\nexport interface XiriPieChartSettings {\n\ttitle?: string;\n\tslices: XiriPieChartSlice[];\n\tdonut?: boolean; // ring instead of full pie\n\tnightingale?: boolean; // rose/nightingale: slice radius scales with value\n\tnightingaleType?: 'radius' | 'area'; // 'radius' (default) or 'area'\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-piechart',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriPieChartComponent {\n\n\tsettings = input.required<XiriPieChartSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst slices = s.slices ?? [];\n\t\t// nightingale: smaller inner radius even on full pie so the rose has a visible center\n\t\tconst radius: [ string, string ] = s.donut\n\t\t\t? [ '55%', '78%' ]\n\t\t\t: ( s.nightingale ? [ '20%', '78%' ] : [ '0', '78%' ] );\n\n\t\tconst series: any = {\n\t\t\ttype: 'pie',\n\t\t\tradius,\n\t\t\tcenter: [ '50%', '45%' ],\n\t\t\tavoidLabelOverlap: true,\n\t\t\tlabel: {\n\t\t\t\tshow: !s.donut && !this.compact(),\n\t\t\t\tformatter: '{b}\\n{d}%',\n\t\t\t},\n\t\t\tlabelLine: { show: !s.donut && !this.compact() },\n\t\t\tdata: slices.map( ( slice, i ) => ( {\n\t\t\t\tname: slice.name,\n\t\t\t\tvalue: slice.value,\n\t\t\t\titemStyle: { color: resolveColor( slice.color, FALLBACK_COLORS[ i % FALLBACK_COLORS.length ] ) }\n\t\t\t} ) )\n\t\t};\n\t\tif ( s.nightingale ) {\n\t\t\tseries.roseType = s.nightingaleType ?? 'radius';\n\t\t}\n\n\t\treturn {\n\t\t\ttooltip: {\n\t\t\t\ttrigger: 'item',\n\t\t\t\tformatter: ( p: any ) => {\n\t\t\t\t\tconst name = escapeHtml( String( p.name ?? '' ) );\n\t\t\t\t\treturn `<b>${ name }</b><br/>${ p.marker }<b>${ p.value }</b> (${ p.percent }%)`;\n\t\t\t\t}\n\t\t\t},\n\t\t\tlegend: { bottom: 0, type: 'scroll' },\n\t\t\tseries: [ series ]\n\t\t};\n\t} );\n}\n\nconst FALLBACK_COLORS = [ '#8b5cf6', '#10b981', '#1e88e5', '#fb8c00', '#e53935', '#fbc02d', '#43a047', '#616161' ];\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriColor } from '../types/color.type';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { resolveColor } from '../echarts/color';\n\nexport interface XiriGaugeChartSettings {\n\ttitle?: string;\n\tvalue: number;\n\tmin?: number; // default 0\n\tmax?: number; // default 100\n\tcolor?: XiriColor;\n\tlabel?: string; // detail label below the value (e.g. \"%\", \"MB/s\")\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-gaugechart',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriGaugeChartComponent {\n\n\tsettings = input.required<XiriGaugeChartSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst min = s.min ?? 0;\n\t\tconst max = s.max ?? 100;\n\t\tconst color = resolveColor( s.color, '#8b5cf6' );\n\n\t\treturn {\n\t\t\tseries: [ {\n\t\t\t\ttype: 'gauge',\n\t\t\t\tmin,\n\t\t\t\tmax,\n\t\t\t\tcenter: [ '50%', '60%' ],\n\t\t\t\tradius: this.compact() ? '90%' : '80%',\n\t\t\t\tprogress: {\n\t\t\t\t\tshow: true,\n\t\t\t\t\twidth: 12,\n\t\t\t\t\titemStyle: { color }\n\t\t\t\t},\n\t\t\t\taxisLine: {\n\t\t\t\t\tlineStyle: { width: 12, color: [ [ 1, '#eee' ] ] }\n\t\t\t\t},\n\t\t\t\tpointer: { show: false },\n\t\t\t\taxisTick: { show: !this.compact() },\n\t\t\t\tsplitLine: { show: !this.compact() },\n\t\t\t\taxisLabel: { show: !this.compact(), distance: 18, fontSize: 11 },\n\t\t\t\tanchor: { show: false },\n\t\t\t\ttitle: { show: false },\n\t\t\t\tdetail: {\n\t\t\t\t\tvalueAnimation: true,\n\t\t\t\t\toffsetCenter: [ 0, '15%' ],\n\t\t\t\t\tfontSize: this.compact() ? 18 : 24,\n\t\t\t\t\tfontWeight: 'bold',\n\t\t\t\t\tformatter: s.label ? `{value}\\n{label|${ s.label }}` : '{value}',\n\t\t\t\t\trich: { label: { fontSize: 11, fontWeight: 'normal', color: '#888' } },\n\t\t\t\t\tcolor\n\t\t\t\t},\n\t\t\t\tdata: [ { value: s.value } ]\n\t\t\t} ]\n\t\t};\n\t} );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { escapeHtml } from '../echarts/tooltip';\n\nexport interface XiriHeatmapCell {\n\tx: number; // index into xLabels\n\ty: number; // index into yLabels\n\tvalue: number;\n\tlabel?: string; // optional override for the cell's display value\n}\n\nexport interface XiriHeatmapSettings {\n\ttitle?: string;\n\txLabels: string[];\n\tyLabels: string[];\n\tcells: XiriHeatmapCell[];\n\tmin?: number;\n\tmax?: number;\n\tcolorRange?: [ string, string ]; // CSS colors for low/high; default light → purple\n\tshowValues?: boolean; // print values inside cells (only readable for small grids)\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-heatmap',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\"\n\t\t\t[chartHeight]=\"height()\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriHeatmapComponent {\n\n\tsettings = input.required<XiriHeatmapSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\theight = computed<string>( () => {\n\t\tconst rows = this.settings().yLabels.length || 1;\n\t\tconst px = Math.max( 200, rows * 32 + 40 );\n\t\treturn px + 'px';\n\t} );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst cells = s.cells ?? [];\n\t\tconst values = cells.map( c => c.value );\n\t\tconst min = s.min ?? Math.min( 0, ...values );\n\t\tconst max = s.max ?? Math.max( 0, ...values );\n\t\tconst [ lowColor, highColor ] = s.colorRange ?? [ '#ede9fe', '#7c3aed' ];\n\n\t\treturn {\n\t\t\tgrid: this.compact()\n\t\t\t\t? { left: 0, right: 0, top: 4, bottom: 0, containLabel: true }\n\t\t\t\t: { left: 32, right: 16, top: 24, bottom: 24, containLabel: true },\n\t\t\ttooltip: {\n\t\t\t\tposition: 'top',\n\t\t\t\tformatter: ( p: any ) => {\n\t\t\t\t\tconst x = s.xLabels[ p.value[ 0 ] ] ?? '';\n\t\t\t\t\tconst y = s.yLabels[ p.value[ 1 ] ] ?? '';\n\t\t\t\t\treturn `<b>${ escapeHtml( y ) }</b> / <b>${ escapeHtml( x ) }</b><br/>${ p.marker }<b>${ p.value[ 2 ] }</b>`;\n\t\t\t\t}\n\t\t\t},\n\t\t\txAxis: {\n\t\t\t\ttype: 'category',\n\t\t\t\tdata: s.xLabels,\n\t\t\t\tsplitArea: { show: true },\n\t\t\t\taxisLine: { show: false },\n\t\t\t\taxisTick: { show: false }\n\t\t\t},\n\t\t\tyAxis: {\n\t\t\t\ttype: 'category',\n\t\t\t\tdata: s.yLabels,\n\t\t\t\tsplitArea: { show: true },\n\t\t\t\taxisLine: { show: false },\n\t\t\t\taxisTick: { show: false }\n\t\t\t},\n\t\t\tvisualMap: {\n\t\t\t\tmin,\n\t\t\t\tmax,\n\t\t\t\tcalculable: true,\n\t\t\t\torient: 'horizontal',\n\t\t\t\tleft: 'center',\n\t\t\t\tbottom: 0,\n\t\t\t\tinRange: { color: [ lowColor, highColor ] },\n\t\t\t\tshow: !this.compact()\n\t\t\t},\n\t\t\tseries: [ {\n\t\t\t\ttype: 'heatmap',\n\t\t\t\tdata: cells.map( c => [ c.x, c.y, c.value ] ),\n\t\t\t\tlabel: { show: !!s.showValues, formatter: ( p: any ) => String( p.value[ 2 ] ) },\n\t\t\t\temphasis: { itemStyle: { shadowBlur: 6, shadowColor: 'rgba(0, 0, 0, 0.3)' } }\n\t\t\t} ]\n\t\t};\n\t} );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { escapeHtml } from '../echarts/tooltip';\n\nexport interface XiriCalendarCell {\n\tdate: string; // 'YYYY-MM-DD'\n\tvalue: number;\n}\n\nexport interface XiriCalendarSettings {\n\ttitle?: string;\n\trange: string | [ string, string ]; // year 'YYYY' | ['YYYY-MM-DD', 'YYYY-MM-DD']\n\tcells: XiriCalendarCell[];\n\tmin?: number;\n\tmax?: number;\n\tcolorRange?: [ string, string ]; // CSS colors for low/high; default light green → dark green (GitHub-like)\n\tcellSize?: number; // cell size in px (default 16, compact 12)\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-calendar',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\"\n\t\t\t[chartHeight]=\"height()\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriCalendarComponent {\n\n\tsettings = input.required<XiriCalendarSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\tprivate cellSize = computed<number>( () => this.settings().cellSize ?? ( this.compact() ? 12 : 16 ) );\n\n\theight = computed<string>( () => {\n\t\t// 7 weekday rows + label space\n\t\tconst px = this.cellSize() * 7 + 60;\n\t\treturn px + 'px';\n\t} );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst cells = s.cells ?? [];\n\t\tconst values = cells.map( c => c.value );\n\t\tconst min = s.min ?? Math.min( 0, ...values );\n\t\tconst max = s.max ?? Math.max( 0, ...values );\n\t\tconst [ lowColor, highColor ] = s.colorRange ?? [ '#e6f4ea', '#2e7d32' ];\n\t\tconst sz = this.cellSize();\n\n\t\treturn {\n\t\t\ttooltip: {\n\t\t\t\tformatter: ( p: any ) => {\n\t\t\t\t\tconst date = String( p.value[ 0 ] );\n\t\t\t\t\tconst v = p.value[ 1 ];\n\t\t\t\t\treturn `<b>${ escapeHtml( date ) }</b><br/>${ p.marker }<b>${ v }</b>`;\n\t\t\t\t}\n\t\t\t},\n\t\t\tvisualMap: {\n\t\t\t\tmin,\n\t\t\t\tmax,\n\t\t\t\torient: 'horizontal',\n\t\t\t\tleft: 'center',\n\t\t\t\tbottom: 0,\n\t\t\t\tshow: !this.compact(),\n\t\t\t\tinRange: { color: [ lowColor, highColor ] }\n\t\t\t},\n\t\t\tcalendar: {\n\t\t\t\trange: s.range,\n\t\t\t\tcellSize: [ sz, sz ],\n\t\t\t\tsplitLine: { show: false },\n\t\t\t\titemStyle: { borderColor: '#fff', borderWidth: 2 },\n\t\t\t\tyearLabel: { show: false },\n\t\t\t\tdayLabel: { fontSize: 10 },\n\t\t\t\tmonthLabel: { fontSize: 11 },\n\t\t\t\ttop: 24,\n\t\t\t\tleft: 32,\n\t\t\t\tright: 16,\n\t\t\t},\n\t\t\tseries: [ {\n\t\t\t\ttype: 'heatmap',\n\t\t\t\tcoordinateSystem: 'calendar',\n\t\t\t\tdata: cells.map( c => [ c.date, c.value ] )\n\t\t\t} ]\n\t\t};\n\t} );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\n\nexport interface XiriTreeNode {\n\tname: string;\n\tvalue?: number;\n\tchildren?: XiriTreeNode[];\n\tcollapsed?: boolean;\n}\n\nexport interface XiriTreeSettings {\n\ttitle?: string;\n\troot: XiriTreeNode;\n\torient?: 'LR' | 'RL' | 'TB' | 'BT'; // default 'LR'\n\tlayout?: 'orthogonal' | 'radial'; // default 'orthogonal'\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-tree',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\"\n\t\t\t[chartHeight]=\"height()\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriTreeComponent {\n\n\tsettings = input.required<XiriTreeSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\theight = computed<string>( () => {\n\t\t// Estimate based on leaf count\n\t\tconst leaves = countLeaves( this.settings().root );\n\t\tconst px = Math.max( 240, leaves * 24 + 80 );\n\t\treturn px + 'px';\n\t} );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst orient = s.orient ?? 'LR';\n\t\tconst layout = s.layout ?? 'orthogonal';\n\n\t\treturn {\n\t\t\ttooltip: {\n\t\t\t\ttrigger: 'item',\n\t\t\t\ttriggerOn: 'mousemove',\n\t\t\t\tformatter: ( p: any ) => {\n\t\t\t\t\tconst v = p.data?.value;\n\t\t\t\t\tconst head = `<b>${ escapeText( p.name ) }</b>`;\n\t\t\t\t\treturn v != null ? `${ head }<br/>${ p.marker }<b>${ v }</b>` : head;\n\t\t\t\t}\n\t\t\t},\n\t\t\tseries: [ {\n\t\t\t\ttype: 'tree',\n\t\t\t\tdata: [ s.root ],\n\t\t\t\ttop: 16,\n\t\t\t\tbottom: 16,\n\t\t\t\t// Reserve enough space for leaf labels so they don't get truncated by echarts.\n\t\t\t\tleft: layout === 'radial' ? '5%' : ( orient === 'LR' ? 96 : ( orient === 'RL' ? 16 : 16 ) ),\n\t\t\t\tright: layout === 'radial' ? '5%' : ( orient === 'RL' ? 96 : ( orient === 'LR' ? 96 : 16 ) ),\n\t\t\t\tlayout,\n\t\t\t\torient,\n\t\t\t\tsymbol: 'emptyCircle',\n\t\t\t\tsymbolSize: 7,\n\t\t\t\tinitialTreeDepth: 3,\n\t\t\t\tlabel: {\n\t\t\t\t\tposition: orient === 'TB' ? 'top' : 'left',\n\t\t\t\t\talign: orient === 'LR' ? 'right' : 'center',\n\t\t\t\t\tverticalAlign: 'middle',\n\t\t\t\t\tfontSize: 12,\n\t\t\t\t\toverflow: 'none'\n\t\t\t\t},\n\t\t\t\tleaves: {\n\t\t\t\t\tlabel: {\n\t\t\t\t\t\tposition: orient === 'TB' ? 'bottom' : 'right',\n\t\t\t\t\t\talign: orient === 'LR' ? 'left' : 'center',\n\t\t\t\t\t\toverflow: 'none'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texpandAndCollapse: true,\n\t\t\t\tanimationDuration: 250,\n\t\t\t\tanimationDurationUpdate: 250\n\t\t\t} ]\n\t\t};\n\t} );\n}\n\nfunction countLeaves( n: XiriTreeNode ): number {\n\tif ( !n.children?.length ) return 1;\n\treturn n.children.reduce( ( sum, c ) => sum + countLeaves( c ), 0 );\n}\n\nfunction escapeText( s: string ): string {\n\treturn String( s ?? '' ).replace( /</g, '&lt;' ).replace( />/g, '&gt;' );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriColor } from '../types/color.type';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { resolveColor } from '../echarts/color';\n\nexport interface XiriSankeyNode {\n\tname: string;\n\tcolor?: XiriColor;\n}\n\nexport interface XiriSankeyLink {\n\tsource: string;\n\ttarget: string;\n\tvalue: number;\n}\n\nexport interface XiriSankeySettings {\n\ttitle?: string;\n\tnodes: XiriSankeyNode[];\n\tlinks: XiriSankeyLink[];\n\torient?: 'horizontal' | 'vertical'; // default 'horizontal'\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-sankey',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\"\n\t\t\t[chartHeight]=\"height()\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriSankeyComponent {\n\n\tsettings = input.required<XiriSankeySettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\theight = computed<string>( () => {\n\t\tconst n = this.settings().nodes.length || 1;\n\t\tconst px = Math.max( 280, n * 20 + 80 );\n\t\treturn px + 'px';\n\t} );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\treturn {\n\t\t\ttooltip: { trigger: 'item', triggerOn: 'mousemove' },\n\t\t\tseries: [ {\n\t\t\t\ttype: 'sankey',\n\t\t\t\torient: s.orient ?? 'horizontal',\n\t\t\t\ttop: 16,\n\t\t\t\tbottom: 16,\n\t\t\t\tleft: 16,\n\t\t\t\tright: 80,\n\t\t\t\temphasis: { focus: 'adjacency' },\n\t\t\t\tlineStyle: { color: 'gradient', curveness: 0.5 },\n\t\t\t\tlabel: { fontSize: 12 },\n\t\t\t\tdata: s.nodes.map( ( n, i ) => ( {\n\t\t\t\t\tname: n.name,\n\t\t\t\t\titemStyle: { color: resolveColor( n.color, FALLBACK_COLORS[ i % FALLBACK_COLORS.length ] ) }\n\t\t\t\t} ) ),\n\t\t\t\tlinks: s.links\n\t\t\t} ]\n\t\t};\n\t} );\n}\n\nconst FALLBACK_COLORS = [ '#8b5cf6', '#10b981', '#1e88e5', '#fb8c00', '#e53935', '#fbc02d', '#43a047', '#616161' ];\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriColor } from '../types/color.type';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { resolveColor } from '../echarts/color';\nimport { escapeHtml } from '../echarts/tooltip';\n\nexport interface XiriGanttTask {\n\trow: number; // index into rows[]\n\tname: string;\n\tstart: number; // unix milliseconds\n\tend: number; // unix milliseconds\n\tcolor?: XiriColor;\n}\n\nexport interface XiriGanttSettings {\n\ttitle?: string;\n\trows: string[]; // y-axis categories (top to bottom in render order)\n\ttasks: XiriGanttTask[];\n\trangeStart?: number; // optional x-axis start (ms)\n\trangeEnd?: number; // optional x-axis end (ms)\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-gantt',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\"\n\t\t\t[chartHeight]=\"height()\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriGanttComponent {\n\n\tsettings = input.required<XiriGanttSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\theight = computed<string>( () => {\n\t\tconst rows = this.settings().rows.length || 1;\n\t\tconst px = Math.max( 220, rows * 36 + 80 );\n\t\treturn px + 'px';\n\t} );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst rows = s.rows ?? [];\n\n\t\t// Each datum: [rowIndex, start, end, name, color]\n\t\tconst data = ( s.tasks ?? [] ).map( t => [\n\t\t\tt.row,\n\t\t\tt.start,\n\t\t\tt.end,\n\t\t\tt.name,\n\t\t\tresolveColor( t.color, '#8b5cf6' )\n\t\t] );\n\n\t\tconst renderItem = ( _params: any, api: any ) => {\n\t\t\tconst rowIdx = api.value( 0 );\n\t\t\tconst start = api.coord( [ api.value( 1 ), rowIdx ] );\n\t\t\tconst end = api.coord( [ api.value( 2 ), rowIdx ] );\n\t\t\tconst cellH = api.size( [ 0, 1 ] )[ 1 ];\n\t\t\tconst height = Math.max( 4, cellH * 0.6 );\n\t\t\treturn {\n\t\t\t\ttype: 'rect',\n\t\t\t\ttransition: [ 'shape' ],\n\t\t\t\tshape: {\n\t\t\t\t\tx: start[ 0 ],\n\t\t\t\t\ty: start[ 1 ] - height / 2,\n\t\t\t\t\twidth: Math.max( 1, end[ 0 ] - start[ 0 ] ),\n\t\t\t\t\theight,\n\t\t\t\t\tr: 4\n\t\t\t\t},\n\t\t\t\tstyle: { fill: api.value( 4 ) }\n\t\t\t};\n\t\t};\n\n\t\treturn {\n\t\t\ttooltip: {\n\t\t\t\tformatter: ( p: any ) => {\n\t\t\t\t\tconst v = p.value;\n\t\t\t\t\tconst fmt = ( ms: number ) => new Date( ms ).toLocaleString();\n\t\t\t\t\tconst row = rows[ v[ 0 ] ] ?? '';\n\t\t\t\t\treturn `<b>${ escapeHtml( v[ 3 ] ) }</b><br/>${ escapeHtml( row ) }<br/>${ escapeHtml( fmt( v[ 1 ] ) ) } → ${ escapeHtml( fmt( v[ 2 ] ) ) }`;\n\t\t\t\t}\n\t\t\t},\n\t\t\tgrid: { left: 8, right: 16, top: 16, bottom: 24, containLabel: true },\n\t\t\txAxis: {\n\t\t\t\ttype: 'time',\n\t\t\t\tmin: s.rangeStart,\n\t\t\t\tmax: s.rangeEnd,\n\t\t\t\tsplitLine: { lineStyle: { color: '#eee' } }\n\t\t\t},\n\t\t\tyAxis: {\n\t\t\t\ttype: 'category',\n\t\t\t\tdata: rows,\n\t\t\t\tinverse: true,\n\t\t\t\tsplitLine: { show: false },\n\t\t\t\taxisLine: { show: false },\n\t\t\t\taxisTick: { show: false }\n\t\t\t},\n\t\t\tseries: [ {\n\t\t\t\ttype: 'custom',\n\t\t\t\tencode: { x: [ 1, 2 ], y: 0 },\n\t\t\t\tclip: true,\n\t\t\t\trenderItem,\n\t\t\t\tdata\n\t\t\t} ]\n\t\t};\n\t} );\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { XiriButtonlineComponent, XiriButtonlineSettings } from '../buttonline/buttonline.component';\n\nexport interface XiriPageHeaderSettings {\n\ttitle: string\n\tsubtitle?: string\n\ticon?: string\n\ticonColor?: string\n\tbuttons?: XiriButtonlineSettings\n}\n\n@Component( {\n\t selector: 'xiri-page-header',\n\t templateUrl: './page-header.component.html',\n\t styleUrl: './page-header.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, XiriButtonlineComponent ]\n } )\nexport class XiriPageHeaderComponent {\n\n\tsettings = input.required<XiriPageHeaderSettings>();\n}\n","<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","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatDivider } from '@angular/material/divider';\n\nexport interface XiriDividerSettings {\n\ttext?: string\n\ticon?: string\n\tspacing?: 'compact' | 'normal' | 'large'\n}\n\n@Component( {\n\t selector: 'xiri-divider',\n\t templateUrl: './divider.component.html',\n\t styleUrl: './divider.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, MatDivider ]\n } )\nexport class XiriDividerComponent {\n\n\tsettings = input.required<XiriDividerSettings>();\n}\n","<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","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { XiriStatComponent, XiriStatSettings } from '../stat/stat.component';\n\nexport interface XiriStatGridSettings {\n\tstats: XiriStatSettings[]\n\tcolumns?: number\n\ttitle?: string\n}\n\n@Component( {\n\t selector: 'xiri-stat-grid',\n\t templateUrl: './stat-grid.component.html',\n\t styleUrl: './stat-grid.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ XiriStatComponent ]\n } )\nexport class XiriStatGridComponent {\n\n\tsettings = input.required<XiriStatGridSettings>();\n}\n","@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","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { XiriButtonlineComponent, XiriButtonlineSettings } from '../buttonline/buttonline.component';\nimport { XiriSearchComponent } from '../search/search.component';\n\nexport interface XiriToolbarSearchConfig {\n\tplaceholder?: string\n}\n\nexport interface XiriToolbarSettings {\n\ttitle?: string\n\ticon?: string\n\tsearch?: boolean | XiriToolbarSearchConfig\n\tbuttons?: XiriButtonlineSettings\n}\n\n@Component( {\n\t selector: 'xiri-toolbar',\n\t templateUrl: './toolbar.component.html',\n\t styleUrl: './toolbar.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, XiriButtonlineComponent, XiriSearchComponent ]\n } )\nexport class XiriToolbarComponent {\n\n\tsettings = input.required<XiriToolbarSettings>();\n\tfilterData = input<any>( undefined );\n\n\tsearchChanged = output<string>();\n\n\tsearchPlaceholder = computed( () => {\n\t\tconst search = this.settings().search;\n\t\tif ( typeof search === 'object' && search?.placeholder ) {\n\t\t\treturn search.placeholder;\n\t\t}\n\t\treturn '';\n\t} );\n}\n","<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","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { SafehtmlPipe } from '../pipes/safehtml.pipe';\n\nexport interface XiriDescriptionListItem {\n\tlabel: string\n\tvalue: string\n\ticon?: string\n\tcolor?: string\n\ttype?: 'text' | 'link' | 'html' | 'badge'\n}\n\nexport interface XiriDescriptionListSettings {\n\titems: XiriDescriptionListItem[]\n\tcolumns?: 1 | 2 | 3\n\tlayout?: 'horizontal' | 'stacked'\n}\n\n@Component( {\n\t selector: 'xiri-description-list',\n\t templateUrl: './description-list.component.html',\n\t styleUrl: './description-list.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, SafehtmlPipe ]\n } )\nexport class XiriDescriptionListComponent {\n\n\tsettings = input.required<XiriDescriptionListSettings>();\n\n\tlayoutClass = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst layout = s.layout || 'stacked';\n\t\treturn `${ layout } cols-${ s.columns || 2 }`;\n\t} );\n}\n","<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","import { Injectable } from '@angular/core';\n\n\n@Injectable( {\n\t providedIn: 'root'\n } )\nexport class XiriLocalStorageService {\n\t\n\tprivate readonly isSupported: boolean = false;\n\tprivate data: { [ name: string ]: any } = {};\n\t\n\tconstructor() {\n\t\t\n\t\tif ( window.localStorage )\n\t\t\tthis.isSupported = true;\n\t}\n\t\n\tpublic clear() {\n\t\t\n\t\tthis.data = {};\n\t\tif ( this.isSupported )\n\t\t\tlocalStorage.clear();\n\t}\n\t\n\tpublic set( name: string, value: any ) {\n\t\t\n\t\tlet val = {\n\t\t\ttime: Date.now(),\n\t\t\tvalue: value,\n\t\t}\n\t\t\n\t\tthis.data[ name ] = val;\n\t\tif ( this.isSupported )\n\t\t\tlocalStorage.setItem( name, JSON.stringify( val ) );\n\t}\n\t\n\tprivate getStruct( name: string ): any {\n\t\t\n\t\tif ( this.data[ name ] )\n\t\t\treturn this.data[ name ];\n\t\t\n\t\tif ( this.isSupported ) {\n\t\t\tconst valstr = localStorage.getItem( name );\n\t\t\tif ( valstr ) {\n\t\t\t\tconst val = JSON.parse( valstr );\n\t\t\t\tthis.data[ name ] = val;\n\t\t\t\treturn val;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn null;\n\t}\n\t\n\tpublic remove( name: string ) {\n\t\t\n\t\tdelete this.data[ name ];\n\t\tif ( this.isSupported )\n\t\t\tlocalStorage.removeItem( name );\n\t}\n\t\n\tpublic get( name: string ): any {\n\t\t\n\t\tlet val = this.getStruct( name );\n\t\tif ( !val )\n\t\t\treturn null;\n\t\t\n\t\treturn val.value;\n\t}\n\t\n\t/**\n\t * @param name\n\t * @param maxTime in seconds\n\t */\n\tpublic getTimeout( name: string, maxTime: number ): any {\n\t\t\n\t\tlet val = this.getStruct( name );\n\t\tif ( !val )\n\t\t\treturn null;\n\t\t\n\t\tif ( val.time < Date.now() - maxTime * 1000 ) {\n\t\t\tthis.remove( name );\n\t\t\treturn null;\n\t\t}\n\t\t\n\t\treturn val.value;\n\t}\n\t\n}\n","import { Injectable, signal, computed, effect, PLATFORM_ID, inject } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nexport type ThemeMode = 'light' | 'dark' | 'auto';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n\tprivate readonly platformId = inject(PLATFORM_ID);\n\tprivate readonly isBrowser = isPlatformBrowser(this.platformId);\n\n\t/** Current theme mode setting */\n\tprivate readonly _mode = signal<ThemeMode>('auto');\n\n\t/** Observable theme mode */\n\treadonly mode = this._mode.asReadonly();\n\n\t/** Whether dark mode is currently active (considering auto mode) */\n\treadonly isDark = computed(() => {\n\t\tconst mode = this._mode();\n\t\tif (mode === 'auto') {\n\t\t\treturn this.isBrowser ? this.getSystemPreference() : false;\n\t\t}\n\t\treturn mode === 'dark';\n\t});\n\n\t/** Whether light mode is currently active */\n\treadonly isLight = computed(() => !this.isDark());\n\n\tconstructor() {\n\t\tif (this.isBrowser) {\n\t\t\t// Load saved preference\n\t\t\tconst saved = localStorage.getItem('theme') as ThemeMode | null;\n\t\t\tif (saved && ['light', 'dark', 'auto'].includes(saved)) {\n\t\t\t\tthis._mode.set(saved);\n\t\t\t}\n\n\t\t\t// Apply initial theme\n\t\t\tthis.applyTheme();\n\n\t\t\t// React to mode changes\n\t\t\teffect(() => {\n\t\t\t\tthis.applyTheme();\n\t\t\t});\n\n\t\t\t// Listen for system preference changes\n\t\t\tconst mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\t\t\tmediaQuery.addEventListener('change', () => {\n\t\t\t\tif (this._mode() === 'auto') {\n\t\t\t\t\tthis.applyTheme();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Set the theme mode\n\t * @param mode - 'light', 'dark', or 'auto' (follow system preference)\n\t */\n\tsetTheme(mode: ThemeMode): void {\n\t\tthis._mode.set(mode);\n\t\tif (this.isBrowser) {\n\t\t\tlocalStorage.setItem('theme', mode);\n\t\t}\n\t}\n\n\t/**\n\t * Toggle between light and dark mode\n\t * If currently auto, switches to opposite of current system preference\n\t */\n\ttoggle(): void {\n\t\tconst current = this._mode();\n\t\tif (current === 'auto') {\n\t\t\t// Switch to opposite of current system preference\n\t\t\tthis.setTheme(this.getSystemPreference() ? 'light' : 'dark');\n\t\t} else {\n\t\t\tthis.setTheme(current === 'light' ? 'dark' : 'light');\n\t\t}\n\t}\n\n\t/**\n\t * Reset to auto (system preference)\n\t */\n\tresetToAuto(): void {\n\t\tthis.setTheme('auto');\n\t}\n\n\tprivate getSystemPreference(): boolean {\n\t\tif (!this.isBrowser) return false;\n\t\treturn window.matchMedia('(prefers-color-scheme: dark)').matches;\n\t}\n\n\tprivate applyTheme(): void {\n\t\tif (!this.isBrowser) return;\n\n\t\tconst mode = this._mode();\n\t\tconst root = document.documentElement;\n\n\t\t// Remove existing theme classes\n\t\troot.classList.remove('light-theme', 'dark-theme');\n\n\t\t// Apply theme class based on mode\n\t\tif (mode === 'light') {\n\t\t\troot.classList.add('light-theme');\n\t\t} else if (mode === 'dark') {\n\t\t\troot.classList.add('dark-theme');\n\t\t}\n\t\t// 'auto' mode: no class needed, CSS media query handles it\n\t}\n}\n","import { defaultXiriDataServiceConfig, XiriDataServiceConfig } from \"./services/data.service\";\nimport { EnvironmentProviders, makeEnvironmentProviders } from \"@angular/core\";\n\nexport function provideXiriServices(\n\tconfig: Partial<XiriDataServiceConfig>\n): EnvironmentProviders {\n\tconst merged = { ...defaultXiriDataServiceConfig, ...config };\n\t\n\treturn makeEnvironmentProviders( [\n\t\t {\n\t\t\t provide: XiriDataServiceConfig,\n\t\t\t useValue: merged,\n\t\t }\n\t ] );\n}","/*\n * Public API Surface of xiri-ng\n */\n\nexport * from './lib/types/color.type';\nexport { SafehtmlPipe } from \"./lib/pipes/safehtml.pipe\";\n\nexport * from \"./lib/formfields/field.interface\";\nexport * from \"./lib/formfields/form-fields.component\";\nexport * from \"./lib/formfields/select/select.directive\";\n\nexport * from \"./lib/raw-table/tabefield.interface\";\nexport * from \"./lib/raw-table/xiri-raw-table.component\";\nexport * from \"./lib/table/table.component\";\n\nexport * from \"./lib/form/form.component\";\nexport * from \"./lib/dialog/dialog.component\";\nexport * from './lib/query/query.component';\n\nexport * from \"./lib/card/card.component\";\nexport * from './lib/buttonstyle/buttonstyle.component';\nexport * from './lib/button/button.component';\nexport * from \"./lib/buttonline/buttonline.component\";\nexport * from \"./lib/dyncomponent/dyndata.interface\";\nexport * from \"./lib/dyncomponent/dyncomponent.component\";\nexport * from \"./lib/cardlink/cardlink.component\";\nexport * from './lib/links/links.component';\nexport * from \"./lib/alert/alert.component\";\nexport * from './lib/stepper/stepper.component';\nexport * from './lib/done/done.component';\nexport * from './lib/error/error.component';\nexport * from \"./lib/header/header.component\";\nexport * from './lib/list/list.component';\nexport * from './lib/infopoint/infopoint.component';\nexport * from './lib/multiprogress/multiprogress.component';\nexport * from './lib/imagetext/imagetext.component';\nexport * from './lib/search/search.component';\nexport * from './lib/sidenav/sidenav.component';\nexport * from './lib/tabs/tabs.component';\nexport * from './lib/expansion/expansion.component';\n\nexport * from './lib/breadcrumb/breadcrumb.component';\nexport * from './lib/skeleton/skeleton.component';\nexport * from './lib/empty-state/empty-state.component';\nexport * from './lib/stat/stat.component';\nexport * from './lib/timeline/timeline.component';\nexport * from './lib/barchart/barchart.component';\nexport * from './lib/linechart/linechart.component';\nexport * from './lib/piechart/piechart.component';\nexport * from './lib/gaugechart/gaugechart.component';\nexport * from './lib/heatmap/heatmap.component';\nexport * from './lib/calendar/calendar.component';\nexport * from './lib/tree/tree.component';\nexport * from './lib/sankey/sankey.component';\nexport * from './lib/gantt/gantt.component';\nexport * from './lib/echarts';\n\nexport * from './lib/page-header/page-header.component';\nexport * from './lib/section/section.component';\nexport * from './lib/divider/divider.component';\nexport * from './lib/stat-grid/stat-grid.component';\nexport * from './lib/toolbar/toolbar.component';\nexport * from './lib/description-list/description-list.component';\n\nexport * from './lib/services/data.service';\nexport * from './lib/services/date.service';\nexport * from './lib/services/form.service';\nexport * from './lib/services/localStorage.service';\nexport * from './lib/services/sessionStorage.service';\nexport * from './lib/services/number.service';\nexport * from './lib/services/theme.service';\nexport * from './lib/services/snackbar.service';\nexport * from './lib/services/response-handler.service';\nexport * from './lib/services/download.service';\n\nexport * from './lib/provider';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["MatOption","filter","FALLBACK_COLORS"],"mappings":"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"}
1
+ {"version":3,"file":"xiriframework-xiri-ng.mjs","sources":["../../../projects/xiri-ng/src/lib/pipes/safehtml.pipe.ts","../../../projects/xiri-ng/src/lib/formfields/file/file.component.ts","../../../projects/xiri-ng/src/lib/formfields/file/file.component.html","../../../projects/xiri-ng/src/lib/formfields/timelimit/timelimit.component.ts","../../../projects/xiri-ng/src/lib/formfields/timelimit/timelimit.component.html","../../../projects/xiri-ng/src/lib/formfields/volume/volume.component.ts","../../../projects/xiri-ng/src/lib/formfields/volume/volume.component.html","../../../projects/xiri-ng/src/lib/services/date.service.ts","../../../projects/xiri-ng/src/lib/formfields/helper/fieldmain.ts","../../../projects/xiri-ng/src/lib/formfields/datetimerange/datetimerange.component.ts","../../../projects/xiri-ng/src/lib/formfields/datetimerange/datetimerange.component.html","../../../projects/xiri-ng/src/lib/formfields/daterange/daterange.component.ts","../../../projects/xiri-ng/src/lib/formfields/daterange/daterange.component.html","../../../projects/xiri-ng/src/lib/formfields/date/date.component.ts","../../../projects/xiri-ng/src/lib/formfields/date/date.component.html","../../../projects/xiri-ng/src/lib/formfields/yearmonth/yearmonth.component.ts","../../../projects/xiri-ng/src/lib/formfields/yearmonth/yearmonth.component.html","../../../projects/xiri-ng/src/lib/services/snackbar.service.ts","../../../projects/xiri-ng/src/lib/services/data.service.ts","../../../projects/xiri-ng/src/lib/search/search.component.ts","../../../projects/xiri-ng/src/lib/search/search.component.html","../../../projects/xiri-ng/src/lib/formfields/treeselect/treeselect.component.ts","../../../projects/xiri-ng/src/lib/formfields/treeselect/treeselect.component.html","../../../projects/xiri-ng/src/lib/formfields/select/select.directive.ts","../../../projects/xiri-ng/src/lib/formfields/chips/chips.component.ts","../../../projects/xiri-ng/src/lib/formfields/chips/chips.component.html","../../../projects/xiri-ng/src/lib/formfields/form-fields.component.ts","../../../projects/xiri-ng/src/lib/formfields/form-fields.component.html","../../../projects/xiri-ng/src/lib/raw-table/xiri-raw-table.component.ts","../../../projects/xiri-ng/src/lib/raw-table/xiri-raw-table.component.html","../../../projects/xiri-ng/src/lib/buttonstyle/buttonstyle.component.ts","../../../projects/xiri-ng/src/lib/buttonstyle/buttonstyle.component.html","../../../projects/xiri-ng/src/lib/done/done.component.ts","../../../projects/xiri-ng/src/lib/done/done.component.html","../../../projects/xiri-ng/src/lib/error/error.component.ts","../../../projects/xiri-ng/src/lib/error/error.component.html","../../../projects/xiri-ng/src/lib/services/download.service.ts","../../../projects/xiri-ng/src/lib/services/error.util.ts","../../../projects/xiri-ng/src/lib/dialog/dialog.component.ts","../../../projects/xiri-ng/src/lib/dialog/dialog.component.html","../../../projects/xiri-ng/src/lib/services/response-handler.service.ts","../../../projects/xiri-ng/src/lib/button/button.component.ts","../../../projects/xiri-ng/src/lib/button/button.component.html","../../../projects/xiri-ng/src/lib/table/inline-edit.service.ts","../../../projects/xiri-ng/src/lib/buttonline/buttonline.component.ts","../../../projects/xiri-ng/src/lib/buttonline/buttonline.component.html","../../../projects/xiri-ng/src/lib/services/sessionStorage.service.ts","../../../projects/xiri-ng/src/lib/services/number.service.ts","../../../projects/xiri-ng/src/lib/empty-state/empty-state.component.ts","../../../projects/xiri-ng/src/lib/empty-state/empty-state.component.html","../../../projects/xiri-ng/src/lib/table/table.component.ts","../../../projects/xiri-ng/src/lib/table/table.component.html","../../../projects/xiri-ng/src/lib/services/form.service.ts","../../../projects/xiri-ng/src/lib/form/form.component.ts","../../../projects/xiri-ng/src/lib/form/form.component.html","../../../projects/xiri-ng/src/lib/query/query.component.ts","../../../projects/xiri-ng/src/lib/query/query.component.html","../../../projects/xiri-ng/src/lib/skeleton/skeleton.component.ts","../../../projects/xiri-ng/src/lib/skeleton/skeleton.component.html","../../../projects/xiri-ng/src/lib/infopoint/infopoint.component.ts","../../../projects/xiri-ng/src/lib/infopoint/infopoint.component.html","../../../projects/xiri-ng/src/lib/list/list.component.ts","../../../projects/xiri-ng/src/lib/list/list.component.html","../../../projects/xiri-ng/src/lib/header/header.component.ts","../../../projects/xiri-ng/src/lib/header/header.component.html","../../../projects/xiri-ng/src/lib/stepper/stepper.component.ts","../../../projects/xiri-ng/src/lib/stepper/stepper.component.html","../../../projects/xiri-ng/src/lib/links/links.component.ts","../../../projects/xiri-ng/src/lib/links/links.component.html","../../../projects/xiri-ng/src/lib/cardlink/cardlink.component.ts","../../../projects/xiri-ng/src/lib/cardlink/cardlink.component.html","../../../projects/xiri-ng/src/lib/tabs/tabs.component.ts","../../../projects/xiri-ng/src/lib/tabs/tabs.component.html","../../../projects/xiri-ng/src/lib/expansion/expansion.component.ts","../../../projects/xiri-ng/src/lib/expansion/expansion.component.html","../../../projects/xiri-ng/src/lib/stat/stat.component.ts","../../../projects/xiri-ng/src/lib/stat/stat.component.html","../../../projects/xiri-ng/src/lib/section/section.component.ts","../../../projects/xiri-ng/src/lib/section/section.component.html","../../../projects/xiri-ng/src/lib/dyncomponent/dyncomponent.component.ts","../../../projects/xiri-ng/src/lib/dyncomponent/dyncomponent.component.html","../../../projects/xiri-ng/src/lib/card/card.component.ts","../../../projects/xiri-ng/src/lib/card/card.component.html","../../../projects/xiri-ng/src/lib/alert/alert.component.ts","../../../projects/xiri-ng/src/lib/alert/alert.component.html","../../../projects/xiri-ng/src/lib/multiprogress/multiprogress.component.ts","../../../projects/xiri-ng/src/lib/multiprogress/multiprogress.component.html","../../../projects/xiri-ng/src/lib/imagetext/imagetext.component.ts","../../../projects/xiri-ng/src/lib/imagetext/imagetext.component.html","../../../projects/xiri-ng/src/lib/sidenav/sidenav.component.ts","../../../projects/xiri-ng/src/lib/sidenav/sidenav.component.html","../../../projects/xiri-ng/src/lib/breadcrumb/breadcrumb.component.ts","../../../projects/xiri-ng/src/lib/breadcrumb/breadcrumb.component.html","../../../projects/xiri-ng/src/lib/timeline/timeline.component.ts","../../../projects/xiri-ng/src/lib/timeline/timeline.component.html","../../../projects/xiri-ng/src/lib/echarts/echarts-host.component.ts","../../../projects/xiri-ng/src/lib/echarts/echarts-host.component.html","../../../projects/xiri-ng/src/lib/echarts/color.ts","../../../projects/xiri-ng/src/lib/echarts/tooltip.ts","../../../projects/xiri-ng/src/lib/barchart/barchart.component.ts","../../../projects/xiri-ng/src/lib/linechart/linechart.component.ts","../../../projects/xiri-ng/src/lib/piechart/piechart.component.ts","../../../projects/xiri-ng/src/lib/gaugechart/gaugechart.component.ts","../../../projects/xiri-ng/src/lib/heatmap/heatmap.component.ts","../../../projects/xiri-ng/src/lib/calendar/calendar.component.ts","../../../projects/xiri-ng/src/lib/tree/tree.component.ts","../../../projects/xiri-ng/src/lib/sankey/sankey.component.ts","../../../projects/xiri-ng/src/lib/gantt/gantt.component.ts","../../../projects/xiri-ng/src/lib/page-header/page-header.component.ts","../../../projects/xiri-ng/src/lib/page-header/page-header.component.html","../../../projects/xiri-ng/src/lib/divider/divider.component.ts","../../../projects/xiri-ng/src/lib/divider/divider.component.html","../../../projects/xiri-ng/src/lib/stat-grid/stat-grid.component.ts","../../../projects/xiri-ng/src/lib/stat-grid/stat-grid.component.html","../../../projects/xiri-ng/src/lib/toolbar/toolbar.component.ts","../../../projects/xiri-ng/src/lib/toolbar/toolbar.component.html","../../../projects/xiri-ng/src/lib/description-list/description-list.component.ts","../../../projects/xiri-ng/src/lib/description-list/description-list.component.html","../../../projects/xiri-ng/src/lib/services/localStorage.service.ts","../../../projects/xiri-ng/src/lib/services/theme.service.ts","../../../projects/xiri-ng/src/lib/provider.ts","../../../projects/xiri-ng/src/public-api.ts","../../../projects/xiri-ng/src/xiriframework-xiri-ng.ts"],"sourcesContent":["import { DomSanitizer } from '@angular/platform-browser';\nimport { inject, Pipe, PipeTransform } from '@angular/core';\n\n\n@Pipe( {\n\t name: 'safeHtml'\n } )\nexport class SafehtmlPipe implements PipeTransform {\n\t\n\tprivate sanitizer: DomSanitizer = inject( DomSanitizer );\n\t\n\ttransform( style: string ): string {\n\t\treturn <string> this.sanitizer.bypassSecurityTrustHtml( style );\n\t}\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, inject, Input, OnDestroy } from '@angular/core';\nimport {\n\tMatError,\n\tMatFormField,\n\tMatFormFieldControl,\n\tMatHint,\n\tMatLabel,\n\tMatSuffix\n} from \"@angular/material/form-field\";\nimport {\n\tControlValueAccessor,\n\tFormControl,\n\tFormGroup,\n\tFormsModule,\n\tNgControl,\n\tReactiveFormsModule\n} from \"@angular/forms\";\nimport { Subject } from \"rxjs\";\nimport { FocusMonitor } from \"@angular/cdk/a11y\";\nimport { XiriFormField } from \"../field.interface\";\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatInput } from '@angular/material/input';\n\ninterface FileForm {\n\tfiles: FormControl<File[] | null>\n\ttext: FormControl<string | null>\n}\n\ninterface FileData {\n\tfile: File\n\tname: string;\n\tdata: string;\n}\n\n@Component( {\n\t selector: 'xiri-file',\n\t templateUrl: './file.component.html',\n\t styleUrls: [ './file.component.scss' ],\n\t host: {\n\t\t '[id]': 'id',\n\t\t '[attr.aria-describedby]': 'describedBy'\n\t },\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriFileComponent\n\t } ],\n\t imports: [\n\t\t MatFormField,\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatLabel,\n\t\t MatInput,\n\t\t MatIconButton,\n\t\t MatSuffix,\n\t\t MatIcon,\n\t\t MatHint,\n\t\t MatError,\n\t ]\n } )\nexport class XiriFileComponent implements ControlValueAccessor, MatFormFieldControl<any>, OnDestroy {\n\tprivate focusMonitor = inject( FocusMonitor );\n\tngControl = inject( NgControl, { optional: true, self: true } );\n\tprivate _elementRef = inject<ElementRef<HTMLElement>>( ElementRef );\n\tprivate cdr = inject( ChangeDetectorRef );\n\t\n\t\n\tstatic nextId = 0;\n\tid = `xiri-file-${ XiriFileComponent.nextId++ }`;\n\tdescribedBy = '';\n\t\n\tparts: FormGroup<FileForm>;\n\tstateChanges = new Subject<void>();\n\tfocused = false;\n\tcontrolType = 'xiri-file';\n\t\n\treadonly placeholder: string;\n\tpublic required = false;\n\tpublic disabled = false;\n\tshouldLabelFloat = true;\n\t\n\tprivate _field: XiriFormField;\n\tcurrentFiles: FileData[] = [];\n\t\n\tconstructor() {\n\t\tif ( this.ngControl != null )\n\t\t\tthis.ngControl.valueAccessor = this;\n\t\t\n\t\tthis.parts = new FormGroup<FileForm>( {\n\t\t\t files: new FormControl<File[] | null>( null ),\n\t\t\t text: new FormControl<string | null>( null )\n\t\t } );\n\t\t\n\t\tthis.focusMonitor.monitor( this._elementRef, true ).subscribe( origin => {\n\t\t\tthis.ngControl.control.markAsTouched();\n\t\t\tthis.focused = !!origin;\n\t\t\tthis.cdr.markForCheck();\n\t\t} );\n\t}\n\t\n\tonChange = ( _: any ) => {\n\t};\n\tonTouched = () => {\n\t};\n\t\n\tngOnDestroy() {\n\t\tthis.stateChanges.complete();\n\t\tthis.focusMonitor.stopMonitoring( this._elementRef );\n\t}\n\t\n\t@Input()\n\tget value() {\n\t\t\n\t\tif ( this.errorState )\n\t\t\treturn undefined;\n\t\tif ( this.currentFiles.length == 0 )\n\t\t\treturn null;\n\t\t\n\t\treturn this.currentFiles.map( ( file ) => {\n\t\t\treturn {\n\t\t\t\tname: file.name,\n\t\t\t\tdata: file.data\n\t\t\t};\n\t\t} );\n\t}\n\t\n\tset value( input ) {\n\t\t\n\t\tif ( input === null || input === undefined )\n\t\t\treturn;\n\t\t\n\t\t// console.log( 'xiriFile input', input );\n\t\t// this.onChange( this.value );\n\t\t// this.stateChanges.next();\n\t}\n\t\n\t\n\t@Input()\n\tget field(): XiriFormField {\n\t\treturn this._field;\n\t}\n\t\n\tset field( value: XiriFormField ) {\n\t\t\n\t\tthis._field = value;\n\t\t\n\t\tthis.required = value.required;\n\t\tthis.disabled = value.disabled;\n\t\tthis.disabled ? this.parts.disable() : this.parts.enable();\n\t\t\n\t\tthis.stateChanges.next();\n\t}\n\t\n\tget errorState(): boolean {\n\t\treturn this.parts.invalid && this.ngControl.touched;\n\t}\n\t\n\tget empty() {\n\t\treturn this.value === null;\n\t}\n\t\n\twriteValue( value ): void {\n\t\tthis.value = value;\n\t}\n\t\n\tregisterOnChange( fn: any ): void {\n\t\tthis.onChange = fn;\n\t}\n\t\n\tregisterOnTouched( fn: any ): void {\n\t\tthis.onTouched = fn;\n\t}\n\t\n\tsetDisabledState( isDisabled: boolean ): void {\n\t\tthis.disabled = isDisabled;\n\t}\n\t\n\tsetDescribedByIds( ids: string[] ) {\n\t\tthis.describedBy = ids.join( ' ' );\n\t}\n\t\n\tonContainerClick( event: MouseEvent ): void {\n\t}\n\t\n\tfileChange( event: Event ) {\n\t\t\n\t\tconst element = event.currentTarget as HTMLInputElement;\n\t\tlet fileList: FileList | null = element.files;\n\t\t\n\t\tif ( fileList === null || fileList.length === 0 || fileList.length > 100 )\n\t\t\treturn;\n\t\t\n\t\tlet fieldFiles = this.parts.get( 'files' );\n\t\tlet fieldText = this.parts.get( 'text' );\n\t\tlet files = [];\n\t\t\n\t\tfor ( let i = 0; i < fileList.length; i++ ) {\n\t\t\tlet file = fileList.item( i );\n\t\t\tif ( file === null || file.size > this._field.max ) {\n\t\t\t\tconsole.log( 'file too large or null', file, this._field );\n\t\t\t\tthis.currentFiles = [];\n\t\t\t\tfieldFiles.setValue( null );\n\t\t\t\tfieldText.setValue( null );\n\t\t\t\t\n\t\t\t\tthis.onChange( this.value );\n\t\t\t\tthis.stateChanges.next();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tlet reader = new FileReader();\n\t\t\t\n\t\t\treader.addEventListener( \"load\", () => {\n\t\t\t\tthis.currentFiles.push( {\n\t\t\t\t\t file: file,\n\t\t\t\t\t name: file.name,\n\t\t\t\t\t data: reader.result as string\n\t\t\t\t } );\n\n\t\t\t\tthis.onChange( this.value );\n\t\t\t\tthis.stateChanges.next();\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t}, false );\n\t\t\t\n\t\t\treader.readAsDataURL( file );\n\t\t\tfiles.push( file );\n\t\t}\n\t\t\n\t\tfieldFiles.setValue( files );\n\t\tfieldText.setValue( files.map( ( file ) => file.name ).join( ', ' ) );\n\t}\n\t\n\tpublic getErrorMessage(): string {\n\t\t\n\t\tlet errors = this.parts.get( 'text' ).errors;\n\t\t\n\t\tif ( errors.required )\n\t\t\treturn 'required';\n\t\t\n\t\tconsole.log( 'unknown error file', errors );\n\t\t\n\t\treturn 'error';\n\t}\n\t\n}\n","<mat-form-field [formGroup]=\"parts\" floatLabel=\"auto\" class=\"fileselect\" (click)=\"fileInput.click()\">\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ählen\">\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\" (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>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { MatFormField, MatFormFieldControl, MatLabel } from \"@angular/material/form-field\";\nimport {\n\tControlValueAccessor,\n\tFormControl,\n\tFormGroup,\n\tFormsModule,\n\tNgControl,\n\tReactiveFormsModule\n} from \"@angular/forms\";\nimport { Subject } from \"rxjs\";\nimport { FocusMonitor } from \"@angular/cdk/a11y\";\nimport { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { KeyValuePipe } from '@angular/common';\nimport { MatOption } from '@angular/material/core';\nimport { MatSelect } from '@angular/material/select';\nimport { MatCheckbox } from '@angular/material/checkbox';\n\ninterface TimelimitForm {\n\tcheck: FormControl<boolean>\n\twd0: FormControl<boolean>\n\twd1: FormControl<boolean>\n\twd2: FormControl<boolean>\n\twd3: FormControl<boolean>\n\twd4: FormControl<boolean>\n\twd5: FormControl<boolean>\n\twd6: FormControl<boolean>\n\tfromhour: FormControl<number>\n\tfrommin: FormControl<number>\n\ttohour: FormControl<number>\n\ttomin: FormControl<number>\n\tinout: FormControl<boolean>\n}\n\n\n@Component( {\n\t selector: 'xiri-timelimit',\n\t templateUrl: './timelimit.component.html',\n\t styleUrls: [ './timelimit.component.scss' ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t host: {\n\t\t '[id]': 'id',\n\t\t '[attr.aria-describedby]': 'describedBy'\n\t },\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriTimelimitComponent\n\t } ],\n\t imports: [\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatCheckbox,\n\t\t MatLabel,\n\t\t MatFormField,\n\t\t MatSelect,\n\t\t MatOption,\n\t\t KeyValuePipe,\n\t ]\n } )\nexport class XiriTimelimitComponent implements ControlValueAccessor, MatFormFieldControl<any>, OnInit, OnDestroy {\n\tprivate focusMonitor = inject( FocusMonitor );\n\tngControl = inject( NgControl, { optional: true, self: true } );\n\tprivate _elementRef = inject<ElementRef<HTMLElement>>( ElementRef );\n\tprivate cdr = inject( ChangeDetectorRef );\n\t\n\t\n\tstatic nextId = 0;\n\tid = `xiri-timelimit-${ XiriTimelimitComponent.nextId++ }`;\n\tdescribedBy = '';\n\t\n\treadonly autofilled: boolean;\n\t\n\terrorState = false;\n\tparts: FormGroup<TimelimitForm>;\n\tstateChanges = new Subject<void>();\n\tfocused = false;\n\tcontrolType = 'xiri-timelimit';\n\t\n\tprivate _placeholder: string = '';\n\tprivate _required = true;\n\tprivate _disabled = false;\n\tshouldLabelFloat = true;\n\t\n\thours = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09',\n\t '10', '11', '12', '13', '14', '15', '16', '17', '18', '19',\n\t '20', '21', '22', '23', '24' ];\n\tminutes = {\n\t\t0: '00',\n\t\t5: '05',\n\t\t10: '10',\n\t\t15: '15',\n\t\t20: '20',\n\t\t25: '25',\n\t\t30: '30',\n\t\t35: '35',\n\t\t40: '40',\n\t\t45: '45',\n\t\t50: '50',\n\t\t55: '55'\n\t};\n\t\n\tconstructor() {\n\t\tif ( this.ngControl != null ) {\n\t\t\tthis.ngControl.valueAccessor = this;\n\t\t}\n\t\t\n\t\tthis.parts = new FormGroup<TimelimitForm>( {\n\t\t\t check: new FormControl<boolean>( false ),\n\t\t\t wd0: new FormControl<boolean>( true ),\n\t\t\t wd1: new FormControl<boolean>( false ),\n\t\t\t wd2: new FormControl<boolean>( false ),\n\t\t\t wd3: new FormControl<boolean>( false ),\n\t\t\t wd4: new FormControl<boolean>( false ),\n\t\t\t wd5: new FormControl<boolean>( false ),\n\t\t\t wd6: new FormControl<boolean>( false ),\n\t\t\t fromhour: new FormControl<number>( 0 ),\n\t\t\t frommin: new FormControl<number>( 0 ),\n\t\t\t tohour: new FormControl<number>( 24 ),\n\t\t\t tomin: new FormControl<number>( 0 ),\n\t\t\t inout: new FormControl<boolean>( true ),\n\t\t } );\n\t\t\n\t\tthis.focusMonitor.monitor( this._elementRef.nativeElement, true ).subscribe( origin => {\n\n\t\t\tif ( this.focused && !origin ) {\n\t\t\t\tthis.onTouched();\n\t\t\t}\n\t\t\tthis.focused = !!origin;\n\t\t\tif ( this.focused )\n\t\t\t\tthis.ngControl.control?.markAllAsTouched();\n\n\t\t\tthis.onChange( this.value );\n\t\t\tthis.stateChanges.next();\n\t\t\tthis.cdr.markForCheck();\n\t\t} );\n\t}\n\t\n\tonChange = ( _: any ) => {\n\t};\n\tonTouched = () => {\n\t};\n\t\n\tngOnInit() {\n\t\t\n\t\tthis.ngControl.control?.setValidators( [ this.validate.bind( this ) ] );\n\t\tthis.ngControl.control?.updateValueAndValidity();\n\t}\n\t\n\tvalidate( { value } ) {\n\t\t\n\t\tlet isNotValid = false;\n\t\t\n\t\tif ( value === null )\n\t\t\tisNotValid = true;\n\t\telse if ( value.check ) {\n\t\t\tif ( value.tohour == 24 && value.tomin != 0 )\n\t\t\t\tisNotValid = true;\n\t\t\tif ( value.fromhour == 24 )\n\t\t\t\tisNotValid = true;\n\t\t\tif ( value.fromhour > value.tohour )\n\t\t\t\tisNotValid = true;\n\t\t\tif ( value.fromhour == value.tohour && value.frommin >= value.tomin )\n\t\t\t\tisNotValid = true;\n\t\t\tif ( ( ( value.wd[ 0 ] &&\n\t\t\t value.wd[ 1 ] &&\n\t\t\t value.wd[ 2 ] &&\n\t\t\t value.wd[ 3 ] &&\n\t\t\t value.wd[ 4 ] &&\n\t\t\t value.wd[ 5 ] &&\n\t\t\t value.wd[ 6 ] ) ||\n\t\t\t ( !value.wd[ 0 ] &&\n\t\t\t !value.wd[ 1 ] &&\n\t\t\t !value.wd[ 2 ] &&\n\t\t\t !value.wd[ 3 ] &&\n\t\t\t !value.wd[ 4 ] &&\n\t\t\t !value.wd[ 5 ] &&\n\t\t\t !value.wd[ 6 ] ) ) &&\n\t\t\t value.fromhour == 0 && value.frommin == 0 && value.tohour == 24 && value.frommin == 0 ) {\n\t\t\t\tisNotValid = true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn isNotValid && {\n\t\t\tinvalid: isNotValid\n\t\t}\n\t}\n\t\n\tngOnDestroy() {\n\t\tthis.stateChanges.complete();\n\t\tthis.focusMonitor.stopMonitoring( this._elementRef.nativeElement );\n\t}\n\t\n\tpublic changed() {\n\t\tthis.onChange( this.value );\n\t}\n\t\n\t@Input()\n\tget placeholder(): string {\n\t\treturn this._placeholder;\n\t}\n\t\n\tset placeholder( value: string ) {\n\t\tthis._placeholder = value;\n\t\tthis.stateChanges.next();\n\t}\n\t\n\t@Input()\n\tget required(): boolean {\n\t\treturn this._required;\n\t}\n\t\n\tset required( value: boolean ) {\n\t\tthis._required = coerceBooleanProperty( value );\n\t\tthis.stateChanges.next();\n\t}\n\t\n\t@Input()\n\tget disabled(): boolean {\n\t\treturn this._disabled;\n\t}\n\t\n\tset disabled( value: boolean ) {\n\t\tthis._disabled = coerceBooleanProperty( value );\n\t\tthis._disabled ? this.parts.disable() : this.parts.enable();\n\t\tthis.stateChanges.next();\n\t}\n\t\n\t@Input()\n\tget value() {\n\t\t\n\t\tconst value = this.parts.value;\n\t\treturn {\n\t\t\tcheck: value.check,\n\t\t\twd: [ value.wd0, value.wd1, value.wd2, value.wd3, value.wd4, value.wd5, value.wd6 ],\n\t\t\tfromhour: value.fromhour,\n\t\t\tfrommin: value.frommin,\n\t\t\ttohour: value.tohour,\n\t\t\ttomin: value.tomin,\n\t\t\tin: value.inout\n\t\t};\n\t}\n\t\n\tset value( input: any ) {\n\t\t\n\t\tif ( input === null || input === undefined )\n\t\t\treturn;\n\t\t\n\t\tthis.parts.setValue( {\n\t\t\t check: input.check,\n\t\t\t wd0: input.wd[ 0 ],\n\t\t\t wd1: input.wd[ 1 ],\n\t\t\t wd2: input.wd[ 2 ],\n\t\t\t wd3: input.wd[ 3 ],\n\t\t\t wd4: input.wd[ 4 ],\n\t\t\t wd5: input.wd[ 5 ],\n\t\t\t wd6: input.wd[ 6 ],\n\t\t\t fromhour: parseInt( input.fromhour ),\n\t\t\t frommin: parseInt( input.frommin ),\n\t\t\t tohour: parseInt( input.tohour ),\n\t\t\t tomin: parseInt( input.tomin ),\n\t\t\t inout: input.in\n\t\t } );\n\t\t\n\t\tthis.onChange( this.value );\n\t\tthis.stateChanges.next();\n\t}\n\t\n\tget empty() {\n\t\treturn this.value === null;\n\t}\n\t\n\twriteValue( value ): void {\n\t\tthis.value = value;\n\t}\n\t\n\tregisterOnChange( fn: any ): void {\n\t\tthis.onChange = fn;\n\t}\n\t\n\tregisterOnTouched( fn: any ): void {\n\t\tthis.onTouched = fn;\n\t}\n\t\n\tsetDisabledState( isDisabled: boolean ): void {\n\t\tthis.disabled = isDisabled;\n\t}\n\t\n\tsetDescribedByIds( ids: string[] ) {\n\t\tthis.describedBy = ids.join( ' ' );\n\t}\n\t\n\tonContainerClick( event: MouseEvent ): void {\n\t}\n\t\n\tpublic _texts;\n\t\n\t@Input()\n\tget texts() {\n\t\t\n\t\treturn this._texts;\n\t}\n\t\n\tset texts( input: object ) {\n\t\t\n\t\tif ( input === null || input === undefined )\n\t\t\treturn;\n\t\tthis._texts = input;\n\t}\n\t\n\tonCompare( _left, _right ): number {\n\t\treturn -1;\n\t}\n\t\n}\n","<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>","import {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tDoCheck,\n\tElementRef,\n\tinject,\n\tInput,\n\tOnDestroy\n} from '@angular/core';\nimport {\n\tControlValueAccessor,\n\tFormControl,\n\tFormGroup,\n\tFormsModule,\n\tNgControl,\n\tReactiveFormsModule\n} from '@angular/forms';\nimport { MatError, MatFormField, MatFormFieldControl, MatHint, MatLabel } from '@angular/material/form-field';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { Subject } from 'rxjs';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { XiriFormField } from \"../field.interface\";\nimport { MatInput } from '@angular/material/input';\n\ninterface VolumeForm {\n\tvoll: FormControl<number>\n\tvolw: FormControl<number>\n\tvolh: FormControl<number>\n}\n\n@Component( {\n\t selector: 'xiri-volume',\n\t templateUrl: './volume.component.html',\n\t styleUrls: [ './volume.component.scss' ],\n\t host: {\n\t\t '[id]': 'id',\n\t\t '[attr.aria-describedby]': 'describedBy'\n\t },\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriVolumeComponent\n\t } ],\n\t imports: [\n\t\t MatFormField,\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatLabel,\n\t\t MatInput,\n\t\t MatHint,\n\t\t MatError,\n\t ]\n } )\nexport class XiriVolumeComponent implements ControlValueAccessor, MatFormFieldControl<any>, DoCheck, OnDestroy {\n\tprivate focusMonitor = inject( FocusMonitor );\n\tngControl = inject( NgControl, { optional: true, self: true } );\n\tprivate _elementRef = inject<ElementRef<HTMLElement>>( ElementRef );\n\tprivate cdr = inject( ChangeDetectorRef );\n\t\n\t\n\tstatic nextId = 0;\n\tid = `xiri-volume-${ XiriVolumeComponent.nextId++ }`;\n\tdescribedBy = '';\n\t\n\tpublic min = null;\n\tpublic max = null;\n\t\n\treadonly autofilled: boolean;\n\t\n\tparts: FormGroup<VolumeForm>;\n\tstateChanges = new Subject<void>();\n\tfocused = false;\n\tcontrolType = 'xiri-volume';\n\t\n\treadonly placeholder: string;\n\tpublic required = false;\n\tpublic disabled = false;\n\tshouldLabelFloat = true;\n\tprivate _lastValue: [ number, number, number ] | null = null;\n\tprivate _field: XiriFormField;\n\t\n\tconstructor() {\n\t\t\n\t\tif ( this.ngControl != null )\n\t\t\tthis.ngControl.valueAccessor = this;\n\t\t\n\t\tthis.parts = new FormGroup<VolumeForm>( {\n\t\t\t voll: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t\t volw: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t\t volh: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t } );\n\t\t\n\t\tthis.focusMonitor.monitor( this._elementRef, true ).subscribe( origin => {\n\t\t\tthis.ngControl.control.markAsTouched();\n\t\t\tthis.focused = !!origin;\n\t\t\tthis.runCheck();\n\t\t\tthis.cdr.markForCheck();\n\t\t} );\n\t}\n\t\n\tonChange = ( _: any ) => {\n\t};\n\tonTouched = () => {\n\t};\n\t\n\tngDoCheck(): void {\n\t\tthis.runCheck();\n\t}\n\t\n\tngOnDestroy() {\n\t\tif ( this.changeTO )\n\t\t\tclearTimeout( this.changeTO );\n\t\t\n\t\tthis.stateChanges.complete();\n\t\tthis.focusMonitor.stopMonitoring( this._elementRef );\n\t}\n\t\n\t@Input()\n\tset field( value: XiriFormField ) {\n\t\tthis._field = value;\n\t\t\n\t\tif ( value.min )\n\t\t\tthis.min = value.min;\n\t\tif ( value.max )\n\t\t\tthis.max = value.max;\n\t\t\n\t\tthis.required = coerceBooleanProperty( value.required );\n\t\tthis.disabled = coerceBooleanProperty( value.disabled );\n\t\tthis.disabled ? this.parts.disable() : this.parts.enable();\n\t\t\n\t\tthis.stateChanges.next();\n\t}\n\t\n\tget field(): XiriFormField {\n\t\treturn this._field;\n\t}\n\t\n\t@Input()\n\tget value(): [ number, number, number ] {\n\t\t\n\t\tconst { value: { voll, volw, volh } } = this.parts;\n\t\t\n\t\tif ( this.errorState )\n\t\t\treturn undefined;\n\t\tif ( voll === null || volw === null || volh === null )\n\t\t\treturn null;\n\t\t\n\t\treturn [ voll, volw, volh ];\n\t}\n\t\n\tset value( input: [ number, number, number ] ) {\n\t\t\n\t\tif ( input === null || input === undefined )\n\t\t\treturn;\n\t\t\n\t\tthis.parts.setValue( {\n\t\t\t voll: input[ 0 ],\n\t\t\t volw: input[ 1 ],\n\t\t\t volh: input[ 2 ],\n\t\t } );\n\t\t\n\t\tthis.changeValue( this.value );\n\t}\n\t\n\tprivate runCheck(): void {\n\t\t\n\t\tif ( !this.ngControl )\n\t\t\treturn;\n\t\t\n\t\tconst val = this.value;\n\t\tif ( val === undefined || val === null || this._lastValue === null || this._lastValue === undefined ) {\n\t\t\tif ( this._lastValue === val )\n\t\t\t\tthis.stateChanges.next();\n\t\t\telse\n\t\t\t\tthis.changeValue( val );\n\t\t} else if ( val[ 0 ] ==\n\t\t this._lastValue[ 0 ] &&\n\t\t val[ 1 ] ==\n\t\t this._lastValue[ 1 ] &&\n\t\t val[ 2 ] ==\n\t\t this._lastValue[ 2 ] )\n\t\t\tthis.stateChanges.next();\n\t\telse\n\t\t\tthis.changeValue( val );\n\t}\n\t\n\tprivate changeTO = null;\n\t\n\tprivate changeValue( val ) {\n\t\t\n\t\tthis._lastValue = val;\n\t\tif ( this.changeTO )\n\t\t\tclearTimeout( this.changeTO );\n\t\t\n\t\tthis.changeTO = setTimeout( () => {\n\t\t\tthis.onChange( val );\n\t\t\tthis.stateChanges.next();\n\t\t\tthis.cdr.markForCheck();\n\t\t}, 0 );\n\t}\n\t\n\tget errorState(): boolean {\n\t\treturn this.parts.invalid && this.ngControl.touched;\n\t}\n\t\n\tpublic getErrorMessage(): string {\n\t\t\n\t\tlet err1 = this.parts.get( 'voll' ).errors;\n\t\tlet err2 = this.parts.get( 'volw' ).errors;\n\t\tlet err3 = this.parts.get( 'volh' ).errors;\n\t\t\n\t\treturn 'error';\n\t}\n\t\n\tget empty() {\n\t\treturn this.value === null;\n\t}\n\t\n\twriteValue( value: [ number, number, number ] ): void {\n\t\tthis.value = value;\n\t}\n\t\n\tregisterOnChange( fn: any ): void {\n\t\tthis.onChange = fn;\n\t}\n\t\n\tregisterOnTouched( fn: any ): void {\n\t\tthis.onTouched = fn;\n\t}\n\t\n\tsetDisabledState( isDisabled: boolean ): void {\n\t\tthis.disabled = isDisabled;\n\t}\n\t\n\tsetDescribedByIds( ids: string[] ) {\n\t\tthis.describedBy = ids.join( ' ' );\n\t}\n\t\n\tonContainerClick( event: MouseEvent ): void {\n\t}\n}\n","<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>","import { inject, Injectable } from '@angular/core';\nimport { DateAdapter } from \"@angular/material/core\";\nimport { format, fromUnixTime, Locale, transpose } from 'date-fns';\nimport { tz } from \"@date-fns/tz\";\n\n\n@Injectable( {\n\t providedIn: 'root'\n } )\nexport class XiriDateService {\n\t\n\tprivate currentTimezone: string = 'Europe/Vienna';\n\tprivate dateAdapter: DateAdapter<any> = inject( DateAdapter );\n\t\n\tpublic setTimezone( tz: string ) {\n\t\t\n\t\tthis.currentTimezone = tz;\n\t}\n\t\n\tpublic setLocale( localeString: string, locale: Locale ) {\n\t\t\n\t\tthis.dateAdapter.setLocale( locale );\n\t}\n\t\n\tpublic unixToLocal( stime: number ): Date | null {\n\t\t\n\t\tif ( stime === null || stime === undefined )\n\t\t\treturn null;\n\t\t\n\t\treturn fromUnixTime( stime, { in: tz( this.currentTimezone ) } );\n\t}\n\t\n\tpublic unixToStringDateTime( stime: number ): string {\n\t\t\n\t\treturn format( this.unixToLocal( stime ), 'yyyy-MM-dd HH:mm' );\n\t}\n\t\n\tpublic unixToStringDate( stime: number ): string {\n\t\t\n\t\treturn format( this.unixToLocal( stime ), 'd. LLL.' );\n\t}\n\t\n\tpublic unixToStringDateYear( stime: number ): string {\n\t\t\n\t\treturn format( this.unixToLocal( stime ), 'd. LLL. yy' );\n\t}\n\t\n\tpublic dateToUnix( date: Date ): number {\n\t\t\n\t\treturn Math.floor( transpose( date, tz( this.currentTimezone ) ).getTime() / 1000 );\n\t}\n}\n","import {\n\tafterRenderEffect,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tinject,\n\tInput,\n\tnumberAttribute,\n\tOnDestroy,\n\tOnInit,\n\toutput,\n\tsignal\n} from \"@angular/core\";\nimport {\n\tAbstractControl,\n\tControlValueAccessor,\n\tFormGroupDirective,\n\tNgControl,\n\tNgForm,\n\tValidators\n} from \"@angular/forms\";\nimport { MatFormFieldControl } from \"@angular/material/form-field\";\nimport { Subject, Subscription } from \"rxjs\";\nimport { _ErrorStateTracker, ErrorStateMatcher } from \"@angular/material/core\";\nimport { FocusMonitor } from \"@angular/cdk/a11y\";\n\n\n@Component( {\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriFieldMain\n\t } ],\n\t imports: [],\n\t template: ``\n } )\nexport abstract class XiriFieldMain\n\timplements ControlValueAccessor,\n\t MatFormFieldControl<any>,\n\t OnInit,\n\t OnDestroy {\n\n\tprotected _elementRef = inject<ElementRef<HTMLElement>>( ElementRef );\n\tprotected _changeDetectorRef = inject( ChangeDetectorRef );\n\tprotected _focusMonitor = inject( FocusMonitor );\n\tpublic _defaultErrorStateMatcher = inject( ErrorStateMatcher );\n\tpublic ngControl = inject( NgControl, { self: true, optional: true } );\n\tprivate _parentForm = inject( NgForm, { optional: true } );\n\tprivate _parentFormGroup = inject( FormGroupDirective, { optional: true } );\n\n\treadonly stateChanges: Subject<void> = new Subject<void>();\n\treadonly autofilled: boolean = false;\n\treadonly valueChange = output<any>();\n\n\t_onChange: ( value: any ) => void = () => {\n\t};\n\t_onTouched = () => {\n\t};\n\n\tprotected touched: boolean = false;\n\tprotected _errorStateTracker: _ErrorStateTracker;\n\tprotected _previousControl: AbstractControl | null | undefined;\n\tprotected subs: Subscription = new Subscription();\n\n\tdisableAutomaticLabeling?: boolean;\n\tcontrolType = 'xiri-form-field';\n\n\tprotected constructor() {\n\t\tthis._errorStateTracker = new _ErrorStateTracker(\n\t\t\tthis._defaultErrorStateMatcher,\n\t\t\tthis.ngControl,\n\t\t\tthis._parentFormGroup,\n\t\t\tthis._parentForm,\n\t\t\tthis.stateChanges,\n\t\t);\n\n\t\tafterRenderEffect( () => {\n\t\t\tthis.doCheckLogic();\n\t\t} );\n\t}\n\n\tngOnInit() {\n\t\tthis.subs.add( this._focusMonitor.monitor( this._elementRef, true ).subscribe( origin => {\n\t\t\tthis.focused = !!origin;\n\t\t\tif ( !this.focused ) {\n\t\t\t\tif ( !this.touched ) {\n\t\t\t\t\tthis.ngControl.control.markAsTouched();\n\t\t\t\t\tthis.touched = true;\n\t\t\t\t}\n\t\t\t\tthis.startChangeValue();\n\t\t\t}\n\t\t} ) );\n\n\t\tthis.stateChanges.next();\n\t}\n\n\tngOnDestroy() {\n\t\tthis._focusMonitor.stopMonitoring( this._elementRef );\n\t\tthis.subs.unsubscribe();\n\t\tthis.stateChanges.complete();\n\t}\n\n\tprivate doCheckLogic(): void {\n\t\tconst ngControl = this.ngControl;\n\n\t\tif ( ngControl ) {\n\t\t\tif ( this._previousControl !== ngControl.control ) {\n\t\t\t\tif (\n\t\t\t\t\tthis._previousControl !== undefined &&\n\t\t\t\t\tngControl.disabled !== null &&\n\t\t\t\t\tngControl.disabled !== this.disabled\n\t\t\t\t) {\n\t\t\t\t\tthis.disabled = ngControl.disabled;\n\t\t\t\t}\n\n\t\t\t\tthis._previousControl = ngControl.control;\n\t\t\t}\n\n\t\t\tthis.updateErrorState();\n\n\t\t\tif ( ngControl.touched != this.touched ) {\n\t\t\t\tthis.touched = true;\n\t\t\t\tthis.startChangeValue();\n\t\t\t}\n\t\t}\n\t}\n\n\n\t@Input()\n\tget id(): string {\n\t\treturn this._id;\n\t}\n\n\tset id( value: string ) {\n\t\tthis._id = value;\n\t}\n\n\tprotected _id: string;\n\n\n\t@Input( {\n\t\t transform: ( value: unknown ) => ( value == null ? 0 : numberAttribute( value ) ),\n\t } )\n\ttabIndex: number = 0;\n\n\n\t@Input()\n\tget value(): any {\n\t\treturn this._value;\n\t}\n\n\tset value( value: any ) {\n\t\tthis._value = value;\n\t}\n\n\tprotected abstract startChangeValue(): void;\n\n\tprotected runChangeValue( val: any ) {\n\t\tthis._onTouched();\n\t\tthis._onChange( val );\n\t\tthis.valueChange.emit( val );\n\t\tthis.stateChanges.next();\n\t\tthis._changeDetectorRef.markForCheck();\n\t}\n\n\tprotected _value: any = null;\n\n\tget empty() {\n\t\treturn this._value === null;\n\t}\n\n\t@Input( { transform: booleanAttribute } )\n\tget disabled(): boolean {\n\t\treturn this._disabled();\n\t}\n\n\tset disabled( value: boolean ) {\n\t\tthis._disabled.set( value );\n\t\tthis._changeDetectorRef.markForCheck();\n\t\tthis.stateChanges.next();\n\t}\n\n\tprotected _disabled = signal<boolean>( false );\n\n\tsetDisabledState( isDisabled: boolean ): void {\n\t}\n\n\n\t@Input( { transform: booleanAttribute } )\n\tget required(): boolean {\n\t\treturn this._required ?? this.ngControl?.control?.hasValidator( Validators.required ) ?? false;\n\t}\n\n\tset required( value: boolean ) {\n\t\tthis._required = value;\n\t\tthis.stateChanges.next();\n\t}\n\n\tprotected _required: boolean | undefined;\n\n\n\t@Input()\n\tget placeholder(): string {\n\t\treturn this._placeholder;\n\t}\n\n\tset placeholder( value: string ) {\n\t\tthis._placeholder = value;\n\t\tthis.stateChanges.next();\n\t}\n\n\tprotected _placeholder: string;\n\n\tpublic focused: boolean = false;\n\n\twriteValue( value: any ): void {\n\t\tthis._value = value;\n\t}\n\n\tregisterOnChange( fn: ( value: any ) => void ): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched( fn: () => void ): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\n\tsetDescribedByIds( ids: string[] ) {\n\t\tif ( ids.length ) {\n\t\t\tthis._elementRef.nativeElement.setAttribute( 'aria-describedby', ids.join( ' ' ) );\n\t\t} else {\n\t\t\tthis._elementRef.nativeElement.removeAttribute( 'aria-describedby' );\n\t\t}\n\t}\n\n\tget shouldLabelFloat(): boolean {\n\t\treturn !this.empty || this.focused;\n\t}\n\n\tonContainerClick() {\n\t\tif ( !this.focused ) {\n\t\t\tthis.focus();\n\t\t}\n\t}\n\n\tfocus( options?: FocusOptions ): void {\n\t\tthis._elementRef.nativeElement.focus( options );\n\t}\n\n\t@Input()\n\tget errorStateMatcher() {\n\t\treturn this._errorStateTracker.matcher;\n\t}\n\n\tset errorStateMatcher( value: ErrorStateMatcher ) {\n\t\tthis._errorStateTracker.matcher = value;\n\t}\n\n\tget errorState() {\n\t\treturn this._errorStateTracker.errorState;\n\t}\n\n\tset errorState( value: boolean ) {\n\t\tthis._errorStateTracker.errorState = value;\n\t}\n\n\tupdateErrorState() {\n\t\tthis._errorStateTracker.updateErrorState();\n\t}\n\n\tprotected _markAsTouched() {\n\t\tthis._onTouched();\n\t\tthis._changeDetectorRef.markForCheck();\n\t\tthis.stateChanges.next();\n\t}\n\n\t@Input( 'aria-describedby' ) userAriaDescribedBy: string;\n\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tinject,\n\tInput,\n} from '@angular/core';\nimport {\n\tControlValueAccessor,\n\tFormBuilder,\n\tFormControl,\n\tFormGroup,\n\tFormsModule,\n\tReactiveFormsModule\n} from '@angular/forms';\nimport { MatFormFieldControl, MatSuffix } from '@angular/material/form-field';\nimport { XiriDateService } from \"../../services/date.service\";\nimport { XiriFormField } from \"../field.interface\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatIcon } from '@angular/material/icon';\nimport { MatSelect } from '@angular/material/select';\nimport {\n\tMatDatepicker,\n\tMatDatepickerInput,\n\tMatDatepickerToggle,\n\tMatDatepickerToggleIcon\n} from '@angular/material/datepicker';\nimport { MatInput } from '@angular/material/input';\nimport { XiriFieldMain } from \"../helper/fieldmain\";\n\n\ninterface DateTimeRangeForm {\n\tdate: FormControl<Date | null>\n\tfhour: FormControl<number>\n\tfminute: FormControl<number>\n\tthour: FormControl<number>\n\ttminute: FormControl<number>\n}\n\nlet nextUniqueIdXiriDateTimeRange = 0;\n\nclass DateTimeRange {\n\tconstructor( public start: number, public end: number ) {\n\t}\n}\n\n\n@Component( {\n\t selector: 'xiri-date-time-range',\n\t templateUrl: './datetimerange.component.html',\n\t styleUrl: './datetimerange.component.scss',\n\t host: {\n\t\t '[id]': 'id',\n\t\t '(focus)': 'focus()',\n\t },\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriDateTimeRangeComponent\n\t } ],\n\t imports: [\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatInput,\n\t\t MatDatepickerInput,\n\t\t MatSelect,\n\t\t MatOption,\n\t\t MatDatepickerToggle,\n\t\t MatSuffix,\n\t\t MatIcon,\n\t\t MatDatepickerToggleIcon,\n\t\t MatDatepicker,\n\t ]\n } )\nexport class XiriDateTimeRangeComponent extends XiriFieldMain implements ControlValueAccessor,\n MatFormFieldControl<DateTimeRange | null | undefined> {\n\t\n\tprotected _uid = `xiri-date-${ nextUniqueIdXiriDateTimeRange++ }`;\n\t\n\tpublic minDate: Date | null = null;\n\tpublic maxDate: Date | null = null;\n\t\n\tparts: FormGroup<DateTimeRangeForm>;\n\t\n\tprivate _lastValue: DateTimeRange | null = null;\n\t\n\thours = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09',\n\t '10', '11', '12', '13', '14', '15', '16', '17', '18', '19',\n\t '20', '21', '22', '23' ];\n\tminutes = [ '00', '05', '10', '15',\n\t '20', '25', '30', '35',\n\t '40', '45', '50', '55', ];\n\t\n\tprivate dateService = inject( XiriDateService );\n\tprivate fb = inject( FormBuilder );\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._id = this._uid;\n\n\t\tif ( this.ngControl != null )\n\t\t\tthis.ngControl.valueAccessor = this;\n\n\t\tthis.parts = this.fb.group<DateTimeRangeForm>( {\n\t\t\t date: new FormControl<Date | null>( null ),\n\t\t\t fhour: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t\t fminute: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t\t thour: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t\t tminute: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t } );\n\t}\n\t\n\tngOnInit() {\n\t\tthis.subs.add( this.parts.valueChanges.subscribe( () => {\n\t\t\tthis.runCheck();\n\t\t} ) );\n\t\t\n\t\tsuper.ngOnInit();\n\t}\n\t\n\t@Input()\n\tset field( value: XiriFormField ) {\n\t\t\n\t\tif ( value.min )\n\t\t\tthis.minDate = this.dateService.unixToLocal( value.min );\n\t\tif ( value.max )\n\t\t\tthis.maxDate = this.dateService.unixToLocal( value.max );\n\t\t\n\t\tthis.required = !!value.required;\n\t\tthis.disabled = !!value.disabled;\n\t\tthis.disabled ? this.parts.disable() : this.parts.enable();\n\t\t\n\t\tthis.stateChanges.next();\n\t}\n\t\n\t@Input()\n\tget value(): DateTimeRange | null | undefined {\n\t\t\n\t\tconst { date, fhour, fminute, thour, tminute } = this.parts.value;\n\t\t\n\t\tif ( !date && !this.required && !this.parts.valid )\n\t\t\treturn this._disabled() ? null : undefined;\n\t\tif ( !date || fhour === undefined || fminute === undefined || thour === undefined || tminute === undefined )\n\t\t\treturn null;\n\t\t\n\t\tlet to = new Date( date.getTime() );\n\t\t\n\t\tdate.setHours( fhour );\n\t\tdate.setMinutes( fminute );\n\t\t\n\t\tto.setHours( thour );\n\t\tto.setMinutes( tminute );\n\t\t\n\t\tlet unixFrom = this.dateService.dateToUnix( date );\n\t\tlet unixTo = this.dateService.dateToUnix( to );\n\t\t\n\t\tif ( unixFrom > unixTo )\n\t\t\treturn new DateTimeRange( unixTo, unixFrom );\n\t\telse\n\t\t\treturn new DateTimeRange( unixFrom, unixTo );\n\t}\n\t\n\tset value( input: DateTimeRange | null | undefined ) {\n\t\t\n\t\tif ( input === null || input === undefined ) {\n\t\t\tif ( !this.required ) {\n\t\t\t\tthis.parts.setValue( {\n\t\t\t\t\t date: null,\n\t\t\t\t\t fhour: 0,\n\t\t\t\t\t fminute: 0,\n\t\t\t\t\t thour: 0,\n\t\t\t\t\t tminute: 0,\n\t\t\t\t } );\n\t\t\t\t\n\t\t\t\tthis.startChangeValue();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst fromDate = this.dateService.unixToLocal( input.start );\n\t\tconst toDate = this.dateService.unixToLocal( input.end );\n\t\t\n\t\tconst fromHour = fromDate.getHours() ?? 0;\n\t\tconst fromMinute = fromDate.getMinutes() ?? 0;\n\t\tconst toHour = toDate.getHours() ?? 0;\n\t\tconst toMinute = toDate.getMinutes() ?? 0;\n\t\t\n\t\tthis.parts.setValue( {\n\t\t\t date: fromDate,\n\t\t\t fhour: fromHour,\n\t\t\t fminute: fromMinute,\n\t\t\t thour: toHour,\n\t\t\t tminute: toMinute,\n\t\t } );\n\t\t\n\t\tthis.startChangeValue();\n\t}\n\t\n\tprivate runCheck(): void {\n\t\t\n\t\tif ( !this.ngControl )\n\t\t\treturn;\n\t\t\n\t\tconst val = this.value;\n\t\tif ( val === this._lastValue )\n\t\t\tthis.stateChanges.next();\n\t\telse if ( val === null || val === undefined || this._lastValue === null || this._lastValue === undefined )\n\t\t\tthis.changeValue( val );\n\t\telse if ( val.start == this._lastValue.start && val.end == this._lastValue.end )\n\t\t\tthis.stateChanges.next();\n\t\telse\n\t\t\tthis.changeValue( val );\n\t}\n\t\n\tprotected startChangeValue(): void {\n\t\tthis.runChangeValue( this.value );\n\t}\n\t\n\tprivate changeValue( val: DateTimeRange | null | undefined ) {\n\t\t\n\t\tthis._lastValue = val;\n\t\tthis.runChangeValue( val );\n\t}\n\t\n\tget empty() {\n\t\tconst inputElement = this._elementRef.nativeElement.childNodes[ 0 ] as HTMLInputElement;\n\t\treturn this.value === null && inputElement.value === '';\n\t}\n\t\n\twriteValue( value: DateTimeRange | null ): void {\n\t\tthis.value = value;\n\t}\n\t\n\tgetInt( num: string ): number {\n\t\t\n\t\treturn parseInt( num );\n\t}\n}\n","<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>","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tinject,\n\tInput,\n\tOnInit,\n} from '@angular/core';\nimport {\n\tControlValueAccessor,\n\tFormBuilder,\n\tFormControl,\n\tFormGroup,\n\tFormsModule,\n\tReactiveFormsModule\n} from '@angular/forms';\nimport { MatFormFieldControl, MatSuffix } from '@angular/material/form-field';\nimport { XiriDateService } from \"../../services/date.service\";\nimport { XiriFormField } from \"../field.interface\";\nimport { MatIcon } from '@angular/material/icon';\nimport {\n\tMatDatepickerToggle,\n\tMatDatepickerToggleIcon,\n\tMatDateRangeInput,\n\tMatDateRangePicker,\n\tMatEndDate,\n\tMatStartDate\n} from '@angular/material/datepicker';\nimport { XiriFieldMain } from \"../helper/fieldmain\";\n\n\ninterface DateRangeForm {\n\tstart: FormControl<Date | null>\n\tend: FormControl<Date | null>\n}\n\nlet nextUniqueIdXiriDateRange = 0;\n\nclass DateRange {\n\tconstructor( public start: number, public end: number ) {\n\t}\n}\n\n@Component( {\n\t selector: 'xiri-date-range',\n\t templateUrl: './daterange.component.html',\n\t styleUrl: './daterange.component.scss',\n\t host: {\n\t\t '[id]': 'id',\n\t\t '(focus)': 'focus()',\n\t },\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriDateRangeComponent\n\t } ],\n\t imports: [\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatDateRangeInput,\n\t\t MatStartDate,\n\t\t MatEndDate,\n\t\t MatDatepickerToggle,\n\t\t MatSuffix,\n\t\t MatIcon,\n\t\t MatDatepickerToggleIcon,\n\t\t MatDateRangePicker,\n\t ]\n } )\nexport class XiriDateRangeComponent extends XiriFieldMain implements OnInit,\n ControlValueAccessor,\n MatFormFieldControl<DateRange | null | undefined> {\n\t\n\tprotected _uid = `xiri-date-${ nextUniqueIdXiriDateRange++ }`;\n\t\n\tpublic minDate: Date | null = null;\n\tpublic maxDate: Date | null = null;\n\t\n\tparts: FormGroup<DateRangeForm>;\n\t\n\tprivate _lastValue: DateRange | null = null;\n\t\n\tprivate dateService = inject( XiriDateService );\n\tprivate fb = inject( FormBuilder );\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._id = this._uid;\n\n\t\tif ( this.ngControl != null )\n\t\t\tthis.ngControl.valueAccessor = this;\n\n\t\tthis.parts = this.fb.group<DateRangeForm>( {\n\t\t\t start: new FormControl<Date | null>( null ),\n\t\t\t end: new FormControl<Date | null>( null ),\n\t\t } );\n\t}\n\t\n\tngOnInit() {\n\t\t\n\t\tthis.subs.add( this.parts.valueChanges.subscribe( () => {\n\t\t\tthis.runCheck();\n\t\t} ) );\n\t\t\n\t\tsuper.ngOnInit();\n\t}\n\t\n\t@Input()\n\tset field( value: XiriFormField ) {\n\t\t\n\t\tif ( value.min )\n\t\t\tthis.minDate = this.dateService.unixToLocal( value.min );\n\t\tif ( value.max )\n\t\t\tthis.maxDate = this.dateService.unixToLocal( value.max );\n\t\t\n\t\tthis.required = !!value.required;\n\t\tthis.disabled = !!value.disabled;\n\t\tthis.disabled ? this.parts.disable() : this.parts.enable();\n\t\t\n\t\tthis.stateChanges.next();\n\t}\n\t\n\t@Input()\n\tget value(): DateRange | null | undefined {\n\t\t\n\t\tconst { start, end } = this.parts.value;\n\t\t\n\t\tif ( start === null || end === null ) {\n\t\t\tif ( this.required ) {\n\t\t\t\treturn this.parts.valid ? null : this._disabled() ? null : undefined;\n\t\t\t} else {\n\t\t\t\tif ( start === end )\n\t\t\t\t\treturn this.parts.valid ? null : this._disabled() ? null : undefined;\n\t\t\t\telse\n\t\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\t\t\n\t\tlet unixFrom = this.dateService.dateToUnix( start );\n\t\tlet unixTo = this.dateService.dateToUnix( end );\n\t\t\n\t\tif ( unixFrom > unixTo )\n\t\t\treturn new DateRange( unixTo, unixFrom );\n\t\telse\n\t\t\treturn new DateRange( unixFrom, unixTo );\n\t}\n\t\n\tset value( input: DateRange | null | undefined ) {\n\t\t\n\t\tif ( input === null || input === undefined ) {\n\t\t\tif ( !this.required ) {\n\t\t\t\tthis.parts.setValue( {\n\t\t\t\t\t start: null,\n\t\t\t\t\t end: null,\n\t\t\t\t } );\n\t\t\t\t\n\t\t\t\tthis.startChangeValue();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst start = this.dateService.unixToLocal( input?.start );\n\t\tconst end = this.dateService.unixToLocal( input?.end );\n\t\t\n\t\tthis.parts.setValue( {\n\t\t\t start: start,\n\t\t\t end: end,\n\t\t } );\n\t\t\n\t\tthis.startChangeValue();\n\t}\n\t\n\tprivate runCheck(): void {\n\t\t\n\t\tif ( !this.ngControl )\n\t\t\treturn;\n\t\t\n\t\tconst val = this.value;\n\t\tif ( val === this._lastValue )\n\t\t\tthis.stateChanges.next();\n\t\telse if ( val === null || val === undefined || this._lastValue === null || this._lastValue === undefined )\n\t\t\tthis.changeValue( val );\n\t\telse if ( val.start == this._lastValue.start && val.end == this._lastValue.end )\n\t\t\tthis.stateChanges.next();\n\t\telse\n\t\t\tthis.changeValue( val );\n\t}\n\t\n\tprotected startChangeValue(): void {\n\t\tthis.runChangeValue( this.value );\n\t}\n\t\n\tprivate changeValue( val: DateRange | null | undefined ) {\n\t\t\n\t\tthis._lastValue = val;\n\t\tthis.runChangeValue( val );\n\t}\n\t\n\tget empty() {\n\t\tconst inputElement1 = this._elementRef.nativeElement.childNodes[ 0 ].childNodes[ 0 ] as HTMLInputElement;\n\t\tconst inputElement2 = this._elementRef.nativeElement.childNodes[ 0 ].childNodes[ 1 ] as HTMLInputElement;\n\t\treturn this.value === null && inputElement1.value === '' && inputElement2.value === '';\n\t}\n\t\n\twriteValue( value: DateRange | null ): void {\n\t\tthis.value = value;\n\t}\n}\n","<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>","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tinject,\n\tInput,\n\tOnInit,\n} from '@angular/core';\nimport {\n\tControlValueAccessor,\n\tFormControl,\n\tFormGroup,\n\tFormBuilder,\n\tFormsModule,\n\tReactiveFormsModule\n} from '@angular/forms';\nimport { MatFormFieldControl, MatSuffix } from '@angular/material/form-field';\nimport { XiriDateService } from \"../../services/date.service\";\nimport { XiriFormField } from \"../field.interface\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatIcon } from '@angular/material/icon';\nimport { MatSelect } from '@angular/material/select';\nimport {\n\tMatDatepickerInput,\n\tMatDatepickerToggle,\n\tMatDatepickerToggleIcon,\n\tMatDatepicker\n} from '@angular/material/datepicker';\nimport { MatInput } from '@angular/material/input';\nimport { XiriFieldMain } from \"../helper/fieldmain\";\n\ninterface DateForm {\n\tdate: FormControl<Date | null>\n\thour: FormControl<number>\n\tminute: FormControl<number>\n}\n\nlet nextUniqueIdXiriDate = 0;\n\n\n@Component( {\n\t selector: 'xiri-date',\n\t templateUrl: './date.component.html',\n\t styleUrl: './date.component.scss',\n\t host: {\n\t\t '[id]': 'id',\n\t\t '(focus)': 'focus()',\n\t },\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriDateComponent\n\t } ],\n\t imports: [\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatInput,\n\t\t MatDatepickerInput,\n\t\t MatSelect,\n\t\t MatOption,\n\t\t MatDatepickerToggle,\n\t\t MatSuffix,\n\t\t MatIcon,\n\t\t MatDatepickerToggleIcon,\n\t\t MatDatepicker,\n\t ]\n } )\nexport class XiriDateComponent extends XiriFieldMain implements OnInit,\n ControlValueAccessor,\n MatFormFieldControl<number | null | undefined> {\n\t\n\tprotected _uid = `xiri-date-${ nextUniqueIdXiriDate++ }`;\n\n\tpublic minDate: Date | null = null;\n\tpublic maxDate: Date | null = null;\n\n\tparts: FormGroup<DateForm>;\n\n\tprivate _lastValue: number | null = null;\n\tpublic type: string = 'date';\n\t\n\t\n\thours = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09',\n\t '10', '11', '12', '13', '14', '15', '16', '17', '18', '19',\n\t '20', '21', '22', '23' ];\n\tminutes = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09',\n\t '10', '11', '12', '13', '14', '15', '16', '17', '18', '19',\n\t '20', '21', '22', '23', '24', '25', '26', '27', '28', '29',\n\t '30', '31', '32', '33', '34', '35', '36', '37', '38', '39',\n\t '40', '41', '42', '43', '44', '45', '46', '47', '48', '49',\n\t '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', ];\n\t\n\tprivate dateService = inject( XiriDateService );\n\tprivate fb = inject( FormBuilder );\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._id = this._uid;\n\n\t\tif ( this.ngControl != null )\n\t\t\tthis.ngControl.valueAccessor = this;\n\n\t\tthis.parts = this.fb.group<DateForm>( {\n\t\t\t date: new FormControl<Date | null>( null ),\n\t\t\t hour: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t\t minute: new FormControl<number>( 0, { nonNullable: true } ),\n\t\t } );\n\t}\n\t\n\tngOnInit() {\n\t\t\n\t\tthis.subs.add( this.parts.valueChanges.subscribe( () => {\n\t\t\tthis.runCheck();\n\t\t} ) );\n\t\t\n\t\tsuper.ngOnInit();\n\t}\n\t\n\t@Input()\n\tset field( value: XiriFormField ) {\n\t\t\n\t\tthis.type = value.subtype ? value.subtype : 'date';\n\t\t\n\t\tif ( value.min )\n\t\t\tthis.minDate = this.dateService.unixToLocal( value.min );\n\t\tif ( value.max )\n\t\t\tthis.maxDate = this.dateService.unixToLocal( value.max );\n\t\t\n\t\tthis.required = !!value.required;\n\t\tthis.disabled = !!value.disabled;\n\t\tthis.disabled ? this.parts.disable() : this.parts.enable();\n\t\t\n\t\tthis.stateChanges.next();\n\t}\n\t\n\t@Input()\n\tget value(): number | null | undefined {\n\t\t\n\t\tconst { date, hour, minute } = this.parts.value;\n\t\t\n\t\tif ( !date && !this.required && !this.parts.valid )\n\t\t\treturn this._disabled() ? null : undefined;\n\t\tif ( !date || hour === undefined || minute === undefined )\n\t\t\treturn null;\n\t\t\n\t\tdate.setHours( hour );\n\t\tdate.setMinutes( minute );\n\t\t\n\t\treturn this.dateService.dateToUnix( date );\n\t}\n\t\n\tset value( input: number | null | undefined ) {\n\n\t\tif ( input === null || input === undefined ) {\n\t\t\tif ( !this.required ) {\n\t\t\t\tthis.parts.setValue( {\n\t\t\t\t\t date: null,\n\t\t\t\t\t hour: 0,\n\t\t\t\t\t minute: 0,\n\t\t\t\t } );\n\n\t\t\t\tthis.startChangeValue();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst current = this.dateService.unixToLocal( input );\n\t\tconst hour = current?.getHours() ?? 0;\n\t\tconst minute = current?.getMinutes() ?? 0;\n\n\t\tthis.parts.setValue( {\n\t\t\t date: current,\n\t\t\t hour: hour,\n\t\t\t minute: minute,\n\t\t } );\n\n\t\tthis.startChangeValue();\n\t}\n\t\n\tprivate runCheck(): void {\n\t\t\n\t\tif ( !this.ngControl )\n\t\t\treturn;\n\t\t\n\t\tconst val = this.value;\n\t\tif ( val === this._lastValue )\n\t\t\tthis.stateChanges.next();\n\t\telse\n\t\t\tthis.changeValue( val );\n\t}\n\t\n\tprotected startChangeValue(): void {\n\t\tthis.runChangeValue( this.value );\n\t}\n\t\n\tprivate changeValue( val: number | null | undefined ) {\n\t\t\n\t\tthis._lastValue = val;\n\t\tthis.runChangeValue( val );\n\t}\n\t\n\toverride get empty() {\n\t\tconst inputElement = this._elementRef.nativeElement.childNodes[ 0 ] as HTMLInputElement;\n\t\treturn this.value === null && inputElement.value === '';\n\t}\n\t\n\toverride writeValue( value: number | null ): void {\n\t\tthis.value = value;\n\t}\n}\n","<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>","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tinject,\n\tInput,\n\tOnInit,\n\tViewChild,\n} from '@angular/core';\nimport {\n\tControlValueAccessor,\n\tFormControl,\n\tFormsModule,\n\tReactiveFormsModule\n} from '@angular/forms';\nimport { MatFormFieldControl, MatSuffix } from '@angular/material/form-field';\nimport { MAT_DATE_FORMATS } from '@angular/material/core';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n\tMatDatepicker,\n\tMatDatepickerInput,\n\tMatDatepickerToggle,\n\tMatDatepickerToggleIcon\n} from '@angular/material/datepicker';\nimport { MatInput } from '@angular/material/input';\nimport { XiriDateService } from '../../services/date.service';\nimport { XiriFormField } from '../field.interface';\nimport { XiriFieldMain } from '../helper/fieldmain';\n\nlet nextUniqueIdXiriYearMonth = 0;\n\nexport const XIRI_YEAR_MONTH_FORMATS = {\n\tparse: { dateInput: 'MM.yyyy' },\n\tdisplay: {\n\t\tdateInput: 'MM.yyyy',\n\t\tmonthYearLabel: 'MMM yyyy',\n\t\tdateA11yLabel: 'LL',\n\t\tmonthYearA11yLabel: 'MMMM yyyy',\n\t},\n};\n\n@Component( {\n\t selector: 'xiri-yearmonth',\n\t templateUrl: './yearmonth.component.html',\n\t styleUrl: './yearmonth.component.scss',\n\t host: {\n\t\t '[id]': 'id',\n\t\t '(focus)': 'focus()',\n\t },\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [\n\t\t { provide: MatFormFieldControl, useExisting: XiriYearMonthComponent },\n\t\t { provide: MAT_DATE_FORMATS, useValue: XIRI_YEAR_MONTH_FORMATS },\n\t ],\n\t imports: [\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatInput,\n\t\t MatDatepickerInput,\n\t\t MatDatepickerToggle,\n\t\t MatSuffix,\n\t\t MatIcon,\n\t\t MatDatepickerToggleIcon,\n\t\t MatDatepicker,\n\t ]\n } )\nexport class XiriYearMonthComponent extends XiriFieldMain implements OnInit,\n ControlValueAccessor,\n MatFormFieldControl<number | null | undefined> {\n\n\tprotected _uid = `xiri-yearmonth-${ nextUniqueIdXiriYearMonth++ }`;\n\n\tpublic minDate: Date | null = null;\n\tpublic maxDate: Date | null = null;\n\n\tdateControl = new FormControl<Date | null>( null );\n\n\t@ViewChild( 'picker' ) picker?: MatDatepicker<Date>;\n\n\tprivate _lastValue: number | null = null;\n\tpublic type: string = 'yearmonth';\n\n\tprivate dateService = inject( XiriDateService );\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis._id = this._uid;\n\n\t\tif ( this.ngControl != null )\n\t\t\tthis.ngControl.valueAccessor = this;\n\t}\n\n\tngOnInit() {\n\t\tthis.subs.add( this.dateControl.valueChanges.subscribe( () => {\n\t\t\tthis.runCheck();\n\t\t} ) );\n\n\t\tsuper.ngOnInit();\n\t}\n\n\t@Input()\n\tset field( value: XiriFormField ) {\n\t\tif ( value.min )\n\t\t\tthis.minDate = this.dateService.unixToLocal( value.min );\n\t\tif ( value.max )\n\t\t\tthis.maxDate = this.dateService.unixToLocal( value.max );\n\n\t\tthis.required = !!value.required;\n\t\tthis.disabled = !!value.disabled;\n\t\tthis.disabled ? this.dateControl.disable() : this.dateControl.enable();\n\n\t\tthis.stateChanges.next();\n\t}\n\n\t@Input()\n\tget value(): number | null | undefined {\n\t\tconst date = this.dateControl.value;\n\n\t\tif ( !date && !this.required && !this.dateControl.valid )\n\t\t\treturn this._disabled() ? null : undefined;\n\t\tif ( !date )\n\t\t\treturn null;\n\n\t\treturn this.dateService.dateToUnix( date );\n\t}\n\n\tset value( input: number | null | undefined ) {\n\t\tif ( input === null || input === undefined ) {\n\t\t\tif ( !this.required ) {\n\t\t\t\tthis.dateControl.setValue( null );\n\t\t\t\tthis.startChangeValue();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst current = this.dateService.unixToLocal( input );\n\n\t\tif ( current ) {\n\t\t\tcurrent.setDate( 1 );\n\t\t\tcurrent.setHours( 0, 0, 0, 0 );\n\t\t}\n\n\t\tthis.dateControl.setValue( current );\n\t\tthis.startChangeValue();\n\t}\n\n\tonYearMonthSelected( date: Date ): void {\n\t\tconst normalized = new Date( date.getFullYear(), date.getMonth(), 1, 0, 0, 0, 0 );\n\t\tthis.dateControl.setValue( normalized );\n\t\tthis.picker?.close();\n\t}\n\n\tprivate runCheck(): void {\n\t\tif ( !this.ngControl )\n\t\t\treturn;\n\n\t\tconst val = this.value;\n\t\tif ( val === this._lastValue )\n\t\t\tthis.stateChanges.next();\n\t\telse\n\t\t\tthis.changeValue( val );\n\t}\n\n\tprotected startChangeValue(): void {\n\t\tthis.runChangeValue( this.value );\n\t}\n\n\tprivate changeValue( val: number | null | undefined ) {\n\t\tthis._lastValue = val;\n\t\tthis.runChangeValue( val );\n\t}\n\n\toverride get empty() {\n\t\treturn this.dateControl.value === null;\n\t}\n\n\toverride writeValue( value: number | null ): void {\n\t\tthis.value = value;\n\t}\n}\n","<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","import { inject, Injectable } from '@angular/core';\nimport { MatSnackBar, MatSnackBarConfig, MatSnackBarRef, TextOnlySnackBar } from '@angular/material/snack-bar';\n\nexport type XiriSnackbarType = 'success' | 'error' | 'info' | 'warning';\n\n@Injectable( {\n\t providedIn: 'root',\n } )\nexport class XiriSnackbarService {\n\n\tprivate snackbar = inject( MatSnackBar );\n\n\tsuccess( message: string, duration = 3000, action?: string ): MatSnackBarRef<TextOnlySnackBar> {\n\t\treturn this.show( message, 'success', duration, action );\n\t}\n\n\terror( message: string, duration = 5000, action?: string ): MatSnackBarRef<TextOnlySnackBar> {\n\t\treturn this.show( message, 'error', duration, action );\n\t}\n\n\tinfo( message: string, duration = 3000, action?: string ): MatSnackBarRef<TextOnlySnackBar> {\n\t\treturn this.show( message, 'info', duration, action );\n\t}\n\n\twarning( message: string, duration = 4000, action?: string ): MatSnackBarRef<TextOnlySnackBar> {\n\t\treturn this.show( message, 'warning', duration, action );\n\t}\n\n\thandleResponse( response: any ): boolean {\n\t\tif ( !response?.message || !response?.messageType ) return false;\n\t\tswitch ( response.messageType as XiriSnackbarType ) {\n\t\t\tcase 'success': this.success( response.message ); break;\n\t\t\tcase 'error': this.error( response.message ); break;\n\t\t\tcase 'info': this.info( response.message ); break;\n\t\t\tcase 'warning': this.warning( response.message ); break;\n\t\t\tdefault: this.info( response.message );\n\t\t}\n\t\treturn true;\n\t}\n\n\tprivate show( message: string, type: XiriSnackbarType, duration: number, action?: string ): MatSnackBarRef<TextOnlySnackBar> {\n\t\tconst config: MatSnackBarConfig = {\n\t\t\tduration: duration,\n\t\t\thorizontalPosition: 'center',\n\t\t\tverticalPosition: 'bottom',\n\t\t\tpanelClass: [ `xiri-snackbar-${ type }` ],\n\t\t\tpoliteness: type === 'error' ? 'assertive' : 'polite',\n\t\t};\n\n\t\treturn this.snackbar.open( message, action || undefined, config );\n\t}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, tap } from 'rxjs';\nimport { XiriSnackbarService } from './snackbar.service';\n\nexport class XiriDataServiceConfig {\n\tapi = '/api/';\n}\n\nexport const defaultXiriDataServiceConfig: XiriDataServiceConfig = {\n\tapi: '/api/',\n};\n\n@Injectable( {\n\t providedIn: 'root',\n } )\nexport class XiriDataService {\n\t\n\tprivate http: HttpClient = inject( HttpClient );\n\tprivate config: XiriDataServiceConfig = inject( XiriDataServiceConfig );\n\tprivate snackbar = inject( XiriSnackbarService );\n\n\tpublic get( url: string ): Observable<Object> {\n\t\treturn this.http.get( this.config.api + url ).pipe(\n\t\t\ttap( ( res: any ) => this.snackbar.handleResponse( res ) )\n\t\t);\n\t}\n\n\tpublic post( url: string, data: any ): Observable<any> {\n\t\treturn this.http.post( this.config.api + url, data ).pipe(\n\t\t\ttap( ( res: any ) => this.snackbar.handleResponse( res ) )\n\t\t);\n\t}\n\t\n\tpublic postFile( url: string, data: any ): Observable<any> {\n\t\treturn this.http.post( this.config.api + url, data, { responseType: 'blob' } );\n\t}\n\t\n\tpublic postFileResponse( url: string, data: any ): Observable<any> {\n\t\treturn this.http.post( this.config.api + url, data, { observe: 'response', responseType: 'blob' } );\n\t}\n\t\n\t/** @deprecated Use postFileResponse() + XiriDownloadService.download() instead */\n\tpublic postDownload( url: string, data: any ) {\n\t\tconsole.warn( 'XiriDataService.postDownload() is deprecated. Use postFileResponse() + XiriDownloadService.download() instead.' );\n\t\tconst downForm = <any> document.createElement( 'form' );\n\t\tdownForm.target = '_blank';\n\t\tdownForm.method = 'POST';\n\t\tdownForm.action = url;\n\t\t\n\t\tconst input = document.createElement( 'input' );\n\t\tinput.type = 'hidden';\n\t\tinput.name = 'data';\n\t\tinput.setAttribute( 'value', JSON.stringify( data ) );\n\t\tdownForm.appendChild( input );\n\t\t\n\t\tdocument.body.appendChild( downForm );\n\t\tdownForm.submit();\n\t}\n\t\n\tpublic getConfigApi(): string {\n\t\treturn this.config.api;\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tDestroyRef,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tOnInit,\n\toutput,\n\tviewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { debounceTime, distinctUntilChanged, Subject } from \"rxjs\";\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { FormsModule } from '@angular/forms';\n\n@Component( {\n\t selector: 'xiri-search',\n\t templateUrl: './search.component.html',\n\t styleUrls: [ './search.component.scss' ],\n\t host: {\n\t\t '(document:keydown.escape)': 'onKeydownHandler()'\n\t },\n\t imports: [\n\t\t FormsModule,\n\t\t CdkTrapFocus,\n\t\t MatIconButton,\n\t\t MatIcon,\n\t ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriSearchComponent implements OnInit {\n\n\tchanged = output<string>();\n\tplaceholder = input<string>( '' );\n\n\topen = input<boolean>( false );\n\treset = input<number>( -1 );\n\tescape = input<boolean>( true );\n\tfocus = input<number>( -1 );\n\n\tprivate _search = viewChild<ElementRef>( 'search' );\n\tprivate destroyRef = inject( DestroyRef );\n\tprivate filter: Subject<string> = new Subject<string>();\n\t\n\tpublic _text: string = '';\n\tpublic show: boolean = false;\n\t\n\tconstructor() {\n\t\t\n\t\teffect( () => {\n\t\t\tlet num = this.reset();\n\t\t\tif ( num != -1 ) {\n\t\t\t\tthis.show = this.open();\n\t\t\t\tthis._text = '';\n\t\t\t\tthis.filter.next( this._text );\n\t\t\t}\n\t\t} );\n\t\teffect( () => {\n\t\t\tlet num = this.focus();\n\t\t\tif ( num != -1 ) {\n\t\t\t\tthis.show = true;\n\t\t\t\tthis._search()?.nativeElement.focus();\n\t\t\t}\n\t\t} );\n\t\teffect( () => {\n\t\t\tconst value = this.text();\n\t\t\tif ( value ) {\n\t\t\t\tthis._text = value;\n\t\t\t\tthis.show = true;\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tngOnInit(): void {\n\t\tthis.filter.pipe( debounceTime( 200 ), distinctUntilChanged(), takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe( value => {\n\t\t\t\tthis.changed.emit( value );\n\t\t\t} );\n\t\t\n\t\tif ( this.open() )\n\t\t\tthis.show = true;\n\t}\n\t\n\tonKeydownHandler() {\n\t\t\n\t\tif ( this.escape() && this.show ) {\n\t\t\tthis.show = this.open() ? true : !this.show;\n\t\t\tthis._text = '';\n\t\t\tthis.filter.next( this._text );\n\t\t}\n\t}\n\t\n\ttext = input<string>( '' );\n\t\n\tsearchDo() {\n\t\tthis.filter.next( this._text );\n\t}\n\n\tclick(): void {\n\t\tthis.show = this.open() ? true : !this.show;\n\t\tthis._text = '';\n\t\t\n\t\tthis.filter.next( this._text );\n\t}\n\t\n}\n","<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ßen' : 'Suche öffnen'\">\n\t\t<mat-icon>{{ show ? 'close' : 'search' }}</mat-icon>\n\t</button>\n</div>","import {\n\tAfterViewInit,\n\tChangeDetectionStrategy,\n\tComponent,\n\tinject,\n\tInput,\n\tsignal,\n\tviewChild\n} from '@angular/core';\nimport { MatFormFieldControl } from \"@angular/material/form-field\";\nimport { ControlValueAccessor } from \"@angular/forms\";\nimport { BehaviorSubject } from \"rxjs\";\nimport {\n\tMatTree,\n\tMatTreeNestedDataSource,\n\tMatTreeNode, MatTreeNodeDef,\n\tMatTreeNodePadding,\n\tMatTreeNodeToggle\n} from \"@angular/material/tree\";\nimport { SelectionModel } from \"@angular/cdk/collections\";\nimport { XiriDataService } from \"../../services/data.service\";\nimport { XiriSnackbarService } from '../../services/snackbar.service';\nimport { XiriFormField } from \"../field.interface\";\nimport { MatIcon } from '@angular/material/icon';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { XiriSearchComponent } from '../../search/search.component';\nimport { XiriFieldMain } from \"../helper/fieldmain\";\n\n\nclass XiriTreeselectTreeNode {\n\tchildren: XiriTreeselectTreeNode[];\n\tid: number;\n\tname: string;\n\thidden: boolean;\n\tstate: number;\n\tparent: XiriTreeselectTreeNode;\n}\n\nlet nextUniqueIdXiriTreeselect = 0;\n\n@Component( {\n\t selector: 'xiri-treeselect',\n\t templateUrl: './treeselect.component.html',\n\t styleUrl: './treeselect.component.scss',\n\t host: {\n\t\t '[id]': 'id',\n\t\t '(focus)': 'focus()',\n\t },\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: MatFormFieldControl,\n\t\t useExisting: XiriTreeselectComponent\n\t } ],\n\t imports: [\n\t\t XiriSearchComponent,\n\t\t MatProgressSpinner,\n\t\t MatTree,\n\t\t MatTreeNode,\n\t\t MatTreeNodeToggle,\n\t\t MatTreeNodePadding,\n\t\t MatIconButton,\n\t\t MatCheckbox,\n\t\t MatIcon,\n\t\t MatTreeNodeDef,\n\t ]\n } )\nexport class XiriTreeselectComponent extends XiriFieldMain implements ControlValueAccessor,\n MatFormFieldControl<number[] | undefined>,\n AfterViewInit {\n\t\n\tprivate dataService = inject( XiriDataService );\n\tprivate snackbar = inject( XiriSnackbarService );\n\t\n\tprotected _uid = `xiri-treeselect-${ nextUniqueIdXiriTreeselect++ }`;\n\t\n\tpublic loading = signal<boolean>( true );\n\tprivate _field: XiriFormField;\n\t\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis._id = this._uid;\n\n\t\tif ( this.ngControl != null )\n\t\t\tthis.ngControl.valueAccessor = this;\n\n\t\tthis.dataSource = new MatTreeNestedDataSource();\n\t\tthis.dataSource.data = [];\n\t}\n\t\n\tpublic ngAfterViewInit(): void {\n\t\t\n\t\tthis.subs.add( this.dataChange.subscribe( data => {\n\t\t\t\n\t\t\tif ( data === null )\n\t\t\t\treturn;\n\t\t\t\n\t\t\tthis.dataSource.data = data;\n\t\t\t// this.tree().expandAll();\n\t\t\t\n\t\t\tthis._input.forEach( x => {\n\t\t\t\tthis.dataSource.data.forEach( d => {\n\t\t\t\t\tconst node = this.findNodeById( x, d );\n\t\t\t\t\tif ( node )\n\t\t\t\t\t\tthis.treeItemSelectionToggle( node );\n\t\t\t\t} );\n\t\t\t} );\n\t\t\t\n\t\t\tthis.loading.set( false );\n\t\t} ) );\n\t}\n\t\n\t@Input()\n\tset field( value: XiriFormField ) {\n\t\t\n\t\tthis._field = value;\n\t\t\n\t\tthis.required = !!value.required;\n\t\tthis.disabled = !!value.disabled;\n\t\t\n\t\tif ( value.url ) {\n\t\t\tthis.dataService.get( value.url ).subscribe(\n\t\t\t\t{\n\t\t\t\t\tnext: ( data: any ) => {\n\t\t\t\t\t\tlet groups: any[];\n\t\t\t\t\t\tif ( data.data === undefined || data.data === null || data.data.length === 0 )\n\t\t\t\t\t\t\tgroups = [];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tgroups = [ data.data ];\n\t\t\t\t\t\tthis.buildTree( groups, null );\n\t\t\t\t\t\tthis.dataChange.next( groups );\n\t\t\t\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t\t\t\t},\n\t\t\t\t\terror: ( err ) => {\n\t\t\t\t\t\tconsole.log( 'error database-tree', err );\n\t\t\t\t\t\tthis.snackbar.error( 'Unknown Error! Please try again later' );\n\t\t\t\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t} else {\n\t\t\tlet groups = value.list;\n\t\t\tif ( !groups || groups.length === 0 )\n\t\t\t\tgroups = [];\n\t\t\t\n\t\t\tthis.buildTree( groups, null );\n\t\t\tthis.dataChange.next( <any> groups );\n\t\t}\n\t\t\n\t\tthis.stateChanges.next();\n\t}\n\t\n\tget field(): XiriFormField {\n\t\treturn this._field;\n\t}\n\t\n\tprivate buildTree( input: any, parent: XiriTreeselectTreeNode ) {\n\t\tfor ( let i = 0; i != input.length; i++ ) {\n\t\t\tinput[ i ].parent = parent;\n\t\t\tinput[ i ].state = 0;\n\t\t\tif ( input[ i ].children ) {\n\t\t\t\tthis.buildTree( input[ i ].children, input[ i ] );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t@Input()\n\tget value(): number[] | undefined {\n\t\t\n\t\tconst result = this.checklistSelection.selected.filter( x => x.state === 1 && !x.children ).map( x => x.id );\n\t\tif ( this.required && result.length == 0 )\n\t\t\treturn this._disabled() ? null : undefined;\n\t\t\n\t\treturn result;\n\t}\n\t\n\tprivate _input: number[] = [];\n\t\n\tset value( input: number[] | undefined ) {\n\t\t\n\t\tif ( input === null || input === undefined )\n\t\t\tinput = [];\n\t\t\n\t\tthis._input = input;\n\t\tthis.startChangeValue();\n\t}\n\t\n\tprivate runCheck(): void {\n\t\t\n\t\tif ( !this.ngControl )\n\t\t\treturn;\n\t\t\n\t\tconst val = this.value;\n\t\tthis.runChangeValue( val );\n\t}\n\t\n\tprotected startChangeValue(): void {\n\t\tthis.runChangeValue( this.value );\n\t}\n\t\n\tget empty() {\n\t\treturn this.value === undefined || this.value.length === 0;\n\t}\n\t\n\twriteValue( value: number[] ): void {\n\t\tthis.value = value;\n\t}\n\t\n\t/**\n\t * Tree\n\t */\n\tpublic tree = viewChild.required<MatTree<XiriTreeselectTreeNode>>( MatTree );\n\tprivate dataChange = new BehaviorSubject<XiriTreeselectTreeNode[]>( null );\n\tpublic dataSource: MatTreeNestedDataSource<XiriTreeselectTreeNode>;\n\tprivate checklistSelection = new SelectionModel<XiriTreeselectTreeNode>( true /* multiple */ );\n\t\n\tgetChildren = ( node: XiriTreeselectTreeNode ): XiriTreeselectTreeNode[] => node.children;\n\t\n\thasChild = ( _: number, node: XiriTreeselectTreeNode ) => !!node.children && node.children.length != 0;\n\t\n\ttreeItemSelectionToggle( node: XiriTreeselectTreeNode ): void {\n\t\t\n\t\tthis.checklistSelection.toggle( node );\n\t\tconst state = this.checklistSelection.isSelected( node );\n\t\t\n\t\tnode.state = state ? 1 : 0;\n\t\tif ( node.children ) {\n\t\t\tfor ( let i = 0; i != node.children.length; i++ ) {\n\t\t\t\tthis.treeItemSelectionChildren( node.children[ i ], state );\n\t\t\t}\n\t\t}\n\t\t\n\t\tif ( node.parent )\n\t\t\tthis.treeItemSelectionParent( node.parent );\n\t\t\n\t\tthis.runCheck();\n\t}\n\t\n\tprivate treeItemSelectionParent( node: XiriTreeselectTreeNode ): void {\n\t\t\n\t\tconst result0 = node.children.filter( child => child.state === 0 );\n\t\tconst result1 = node.children.filter( child => child.state === 1 );\n\t\t\n\t\tif ( result1.length === node.children.length ) {\n\t\t\tthis.checklistSelection.select( node );\n\t\t\tnode.state = 1;\n\t\t} else if ( result0.length === node.children.length ) {\n\t\t\tthis.checklistSelection.deselect( node );\n\t\t\tnode.state = 0;\n\t\t} else {\n\t\t\tthis.checklistSelection.deselect( node );\n\t\t\tnode.state = 2;\n\t\t}\n\t\t\n\t\tif ( node.parent )\n\t\t\tthis.treeItemSelectionParent( node.parent );\n\t}\n\t\n\tprivate treeItemSelectionChildren( node: XiriTreeselectTreeNode, state: boolean ): void {\n\t\t\n\t\tif ( state )\n\t\t\tthis.checklistSelection.select( node );\n\t\telse\n\t\t\tthis.checklistSelection.deselect( node );\n\t\t\n\t\tnode.state = state ? 1 : 0;\n\t\t\n\t\tif ( node.children ) {\n\t\t\tfor ( let i = 0; i != node.children.length; i++ ) {\n\t\t\t\tthis.treeItemSelectionChildren( node.children[ i ], state );\n\t\t\t}\n\t\t}\n\t}\n\t\n\tpublic searchDo( value: string ) {\n\t\t\n\t\tif ( value && value.length )\n\t\t\tthis.dataSource.data.forEach( x => this.filterByName( x, value.toLowerCase(), false ) );\n\t\telse\n\t\t\tthis.dataSource.data.forEach( x => this.filterClear( x ) );\n\t}\n\t\n\tprivate filterByName( node: XiriTreeselectTreeNode, search: string, value: boolean ): boolean {\n\t\t\n\t\tif ( value ) {\n\t\t\tnode.hidden = false;\n\t\t\tif ( node.children ) {\n\t\t\t\tnode.children.forEach( x => this.filterByName( x, search, true ) );\n\t\t\t\t\n\t\t\t\tif ( search.length > 3 )\n\t\t\t\t\tthis.tree().expand( node );\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\tif ( node.name.toLowerCase().indexOf( search ) === -1 ) {\n\t\t\tnode.hidden = true;\n\t\t\tif ( node.children ) {\n\t\t\t\tconst ret = node.children.filter( x => this.filterByName( x, search, false ) );\n\t\t\t\tif ( ret.length ) {\n\t\t\t\t\tthis.tree().expand( node );\n\t\t\t\t\tnode.hidden = false\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn !node.hidden;\n\t\t} else {\n\t\t\tnode.hidden = false;\n\t\t\tif ( node.children ) {\n\t\t\t\tnode.children.forEach( x => this.filterByName( x, search, true ) );\n\t\t\t\t\n\t\t\t\tif ( search.length > 3 )\n\t\t\t\t\tthis.tree().expand( node );\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tprivate filterClear( node: XiriTreeselectTreeNode ): void {\n\t\t\n\t\tnode.hidden = false;\n\t\tif ( node.children ) {\n\t\t\tnode.children.forEach( x => this.filterClear( x ) );\n\t\t}\n\t}\n\t\n\tprivate findNodeById( id: any, node: XiriTreeselectTreeNode ): XiriTreeselectTreeNode {\n\t\t\n\t\tif ( node.id == id )\n\t\t\treturn node;\n\t\t\n\t\tif ( node.children ) {\n\t\t\tfor ( let i = 0; i != node.children.length; i++ ) {\n\t\t\t\tconst result = this.findNodeById( id, node.children[ i ] );\n\t\t\t\tif ( result )\n\t\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn null;\n\t}\n}\n","<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>","import { ChangeDetectorRef, Directive, effect, inject, input } from \"@angular/core\";\nimport { UntypedFormControl } from \"@angular/forms\";\nimport {\n\tcatchError,\n\tdebounceTime,\n\tof,\n\tReplaySubject,\n\tSubject,\n\tswitchMap,\n\ttap\n} from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { XiriFormFieldSelectOption } from \"../field.interface\";\nimport { XiriDataService } from \"../../services/data.service\";\n\nexport type XiriSelectPredicate = <T>( filter: string, element: XiriFormFieldSelectOption ) => boolean;\nexport const DEFAULT_PREDICATE: XiriSelectPredicate = <T>( filter: string,\n el: XiriFormFieldSelectOption ): boolean => el.name.toLowerCase()\n\t .indexOf(\n\t\t filter ) >\n -1;\n\nexport type XiriSelectCompare = <T>( a: XiriFormFieldSelectOption, b: XiriFormFieldSelectOption ) => boolean;\nexport const DEFAULT_COMPARE: XiriSelectCompare = <T>( a: XiriFormFieldSelectOption,\n b: XiriFormFieldSelectOption ) => a && b && a.id === b.id;\n\n@Directive( {\n\t selector: \"[xiriSelect]\",\n\t exportAs: \"xiriSelect\"\n } )\nexport class XiriSelectDirective<T> {\n\tprivate dataService = inject( XiriDataService );\n\tprivate cdr = inject( ChangeDetectorRef );\n\t\n\tget formControl() {\n\t\treturn this._filterFormControl;\n\t}\n\t\n\tget filter() {\n\t\treturn this._filteredValuesSubject.asObservable();\n\t}\n\t\n\t/** control for the MatSelect filter keyword multi-selection */\n\tprivate _filterFormControl: UntypedFormControl = new UntypedFormControl();\n\t\n\t/** list of _allValues filtered by search keyword */\n\tprivate _filteredValuesSubject: ReplaySubject<XiriFormFieldSelectOption[]> = new ReplaySubject<XiriFormFieldSelectOption[]>(\n\t\t1\n\t);\n\t\n\t/** indicate search operation is in progress */\n\tpublic searching = false;\n\t\n\t// @ViewChild('multiSelect', { static: true }) multiSelect: MatSelect;\n\t\n\t/** Subject that emits when the component has been destroyed. */\n\tprotected _onDestroy = new Subject<void>();\n\t\n\t\n\tsearchPredicate = input<XiriSelectPredicate>(DEFAULT_PREDICATE, { alias: 'predicate' });\n\n\tcompareWith = input<XiriSelectCompare>(DEFAULT_COMPARE, { alias: 'compare' });\n\t\n\tserverSideSearch = input<boolean>(false, { alias: 'serverSideSearch' });\n\t\n\tserverUrl = input<string>('', { alias: 'serverUrl' });\n\t\n\tserverParams = input<any>({}, { alias: 'serverParams' });\n\t\n\t/** list of _allValues */\n\tprivate _allValues: XiriFormFieldSelectOption[] = [] as XiriFormFieldSelectOption[];\n\tallValues = input<XiriFormFieldSelectOption[]>([], { alias: 'values' });\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tlet value = this.allValues();\n\t\t\tif ( value === undefined )\n\t\t\t\tvalue = [];\n\n\t\t\tthis._allValues = value;\n\t\t\tthis._filteredValuesSubject.next( this._allValues.slice() );\n\t\t});\n\t}\n\n\tngOnInit() {\n\t\tif ( this.serverSideSearch() ) {\n\t\t\tthis._filterFormControl.valueChanges\n\t\t\t\t.pipe(\n\t\t\t\t\tfilter( search => !!search ),\n\t\t\t\t\ttap( () => this.searching = true ),\n\t\t\t\t\tdebounceTime( 200 ),\n\t\t\t\t\tswitchMap( ( search: string ) => {\n\t\t\t\t\t\treturn this.dataService.post( this.serverUrl(),\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t ...this.serverParams(),\n\t\t\t\t\t\t\t search: search\n\t\t\t\t\t\t } )\n\t\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\t\tcatchError( ( err ) => {\n\t\t\t\t\t\t\t\t\tconsole.log( 'catch 1', err );\n\t\t\t\t\t\t\t\t\treturn of( [] );\n\t\t\t\t\t\t\t\t} ) )\n\t\t\t\t\t} ),\n\t\t\t\t\ttap( ( filteredList ) => {\n\t\t\t\t\t\tthis._filteredValuesSubject.next( this._allValues.slice().concat( filteredList ) )\n\t\t\t\t\t} ),\n\t\t\t\t\ttap( () => {\n\t\t\t\t\t\tthis.searching = false;\n\t\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t\t} ),\n\t\t\t\t\ttakeUntil( this._onDestroy ),\n\t\t\t\t).subscribe();\n\t\t} else {\n\t\t\tthis._filterFormControl.valueChanges\n\t\t\t\t.pipe( takeUntil( this._onDestroy ) )\n\t\t\t\t.subscribe( () => {\n\t\t\t\t\tthis.searching = true;\n\t\t\t\t\tthis.applyFilter();\n\t\t\t\t\tthis.searching = false;\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t} );\n\t\t}\n\n\t}\n\t\n\tngOnDestroy() {\n\t\tthis._onDestroy.next();\n\t\tthis._onDestroy.complete();\n\t}\n\t\n\tprivate applyFilter() {\n\t\tif ( !this._allValues ) {\n\t\t\treturn;\n\t\t}\n\t\t// get the search keyword\n\t\tlet search = this._filterFormControl.value;\n\t\tif ( !search ) {\n\t\t\tthis._filteredValuesSubject.next( this._allValues.slice() );\n\t\t\treturn;\n\t\t} else {\n\t\t\tsearch = search.toLowerCase();\n\t\t}\n\t\t// filter the _allValues\n\t\tthis._filteredValuesSubject.next(\n\t\t\tthis._allValues.filter( el => this.searchPredicate()<T>( search, el ) )\n\t\t);\n\t}\n\t\n\t// [showToggleAllCheckbox]=\"field.multiple\" (toggleAll)=\"xiriSelect.toggleSelectAll($event)\"\n\t/**\n\ttoggleSelectAll(selectAllValue: boolean) {\n\t\tthis._filteredValuesSubject.pipe(take(1), takeUntil(this._onDestroy))\n\t\t\t.subscribe(val => {\n\t\t\t\tif (selectAllValue) {\n\t\t\t\t\tthis._filterFormControl.patchValue(val);\n\t\t\t\t} else {\n\t\t\t\t\tthis._filterFormControl.patchValue([]);\n\t\t\t\t}\n\t\t\t});\n\t}\n\t **/\n}\n","import { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tforwardRef,\n\tinput,\n\tsignal,\n\tviewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete';\nimport { MatChipGrid, MatChipInput, MatChipInputEvent, MatChipRemove, MatChipRow } from '@angular/material/chips';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { XiriFormField, XiriFormFieldSelectOption } from '../field.interface';\nimport { MatOption } from '@angular/material/core';\n\n@Component( {\n\t selector: 'xiri-chips',\n\t templateUrl: './chips.component.html',\n\t styleUrl: './chips.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t providers: [ {\n\t\t provide: NG_VALUE_ACCESSOR,\n\t\t useExisting: forwardRef( () => XiriChipsComponent ),\n\t\t multi: true\n\t } ],\n\t imports: [\n\t\t MatFormField,\n\t\t MatLabel,\n\t\t MatChipGrid,\n\t\t MatChipRow,\n\t\t MatChipRemove,\n\t\t MatChipInput,\n\t\t MatAutocompleteTrigger,\n\t\t MatAutocomplete,\n\t\t MatOption,\n\t\t MatIcon\n\t ]\n } )\nexport class XiriChipsComponent implements ControlValueAccessor {\n\n\tfield = input.required<XiriFormField>();\n\n\tchips = signal<string[]>( [] );\n\tfilteredOptions = signal<XiriFormFieldSelectOption[]>( [] );\n\n\treadonly separatorKeyCodes = [ ENTER, COMMA ] as const;\n\n\tchipInput = viewChild<ElementRef<HTMLInputElement>>( 'chipInput' );\n\n\tprivate onChange: ( value: string[] ) => void = () => {};\n\tprivate onTouched: () => void = () => {};\n\n\twriteValue( value: string[] ): void {\n\t\tthis.chips.set( value || [] );\n\t}\n\n\tregisterOnChange( fn: ( value: string[] ) => void ): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched( fn: () => void ): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tadd( event: MatChipInputEvent ): void {\n\t\tconst value = ( event.value || '' ).trim();\n\t\tif ( !value ) return;\n\n\t\tconst current = [ ...this.chips() ];\n\t\tif ( !current.includes( value ) ) {\n\t\t\tcurrent.push( value );\n\t\t\tthis.chips.set( current );\n\t\t\tthis.onChange( current );\n\t\t}\n\t\tevent.chipInput.clear();\n\t}\n\n\tremove( chip: string ): void {\n\t\tconst current = this.chips().filter( c => c !== chip );\n\t\tthis.chips.set( current );\n\t\tthis.onChange( current );\n\t}\n\n\tselected( event: MatAutocompleteSelectedEvent ): void {\n\t\tconst value = event.option.viewValue;\n\t\tconst current = [ ...this.chips() ];\n\t\tif ( !current.includes( value ) ) {\n\t\t\tcurrent.push( value );\n\t\t\tthis.chips.set( current );\n\t\t\tthis.onChange( current );\n\t\t}\n\t\tif ( this.chipInput() ) {\n\t\t\tthis.chipInput().nativeElement.value = '';\n\t\t}\n\t}\n\n\tfilterOptions( value: string ): void {\n\t\tconst list = this.field().list || [];\n\t\tif ( !value ) {\n\t\t\tthis.filteredOptions.set( list );\n\t\t\treturn;\n\t\t}\n\t\tconst filterValue = value.toLowerCase();\n\t\tthis.filteredOptions.set(\n\t\t\tlist.filter( option => option.name.toLowerCase().includes( filterValue ) )\n\t\t);\n\t}\n\n\tonInputChange( event: Event ): void {\n\t\tconst input = event.target as HTMLInputElement;\n\t\tthis.filterOptions( input.value );\n\t\tthis.onTouched();\n\t}\n\n\tonFocus(): void {\n\t\tthis.filterOptions( '' );\n\t}\n\n\tchipColor( chip: string ): string {\n\t\tconst option = this.field().list?.find( o => o.name === chip );\n\t\treturn option?.color ? 'chip-' + option.color : '';\n\t}\n}\n","<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{{ chip }}\n\t\t\t\t<button matChipRemove>\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.name\">{{ option.name }}</mat-option>\n\t\t}\n\t</mat-autocomplete>\n</mat-form-field>\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tDestroyRef,\n\teffect,\n\tinject,\n\tinput,\n\tOnInit,\n\toutput,\n\tsignal,\n\tuntracked\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n\tAbstractControl,\n\tFormsModule,\n\tReactiveFormsModule,\n\tUntypedFormBuilder,\n\tUntypedFormGroup,\n\tValidationErrors,\n\tValidatorFn,\n\tValidators\n} from '@angular/forms';\nimport { XiriFormField, XiriFormFieldCondition } from './field.interface';\nimport { Observable } from \"rxjs\";\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { XiriFileComponent } from './file/file.component';\nimport { XiriTimelimitComponent } from './timelimit/timelimit.component';\nimport { XiriVolumeComponent } from './volume/volume.component';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { XiriDateTimeRangeComponent } from './datetimerange/datetimerange.component';\nimport { XiriDateRangeComponent } from './daterange/daterange.component';\nimport { XiriDateComponent } from './date/date.component';\nimport { XiriYearMonthComponent } from './yearmonth/yearmonth.component';\nimport { XiriTreeselectComponent } from './treeselect/treeselect.component';\nimport { XiriSelectDirective } from './select/select.directive';\nimport { NgxMatSelectSearchModule } from 'ngx-mat-select-search';\nimport { MatOption } from '@angular/material/core';\nimport { MatSelect } from '@angular/material/select';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { AsyncPipe } from '@angular/common';\nimport { MatError, MatFormField, MatHint, MatLabel, MatPrefix, MatSuffix } from '@angular/material/form-field';\nimport { SafehtmlPipe } from \"../pipes/safehtml.pipe\";\nimport { XiriChipsComponent } from './chips/chips.component';\n\nexport type XiriFormFieldDisplay = 'full' | 'line' | 'small';\n\n\n@Component( {\n\t selector: 'xiri-form-fields',\n\t templateUrl: './form-fields.component.html',\n\t styleUrl: './form-fields.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [\n\t\t FormsModule,\n\t\t ReactiveFormsModule,\n\t\t MatFormField,\n\t\t MatLabel,\n\t\t MatInput,\n\t\t MatPrefix,\n\t\t MatSuffix,\n\t\t MatIcon,\n\t\t MatHint,\n\t\t MatError,\n\t\t MatIconButton,\n\t\t MatSelect,\n\t\t MatOption,\n\t\t NgxMatSelectSearchModule,\n\t\t XiriSelectDirective,\n\t\t XiriTreeselectComponent,\n\t\t XiriDateComponent,\n\t\t XiriYearMonthComponent,\n\t\t XiriDateRangeComponent,\n\t\t XiriDateTimeRangeComponent,\n\t\t MatCheckbox,\n\t\t XiriVolumeComponent,\n\t\t XiriTimelimitComponent,\n\t\t XiriFileComponent,\n\t\t MatProgressSpinner,\n\t\t AsyncPipe,\n\t\t SafehtmlPipe,\n\t\t XiriChipsComponent,\n\t ]\n } )\nexport class XiriFormFieldsComponent implements OnInit {\n\t\n\tprivate formBuilder = inject( UntypedFormBuilder );\n\tprivate destroyRef = inject( DestroyRef );\n\t\n\tform = input<XiriFormField[] | null>( null );\n\tdisplay = input<XiriFormFieldDisplay>( 'full' );\n\tdisabled = input<boolean>( false );\n\tformChange = output<any>();\n\tcheck = input<Observable<void>>( null );\n\t\n\t// fields: XiriFormField[] = [];\n\tformGroup: UntypedFormGroup;\n\tprivate lastValue: any = null;\n\tprivate _fields: XiriFormField[] | null = null;\n\tcollapsedSections = signal<Set<string>>( new Set() );\n\tprivate _fieldsLoaded: boolean = false;\n\tprivate _initialEmitDone: boolean = false;\n\t\n\tconstructor() {\n\t\t\n\t\tthis.formGroup = this.formBuilder.group( {} );\n\t\t\n\t\teffect( () => {\n\t\t\tconst isDisabled = this.disabled();\n\t\t\tif ( isDisabled ) {\n\t\t\t\tthis.formGroup.disable( { emitEvent: false } );\n\t\t\t} else {\n\t\t\t\tthis.formGroup.enable( { emitEvent: false } );\n\t\t\t\t// Felder die vom Backend als disabled kamen, wieder deaktivieren\n\t\t\t\tif ( this._fields ) {\n\t\t\t\t\tfor ( const field of this._fields ) {\n\t\t\t\t\t\tif ( field.disabled ) {\n\t\t\t\t\t\t\tthis.formGroup.get( field.id )?.disable( { emitEvent: false } );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t\t\n\t\t// Track form input changes and emit after controls are created\n\t\teffect( () => {\n\t\t\tconst formInput = this.form();\n\t\t\tif ( formInput !== null ) {\n\t\t\t\t// Force evaluation of computed to create controls\n\t\t\t\tthis.fields();\n\t\t\t\t// Schedule emission for next microtask to ensure view is ready\n\t\t\t\tif ( this._fieldsLoaded && !this._initialEmitDone ) {\n\t\t\t\t\tthis._initialEmitDone = true;\n\t\t\t\t\t// Use queueMicrotask to emit after current change detection cycle\n\t\t\t\t\tqueueMicrotask( () => {\n\t\t\t\t\t\tthis.formChange.emit( this.formGroup );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tngOnInit(): void {\n\t\t\n\t\tthis.check()?.pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe( () => {\n\t\t\tthis.validateAllFormFields();\n\t\t} );\n\t\t\n\t\tthis.formGroup.valueChanges.pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe( () => {\n\t\t\tif ( this._fieldsLoaded ) {\n\t\t\t\tconst currentValue = JSON.stringify( this.formGroup.value );\n\t\t\t\tif ( currentValue === this.lastValue )\n\t\t\t\t\treturn;\n\t\t\t\tthis.lastValue = currentValue;\n\t\t\t\tthis.formChange.emit( this.formGroup );\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tfields = computed( () => {\n\t\t\n\t\tthis._fieldsLoaded = false;\n\t\tif ( this._fields !== null ) {\n\t\t\tfor ( let i = 0; i != this._fields.length; i++ ) {\n\t\t\t\tthis.formGroup.removeControl( this._fields[ i ].id );\n\t\t\t}\n\t\t\tthis._fields = null;\n\t\t}\n\t\t\n\t\tlet fields = this.form();\n\t\tif ( fields == null ) {\n\t\t\treturn null;\n\t\t}\n\t\t\n\t\tthis._fields = fields;\n\n\t\tconst initialCollapsed = new Set<string>();\n\t\tfor ( const f of fields ) {\n\t\t\tif ( f.type === 'header' && f.collapsible && f.collapsed )\n\t\t\t\tinitialCollapsed.add( f.id );\n\t\t}\n\t\tuntracked( () => this.collapsedSections.set( initialCollapsed ) );\n\n\t\tthis.createControl();\n\t\t\n\t\tthis.lastValue = JSON.stringify( this.formGroup.value );\n\t\tthis._fieldsLoaded = true;\n\t\treturn this._fields;\n\t} );\n\t\n\tprivate createControl(): void {\n\t\t\n\t\tfor ( let i = 0; i != this._fields.length; i++ ) {\n\t\t\tconst field = this._fields[ i ];\n\t\t\t\n\t\t\tif ( field.formtype )\n\t\t\t\tfield.type = field.formtype;\n\t\t\tif ( !field.subtype )\n\t\t\t\tfield.subtype = field.type;\n\t\t\tif ( !field.class )\n\t\t\t\tfield.class = 'xcol';\n\t\t\t\n\t\t\tswitch ( field.type ) {\n\t\t\t\tcase 'email':\n\t\t\t\t\tfield.type = 'text';\n\t\t\t\t\tfield.subtype = 'email';\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'password':\n\t\t\t\t\tfield.subtype = 'password';\n\t\t\t\t\tfield.pwdhide = true;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'objectlist':\n\t\t\t\t\tfield.multiple = true;\n\t\t\t\t\tif ( field.subtype != 'objectlist' )\n\t\t\t\t\t\tfield.type = field.subtype;\n\t\t\t\t\telse {\n\t\t\t\t\t\tif ( field.tree === undefined )\n\t\t\t\t\t\t\tfield.tree = true;\n\t\t\t\t\t\tif ( field.required === undefined )\n\t\t\t\t\t\t\tfield.required = true;\n\t\t\t\t\t\tfield.type = 'treeselect';\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'volume':\n\t\t\t\t\tfield.required = true;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'treeselect':\n\t\t\t\t\tfield.tree = true;\n\t\t\t\t\tif ( field.required === undefined )\n\t\t\t\t\t\tfield.required = true;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'multiselect':\n\t\t\t\t\tfield.tree = false;\n\t\t\t\t\tfield.type = 'treeselect';\n\t\t\t\t\t\n\t\t\t\t\tif ( field.required === undefined )\n\t\t\t\t\t\tfield.required = true;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'select':\n\t\t\t\tcase 'object':\n\t\t\t\tcase 'model':\n\t\t\t\t\tif ( field.type == 'object' || field.type == 'model' ) {\n\t\t\t\t\t\tfield.type = 'select';\n\t\t\t\t\t\tfield.subtype = 'model';\n\t\t\t\t\t\tfield.multiple = false;\n\t\t\t\t\t}\n\t\t\t\t\tif ( field.subtype == 'object' )\n\t\t\t\t\t\tfield.subtype = 'model';\n\t\t\t\t\t\n\t\t\t\t\tif ( field.list === undefined && field.array !== undefined ) {\n\t\t\t\t\t\tfield.list = [];\n\t\t\t\t\t\tfield.array.forEach( val => {\n\t\t\t\t\t\t\tfield.list.push( {\n\t\t\t\t\t\t\t\t id: val,\n\t\t\t\t\t\t\t\t name: val,\n\t\t\t\t\t\t\t } )\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif ( field.subtype === 'model' ) {\n\t\t\t\t\t\tif ( field.value === undefined && field.list.length != 0 )\n\t\t\t\t\t\t\tfield.value = field.list[ 0 ].id;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( field.value === undefined || field.value === null )\n\t\t\t\t\t\t\tfield.value = [];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif ( field.required === undefined )\n\t\t\t\t\t\tfield.required = true;\n\t\t\t\t\t\n\t\t\t\t\tfield.serverSideSearch = !!field.url;\n\t\t\t\t\t\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'date':\n\t\t\t\tcase 'datetime':\n\t\t\t\t\tfield.type = 'date';\n\t\t\t\t\tif ( field.required === undefined )\n\t\t\t\t\t\tfield.required = true;\n\t\t\t\t\tif ( field.subtype == 'datetime' )\n\t\t\t\t\t\tfield.class += ' datetime';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'yearmonth':\n\t\t\t\t\tif ( field.required === undefined )\n\t\t\t\t\t\tfield.required = true;\n\t\t\t\t\tfield.class += ' yearmonth';\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'daterange':\n\t\t\t\tcase 'datetimerange':\n\t\t\t\t\tif ( field.required === undefined )\n\t\t\t\t\t\tfield.required = true;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'bool':\n\t\t\t\t\tif ( field.name === undefined && field.placeholder )\n\t\t\t\t\t\tfield.name = field.placeholder;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'question':\n\t\t\t\t\tif ( ( <any> field ).question )\n\t\t\t\t\t\tfield.value = ( <any> field ).question;\n\t\t\t\t\t\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\t// if ( field.hint || (field.type == 'textarea' && field.max) )\n\t\t\t//\tfield.class += ' hashint';\n\t\t\t\n\t\t\tif ( field.value === undefined ) {\n\t\t\t\tif ( field.type == 'text' || field.type == 'textarea' )\n\t\t\t\t\tfield.value = '';\n\t\t\t\telse if ( field.type == 'bool' )\n\t\t\t\t\tfield.value = false;\n\t\t\t}\n\t\t\t\n\t\t\tfield.required = !!field.required;\n\t\t\tfield.disabled = !!field.disabled;\n\t\t\t\n\t\t\tconst control = this.formBuilder.control(\n\t\t\t\tfield.value,\n\t\t\t\tthis.bindValidations( field )\n\t\t\t);\n\t\t\t\n\t\t\tfield.control = control;\n\t\t\tthis.formGroup.addControl( field.id, control );\n\t\t}\n\t}\n\t\n\tprivate bindValidations( field: XiriFormField ) {\n\t\t\n\t\tconst validList = [];\n\t\t\n\t\tif ( field.validations === undefined ) {\n\t\t\t\n\t\t\tfield.validations = [];\n\t\t\t\n\t\t\tif ( field.min !== undefined ) {\n\t\t\t\tif ( field.type == 'number' || field.type == 'date' )\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'min',\n\t\t\t\t\t\t validator: Validators.min( field.min ),\n\t\t\t\t\t\t message: 'Minimum not reached'\n\t\t\t\t\t } );\n\t\t\t\telse if ( field.type == 'daterange' || field.type == 'datetimerange' )\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'min',\n\t\t\t\t\t\t validator: validatorDateRangeStart( field.min ),\n\t\t\t\t\t\t message: 'Check Minimum Date'\n\t\t\t\t\t } );\n\t\t\t\telse if ( field.type == 'multiselect' || field.type == 'treeselect' )\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'min',\n\t\t\t\t\t\t validator: validatorArrayMin( field.min ),\n\t\t\t\t\t\t message: 'Minimum not reached'\n\t\t\t\t\t } );\n\t\t\t\telse\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'min',\n\t\t\t\t\t\t validator: Validators.minLength( field.min ),\n\t\t\t\t\t\t message: 'Check Format'\n\t\t\t\t\t } );\n\t\t\t}\n\t\t\tif ( field.max !== undefined ) {\n\t\t\t\tif ( field.type == 'number' || field.type == 'date' )\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'max',\n\t\t\t\t\t\t validator: Validators.max( field.max ),\n\t\t\t\t\t\t message: 'Maximum reached'\n\t\t\t\t\t } );\n\t\t\t\telse if ( field.type == 'daterange' || field.type == 'datetimerange' )\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'max',\n\t\t\t\t\t\t validator: validatorDateRangeEnd( field.max ),\n\t\t\t\t\t\t message: 'Max Date reached'\n\t\t\t\t\t } );\n\t\t\t\telse if ( field.type == 'multiselect' || field.type == 'treeselect' )\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'max',\n\t\t\t\t\t\t validator: validatorArrayMax( field.max ),\n\t\t\t\t\t\t message: 'Maximum reached'\n\t\t\t\t\t } );\n\t\t\t\telse\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'max',\n\t\t\t\t\t\t validator: Validators.maxLength( field.max ),\n\t\t\t\t\t\t message: 'Maximum reached'\n\t\t\t\t\t } );\n\t\t\t}\n\t\t\t\n\t\t\tif ( field.pattern !== undefined ) {\n\t\t\t\tfield.validations.push( {\n\t\t\t\t\t id: 'pattern',\n\t\t\t\t\t validator: Validators.pattern( field.pattern ),\n\t\t\t\t\t message: 'Check Format'\n\t\t\t\t } );\n\t\t\t} else {\n\t\t\t\tif ( field.type == 'text' && field.subtype == 'email' ) {\n\t\t\t\t\tfield.validations.push( {\n\t\t\t\t\t\t id: 'email',\n\t\t\t\t\t\t validator: Validators.email,\n\t\t\t\t\t\t message: 'Check Format'\n\t\t\t\t\t } );\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif ( field.required == true ) {\n\t\t\t\tfield.validations.push( {\n\t\t\t\t\t id: 'required',\n\t\t\t\t\t validator: Validators.required,\n\t\t\t\t\t message: 'Required',\n\t\t\t\t } );\n\t\t\t} else {\n\t\t\t\tfield.validations.push( {\n\t\t\t\t\t id: 'undefined',\n\t\t\t\t\t validator: validatorUndefined(),\n\t\t\t\t\t message: 'Check Format',\n\t\t\t\t } );\n\t\t\t}\n\t\t}\n\t\t\n\t\tfield.validations.forEach( valid => {\n\t\t\tvalidList.push( valid.validator );\n\t\t} );\n\t\t\n\t\treturn validList.length ? Validators.compose( validList ) : null;\n\t}\n\t\n\tprivate validateAllFormFields() {\n\n\t\tthis.formGroup.markAsDirty();\n\t\tthis.formGroup.markAllAsTouched();\n\t\tthis.formGroup.updateValueAndValidity();\n\t}\n\t\n\tisFieldVisible( field: XiriFormField ): boolean {\n\t\t\n\t\t// Check if field is inside a collapsed section\n\t\tif ( this.isInCollapsedSection( field ) )\n\t\t\treturn false;\n\t\t\n\t\tif ( !field.showWhen )\n\t\t\treturn true;\n\t\t\n\t\tconst conditions: XiriFormFieldCondition[] = Array.isArray( field.showWhen )\n\t\t ? field.showWhen\n\t\t : [ field.showWhen ];\n\t\t\n\t\treturn conditions.every( condition => this.evaluateCondition( condition ) );\n\t}\n\t\n\ttoggleSection( header: XiriFormField ): void {\n\t\tthis.collapsedSections.update( set => {\n\t\t\tconst next = new Set( set );\n\t\t\tif ( next.has( header.id ) )\n\t\t\t\tnext.delete( header.id );\n\t\t\telse\n\t\t\t\tnext.add( header.id );\n\t\t\treturn next;\n\t\t} );\n\t}\n\t\n\tisSectionCollapsed( headerId: string ): boolean {\n\t\treturn this.collapsedSections().has( headerId );\n\t}\n\n\tprivate isInCollapsedSection( field: XiriFormField ): boolean {\n\t\tconst fields = this._fields;\n\t\tif ( !fields ) return false;\n\n\t\tconst idx = fields.indexOf( field );\n\t\tif ( idx <= 0 ) return false;\n\n\t\t// Walk backwards to find the nearest header or divider\n\t\tfor ( let i = idx - 1; i >= 0; i-- ) {\n\t\t\tconst f = fields[ i ];\n\t\t\tif ( f.type === 'header' ) {\n\t\t\t\treturn f.collapsible && this.collapsedSections().has( f.id );\n\t\t\t}\n\t\t\tif ( f.type === 'divider' ) {\n\t\t\t\treturn false; // Divider breaks the section\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\t\n\tprivate evaluateCondition( condition: XiriFormFieldCondition ): boolean {\n\t\t\n\t\tconst control = this.formGroup.get( condition.field );\n\t\tif ( !control )\n\t\t\treturn false;\n\t\t\n\t\tconst fieldValue = control.value;\n\t\t\n\t\tswitch ( condition.operator ) {\n\t\t\tcase 'equals':\n\t\t\t\treturn fieldValue === condition.value;\n\t\t\tcase 'notEquals':\n\t\t\t\treturn fieldValue !== condition.value;\n\t\t\tcase 'contains':\n\t\t\t\treturn typeof fieldValue === 'string' && fieldValue.includes( condition.value );\n\t\t\tcase 'greaterThan':\n\t\t\t\treturn fieldValue > condition.value;\n\t\t\tcase 'lessThan':\n\t\t\t\treturn fieldValue < condition.value;\n\t\t\tcase 'in':\n\t\t\t\treturn Array.isArray( condition.value ) && condition.value.includes( fieldValue );\n\t\t\tcase 'notEmpty':\n\t\t\t\treturn fieldValue !== null && fieldValue !== undefined && fieldValue !== '';\n\t\t\tdefault:\n\t\t\t\treturn true;\n\t\t}\n\t}\n}\n\nfunction validatorDateRangeStart( min: number ): ValidatorFn {\n\treturn ( control: AbstractControl ): ValidationErrors | null => {\n\t\tif ( control.value === undefined || control.value === null || control.value.start === null )\n\t\t\treturn null;\n\t\tconst ok = min < control.value.start;\n\t\treturn ok ? null : { min: { value: control.value } };\n\t};\n}\n\nfunction validatorDateRangeEnd( max: number ): ValidatorFn {\n\treturn ( control: AbstractControl ): ValidationErrors | null => {\n\t\tif ( control.value === undefined || control.value === null || control.value.end === null )\n\t\t\treturn null;\n\t\tconst ok = max > control.value.end;\n\t\treturn ok ? null : { max: { value: control.value } };\n\t};\n}\n\nfunction validatorUndefined(): ValidatorFn {\n\treturn ( control: AbstractControl ): ValidationErrors | null => {\n\t\treturn control.value === undefined ? { undefined: { value: control.value } } : null;\n\t};\n}\n\nfunction validatorArrayMin( min: number ): ValidatorFn {\n\treturn ( control: AbstractControl ): ValidationErrors | null => {\n\t\tif ( control.value === null || control.value === undefined )\n\t\t\treturn null;\n\t\tconst ok = control.value.length >= min;\n\t\treturn ok ? null : { min: { value: control.value } };\n\t};\n}\n\nfunction validatorArrayMax( max: number ): ValidatorFn {\n\treturn ( control: AbstractControl ): ValidationErrors | null => {\n\t\tif ( control.value === null || control.value === undefined )\n\t\t\treturn null;\n\t\tconst ok = control.value.length <= max;\n\t\treturn ok ? null : { max: { value: control.value } };\n\t};\n}\n","<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\"\n\t\t\t\t\t [placeholder]=\"field.name\"\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 [placeholder]=\"field.name || ''\"\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 [placeholder]=\"field.name\"\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 ('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\" [placeholder]=\"field.name\" [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]=\"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","import { ChangeDetectionStrategy, Component, computed, effect, inject, input } from '@angular/core';\nimport {\n\tMatTableDataSource,\n\tMatTable,\n\tMatColumnDef,\n\tMatHeaderCellDef,\n\tMatHeaderCell,\n\tMatCellDef,\n\tMatCell,\n\tMatHeaderRowDef,\n\tMatHeaderRow,\n\tMatRowDef,\n\tMatRow\n} from \"@angular/material/table\";\nimport { XiriTableField } from \"./tabefield.interface\";\nimport { XiriNumberService } from \"../services/number.service\";\nimport { SafehtmlPipe } from '../pipes/safehtml.pipe';\nimport { RouterLink } from '@angular/router';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatIcon } from '@angular/material/icon';\n\n\nexport interface XiriRawTableSettings {\n\tdata: any\n\tfields?: XiriTableField[]\n\tdense?: number\n\tforceMinWidth?: boolean\n\tshowHeader?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-raw-table',\n\t templateUrl: './xiri-raw-table.component.html',\n\t styleUrl: './xiri-raw-table.component.scss',\n\t imports: [ MatTable,\n\t MatColumnDef,\n\t MatHeaderCellDef,\n\t MatHeaderCell,\n\t MatCellDef,\n\t MatCell,\n\t MatIcon,\n\t MatTooltip,\n\t RouterLink,\n\t MatHeaderRowDef,\n\t MatHeaderRow,\n\t MatRowDef,\n\t MatRow,\n\t SafehtmlPipe ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriRawTableComponent {\n\t\n\tsettings = input.required<XiriRawTableSettings>();\n\tshowHeader = computed( () => this.settings().showHeader === true );\n\n\tdisplayedColumns: any[] = [];\n\tcolumnsToDisplay: string[] = [];\n\tdataSource: MatTableDataSource<any> = new MatTableDataSource();\n\ttableClass: string = 'dense-6';\n\t\n\tconstructor() {\n\t\teffect( () => {\n\t\t\tif ( this.settings().dense )\n\t\t\t\tthis.tableClass = 'dense-' + this.settings().dense;\n\t\t\tif ( this.settings().forceMinWidth )\n\t\t\t\tthis.tableClass += ' force-min-width';\n\t\t\t\n\t\t\tthis.loadFields( this.settings().fields );\n\t\t\tthis.dataSource.data = this.settings().data;\n\t\t} );\n\t}\n\t\n\tprivate loadFields( fields: XiriTableField[] ) {\n\t\t\n\t\tthis.displayedColumns = [];\n\t\tthis.columnsToDisplay = [];\n\t\t\n\t\tfor ( let fid = 0; fid != fields.length; fid++ ) {\n\t\t\tconst column = fields[ fid ];\n\t\t\t\n\t\t\tif ( column.format == 'id' )\n\t\t\t\tcontinue;\n\t\t\tif ( !column.display )\n\t\t\t\tcolumn.display = '';\n\t\t\tif ( column.align )\n\t\t\t\tcolumn.display += ` align-${ column.align }`;\n\t\t\t\n\t\t\tthis.displayedColumns.push( column );\n\t\t\tthis.columnsToDisplay.push( column.name );\n\t\t}\n\t}\n}\n","<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 (column.icons[ row[ column.id ] ]) {\n\t\t\t\t\t\t\t\t<mat-icon [class]=\"column.icons[ row[ column.id ] ][ 'color' ] || 'primary'\"\n\t\t\t\t\t\t\t\t [matTooltip]=\"column.icons[ row[ column.id ] ][ 'hint' ]\"\n\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!column.icons[ row[ column.id ] ][ 'hint' ]\">{{ column.icons[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]=\"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 (row[column.id + 'Link']) {\n\t\t\t\t\t\t\t\t<a [routerLink]=\"row[column.id + 'Link']\" class=\"tablelink\">{{ row[column.id] }}</a>\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t<span>{{ 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>{{ row[column.id][0] }}</div>\n\t\t\t\t\t\t\t<div>{{ 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 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 (row[column.id + 'Link']) {\n\t\t\t\t\t\t\t\t<a [routerLink]=\"row[column.id + 'Link']\">\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 (row['icon']) {\n\t\t\t\t\t\t\t\t\t\t\t@if (row['iconSet']) {\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"row['iconColor'] || 'primary'\" [fontSet]=\"row['iconSet']\">{{ 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]=\"row['iconColor'] || 'primary'\">{{ 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]=\"row['icon']\">{{ 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 }}{{ 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 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\">{{ 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>","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { MatButton, MatFabButton, MatIconButton, MatMiniFabButton } from \"@angular/material/button\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { XiriButton } from \"../button/button.component\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { MatProgressSpinner } from \"@angular/material/progress-spinner\";\n\n@Component( {\n\t selector: 'xiri-buttonstyle',\n\t imports: [\n\t\t MatButton,\n\t\t MatFabButton,\n\t\t MatIcon,\n\t\t MatIconButton,\n\t\t MatMiniFabButton,\n\t\t MatTooltip,\n\t\t MatProgressSpinner\n\t ],\n\t templateUrl: './buttonstyle.component.html',\n\t styleUrl: './buttonstyle.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriButtonstyleComponent {\n\tbutton = input.required<XiriButton>();\n\tdisabled = input.required<boolean>();\n\tloading = input<boolean>( false );\n}\n","@switch (button().type) {\n\t@case ('icon') {\n\t\t<button mat-icon-button [matTooltip]=\"button().hint\" [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\" [disabled]=\"disabled() || loading()\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t<mat-icon>{{ button().icon }}</mat-icon>\n\t\t\t}\n\t\t</button>\n\t}\n\t@case ('icontext') {\n\t\t<button mat-fab extended=\"true\"\n\t\t class=\"icontext\"\n\t\t [matTooltip]=\"button().hint\"\n\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\"\n\t\t [disabled]=\"disabled() || loading()\"\n\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t<mat-icon>{{ button().icon }}</mat-icon>\n\t\t\t}\n\t\t\t{{ button().text }}\n\t\t</button>\n\t}\n\t@case ('raised') {\n\t\t<button mat-raised-button\n\t\t [matTooltip]=\"button().hint\"\n\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\"\n\t\t [disabled]=\"disabled() || loading()\"\n\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t{{ button().text }}\n\t\t\t}\n\t\t</button>\n\t}\n\t@case ('basic') {\n\t\t<button mat-button\n\t\t [matTooltip]=\"button().hint\"\n\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\"\n\t\t [disabled]=\"disabled() || loading()\"\n\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t{{ button().text }}\n\t\t\t}\n\t\t</button>\n\t}\n\t@case ('stroked') {\n\t\t<button mat-stroked-button\n\t\t [matTooltip]=\"button().hint\"\n\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\"\n\t\t [disabled]=\"disabled() || loading()\"\n\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t{{ button().text }}\n\t\t\t}\n\t\t</button>\n\t}\n\t@case ('flat') {\n\t\t<button mat-flat-button\n\t\t [matTooltip]=\"button().hint\"\n\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\"\n\t\t [disabled]=\"disabled() || loading()\"\n\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t{{ button().text }}\n\t\t\t}\n\t\t</button>\n\t}\n\t@case ('minifab') {\n\t\t<button mat-mini-fab [matTooltip]=\"button().hint\" [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\" [disabled]=\"disabled() || loading()\"\n\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"20\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t<mat-icon>{{ button().icon }}</mat-icon>\n\t\t\t}\n\t\t</button>\n\t}\n\t@case ('fab') {\n\t\t<button mat-fab [matTooltip]=\"button().hint\" [matTooltipDisabled]=\"!button().hint\"\n\t\t [color]=\"button().color || 'primary'\" [disabled]=\"disabled() || loading()\"\n\t\t [tabIndex]=\"button().tabIndex\">\n\t\t\t@if (loading()) {\n\t\t\t\t<mat-spinner diameter=\"24\"></mat-spinner>\n\t\t\t} @else {\n\t\t\t\t<mat-icon>{{ button().icon }}</mat-icon>\n\t\t\t}\n\t\t</button>\n\t}\n\t@default {\n\t\t@if (button().icon) {\n\t\t\t<button mat-icon-button [matTooltip]=\"button().hint\" [matTooltipDisabled]=\"!button().hint\"\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@if (button().text) {\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@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{{ button().text }}\n\t\t\t\t}\n\t\t\t</button>\n\t\t}\n\t}\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component( {\n\t selector: 'xiri-done',\n\t templateUrl: './done.component.html',\n\t styleUrl: './done.component.scss',\n\t imports: [ MatIcon ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriDoneComponent {\n}\n","<mat-icon aria-label=\"Erfolgreich abgeschlossen\" role=\"status\">done</mat-icon>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component( {\n\t selector: 'xiri-error',\n\t templateUrl: './error.component.html',\n\t styleUrl: './error.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriErrorComponent {\n\t\n\ttext = input.required<string>();\n}\n","<div class=\"error\">\n\t{{ text() }}\n</div>\n","import { Injectable } from '@angular/core';\n\n\n@Injectable( {\n\t providedIn: 'root',\n } )\nexport class XiriDownloadService {\n\t\n\tpublic download( result: any, filename: string, open: boolean ): boolean {\n\t\t\n\t\tif ( result.headers.get( 'content-disposition' ) ) {\n\t\t\tfilename = result.headers.get( 'content-disposition' ).split( 'filename=' )[ 1 ];\n\t\t\tfilename = filename.replace( /\"/g, '' );\n\t\t}\n\t\t\n\t\tlet contentType = result.headers.get( 'content-type' );\n\t\tlet file = new File( [ result.body ], filename, { type: contentType } );\n\t\tlet fileData = URL.createObjectURL( file );\n\t\t\n\t\tif ( open ) {\n\t\t\tlet ret = window.open( fileData, '_blank' )\n\t\t\treturn !( ret === null || typeof ( ret ) == 'undefined' );\n\t\t}\n\t\t\n\t\tconst a: any = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'a' )\n\t\ta.download = filename;\n\t\ta.rel = 'noopener';\n\t\ta.href = fileData;\n\t\t// a.target = '_blank';\n\t\t\n\t\tsetTimeout( () => {\n\t\t\tURL.revokeObjectURL( fileData );\n\t\t}, 2 * 1000 )\n\t\tsetTimeout( () => a.click(), 0 )\n\t\t\n\t\treturn true;\n\t}\n}\n","import { HttpErrorResponse } from '@angular/common/http';\n\nexport function parseHttpError( err: HttpErrorResponse ): string {\n\tif ( err.status === 400 || err.status === 424 )\n\t\treturn err.error?.error || 'Format Error';\n\tif ( err.status === 403 )\n\t\treturn err.error?.error || 'Access denied';\n\tif ( err.status === 404 )\n\t\treturn 'Not found';\n\tif ( err.status === 0 )\n\t\treturn 'Connection error';\n\treturn 'Unknown error';\n}\n","import { ChangeDetectionStrategy, Component, DestroyRef, inject, OnDestroy, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n\tMAT_DIALOG_DATA,\n\tMatDialogActions,\n\tMatDialogContent,\n\tMatDialogRef,\n\tMatDialogTitle\n} from '@angular/material/dialog';\nimport { Subject } from 'rxjs';\nimport { BreakpointObserver, Breakpoints, BreakpointState } from '@angular/cdk/layout';\nimport { XiriDataService } from '../services/data.service';\nimport { XiriButton } from \"../button/button.component\";\nimport { XiriSnackbarService } from '../services/snackbar.service';\nimport { XiriRawTableComponent, XiriRawTableSettings } from \"../raw-table/xiri-raw-table.component\";\nimport { Router } from \"@angular/router\";\nimport { XiriButtonstyleComponent } from '../buttonstyle/buttonstyle.component';\nimport { MatDivider } from '@angular/material/divider';\nimport { XiriDoneComponent } from '../done/done.component';\nimport { XiriErrorComponent } from '../error/error.component';\nimport { XiriFormFieldsComponent } from '../formfields/form-fields.component';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { XiriFormField } from \"../formfields/field.interface\";\nimport { XiriDownloadService } from \"../services/download.service\";\nimport { parseHttpError } from '../services/error.util';\n\n\nexport interface XiriDialogSettings {\n\turl?: string\n\tsize?: string\n\t\n\ttype: \"form\" | \"data\" | \"question\" | \"waiting\" | \"table\"\n\tdata?: any\n\tfilter?: any\n}\n\n@Component( {\n\t selector: 'xiri-dialog',\n\t templateUrl: './dialog.component.html',\n\t styleUrls: [ './dialog.component.scss' ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatDialogTitle,\n\t MatDialogContent,\n\t MatProgressSpinner,\n\t XiriRawTableComponent,\n\t XiriFormFieldsComponent,\n\t XiriErrorComponent,\n\t XiriDoneComponent,\n\t MatDivider,\n\t MatDialogActions,\n\t XiriButtonstyleComponent ]\n } )\nexport class XiriDialogComponent implements OnDestroy {\n\tdialogRef = inject<MatDialogRef<XiriDialogComponent>>( MatDialogRef );\n\tinitData = inject( MAT_DIALOG_DATA );\n\tprivate breakpointObserver = inject( BreakpointObserver );\n\tprivate dataService = inject( XiriDataService );\n\tprivate router = inject( Router );\n\tprivate snackbar = inject( XiriSnackbarService );\n\t\n\t\n\ttype = signal('form');\n\theader = signal('');\n\tpublic buttons = signal<XiriButton[]>([]);\n\tprivate url = '';\n\tprivate extra = {};\n\tprivate destroyRef = inject( DestroyRef );\n\n\tprivate downloadService = inject( XiriDownloadService );\n\t\n\tpublic formFields = signal<XiriFormField[]>( null );\n\tpublic loading = signal<boolean>( true );\n\tpublic done = signal<boolean>( false );\n\tpublic error = signal<string>( '' );\n\t\n\tprivate formValues: any = null;\n\tpublic formValid = signal<boolean>(false);\n\tpublic checkSubject: Subject<void> = new Subject<void>();\n\t\n\tprivate to = null;\n\tprivate refreshTime = 2000;\n\trawTable: XiriRawTableSettings;\n\t\n\tconstructor() {\n\t\t\n\t\tthis.breakpointObserver\n\t\t\t.observe( [ Breakpoints.XSmall, Breakpoints.Small ] )\n\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe( ( state: BreakpointState ) => {\n\t\t\t\tif ( state.matches )\n\t\t\t\t\tthis.dialogRef.updateSize( '90vw' );\n\t\t\t\telse\n\t\t\t\t\tthis.dialogRef.updateSize( this.initData.size || '600px' );\n\t\t\t} );\n\t\t\n\t\tif ( this.initData.url )\n\t\t\tthis.url = this.initData.url;\n\t\t\n\t\tif ( this.initData.type == 'form' )\n\t\t\tthis.loadData( this.initData );\n\t\telse if ( this.initData.type == 'data' )\n\t\t\tthis.send( { data: this.initData.data } );\n\t\telse if ( this.initData.filter )\n\t\t\tthis.send( this.initData.filter );\n\t\telse\n\t\t\tthis.send( null );\n\t\t\n\t}\n\t\n\tprivate send( data: any ) {\n\t\t\n\t\tthis.loading.set( true );\n\t\tthis.error.set( '' );\n\t\t\n\t\tconst req = data === null ?\n\t\t this.dataService.get( this.url ) :\n\t\t this.dataService.post( this.url, { ...data, ...this.extra } );\n\t\t\n\t\t// this.buttons = [];\n\t\t\n\t\treq.pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe(\n\t\t\t{\n\t\t\t\tnext: ( res: any ) => {\n\t\t\t\t\tif ( res )\n\t\t\t\t\t\tthis.loadData( res );\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.showError( { status: 500 } );\n\t\t\t\t},\n\t\t\t\terror: ( err ) => {\n\t\t\t\t\tthis.showError( err );\n\t\t\t\t}\n\t\t\t} );\n\t}\n\t\n\tprivate showError( err: any ) {\n\t\tthis.loading.set( false );\n\t\tthis.error.set( parseHttpError( err ) );\n\t\t\n\t\t// this.header = 'Error';\n\t\tif ( this.buttons().length == 0 ) {\n\t\t\tthis.buttons.set( [ {\n\t\t\t\ttext: 'Close',\n\t\t\t\taction: 'close',\n\t\t\t\ttype: 'raised',\n\t\t\t} ] );\n\t\t}\n\t}\n\t\n\tprivate loadData( res: any ): void {\n\t\t\n\t\tif ( res.buttons ) {\n\t\t\tif ( res.url )\n\t\t\t\tthis.url = res.url;\n\t\t\t\n\t\t\tlet formData = [];\n\t\t\tlet inFields = res.content || res.fields;\n\t\t\tconst model = res.model || {};\n\t\t\tthis.header.set( res.header );\n\t\t\tthis.buttons.set( res.buttons );\n\t\t\tthis.type.set( res.type ? res.type : 'form' );\n\t\t\tthis.extra = res.extra || {};\n\n\t\t\tif ( this.type() == 'form' ) {\n\t\t\t\tinFields.forEach( ( field: any ) => {\n\t\t\t\t\tif ( field.hide == true )\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif ( model[ field.id ] !== undefined )\n\t\t\t\t\t\tfield.value = model[ field.id ];\n\t\t\t\t\t\n\t\t\t\t\tformData.push( field );\n\t\t\t\t} );\n\t\t\t} else if ( this.type() == 'question' ) {\n\t\t\t\tinFields.type = 'question';\n\t\t\t\tformData.push( inFields );\n\t\t\t\tthis.formValid.set( true );\n\t\t\t} else if ( this.type() == 'waiting' ) {\n\t\t\t\tinFields.type = 'waiting';\n\t\t\t\tinFields.done = false;\n\t\t\t\tinFields.value = inFields.text;\n\t\t\t\tformData.push( inFields );\n\t\t\t} else if ( this.type() == 'table' ) {\n\t\t\t\tthis.rawTable = inFields;\n\t\t\t\tformData = [];\n\t\t\t} else {\n\t\t\t\tthis.formValid.set( true );\n\t\t\t\tformData = inFields;\n\t\t\t}\n\t\t\t\n\t\t\tthis.formFields.set( formData );\n\n\t\t\tif ( this.type() == 'waiting' ) {\n\t\t\t\tthis.dialogRef.disableClose = true;\n\t\t\t\tthis.refreshTime = res.time || 2000;\n\t\t\t\t// formData.done = false;\n\t\t\t\t// this.formFields.set( formData );\n\t\t\t\tthis.refresh();\n\t\t\t}\n\t\t\t\n\t\t} else if ( res.done ) {\n\t\t\t\n\t\t\tthis.done.set( true );\n\t\t\tthis.formFields.set( null );\n\n\t\t\tthis.type.set( '' );\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.dialogRef.close( res );\n\t\t\t}, 1000 );\n\t\t} else {\n\t\t\tthis.dialogRef.close( res );\n\t\t}\n\t\t\n\t\tthis.loading.set( false );\n\t}\n\t\n\tprivate refresh() {\n\t\t\n\t\tthis.to = setTimeout( () => {\n\t\t\tthis.to = null;\n\t\t\t\n\t\t\tthis.dataService.get( this.url ).pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe(\n\t\t\t\t{\n\t\t\t\t\tnext: ( res: any ) => {\n\t\t\t\t\t\tif ( res.done ) {\n\t\t\t\t\t\t\tif ( res.error ) {\n\t\t\t\t\t\t\t\tthis.dialogRef.disableClose = false;\n\t\t\t\t\t\t\t\tthis.error.set( res.error );\n\t\t\t\t\t\t\t\tthis.formFields.set( null );\n\t\t\t\t\t\t\t\tthis.snackbar.error( res.error );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.url = res.url;\n\t\t\t\t\t\t\t\tthis.extra = res;\n\t\t\t\t\t\t\t\tthis.download( null );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tthis.refresh();\n\t\t\t\t\t},\n\t\t\t\t\terror: ( err ) => {\n\t\t\t\t\t\tconsole.log( \"dialog refresh error\", err );\n\t\t\t\t\t\tthis.snackbar.error( err.error?.error || 'Unknown Error' );\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( this.refreshTime < 10000 )\n\t\t\t\t\t\t\tthis.refreshTime += 2000;\n\t\t\t\t\t\tthis.refresh();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, this.refreshTime );\n\t}\n\t\n\tpublic download( data: any ) {\n\t\t\n\t\tif ( data === null ) {\n\t\t\t// TODO: fix, this is actually an external link\n\t\t\t\n\t\t\tlet file = window.open( this.dataService.getConfigApi() + this.url, 'Report' );\n\t\t\tif ( file === null || typeof ( file ) == 'undefined' ) {\n\t\t\t\tthis.buttons.set( [ {\n\t\t\t\t\ttext: 'Download',\n\t\t\t\t\taction: 'download',\n\t\t\t\t\ttype: 'raised',\n\t\t\t\t\tdefault: true,\n\t\t\t\t} ] );\n\t\t\t} else\n\t\t\t\tthis.dialogRef.close( this.extra );\n\t\t\t\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.dataService.postFileResponse( this.url, data )\n\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe(\n\t\t\t\t\t{\n\t\t\t\t\t\tnext: ( result: any ) => {\n\n\t\t\t\t\t\t\tlet ret = this.downloadService.download( result, 'Report', false );\n\t\t\t\t\t\t\tif ( !ret )\n\t\t\t\t\t\t\t\tthis.buttons.set( [ {\n\t\t\t\t\t\t\t\t\ttext: 'Download',\n\t\t\t\t\t\t\t\t\taction: 'href',\n\t\t\t\t\t\t\t\t\ttype: 'raised',\n\t\t\t\t\t\t\t\t\tdefault: true,\n\t\t\t\t\t\t\t\t\turl: this.url\n\t\t\t\t\t\t\t\t} ] );\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tthis.dialogRef.close( this.extra );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}, error: ( err: any ) => {\n\t\t\t\t\t\t\tthis.snackbar.error( err.error?.error || 'Unknown Error' );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t}\n\t\n\tclickButton( button: XiriButton ): void {\n\n\t\tif ( button.default && !this.formValid() )\n\t\t\treturn;\n\n\t\tif ( button.action == 'close' )\n\t\t\tthis.dialogRef.close( null );\n\t\telse if ( button.action == 'return' )\n\t\t\tthis.dialogRef.close( {\n\t\t\t\t valid: this.formValid(),\n\t\t\t\t values: this.formValues\n\t\t\t } );\n\t\telse if ( button.action == 'get' ) {\n\t\t\tthis.url = button.url ? button.url : '';\n\t\t\tthis.startSend( null );\n\t\t} else if ( button.action == 'post' ) {\n\t\t\tthis.url = button.url ? button.url : '';\n\t\t\tthis.startSend( button.data );\n\t\t} else if ( button.action == 'download' ) {\n\t\t\tthis.download( this.type() == 'form' ? this.formValues : null );\n\t\t} else if ( button.action == 'link' ) {\n\t\t\tthis.router.navigate( [ button.url ] ).then();\n\t\t} else if ( button.action == 'href' ) {\n\t\t\twindow.location.href = button.url;\n\t\t} else {\n\t\t\tif ( this.loading() )\n\t\t\t\treturn;\n\n\t\t\tif ( this.type() == 'form' )\n\t\t\t\tthis.startSend( this.formValues );\n\t\t\telse\n\t\t\t\tthis.startSend( [] );\n\t\t}\n\t}\n\t\n\tprivate startSend( data: any ): void {\n\n\t\tsetTimeout( () => {\n\t\t\tif ( this.formValid() )\n\t\t\t\tthis.send( data );\n\t\t\telse\n\t\t\t\tthis.checkSubject.next();\n\t\t}, 10 );\n\t}\n\n\tpublic formChanged( event: any ) {\n\n\t\tthis.formValid.set( event.valid );\n\t\tthis.formValues = event.value;\n\t}\n\t\n\tngOnDestroy() {\n\t\tif ( this.to )\n\t\t\tclearTimeout( this.to );\n\t}\n}\n","<div class=\"dialog\">\n\t<h1 mat-dialog-title>{{ header() }}</h1>\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 (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 (!loading() && !done()) {\n\t\t<mat-divider></mat-divider>\n\t\t<mat-dialog-actions [class.one]=\"buttons().length==1\">\n\t\t\t@for (button of buttons(); track $index) {\n\t\t\t\t<xiri-buttonstyle [button]=\"button\" (click)=\"clickButton( button )\" [disabled]=\"button.default && !formValid()\"></xiri-buttonstyle>\n\t\t\t}\n\t\t</mat-dialog-actions>\n\t}\n</div>","import { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\n\n@Injectable( {\n\t providedIn: 'root',\n } )\nexport class XiriResponseHandlerService {\n\n\tprivate router = inject( Router );\n\n\thandle( result: any, callbacks?: {\n\t\tonTableRefresh?: () => void;\n\t\tonTableUpdate?: ( id: any, field: string, content: any ) => void;\n\t} ): void {\n\t\tif ( !result )\n\t\t\treturn;\n\t\tif ( result.page == 'refresh' || result.refresh == 'page' )\n\t\t\tthis.router.navigate( [ this.router.url ] ).then();\n\t\telse if ( result.table == 'refresh' || result.refresh == 'table' ) {\n\t\t\tif ( callbacks?.onTableRefresh )\n\t\t\t\tcallbacks.onTableRefresh();\n\t\t\telse\n\t\t\t\tthis.router.navigate( [ this.router.url ] ).then();\n\t\t}\n\t\telse if ( result.goto )\n\t\t\tthis.router.navigate( [ result.goto ] ).then();\n\t\telse if ( result.table == 'update' || result.update == 'table' )\n\t\t\tcallbacks?.onTableUpdate?.( result.id, result.field, result.content );\n\t}\n}\n","import { ChangeDetectionStrategy, Component, computed, DestroyRef, inject, input, OnDestroy, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { XiriDialogComponent } from \"../dialog/dialog.component\";\nimport { XiriColor } from '../types/color.type';\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\nimport { XiriDataService } from \"../services/data.service\";\nimport { RouterLink } from \"@angular/router\";\nimport { Location } from \"@angular/common\";\nimport { XiriButtonstyleComponent } from \"../buttonstyle/buttonstyle.component\";\nimport { XiriDownloadService } from \"../services/download.service\";\nimport { XiriResponseHandlerService } from \"../services/response-handler.service\";\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from \"@angular/material/menu\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\n\n\nexport interface XiriButton {\n\ttext: string\n\ttype: string\n\taction: string\n\t\n\tdefault?: boolean\n\turl?: string\n\thide?: boolean\n\tcolor?: XiriColor\n\ticon?: string\n\ticonColor?: XiriColor\n\tfontIcon?: string\n\tfontSet?: string\n\tclass?: string\n\thint?: string\n\ttabIndex?: number\n\tinline?: boolean\n\tdisabled?: boolean\n\t\n\tdata?: Record<string, any>\n\ttarget?: string\n\tloading?: boolean\n\tfilename?: string\n\n\t// send btns\n\tcheck?: any\n\tsend?: any\n\n\t// menu items (for action \"menu\")\n\tmenuItems?: { action: string, url?: string, icon?: string, color?: string, text?: string, data?: Record<string, any> }[]\n}\n\nexport interface XiriButtonResult {\n\tbutton: XiriButton\n\tresult: any\n\tdone: boolean\n\tloading: boolean\n}\n\n\n@Component( {\n\t selector: 'xiri-button',\n\t templateUrl: './button.component.html',\n\t styleUrl: './button.component.scss',\n\t imports: [\n\t\t XiriButtonstyleComponent,\n\t\t RouterLink,\n\t\t MatMenu, MatMenuItem, MatMenuTrigger,\n\t\t MatIcon, MatIconButton, MatTooltip\n\t ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriButtonComponent implements OnDestroy {\n\tbutton = input.required<XiriButton>();\n\tdisabled = input<boolean>( false );\n\tfilterData = input<any>( undefined );\n\turl = input<string>( undefined );\n\t\n\t// \t\tif ( JSON.stringify( this._filterData ) === JSON.stringify( values ) )\n\t// \t\t\treturn;\n\t\n\tresult = output<XiriButtonResult>();\n\t\n\tprivate dialogRef?: MatDialogRef<any> = undefined;\n\tprivate destroyRef = inject( DestroyRef );\n\tprotected loading = signal<boolean>( false );\n\t\n\tprivate dataService = inject( XiriDataService );\n\tprivate location = inject( Location );\n\tprivate dialog = inject( MatDialog );\n\tprivate downloadService = inject( XiriDownloadService );\n\tprivate responseHandler = inject( XiriResponseHandlerService );\n\t\n\t_disabled = computed( () => {\n\t\t\n\t\tif ( this.filterData() === null )\n\t\t\treturn true;\n\t\telse if ( this.button().disabled )\n\t\t\treturn true;\n\t\telse if ( this.loading() )\n\t\t\treturn true;\n\t\t\n\t\treturn this.disabled();\n\t} );\n\t\n\t_url = computed( () => {\n\t\tif ( this.url() )\n\t\t\treturn this.url();\n\t\treturn this.button().url;\n\t} );\n\t\n\tclicked( event: MouseEvent ) {\n\t\t\n\t\tevent.stopPropagation();\n\t\t\n\t\tif ( this._disabled() ) {\n\t\t\tthis.result.emit( {\n\t\t\t\t button: this.button(),\n\t\t\t\t result: null,\n\t\t\t\t done: false,\n\t\t\t\t loading: false,\n\t\t\t } );\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tswitch ( this.button().action ) {\n\t\t\tcase 'link':\n\t\t\tcase 'href':\n\t\t\tcase 'close':\n\t\t\tcase 'return':\n\t\t\t\tthis.result.emit( {\n\t\t\t\t\t button: this.button(),\n\t\t\t\t\t result: null,\n\t\t\t\t\t done: true,\n\t\t\t\t\t loading: false,\n\t\t\t\t } );\n\t\t\t\tbreak;\n\t\t\tcase 'dialog':\n\t\t\t\tthis.actionDialog();\n\t\t\t\tbreak;\n\t\t\tcase 'api':\n\t\t\t\tthis.actionApi();\n\t\t\t\tbreak;\n\t\t\tcase 'download':\n\t\t\t\tthis.actionDownload();\n\t\t\t\tbreak;\n\t\t\tcase 'back':\n\t\t\t\tthis.location.back();\n\t\t\t\tbreak;\n\t\t\tcase 'debug':\n\t\t\tcase 'simulate':\n\t\t\t\tthis.result.emit( {\n\t\t\t\t\t button: this.button(),\n\t\t\t\t\t result: true,\n\t\t\t\t\t done: true,\n\t\t\t\t\t loading: false,\n\t\t\t\t } );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconsole.log( \"xiri-button unknown action\", this.button().action );\n\t\t}\n\t}\n\t\n\tprivate actionDialog( dialogData?: any ) {\n\n\t\tlet data: any;\n\t\tif ( dialogData ) {\n\t\t\tdata = dialogData;\n\t\t} else {\n\t\t\tdata = <any> Object.assign( {}, this.button() );\n\t\t\tdata.type = 'load';\n\t\t}\n\t\tdata.filter = this.filterData();\n\n\t\tthis.loading.set( true );\n\n\t\tthis.dialogRef = this.dialog.open( XiriDialogComponent, {\n\t\t\tdata: data,\n\t\t} );\n\n\t\tthis.dialogRef.afterClosed().pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe( result => {\n\t\t\tthis.responseHandler.handle( result );\n\t\t\tthis.loading.set( false );\n\t\t\tthis.result.emit( {\n\t\t\t\t button: this.button(),\n\t\t\t\t result: result,\n\t\t\t\t done: true,\n\t\t\t\t loading: false,\n\t\t\t } );\n\t\t} );\n\t}\n\n\topenMenuDialog( event: MouseEvent, item: any ) {\n\t\tevent.stopPropagation();\n\t\tlet data = <any> Object.assign( {}, item );\n\t\tdata.type = 'load';\n\t\tthis.actionDialog( data );\n\t}\n\t\n\tprivate actionApi() {\n\t\t\n\t\tlet data = { ...this.filterData(), ...this.button().data };\n\t\tthis.loading.set( true );\n\t\t\n\t\tthis.result.emit( {\n\t\t\t button: this.button(),\n\t\t\t result: null,\n\t\t\t done: false,\n\t\t\t loading: true,\n\t\t } );\n\t\t\n\t\tthis.dataService.post( this.button().url, data )\n\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe( {\n\t\t\t\t next: ( result: any ) => {\n\t\t\t\t\t\t this.responseHandler.handle( result );\n\t\t\t\t\t\t this.result.emit( {\n\t\t\t\t\t\t\t button: this.button(),\n\t\t\t\t\t\t\t result: result,\n\t\t\t\t\t\t\t done: true,\n\t\t\t\t\t\t\t loading: false,\n\t\t\t\t\t\t } );\n\t\t\t\t\t\t this.loading.set( false );\n\t\t\t\t\t },\n\t\t\t\t\t error: ( err: any ) => {\n\t\t\t\t\t\t console.log( \"xiri-button api error\", err );\n\t\t\t\t\t\t this.result.emit( {\n\t\t\t\t\t\t\t button: this.button(),\n\t\t\t\t\t\t\t result: null,\n\t\t\t\t\t\t\t done: true,\n\t\t\t\t\t\t\t loading: false,\n\t\t\t\t\t\t } );\n\t\t\t\t\t\t this.loading.set( false );\n\t\t\t\t\t }\n\t\t\t\t } );\n\t}\n\n\tprivate actionDownload() {\n\n\t\tlet data = { ...this.filterData(), ...this.button().data };\n\t\tthis.loading.set( true );\n\n\t\tthis.dataService.postFileResponse( this._url(), data )\n\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe(\n\t\t\t\t\t{\n\t\t\t\t\t\tnext: ( result: any ) => {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlet filename: string;\n\t\t\t\t\t\t\tif ( this.button().filename != undefined )\n\t\t\t\t\t\t\t\tfilename = this.button().filename;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tfilename =\n\t\t\t\t\t\t\t\t\t( this.button().text != undefined ? this.button().text : 'Download' ) + '.csv'\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.downloadService.download( result, filename, false );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.result.emit( {\n\t\t\t\t\t\t\t\t button: this.button(),\n\t\t\t\t\t\t\t\t result: result,\n\t\t\t\t\t\t\t\t done: true,\n\t\t\t\t\t\t\t\t loading: false,\n\t\t\t\t\t\t\t } );\n\t\t\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror: ( err: any ) => {\n\t\t\t\t\t\t\tconsole.log( \"xiri-button download error\", err );\n\t\t\t\t\t\t\tthis.result.emit( {\n\t\t\t\t\t\t\t\t button: this.button(),\n\t\t\t\t\t\t\t\t result: null,\n\t\t\t\t\t\t\t\t done: true,\n\t\t\t\t\t\t\t\t loading: false,\n\t\t\t\t\t\t\t } );\n\t\t\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t}\n\n\tngOnDestroy(): void {\n\t\tif ( this.dialogRef ) {\n\t\t\tthis.dialogRef.close( null );\n\t\t}\n\t}\n}\n","@switch (button().action) {\n\t@case ('link') {\n\t\t<a [routerLink]=\"_url()\" [href]=\"_url()\" (click)=\"clicked($event)\">\n\t\t\t<xiri-buttonstyle [button]=\"button()\" [disabled]=\"_disabled()\" [loading]=\"loading()\"></xiri-buttonstyle>\n\t\t</a>\n\t}\n\t@case ('href') {\n\t\t<a [href]=\"_url()\" [target]=\"button().target\" (click)=\"clicked($event)\">\n\t\t\t<xiri-buttonstyle [button]=\"button()\" [disabled]=\"_disabled()\" [loading]=\"loading()\"></xiri-buttonstyle>\n\t\t</a>\n\t}\n\t@case ('menu') {\n\t\t<button mat-icon-button [matMenuTriggerFor]=\"menuRef\"\n\t\t [class]=\"button().color || 'primary'\"\n\t\t [matTooltip]=\"button().hint\"\n\t\t [matTooltipDisabled]=\"!button().hint\"\n\t\t (click)=\"$event.stopPropagation()\">\n\t\t\t<mat-icon>{{ button().icon }}</mat-icon>\n\t\t</button>\n\t\t<mat-menu #menuRef=\"matMenu\">\n\t\t\t@for (item of button().menuItems; track item) {\n\t\t\t\t@switch (item.action) {\n\t\t\t\t\t@case ('link') {\n\t\t\t\t\t\t<a mat-menu-item [routerLink]=\"item.url\">\n\t\t\t\t\t\t\t@if (item.icon) {\n\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}\n\t\t\t\t\t\t\t<span>{{ item.text }}</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t}\n\t\t\t\t\t@case ('href') {\n\t\t\t\t\t\t<a mat-menu-item [href]=\"item.url\" target=\"_blank\">\n\t\t\t\t\t\t\t@if (item.icon) {\n\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}\n\t\t\t\t\t\t\t<span>{{ item.text }}</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t}\n\t\t\t\t\t@case ('dialog') {\n\t\t\t\t\t\t<button mat-menu-item (click)=\"openMenuDialog($event, item)\">\n\t\t\t\t\t\t\t@if (item.icon) {\n\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}\n\t\t\t\t\t\t\t<span>{{ item.text }}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t</mat-menu>\n\t}\n\t@default {\n\t\t<xiri-buttonstyle [button]=\"button()\" [disabled]=\"_disabled()\" [loading]=\"loading()\" (click)=\"clicked($event)\"></xiri-buttonstyle>\n\t}\n}\n","import { afterNextRender, inject, Injectable, Injector, signal } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { XiriDataService } from '../services/data.service';\nimport { XiriSnackbarService } from '../services/snackbar.service';\nimport { XiriTableField } from '../raw-table/tabefield.interface';\n\n\n@Injectable()\nexport class XiriTableInlineEditService {\n\n\tprivate dataService = inject( XiriDataService );\n\tprivate snackbar = inject( XiriSnackbarService );\n\tprivate injector = inject( Injector );\n\n\teditingCell = signal<{ row: any; field: string } | null>( null );\n\teditingChipsValues = signal<string[]>( [] );\n\teditableOptionsLoading = signal( false );\n\tloadedEditableOptions = signal<{ value: string; label: string; color?: string }[]>( [] );\n\tsavingCell = signal<{ row: any; field: string } | null>( null );\n\n\tprivate editingOriginalValue: any = null;\n\tprivate editableOptionsSub: Subscription | null = null;\n\n\tprivate getEditUrl: () => string;\n\tprivate getDisplayedColumns: () => XiriTableField[];\n\tprivate abort$: Subject<void>;\n\tprivate onSaved: ( row: any, fieldId: string ) => void;\n\tprivate onDataUpdate: () => void;\n\tprivate onCallReturn: ( result: any ) => void;\n\n\tprivate get editUrl(): string { return this.getEditUrl?.(); }\n\tprivate get displayedColumns(): XiriTableField[] { return this.getDisplayedColumns?.() ?? []; }\n\n\tinit( config: {\n\t\tgetEditUrl: () => string;\n\t\tgetDisplayedColumns: () => XiriTableField[];\n\t\tabort$: Subject<void>;\n\t\tonSaved: ( row: any, fieldId: string ) => void;\n\t\tonDataUpdate: () => void;\n\t\tonCallReturn: ( result: any ) => void;\n\t} ): void {\n\t\tthis.getEditUrl = config.getEditUrl;\n\t\tthis.getDisplayedColumns = config.getDisplayedColumns;\n\t\tthis.abort$ = config.abort$;\n\t\tthis.onSaved = config.onSaved;\n\t\tthis.onDataUpdate = config.onDataUpdate;\n\t\tthis.onCallReturn = config.onCallReturn;\n\t}\n\n\tstart( row: any, column: XiriTableField, skipSavingCheck = false ): void {\n\t\tif ( !column.editable || !this.editUrl || ( !skipSavingCheck && this.savingCell() ) )\n\t\t\treturn;\n\t\tconst val = row[ column.id ];\n\t\tthis.editingOriginalValue = Array.isArray( val ) ? JSON.parse( JSON.stringify( val ) ) : val;\n\t\tif ( column.format === 'chips' && Array.isArray( val ) && !column.editableOptionsUrl ) {\n\t\t\tthis.editingChipsValues.set( val.map( ( c: any ) => {\n\t\t\t\tconst opt = column.editableOptions?.find( o => o.label === c.label );\n\t\t\t\treturn opt?.value || c.label;\n\t\t\t} ) );\n\t\t}\n\t\tthis.editingCell.set( { row, field: column.id } );\n\n\t\tif ( column.editableOptionsUrl ) {\n\t\t\tthis.editableOptionsLoading.set( true );\n\t\t\tthis.loadedEditableOptions.set( [] );\n\t\t\tthis.editableOptionsSub?.unsubscribe();\n\t\t\tconst separator = column.editableOptionsUrl.includes( '?' ) ? '&' : '?';\n\t\t\tconst optionsUrl = column.editableOptionsUrl + separator + 'id=' + encodeURIComponent( row.id ) + '&field=' + encodeURIComponent( column.id );\n\t\t\tthis.editableOptionsSub = this.dataService.get( optionsUrl ).subscribe( {\n\t\t\t\tnext: ( result: any ) => {\n\t\t\t\t\tthis.loadedEditableOptions.set( result );\n\t\t\t\t\tthis.editableOptionsLoading.set( false );\n\t\t\t\t\tif ( column.format === 'chips' && Array.isArray( val ) ) {\n\t\t\t\t\t\tthis.editingChipsValues.set( val.map( ( c: any ) => {\n\t\t\t\t\t\t\tconst opt = result.find( ( o: any ) => o.label === c.label );\n\t\t\t\t\t\t\treturn opt?.value || c.label;\n\t\t\t\t\t\t} ) );\n\t\t\t\t\t}\n\t\t\t\t\tthis.editableOptionsSub = null;\n\t\t\t\t\tthis.focus();\n\t\t\t\t},\n\t\t\t\terror: () => {\n\t\t\t\t\tthis.editableOptionsLoading.set( false );\n\t\t\t\t\tthis.editableOptionsSub = null;\n\t\t\t\t\tthis.cancel();\n\t\t\t\t\tthis.snackbar.error( 'Optionen konnten nicht geladen werden' );\n\t\t\t\t}\n\t\t\t} );\n\t\t} else {\n\t\t\tthis.focus();\n\t\t}\n\t}\n\n\tcancel(): void {\n\t\tconst editing = this.editingCell();\n\t\tif ( editing ) {\n\t\t\tediting.row[ editing.field ] = this.editingOriginalValue;\n\t\t\tthis.editingCell.set( null );\n\t\t\tthis.editingOriginalValue = null;\n\t\t}\n\t\tthis.editableOptionsSub?.unsubscribe();\n\t\tthis.editableOptionsSub = null;\n\t\tthis.loadedEditableOptions.set( [] );\n\t\tthis.editableOptionsLoading.set( false );\n\t}\n\n\tsave( row: any, column: XiriTableField ): void {\n\t\tconst editing = this.editingCell();\n\t\tif ( !editing || editing.row !== row || editing.field !== column.id ) return;\n\t\tconst newValue = row[ column.id ];\n\t\tconst originalValue = this.editingOriginalValue;\n\t\tthis.editingCell.set( null );\n\t\tthis.editingOriginalValue = null;\n\t\tthis.loadedEditableOptions.set( [] );\n\t\tthis.editableOptionsLoading.set( false );\n\n\t\tconst unchanged = Array.isArray( newValue )\n\t\t\t? JSON.stringify( newValue ) === JSON.stringify( originalValue )\n\t\t\t: newValue === originalValue;\n\t\tif ( unchanged ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = column.format === 'chips' && Array.isArray( newValue )\n\t\t\t? newValue.map( ( c: any ) => c.label )\n\t\t\t: newValue;\n\t\tconst payload = { id: row.id, field: column.id, value };\n\t\tthis.savingCell.set( { row, field: column.id } );\n\t\tthis.dataService.post( this.editUrl, payload ).pipe( takeUntil( this.abort$ ) ).subscribe( {\n\t\t\tnext: ( result: any ) => {\n\t\t\t\tthis.savingCell.set( null );\n\t\t\t\tif ( result?.updates ) {\n\t\t\t\t\tObject.keys( result.updates ).forEach( key => {\n\t\t\t\t\t\trow[ key ] = result.updates[ key ];\n\t\t\t\t\t} );\n\t\t\t\t\tthis.onDataUpdate();\n\t\t\t\t}\n\t\t\t\tthis.onSaved( row, column.id );\n\t\t\t\tthis.onCallReturn( result );\n\t\t\t},\n\t\t\terror: ( err: any ) => {\n\t\t\t\tthis.savingCell.set( null );\n\t\t\t\trow[ column.id ] = originalValue;\n\t\t\t\tthis.onDataUpdate();\n\t\t\t\tthis.snackbar.error( err.error?.error || 'Unknown Error' );\n\t\t\t}\n\t\t} );\n\t}\n\n\tisEditing( row: any, fieldId: string ): boolean {\n\t\tconst editing = this.editingCell();\n\t\treturn editing !== null && editing.row === row && editing.field === fieldId;\n\t}\n\n\tisSaving( row: any, fieldId: string ): boolean {\n\t\tconst saving = this.savingCell();\n\t\treturn saving !== null && saving.row === row && saving.field === fieldId;\n\t}\n\n\tonKeydown( event: KeyboardEvent, row: any, column: XiriTableField ): void {\n\t\tif ( event.key === 'Enter' ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.save( row, column );\n\t\t} else if ( event.key === 'Escape' ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.cancel();\n\t\t} else if ( event.key === 'Tab' ) {\n\t\t\tconst matSelect = ( event.target as HTMLElement ).closest( 'mat-select' );\n\t\t\tif ( matSelect && matSelect.classList.contains( 'mat-mdc-select-open' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tconst direction = event.shiftKey ? -1 : 1;\n\t\t\tconst nextColumn = this.getAdjacentEditableColumn( column.id, direction );\n\t\t\tthis.save( row, column );\n\t\t\tif ( nextColumn ) {\n\t\t\t\tthis.start( row, nextColumn, true );\n\t\t\t}\n\t\t}\n\t}\n\n\tfocus(): void {\n\t\tafterNextRender( () => {\n\t\t\tconst el = document.querySelector( '.xiri-inline-edit input, .xiri-inline-edit mat-select' ) as HTMLElement;\n\t\t\tel?.focus();\n\t\t}, { injector: this.injector } );\n\t}\n\n\tgetAdjacentEditableColumn( currentField: string, direction: 1 | -1 ): XiriTableField | null {\n\t\tconst noInlineEdit = new Set( [ 'buttons', 'icon', 'html', 'link', 'input', 'text2', 'textn', 'number', 'header' ] );\n\t\tconst currentIndex = this.displayedColumns.findIndex( c => c.id === currentField );\n\t\tif ( currentIndex === -1 ) return null;\n\t\tfor ( let i = currentIndex + direction; i >= 0 && i < this.displayedColumns.length; i += direction ) {\n\t\t\tconst col = this.displayedColumns[ i ];\n\t\t\tif ( col.editable && !noInlineEdit.has( col.format ) ) {\n\t\t\t\treturn col;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tflashSaved( row: any, fieldId: string, dataSource: any ): void {\n\t\tafterNextRender( () => {\n\t\t\tconst rowIndex = dataSource.data.indexOf( row );\n\t\t\tconst colIndex = this.displayedColumns.findIndex( c => c.id === fieldId );\n\t\t\tif ( rowIndex === -1 || colIndex === -1 ) return;\n\t\t\tconst rows = document.querySelectorAll( '.xiritable tr.mat-mdc-row' );\n\t\t\tconst rowEl = rows[ rowIndex ];\n\t\t\tif ( !rowEl ) return;\n\t\t\tconst cells = rowEl.querySelectorAll( 'td.mat-mdc-cell' );\n\t\t\tconst cell = cells[ colIndex ] as HTMLElement;\n\t\t\tif ( !cell ) return;\n\t\t\tcell.classList.add( 'xiri-cell-saved' );\n\t\t\tsetTimeout( () => cell.classList.remove( 'xiri-cell-saved' ), 500 );\n\t\t}, { injector: this.injector } );\n\t}\n\n\tgetOptions( column: XiriTableField ): { value: string; label: string; color?: string }[] {\n\t\treturn column.editableOptions ?? this.loadedEditableOptions();\n\t}\n\n\tonChipsChange( row: any, column: XiriTableField, selectedValues: string[] ): void {\n\t\tthis.editingChipsValues.set( selectedValues );\n\t\tconst opts = this.getOptions( column );\n\t\trow[ column.id ] = selectedValues.map( val => {\n\t\t\tconst opt = opts.find( o => o.value === val );\n\t\t\treturn { label: opt?.label || val, color: opt?.color || '' };\n\t\t} );\n\t}\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { XiriButton, XiriButtonComponent, XiriButtonResult } from \"../button/button.component\";\n\n\nexport interface XiriButtonlineSettings {\n\tbuttons: XiriButton[]\n\tclass: string\n}\n\n@Component( {\n\t selector: 'xiri-buttonline',\n\t templateUrl: './buttonline.component.html',\n\t styleUrl: './buttonline.component.scss',\n\t imports: [\n\t\t XiriButtonComponent\n\t ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriButtonlineComponent {\n\t\n\tsettings = input.required<XiriButtonlineSettings>();\n\tdisabled = input<boolean>( false );\n\tfilterData = input<any>( undefined );\n\t\n\tresult = output<XiriButtonResult>();\n}\n","<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","import { Injectable } from '@angular/core';\n\n\n@Injectable( {\n\t providedIn: 'root'\n } )\nexport class XiriSessionStorageService {\n\t\n\tprivate readonly isSupported: boolean = false;\n\tprivate data: { [ name: string ]: any } = {};\n\t\n\tconstructor() {\n\t\t\n\t\tif ( window.sessionStorage )\n\t\t\tthis.isSupported = true;\n\t}\n\t\n\tpublic clear() {\n\t\t\n\t\tthis.data = {};\n\t\tif ( this.isSupported )\n\t\t\tsessionStorage.clear();\n\t}\n\t\n\tpublic set( name: string, value: any ) {\n\t\t\n\t\tlet val = {\n\t\t\ttime: Date.now(),\n\t\t\tvalue: value,\n\t\t}\n\t\t\n\t\tthis.data[ name ] = val;\n\t\tif ( this.isSupported )\n\t\t\tsessionStorage.setItem( name, JSON.stringify( val ) );\n\t}\n\t\n\tprivate getStruct( name: string ): any {\n\t\t\n\t\tif ( this.data[ name ] )\n\t\t\treturn this.data[ name ];\n\t\t\n\t\tif ( this.isSupported ) {\n\t\t\tconst valstr = sessionStorage.getItem( name );\n\t\t\tif ( valstr ) {\n\t\t\t\tconst val = JSON.parse( valstr );\n\t\t\t\tthis.data[ name ] = val;\n\t\t\t\treturn val;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn null;\n\t}\n\t\n\tpublic remove( name: string ) {\n\t\t\n\t\tdelete this.data[ name ];\n\t\tif ( this.isSupported )\n\t\t\tsessionStorage.removeItem( name );\n\t}\n\t\n\tpublic get( name: string ): any {\n\t\t\n\t\tlet val = this.getStruct( name );\n\t\tif ( !val )\n\t\t\treturn null;\n\t\t\n\t\treturn val.value;\n\t}\n\t\n\t/**\n\t * @param name\n\t * @param maxTime in seconds\n\t */\n\tpublic getTimeout( name: string, maxTime: number ): any {\n\t\t\n\t\tlet val = this.getStruct( name );\n\t\tif ( !val )\n\t\t\treturn null;\n\t\t\n\t\tif ( val.time < Date.now() - maxTime * 1000 ) {\n\t\t\tthis.remove( name );\n\t\t\treturn null;\n\t\t}\n\t\t\n\t\treturn val.value;\n\t}\n\t\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable( {\n\t providedIn: 'root'\n } )\nexport class XiriNumberService {\n\t\n\tprivate currentLocale: string = 'de-DE';\n\t\n\tpublic setLocale( locale: string ) {\n\t\tthis.currentLocale = locale;\n\t}\n\t\n\tpublic formatNumber( value: number, webformat?: string ): string {\n\t\tif ( value === null || value === undefined ) {\n\t\t\treturn '';\n\t\t}\n\t\t\n\t\tlet options: Intl.NumberFormatOptions;\n\t\t\n\t\tswitch ( webformat ) {\n\t\t\tcase 'integer':\n\t\t\t\toptions = {\n\t\t\t\t\tstyle: 'decimal',\n\t\t\t\t\tminimumFractionDigits: 0,\n\t\t\t\t\tmaximumFractionDigits: 0\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'float1':\n\t\t\t\toptions = {\n\t\t\t\t\tstyle: 'decimal',\n\t\t\t\t\tminimumFractionDigits: 1,\n\t\t\t\t\tmaximumFractionDigits: 1\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'float2':\n\t\t\t\toptions = {\n\t\t\t\t\tstyle: 'decimal',\n\t\t\t\t\tminimumFractionDigits: 2,\n\t\t\t\t\tmaximumFractionDigits: 2\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'float3':\n\t\t\t\toptions = {\n\t\t\t\t\tstyle: 'decimal',\n\t\t\t\t\tminimumFractionDigits: 3,\n\t\t\t\t\tmaximumFractionDigits: 3\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'float4':\n\t\t\t\toptions = {\n\t\t\t\t\tstyle: 'decimal',\n\t\t\t\t\tminimumFractionDigits: 4,\n\t\t\t\t\tmaximumFractionDigits: 4\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\toptions = { style: 'decimal' };\n\t\t}\n\t\t\n\t\treturn new Intl.NumberFormat( this.currentLocale, options ).format( value );\n\t}\n}","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { XiriButton, XiriButtonComponent, XiriButtonResult } from '../button/button.component';\nimport { XiriColor } from '../types/color.type';\n\nexport interface XiriEmptyStateSettings {\n\ticon?: string\n\ticonColor?: XiriColor\n\ttitle?: string\n\tdescription?: string\n\tbutton?: XiriButton\n}\n\n@Component( {\n\t selector: 'xiri-empty-state',\n\t templateUrl: './empty-state.component.html',\n\t styleUrl: './empty-state.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, XiriButtonComponent ]\n } )\nexport class XiriEmptyStateComponent {\n\n\tsettings = input.required<XiriEmptyStateSettings>();\n\tbuttonResult = output<XiriButtonResult>();\n}\n","<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","import {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tcomputed,\n\tDestroyRef,\n\teffect,\n\tinject,\n\tinput,\n\tOnDestroy,\n\tOnInit,\n\toutput,\n\tsignal,\n\tTemplateRef,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort, MatSortable, MatSortHeader } from '@angular/material/sort';\nimport {\n\tMatCell, MatCellDef,\n\tMatColumnDef, MatFooterCell, MatFooterCellDef, MatFooterRow, MatFooterRowDef,\n\tMatHeaderCell, MatHeaderCellDef,\n\tMatHeaderRow, MatHeaderRowDef,\n\tMatRow, MatRowDef,\n\tMatTable,\n\tMatTableDataSource\n} from '@angular/material/table';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { Router, RouterLink } from '@angular/router';\nimport { Observable, Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { XiriDialogComponent } from \"../dialog/dialog.component\";\nimport { XiriDataService } from '../services/data.service';\nimport { XiriButton, XiriButtonComponent, XiriButtonResult } from \"../button/button.component\";\nimport { XiriSnackbarService } from '../services/snackbar.service';\nimport { XiriResponseHandlerService } from '../services/response-handler.service';\nimport { XiriDownloadService } from '../services/download.service';\nimport { XiriTableInlineEditService } from './inline-edit.service';\nimport { XiriButtonlineComponent, XiriButtonlineSettings } from \"../buttonline/buttonline.component\";\nimport { XiriDynData } from \"../dyncomponent/dyndata.interface\";\nimport { XiriTableField } from \"../raw-table/tabefield.interface\";\nimport { XiriSessionStorageService } from \"../services/sessionStorage.service\";\nimport { XiriNumberService } from \"../services/number.service\";\nimport { SafehtmlPipe } from '../pipes/safehtml.pipe';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { FormsModule } from '@angular/forms';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatSuffix } from '@angular/material/form-field';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { XiriButtonstyleComponent } from '../buttonstyle/buttonstyle.component';\nimport { XiriSearchComponent } from '../search/search.component';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\nimport { MatSelect, MatOption } from '@angular/material/select';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MatCard } from '@angular/material/card';\nimport { XiriEmptyStateComponent } from '../empty-state/empty-state.component';\nimport { XiriColor } from '../types/color.type';\n\n\nexport interface XiriTableEmptyState {\n\ticon?: string\n\ticonColor?: XiriColor\n\ttitle?: string\n\tdescription?: string\n}\n\nexport interface XiriTableOptions {\n\treload?: boolean\n\tdense?: boolean\n\tsort?: boolean\n\tsearch?: boolean\n\tclass?: string\n\tpagination?: boolean\n\titemsPerPage?: number\n\tpageSizes?: number[]\n\tselect?: boolean\n\tselectButtons?: XiriButton[]\n\ttitle?: string\n\ttextNoData?: string\n\temptyState?: XiriTableEmptyState\n\tbuttons?: XiriButtonlineSettings\n\tminWidth?: string\n\tsaveState?: boolean\n\tsaveStateId?: string\n\tsaveInput?: string\n\tsaveInputUrl?: string\n\tborders?: boolean\n\tbordersHeader?: boolean\n\tfooter?: boolean\n\tserverSide?: boolean\n\tscrollHeight?: string\n\teditUrl?: string\n}\n\nexport interface XiriTableSettings {\n\turl?: string\n\tdata?: any\n\tfields?: XiriTableField[]\n\toptions?: XiriTableOptions\n\thasFilter?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-table',\n\t templateUrl: './table.component.html',\n\t styleUrl: './table.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t encapsulation: ViewEncapsulation.None,\n\t providers: [ XiriTableInlineEditService ],\n\t imports: [ MatCard,\n\t MatIconButton,\n\t MatIcon,\n\t XiriButtonlineComponent,\n\t XiriSearchComponent,\n\t MatButton,\n\t MatTable,\n\t MatSort,\n\t MatColumnDef,\n\t MatHeaderCell,\n\t MatSortHeader,\n\t MatCell,\n\t RouterLink,\n\t XiriButtonstyleComponent,\n\t MatTooltip,\n\t MatFormField, MatSuffix,\n\t MatInput,\n\t FormsModule,\n\t MatCheckbox,\n\t MatHeaderRow,\n\t MatRow,\n\t MatProgressSpinner,\n\t MatPaginator,\n\t NgTemplateOutlet,\n\t SafehtmlPipe, XiriButtonComponent, MatHeaderCellDef, MatCellDef, MatHeaderRowDef, MatRowDef,\n\t MatFooterRow, MatFooterRowDef, MatFooterCell, MatFooterCellDef,\n\t MatMenu, MatMenuItem, MatMenuTrigger,\n\t MatSelect, MatOption,\n\t XiriEmptyStateComponent ]\n } )\nexport class XiriTableComponent implements OnInit, OnDestroy {\n\t\n\tprivate dialog: MatDialog = inject( MatDialog );\n\tprivate dataService: XiriDataService = inject( XiriDataService );\n\tprivate router: Router = inject( Router );\n\tprivate sessionStorageService: XiriSessionStorageService = inject( XiriSessionStorageService );\n\tprivate numberService: XiriNumberService = inject( XiriNumberService );\n\tprivate snackbar = inject( XiriSnackbarService );\n\tprivate responseHandler = inject( XiriResponseHandlerService );\n\tprivate downloadService = inject( XiriDownloadService );\n\tinlineEdit = inject( XiriTableInlineEditService );\n\tprotected _changeDetectorRef: ChangeDetectorRef = inject( ChangeDetectorRef );\n\tprivate destroyRef = inject( DestroyRef );\n\t\n\tdyncomponent = input<TemplateRef<any>>();\n\tsettings = input.required<XiriTableSettings>();\n\tfilterData = input<any>( undefined );\n\tclickedRow = output<any>();\n\n\tpaginator = viewChild.required<MatPaginator>( MatPaginator );\n\tsort = viewChild.required<MatSort>( MatSort );\n\ttable = viewChild.required<MatTable<any>>( MatTable );\n\tloading = signal<boolean>( true );\n\tprivate _totalCount = signal<number>( 0 );\n\t\n\tdisplayedColumns: XiriTableField[] = [];\n\tcolumnsToDisplay: string[] = [];\n\tcolumnsToSearch: string[] = [];\n\tdataSource: MatTableDataSource<any> = new MatTableDataSource();\n\tprotected _displayeddata: readonly any[];\n\t_alldata = signal<any[] | null>( null );\n\tfooter = [];\n\t\n\textraHeaderFields: XiriTableField[] = [];\n\textraHeaders: string[] = [];\n\t\n\tpublic selection = new SelectionModel<any>( true, [] );\n\tprivate dialogRef?: MatDialogRef<any>;\n\tprivate reloadAbort$ = new Subject<void>();\n\tpublic options: XiriTableOptions = {\n\t\treload: false,\n\t\tdense: false,\n\t\tsort: true,\n\t\tsearch: true,\n\t\tpagination: true,\n\t\titemsPerPage: 50,\n\t\tpageSizes: [ 10, 25, 50, 100, 500 ],\n\t\tselect: false,\n\t\ttitle: '',\n\t\ttextNoData: 'no data found',\n\t\tsaveInput: null,\n\t\tsaveInputUrl: null,\n\t\tsaveState: false,\n\t\tsaveStateId: null,\n\t\tborders: false,\n\t\tbordersHeader: false,\n\t\tfooter: false,\n\t\tserverSide: false,\n\t};\n\t\n\tpublic dynData: {\n\t\tdata: XiriDynData[],\n\t\tfilterData: any,\n\t} = { data: null, filterData: undefined };\n\tpublic errorMsg: string = '';\n\tprivate _firstData: boolean = true;\n\tpublic searchText: string = '';\n\tpublic searchTextInit: string = '';\n\n\tprivate tableStateKey(): string | null {\n\t\treturn this.options.saveStateId ? this.options.saveStateId + ':table' : null;\n\t}\n\n\ttrackByRowId = ( _: number, row: any ): any => row.id ?? _;\n\n\t// Inline edit signals delegated to inlineEdit service\n\tget editingCell() { return this.inlineEdit.editingCell; }\n\tget editingChipsValues() { return this.inlineEdit.editingChipsValues; }\n\tget editableOptionsLoading() { return this.inlineEdit.editableOptionsLoading; }\n\tget loadedEditableOptions() { return this.inlineEdit.loadedEditableOptions; }\n\tget savingCell() { return this.inlineEdit.savingCell; }\n\t\n\t_filterData = computed( () => {\n\t\t\n\t\tlet values = this.filterData();\n\t\t\n\t\tif ( values === undefined )\n\t\t\treturn undefined;\n\t\telse if ( values === null )\n\t\t\treturn null;\n\t\t\n\t\treturn values;\n\t} );\n\t\n\tconstructor() {\n\t\t\n\t\teffect( () => {\n\t\t\tconst filterData = this._filterData();\n\n\t\t\tthis.loading.set( true );\n\t\t\tthis.reloadAbort$.next();\n\n\t\t\tif ( filterData === null )\n\t\t\t\treturn;\n\n\t\t\tthis.loadData();\n\t\t} );\n\t\t\n\t\teffect( () => {\n\t\t\tif ( this._alldata() === null )\n\t\t\t\tthis.dataSource.data = [];\n\t\t\telse\n\t\t\t\tthis.dataSource.data = this._alldata();\n\t\t} );\n\t}\n\t\n\tpublic ngOnInit() {\n\t\t\n\t\tif ( this.settings().options )\n\t\t\tthis.options = { ...this.options, ...this.settings().options };\n\t\tif ( this.settings().fields )\n\t\t\tthis.loadFields( this.settings().fields );\n\n\t\tthis.inlineEdit.init( {\n\t\t\tgetEditUrl: () => this.options.editUrl,\n\t\t\tgetDisplayedColumns: () => this.displayedColumns,\n\t\t\tabort$: this.reloadAbort$,\n\t\t\tonSaved: ( row, fieldId ) => this.inlineEdit.flashSaved( row, fieldId, this.dataSource ),\n\t\t\tonDataUpdate: () => this.dataSource._updateChangeSubscription(),\n\t\t\tonCallReturn: ( result ) => this.callReturn( result ),\n\t\t} );\n\n\t\tif ( this.options.pagination )\n\t\t\tthis.paginator().pageSize = <number> this.options.itemsPerPage;\n\t\tif ( this.options.pagination && !this.options.serverSide )\n\t\t\tthis.dataSource.paginator = this.paginator();\n\t\tif ( this.options.sort && !this.options.serverSide ) {\n\t\t\tthis.dataSource.sort = this.sort();\n\t\t\tthis.dataSource.sortingDataAccessor = this.getSortingDataAccessor();\n\t\t\tif ( this.options.pagination )\n\t\t\t\tthis.sort().sortChange.subscribe( () => this.paginator().firstPage() );\n\t\t}\n\n\t\tif ( this.options.serverSide ) {\n\t\t\tthis.paginator().page\n\t\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t\t.subscribe( () => {\n\t\t\t\t\tthis.reload();\n\t\t\t\t} );\n\n\t\t\tif ( this.options.sort ) {\n\t\t\t\tthis.sort().sortChange\n\t\t\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t\t\t.subscribe( () => {\n\t\t\t\t\t\tthis.paginator().firstPage();\n\t\t\t\t\t\tthis.reload();\n\t\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\t\n\t\tif ( this.options.search && !this.options.serverSide ) {\n\t\t\tthis.dataSource.filterPredicate = ( data: object, filter: string ): boolean => {\n\t\t\t\tconst dataStr = this.columnsToSearch.reduce( ( currentTerm: string, key: string ) => {\n\t\t\t\t\treturn currentTerm + ( data as { [ key: string ]: any } )[ key ] + '◬';\n\t\t\t\t}, '' ).toLowerCase();\n\t\t\t\treturn dataStr.indexOf( filter ) != -1;\n\t\t\t};\n\t\t}\n\t\t\n\t\tif ( this.options.buttons )\n\t\t\tthis.options.buttons.class = 'small';\n\t\t\n\t\tthis.dataSource.connect()\n\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe( data => {\n\t\t\t\t\tthis._displayeddata = data || [];\n\t\t\t\t\t\n\t\t\t\t\tif ( this.options.saveState && this._firstData === false && this.tableStateKey() ) {\n\t\t\t\t\t\tthis.sessionStorageService.set( this.tableStateKey(), {\n\t\t\t\t\t\t\tpageIndex: this.paginator()?.pageIndex,\n\t\t\t\t\t\t\tpageSize: this.paginator()?.pageSize,\n\t\t\t\t\t\t\tfilter: this.searchText,\n\t\t\t\t\t\t\tsort: this.sort()?.active,\n\t\t\t\t\t\t\tsortDirection: this.sort()?.direction,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif ( this.options.footer ) {\n\t\t\t\t\t\tthis.displayedColumns.forEach( ( column: XiriTableField ) => {\n\t\t\t\t\t\t\tif ( column.footer === 'no' )\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif ( column.footer === 'count' ) {\n\t\t\t\t\t\t\t\tthis.footer[ column.id ] = this._displayeddata.length + '#';\n\t\t\t\t\t\t\t} else if ( column.footer === 'sum' ) {\n\t\t\t\t\t\t\t\tlet sum = 0;\n\t\t\t\t\t\t\t\tthis._displayeddata.forEach( ( row: any ) => {\n\t\t\t\t\t\t\t\t\tsum += +row[ column.id ][ 1 ];\n\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\tif ( !column.webformat )\n\t\t\t\t\t\t\t\t\tthis.footer[ column.id ] = sum;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tthis.footer[ column.id ] = this.numberService.formatNumber( sum, column.webformat );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t} );\n\n\t\t// if ( !this.settings().hasFilter )\n\t\t//\tthis.loadData();\n\t}\n\t\n\tprivate loadData() {\n\t\t\n\t\tthis.errorMsg = '';\n\t\tthis.selection.clear();\n\t\tthis.dynData.data = null;\n\t\t\n\t\tif ( this.settings().data ) {\n\t\t\tthis.options.reload = false;\n\t\t\tthis.setData( this.settings().data );\n\t\t\tthis.loading.set( false );\n\t\t} else if ( this.settings().url ) {\n\n\t\t\tlet api: Observable<any>;\n\t\t\tlet payload: any = this.settings().hasFilter ? { ...this._filterData() } : {};\n\n\t\t\tif ( this.options.serverSide ) {\n\t\t\t\tpayload._page = this.paginator().pageIndex;\n\t\t\t\tpayload._pageSize = this.paginator().pageSize;\n\t\t\t\tif ( this.sort().active ) {\n\t\t\t\t\tpayload._sort = this.sort().active;\n\t\t\t\t\tpayload._sortDir = this.sort().direction;\n\t\t\t\t}\n\t\t\t\tif ( this.searchText ) {\n\t\t\t\t\tpayload._search = this.searchText;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tapi = this.dataService.post( this.settings().url, Object.keys( payload ).length > 0 ? payload : null );\n\t\t\t\n\t\t\tapi.pipe( takeUntil( this.reloadAbort$ ) ).subscribe( {\n\t\t\t\tnext: ( res: any ) => {\n\n\t\t\t\t\tif ( !res || !res.data ) {\n\t\t\t\t\t\tthis.errorMsg = 'ERROR: unknown server response';\n\t\t\t\t\t\tthis._alldata.set( [] );\n\t\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( res.fields )\n\t\t\t\t\t\tthis.loadFields( res.fields );\n\t\t\t\t\tif ( res.summary )\n\t\t\t\t\t\tthis.dynData.data = res.summary;\n\t\t\t\t\telse if ( res.components )\n\t\t\t\t\t\tthis.dynData.data = res.components;\n\n\t\t\t\t\tif ( res.footer )\n\t\t\t\t\t\tthis.setFooter( res.footer );\n\t\t\t\t\tif ( res.totalCount !== undefined && this.options.serverSide ) {\n\t\t\t\t\t\tthis._totalCount.set( res.totalCount );\n\t\t\t\t\t\tthis.paginator().length = res.totalCount;\n\t\t\t\t\t}\n\t\t\t\t\tthis.setData( res.data );\n\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t\t\t}, error: ( err: any ) => {\n\t\t\t\t\tthis.errorMsg = err.error?.error ? err.error.error : err.statusText;\n\t\t\t\t\tthis._alldata.set( [] );\n\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\t\n\tprivate loadFields( fields: XiriTableField[] ) {\n\t\t\n\t\tthis.displayedColumns = [];\n\t\tthis.columnsToDisplay = [];\n\t\tthis.columnsToSearch = [];\n\t\tthis.extraHeaderFields = [];\n\t\tthis.extraHeaders = [];\n\t\t\n\t\tif ( this.options.select )\n\t\t\tthis.columnsToDisplay.push( 'select' );\n\t\t\n\t\tfor ( let fid = 0; fid != fields.length; fid++ ) {\n\t\t\tconst column = fields[ fid ];\n\t\t\t\n\t\t\tif ( column.format == 'header' ) {\n\t\t\t\tthis.extraHeaderFields.push( column );\n\t\t\t\tthis.extraHeaders.push( column.id );\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\tif ( column.id === undefined )\n\t\t\t\tcolumn.id = '' + fid;\n\t\t\tif ( column.format == 'id' )\n\t\t\t\tcontinue;\n\t\t\tif ( !column.display )\n\t\t\t\tcolumn.display = '';\n\t\t\tif ( column.format )\n\t\t\t\tcolumn.display = column.format + ' ' + column.display;\n\t\t\tif ( column.align )\n\t\t\t\tcolumn.display += ` align-${ column.align }`;\n\t\t\t\n\t\t\tcolumn.sort = column.sort === undefined ? true : column.sort;\n\t\t\tcolumn.search = column.search === undefined ? true : column.search;\n\t\t\tcolumn.sticky = column.sticky === undefined ? false : column.sticky;\n\t\t\tcolumn.hide = column.hide === undefined ? false : column.hide;\n\t\t\t\n\t\t\tif ( !column.hide ) {\n\t\t\t\tthis.displayedColumns.push( column );\n\t\t\t\tthis.columnsToDisplay.push( column.id );\n\t\t\t}\n\t\t\t\n\t\t\tif ( column.search )\n\t\t\t\tthis.columnsToSearch.push( column.id );\n\t\t}\n\t}\n\t\n\tprivate setData( data: any[] ): void {\n\t\t\n\t\tthis._alldata.set( data );\n\t\t\n\t\tif ( this._firstData ) {\n\t\t\tthis._firstData = false;\n\t\t\t\n\t\t\tif ( this.options.saveState && this.tableStateKey() ) {\n\t\t\t\tlet data = this.sessionStorageService.getTimeout( this.tableStateKey(), 3600 );\n\t\t\t\tif ( !data )\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\tif ( data.filter !== undefined ) {\n\t\t\t\t\tthis.searchText = data.filter;\n\t\t\t\t\tthis.searchTextInit = data.filter;\n\t\t\t\t}\n\t\t\t\tif ( data.sort !== undefined && data.sortDirection !== undefined )\n\t\t\t\t\tthis.sort().sort( ( { id: data.sort, start: data.sortDirection } ) as MatSortable );\n\t\t\t\tif ( data.pageSize !== undefined && data.pageIndex !== undefined ) {\n\t\t\t\t\tthis.paginator().pageIndex = data.pageIndex;\n\t\t\t\t\tthis.paginator()._changePageSize( data.pageSize );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tprivate setFooter( footer: any ): void {\n\t\tthis.footer = footer;\n\t\t\n\t\tthis.displayedColumns.forEach( ( column: XiriTableField ) => {\n\t\t\tif ( Array.isArray( this.footer[ column.id ] ) )\n\t\t\t\tthis.footer[ column.id ] = this.footer[ column.id ][ 0 ];\n\t\t} );\n\t}\n\t\n\treload(): void {\n\t\tif ( this.loading() )\n\t\t\treturn;\n\t\t\n\t\tthis.loading.set( true );\n\t\tthis.loadData();\n\t}\n\t\n\tsearchDo( $event: any ) {\n\t\tthis.searchText = $event.trim().toLowerCase();\n\n\t\tif ( this.options.serverSide ) {\n\t\t\tthis.paginator().firstPage();\n\t\t\tthis.reload();\n\t\t} else {\n\t\t\tthis.dataSource.filter = this.searchText;\n\t\t\tif ( this.dataSource.paginator ) {\n\t\t\t\tthis.dataSource.paginator.firstPage();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tisAllSelected() {\n\t\tlet found: number = 0;\n\t\tthis._displayeddata.forEach( row => {\n\t\t\tif ( row.select !== false ) {\n\t\t\t\tif ( !this.selection.isSelected( row ) )\n\t\t\t\t\tfound++;\n\t\t\t}\n\t\t} );\n\t\treturn found === 0;\n\t}\n\t\n\tmasterToggle() {\n\t\tthis.isAllSelected() ? this.selection.clear() : this._displayeddata.forEach( row => {\n\t\t\tif ( row.select !== false )\n\t\t\t\tthis.selection.select( row );\n\t\t} );\n\t}\n\t\n\tclicked( row: any ) {\n\t\tthis.clickedRow.emit( row );\n\t}\n\t\n\topenDialog( event: MouseEvent, button: any, id: any, subid: any, row: any ) {\n\t\t\n\t\tevent.stopPropagation();\n\t\tlet data = Object.assign( {}, button );\n\t\tdata.type = 'load';\n\t\tdata.url = row[ id ][ subid ];\n\t\t\n\t\tthis.startDialog( data );\n\t}\n\t\n\topenMenuDialog( event: MouseEvent, item: any, columnId: string, buttonIndex: number, menuItemIndex: number, row: any ) {\n\t\tevent.stopPropagation();\n\t\tlet data = Object.assign( {}, item );\n\t\tdata.type = 'load';\n\t\tdata.url = row[ columnId ][ buttonIndex ][ menuItemIndex ];\n\t\tthis.startDialog( data );\n\t}\n\n\topenDialogSelection( event: MouseEvent, button: XiriButton ) {\n\t\t\n\t\tevent.stopPropagation();\n\t\tif ( this.selection.isEmpty() )\n\t\t\treturn true;\n\t\t\n\t\tlet data = <any> Object.assign( {}, button );\n\t\tdata.type = 'data';\n\t\tdata.data = this.getSelectionIDs();\n\t\t\n\t\tthis.startDialog( data );\n\t\treturn true;\n\t}\n\t\n\tprivate startDialog( data: object ) {\n\t\t\n\t\tthis.dialogRef = this.dialog.open( XiriDialogComponent, {\n\t\t\tdata: data,\n\t\t} );\n\t\t\n\t\tthis.dialogRef.afterClosed().subscribe( {\n\t\t\t next: ( result ) => this.callReturn( result )\n\t\t } );\n\t}\n\t\n\tapiCall( event: MouseEvent, url: string ) {\n\t\tevent.stopPropagation();\n\t\tthis.makeApiCall( this.dataService.get( url ) );\n\t}\n\t\n\tapiCallSelection( event: MouseEvent, button: XiriButton ) {\n\t\tevent.stopPropagation();\n\t\tif ( this.selection.isEmpty() )\n\t\t\treturn;\n\t\t\n\t\tlet data = { data: this.getSelectionIDs() };\n\t\t\n\t\tthis.makeApiCall( this.dataService.post( button.url ? button.url : '', data ) );\n\t}\n\t\n\tsaveCall( event: MouseEvent, button: XiriButton, row, url: string ) {\n\t\tevent.stopPropagation();\n\t\t\n\t\tif ( !this.saveCallCheck( button, row ) )\n\t\t\treturn;\n\t\t\n\t\tlet data = {};\n\t\tfor ( let i = 0; i != button.send.length; i++ ) {\n\t\t\tlet k = button.send[ i ];\n\t\t\tdata[ k ] = row[ k ];\n\t\t}\n\t\t\n\t\tthis.dataService.post( url, data ).pipe( takeUntil( this.reloadAbort$ ) ).subscribe( {\n\t\t\tnext: ( result ) => this.callReturn( result ),\n\t\t\terror: ( err: any ) => {\n\t\t\t\tconsole.log( \"table save error\", err );\n\t\t\t\tthis.snackbar.error( err.error?.error || 'Unknown Error' );\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tsaveCallCheck( button: XiriButton, row ): boolean {\n\t\t\n\t\tfor ( let i = 0; i != button.check.length; i++ ) {\n\t\t\tlet k = button.check[ i ];\n\t\t\t\n\t\t\tif ( row[ k ] === null || row[ k ] === undefined || row[ k ] === '' ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn true;\n\t}\n\t\n\tdownloadSelection( event: MouseEvent, button: XiriButton ) {\n\t\tevent.stopPropagation();\n\t\tif ( this.selection.isEmpty() )\n\t\t\treturn;\n\n\t\tconst url = button.url ? button.url : '';\n\t\tthis.dataService.postFileResponse( url, this.getSelectionIDs() ).pipe( takeUntil( this.reloadAbort$ ) ).subscribe( {\n\t\t\tnext: ( result: any ) => {\n\t\t\t\tthis.downloadService.download( result, 'download.csv', false );\n\t\t\t},\n\t\t\terror: ( err: any ) => {\n\t\t\t\tthis.snackbar.error( err.error?.error || 'Download Error' );\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tprivate makeApiCall( apicall: Observable<object> ) {\n\t\t\n\t\tapicall.pipe( takeUntil( this.reloadAbort$ ) ).subscribe( {\n\t\t\tnext: ( result ) => this.callReturn( result ),\n\t\t\terror: ( err: any ) => {\n\t\t\t\tconsole.log( \"table api error\", err );\n\t\t\t\tthis.snackbar.error( err.error?.error || 'Unknown Error' );\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tpublic buttonReturn( event: XiriButtonResult ) {\n\t\t\n\t\tif ( !event.done )\n\t\t\treturn;\n\t\t\n\t\tthis.callReturn( event.result );\n\t}\n\t\n\tprivate callReturn( result: any ) {\n\t\tthis.responseHandler.handle( result, {\n\t\t\tonTableRefresh: () => this.reload(),\n\t\t\tonTableUpdate: ( id, field, content ) => {\n\t\t\t\tconst i = this.dataSource.data.findIndex( ( x: any ) => x.id === id );\n\t\t\t\tif ( i == -1 )\n\t\t\t\t\treturn;\n\t\t\t\tthis.dataSource.data[ i ][ field ] = content;\n\t\t\t\tthis.dataSource._updateChangeSubscription();\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tprivate getSelectionIDs(): number[] {\n\t\t\n\t\treturn this.selection.selected.map( ( item ) => {\n\t\t\treturn +item[ 'id' ];\n\t\t} );\n\t}\n\t\n\tstartInlineEdit( row: any, column: XiriTableField, skipSavingCheck = false ): void {\n\t\tthis.inlineEdit.start( row, column, skipSavingCheck );\n\t}\n\n\tcancelInlineEdit(): void {\n\t\tthis.inlineEdit.cancel();\n\t}\n\n\tsaveInlineEdit( row: any, column: XiriTableField ): void {\n\t\tthis.inlineEdit.save( row, column );\n\t}\n\n\tisEditing( row: any, fieldId: string ): boolean {\n\t\treturn this.inlineEdit.isEditing( row, fieldId );\n\t}\n\n\tisSaving( row: any, fieldId: string ): boolean {\n\t\treturn this.inlineEdit.isSaving( row, fieldId );\n\t}\n\n\tonInlineEditKeydown( event: KeyboardEvent, row: any, column: XiriTableField ): void {\n\t\tthis.inlineEdit.onKeydown( event, row, column );\n\t}\n\n\tgetEditableOptions( column: XiriTableField ): { value: string; label: string; color?: string }[] {\n\t\treturn this.inlineEdit.getOptions( column );\n\t}\n\n\tonChipsSelectionChange( row: any, column: XiriTableField, selectedValues: string[] ): void {\n\t\tthis.inlineEdit.onChipsChange( row, column, selectedValues );\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.reloadAbort$.next();\n\t\tthis.reloadAbort$.complete();\n\t\tif ( this.dialogRef )\n\t\t\tthis.dialogRef.close( null );\n\t}\n\t\n\tpublic pasteInput( $event: any, row: any, column: XiriTableField ) {\n\t\t\n\t\tif ( column.inputPaste !== true )\n\t\t\treturn false;\n\t\t\n\t\t// Get the clipboard text\n\t\tconst clipboardText = $event.clipboardData.getData( 'text' );\n\t\t\n\t\t// Split into rows\n\t\tlet clipRowsArray = clipboardText.split( \"\\n\" );\n\t\t\n\t\t// Split rows into columns\n\t\tfor ( let i = 0; i < clipRowsArray.length; i++ ) {\n\t\t\tclipRowsArray[ i ] = clipRowsArray[ i ].split( \"\\t\" );\n\t\t}\n\t\t\n\t\tif ( clipRowsArray.length < 2 ) {\n\t\t\tif ( clipRowsArray[ 0 ].length < 2 )\n\t\t\t\treturn null;\n\t\t}\n\t\t\n\t\tconst startRow = this.dataSource.data.findIndex( ( x: any ) => x.id === row.id );\n\t\tif ( startRow == -1 )\n\t\t\treturn false;\n\t\tconst startCol = this.displayedColumns.findIndex( ( x: any ) => x.id === column.id );\n\t\tif ( startCol == -1 )\n\t\t\treturn false;\n\t\t\n\t\tfor ( let i = 0; i < clipRowsArray.length; i++ ) {\n\t\t\tlet curRow = i + startRow;\n\t\t\tif ( curRow >= this.dataSource.data.length )\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tlet result = this.dataSource.data[ curRow ];\n\t\t\tfor ( let j = 0; j < clipRowsArray[ i ].length; j++ ) {\n\t\t\t\tlet curCol = j + startCol;\n\t\t\t\tif ( curCol >= this.displayedColumns.length )\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tlet col = this.displayedColumns[ curCol ];\n\t\t\t\tresult[ col.id ] = clipRowsArray[ i ][ j ];\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.dataSource._updateChangeSubscription();\n\t\treturn false;\n\t}\n\t\n\tpublic saveInputData() {\n\t\t\n\t\t// this.loading.set( true );\n\t\tlet data = this.dataSource.data;\n\t\tif ( this.settings().url ) {\n\t\t\tthis._alldata.set( [] );\n\t\t\t// this.dataSource.data = [];\n\t\t\tthis.dataSource._updateChangeSubscription();\n\t\t}\n\t\tthis._changeDetectorRef.markForCheck();\n\t\t\n\t\tthis.dataService.post( this.options.saveInputUrl, data ).pipe( takeUntil( this.reloadAbort$ ) ).subscribe( {\n\t\t\tnext: ( result ) => {\n\t\t\t\tthis.callReturn( result );\n\t\t\t},\n\t\t\terror: ( err: any ) => {\n\t\t\t\tthis._alldata.set( data );\n\t\t\t\tthis.dataSource._updateChangeSubscription();\n\t\t\t\tconsole.log( \"table save error\", err );\n\t\t\t\tthis.snackbar.error( err.error?.error || 'Unknown Error' );\n\t\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tprivate getSortingDataAccessor(): ( data: any, sortHeaderId: string ) => string | number {\n\t\treturn ( data: any, sortHeaderId: string ): string | number => {\n\t\t\tconst column = this.displayedColumns.find( col => col.id === sortHeaderId );\n\t\t\tif ( column && column.format === 'number' )\n\t\t\t\treturn data[ sortHeaderId ][ 1 ];\n\t\t\t\n\t\t\treturn data[ sortHeaderId ];\n\t\t};\n\t}\n}\n","<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<div class=\"header\">\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<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.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) {\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 (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<a mat-menu-item [routerLink]=\"row[column.id][i][j]\">\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[ row[ column.id ] ]) {\n\t\t\t\t\t\t\t\t\t\t\t<mat-icon [class]=\"column.icons[ row[ column.id ] ][ 'color' ] || 'primary'\"\n\t\t\t\t\t\t\t\t\t\t\t [matTooltip]=\"column.icons[ row[ column.id ] ][ 'hint' ] \"\n\t\t\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!column.icons[ row[ column.id ] ][ 'hint' ]\">{{ column.icons[row[column.id]]['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\t@if (row[column.id + 'Link']) {\n\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"row[column.id + 'Link']\" 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</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\"\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@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\" (click)=\"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\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) {\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@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 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\" (click)=\"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</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 (options.select) {\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 (row.select !== false) {\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 ? selection.toggle(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)\"></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\">{{ errorMsg }}</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@switch (button.action) {\n\t\t\t\t\t\t\t\t@case ('dialog') {\n\t\t\t\t\t\t\t\t\t<button mat-icon-button\n\t\t\t\t\t\t\t\t\t (click)=\"openDialogSelection( $event, button )\"\n\t\t\t\t\t\t\t\t\t [disabled]=\"selection.isEmpty()\"\n\t\t\t\t\t\t\t\t\t [color]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t\t\t [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\">\n\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</button>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('api') {\n\t\t\t\t\t\t\t\t\t<button mat-icon-button\n\t\t\t\t\t\t\t\t\t (click)=\"apiCallSelection( $event, button )\"\n\t\t\t\t\t\t\t\t\t [disabled]=\"selection.isEmpty()\"\n\t\t\t\t\t\t\t\t\t [color]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t\t\t [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\">\n\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</button>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@case ('download') {\n\t\t\t\t\t\t\t\t\t<button mat-icon-button\n\t\t\t\t\t\t\t\t\t (click)=\"downloadSelection( $event, button )\"\n\t\t\t\t\t\t\t\t\t [disabled]=\"selection.isEmpty()\"\n\t\t\t\t\t\t\t\t\t [color]=\"button.color || 'primary'\"\n\t\t\t\t\t\t\t\t\t [matTooltip]=\"button.hint\"\n\t\t\t\t\t\t\t\t\t [matTooltipDisabled]=\"!button.hint\">\n\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</button>\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","import { inject, Injectable } from '@angular/core';\nimport { XiriDataService } from './data.service';\nimport { Router } from \"@angular/router\";\nimport { XiriButton } from \"../button/button.component\";\nimport { XiriFormField } from \"../formfields/field.interface\";\nimport { catchError, map, Observable, throwError, timer } from \"rxjs\";\nimport { HttpErrorResponse } from \"@angular/common/http\";\nimport { XiriSessionStorageService } from \"./sessionStorage.service\";\nimport { parseHttpError } from './error.util';\n\n\ninterface XiriFormServiceReturn {\n\turl?: string\n\tfields?: XiriFormField[]\n\tbuttons?: XiriButton[]\n\tdone?: boolean\n\tgoto?: string\n\tmodel?: object\n\textra?: object\n\n\t// dialog\n\ttype?: string\n\theader?: string\n\ttime?: number\n}\n\nexport interface XiriFormServiceData {\n\turl: string\n\tfields?: XiriFormField[]\n\tbuttons?: XiriButton[]\n\textra?: object\n\tdone?: Observable<void>\n\n\t// dialog\n\ttype?: string // form, data\n\theader?: string\n\ttime?: number\n}\n\nexport interface XiriFormServiceError {\n\terror: string\n}\n\n@Injectable( {\n\tprovidedIn: 'root',\n} )\nexport class XiriFormService {\n\n\tprivate dataService: XiriDataService = inject( XiriDataService );\n\tprivate router: Router = inject( Router );\n\tprivate sessionStorageService: XiriSessionStorageService = inject( XiriSessionStorageService );\n\t\n\t\n\tpublic get( url: string, data?: any, extra?: any ): Observable<XiriFormServiceData> {\n\n\t\tconst req: Observable<XiriFormServiceReturn> = data === null ? this.dataService.get( url ) : this.dataService.post( url, { ...data, ...extra } );\n\n\t\treturn req.pipe(\n\t\t\tmap( res => this.parse( res ) ),\n\t\t\tcatchError( ( err: HttpErrorResponse ): Observable<never> => {\n\t\t\t\treturn throwError( () => <XiriFormServiceError>{\n\t\t\t\t\terror: parseHttpError( err )\n\t\t\t\t} );\n\t\t\t} )\n\t\t);\n\t}\n\n\tpublic parse( res: XiriFormServiceReturn ): XiriFormServiceData {\n\n\t\tif ( res.buttons ) {\n\t\t\tlet fields: XiriFormField[] = [];\n\t\t\tlet model = res.model || {};\n\t\t\tlet type = res.type ? res.type : 'form';\n\n\t\t\tif ( type == 'form' ) {\n\t\t\t\tres.fields.forEach( ( field: any ) => {\n\t\t\t\t\tif ( field.hide == true )\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif ( model[ field.id ] !== undefined )\n\t\t\t\t\t\tfield.value = model[ field.id ];\n\n\t\t\t\t\tfields.push( field );\n\t\t\t\t} );\n\t\t\t} else if ( type == 'question' ) {\n\t\t\t\tlet obj = <any>res.fields;\n\t\t\t\tobj.type = 'question';\n\t\t\t\tfields.push( obj );\n\t\t\t} else if ( type == 'waiting' ) {\n\t\t\t\tlet obj = <any>res.fields;\n\t\t\t\tobj.type = 'waiting';\n\t\t\t\tobj.done = false;\n\t\t\t\tobj.value = obj.text;\n\t\t\t\tfields.push( obj );\n\t\t\t} else {\n\t\t\t\tconsole.log( 'XiriFormService unknown form type', type );\n\n\t\t\t}\n\n\t\t\treturn <XiriFormServiceData>{\n\t\t\t\turl: res.url,\n\t\t\t\tbuttons: res.buttons,\n\t\t\t\textra: res.extra || {},\n\t\t\t\tfields: fields,\n\n\t\t\t\ttype: type,\n\t\t\t\ttime: res.time || 2000,\n\t\t\t};\n\n\t\t} else if ( res.goto ) {\n\t\t\treturn <XiriFormServiceData>{\n\t\t\t\tdone: timer( res.done ? 1000 : 0 ).pipe( map( () => {\n\t\t\t\t\tthis.router.navigate( [res.goto] ).then();\n\t\t\t\t} ) )\n\t\t\t};\n\t\t} else {\n\t\t\treturn <XiriFormServiceData>{\n\t\t\t\tdone: timer( res.done ? 1000 : 0 ).pipe( map( () => {\n\t\t\t\t} ) )\n\t\t\t};\n\t\t}\n\t}\n\t\n\tpublic loadState( saveStateId: string|null|undefined, fields: XiriFormField[] ): XiriFormField[] {\n\t\t\n\t\tif ( !saveStateId )\n\t\t\treturn fields;\n\t\t\n\t\tlet data = this.sessionStorageService.getTimeout( saveStateId, 3600 );\n\t\tif ( !data )\n\t\t\treturn fields;\n\t\t\n\t\tfor ( let field of fields ) {\n\t\t\t\n\t\t\tif ( data[ field.id ] === undefined )\n\t\t\t\tcontinue;\n\t\t\t\n\t\t\tlet value = data[ field.id ];\n\t\t\t\n\t\t\tswitch ( field.type ) {\n\t\t\t\tcase 'bool':\n\t\t\t\t\tfield.value = value;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'select':\n\t\t\t\tcase 'object':\n\t\t\t\tcase 'model':\n\t\t\t\t\tif ( !field.list )\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tfor ( let item of field.list ) {\n\t\t\t\t\t\tif ( item.id == value ) {\n\t\t\t\t\t\t\tfield.value = value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n\t\t\t\t\tif ( field.min && field.min > value )\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tif ( field.max && field.max < value )\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tfield.value = value;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'daterange':\n\t\t\t\tcase 'datetimerange':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn fields;\n\t}\n\t\n\tpublic saveState( saveStateId: string|null|undefined, values: any ): void {\n\t\t\n\t\tif ( !saveStateId )\n\t\t\treturn;\n\t\t\n\t\tthis.sessionStorageService.set( saveStateId, values );\n\t}\n}\n","import { ChangeDetectionStrategy, Component, DestroyRef, inject, input, OnInit, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subject } from \"rxjs\";\nimport { Location } from '@angular/common';\nimport { XiriButton } from \"../button/button.component\";\nimport { XiriFormService, XiriFormServiceData, XiriFormServiceError } from \"../services/form.service\";\nimport { XiriButtonstyleComponent } from '../buttonstyle/buttonstyle.component';\nimport { XiriDoneComponent } from '../done/done.component';\nimport { XiriErrorComponent } from '../error/error.component';\nimport { XiriFormFieldsComponent } from '../formfields/form-fields.component';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { XiriFormField } from \"../formfields/field.interface\";\n\nexport interface XiriFormSettings {\n\tload?: boolean\n\turl: string\n\tfields?: any[]\n\tbuttons?: XiriButton[]\n\theader?: string\n}\n\n@Component( {\n\t selector: 'xiri-form',\n\t templateUrl: './form.component.html',\n\t styleUrl: './form.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ CdkTrapFocus,\n\t MatProgressSpinner,\n\t XiriFormFieldsComponent,\n\t XiriErrorComponent,\n\t XiriDoneComponent,\n\t XiriButtonstyleComponent ]\n } )\nexport class XiriFormComponent implements OnInit {\n\n\tsettings = input.required<XiriFormSettings>();\n\n\tprivate location = inject( Location );\n\tprivate formService = inject( XiriFormService );\n\tprivate destroyRef = inject( DestroyRef );\n\n\tpublic formFields = signal<XiriFormField[]>( null );\n\tpublic loading = signal<boolean>( true );\n\tpublic loadingButton = signal<XiriButton | null>( null );\n\tpublic done = signal<boolean>( false );\n\tpublic error = signal<string>( '' );\n\n\tprivate url: string;\n\tpublic buttons: XiriButton[] = [];\n\tprivate extra = {};\n\tprivate formValues: any = null;\n\tpublic formValid: boolean = true;\n\tpublic checkSubject: Subject<void> = new Subject<void>();\n\t\n\t\n\tngOnInit(): void {\n\t\t\n\t\tthis.url = this.settings().url;\n\t\t\n\t\tif ( this.settings().load ) {\n\t\t\tthis.send( null );\n\t\t} else\n\t\t\tthis.loadData( this.formService.parse( this.settings() ) );\n\t}\n\t\n\tprivate send( data: any ) {\n\t\t\n\t\tthis.loading.set( true );\n\t\tthis.error.set( '' );\n\t\t\n\t\tthis.formService.get( this.url, data, this.extra ).pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe(\n\t\t\t{\n\t\t\t\tnext: ( res: XiriFormServiceData ) => {\n\t\t\t\t\tthis.loadData( res );\n\t\t\t\t},\n\t\t\t\terror: ( err: XiriFormServiceError ) => {\n\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t\tthis.loadingButton.set( null );\n\t\t\t\t\tthis.error.set( err.error ?? 'Unknown Error' );\n\t\t\t\t\t\n\t\t\t\t\tif ( this.buttons.length == 0 ) {\n\t\t\t\t\t\tthis.buttons = [ {\n\t\t\t\t\t\t\ttext: 'Close',\n\t\t\t\t\t\t\taction: 'close',\n\t\t\t\t\t\t\ttype: 'raised',\n\t\t\t\t\t\t} ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t}\n\n\tprivate loadData( res: XiriFormServiceData ): void {\n\t\t\n\t\tif ( res.buttons ) {\n\t\t\tif ( res.url )\n\t\t\t\tthis.url = res.url;\n\t\t\tthis.buttons = res.buttons;\n\t\t\tthis.extra = res.extra;\n\t\t\tthis.formFields.set( res.fields );\n\t\t} else if ( res.done ) {\n\t\t\tthis.done.set( true );\n\t\t\tthis.formFields.set( null );\n\t\t\tthis.buttons = [];\n\t\t\tres.done.pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe();\n\t\t}\n\t\t\n\t\tthis.loading.set( false );\n\t\tthis.loadingButton.set( null );\n\t}\n\t\n\tclickButton( button: XiriButton ): void {\n\n\t\tif ( button.action == 'back' )\n\t\t\tthis.location.back();\n\t\telse if ( button.action == 'get' ) {\n\t\t\tthis.url = <string> button.url;\n\t\t\tthis.loadingButton.set( button );\n\t\t\tthis.startSend( null );\n\t\t} else if ( button.action == 'post' ) {\n\t\t\tthis.url = <string> button.url;\n\t\t\tthis.loadingButton.set( button );\n\t\t\tthis.startSend( button.data );\n\t\t} else if ( button.action == 'debug' ) {\n\t\t\tthis.checkSubject.next();\n\t\t} else if ( button.action == 'simulate' ) {\n\t\t\tif ( this.formValid ) {\n\t\t\t\tthis.loadingButton.set( button );\n\t\t\t\tthis.loading.set( true );\n\t\t\t\tthis.error.set( '' );\n\t\t\t\tsetTimeout( () => {\n\t\t\t\t\tthis.loadData( this.formService.parse( {\n\t\t\t\t\t\t done: true,\n\t\t\t\t\t } ) );\n\t\t\t\t}, 5000 );\n\t\t\t} else\n\t\t\t\tthis.checkSubject.next();\n\n\n\t\t} else {\n\t\t\tif ( this.loading() )\n\t\t\t\treturn;\n\n\t\t\tthis.loadingButton.set( button );\n\t\t\tthis.startSend( this.formValues );\n\t\t}\n\t}\n\t\n\tprivate startSend( data: any ): void {\n\t\t\n\t\tsetTimeout( () => {\n\t\t\tif ( this.formValid )\n\t\t\t\tthis.send( data );\n\t\t\telse\n\t\t\t\tthis.checkSubject.next();\n\t\t}, 10 );\n\t}\n\t\n\tpublic formChanged( event: any ) {\n\t\t\n\t\tthis.formValid = event.valid;\n\t\tthis.formValues = event.value;\n\t\t\n\t\t// data = { ...data, ...this.extra }\n\t\t// this.events.push( '' + this.formValid + ' => ' + JSON.stringify( event.value ) );\n\t}\n\t\n}\n","<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","import {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tDestroyRef,\n\tinject,\n\tinput,\n\tOnInit,\n\toutput,\n\tsignal,\n\tTemplateRef\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { debounceTime, Subject } from \"rxjs\";\nimport { XiriFormField } from \"../formfields/field.interface\";\nimport { XiriDynData } from \"../dyncomponent/dyndata.interface\";\nimport { NgTemplateOutlet } from '@angular/common';\nimport { XiriFormFieldsComponent } from '../formfields/form-fields.component';\nimport { XiriDataService } from \"../services/data.service\";\nimport { XiriFormService } from \"../services/form.service\";\nimport { XiriButtonlineComponent } from \"../buttonline/buttonline.component\";\nimport { XiriButtonResult } from \"../button/button.component\";\nimport { MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle } from \"@angular/material/expansion\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatProgressSpinner } from \"@angular/material/progress-spinner\";\n\nexport interface XiriQuerySettings {\n\tfields?: XiriFormField[]\n\tdyn?: any[]\n\turl?: string\n\tbuttonline?: XiriDynData\n\textra?: any\n\tsaveState?: boolean\n\tsaveStateId?: string\n\tcollapsed?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-query',\n\t templateUrl: './query.component.html',\n\t styleUrl: './query.component.scss',\n\t imports: [ XiriFormFieldsComponent, NgTemplateOutlet, XiriButtonlineComponent, MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle, MatIcon, MatProgressSpinner ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriQueryComponent implements OnInit {\n\n\tprivate dataService: XiriDataService = inject( XiriDataService );\n\tprivate formService = inject( XiriFormService );\n\tprivate cdr = inject( ChangeDetectorRef );\n\tprivate destroyRef = inject( DestroyRef );\n\n\tsettings = input.required<XiriQuerySettings>();\n\tdyncomponent = input<TemplateRef<any>>();\n\tchange = output<any>();\n\n\tprivate waiter: Subject<any> = new Subject<any>();\n\t\n\tpublic dynData: {\n\t\tdata: XiriDynData[],\n\t\tfilterData: any,\n\t} = { data: null, filterData: null };\n\t\n\tprivate saveState: boolean = false;\n\tprivate saveStateId: string | null = null;\n\tprivate extra: any = null;\n\tprivate _initialChangeDone: boolean = false;\n\n\tprivate get effectiveSaveKey(): string | null {\n\t\treturn this.saveStateId ? this.saveStateId + ':filter' : null;\n\t}\n\t\n\tpublic data = signal<XiriDynData[] | null>( null );\n\tpublic error = signal<string | null>( null );\n\tpublic formFields = signal<XiriFormField[]>( null );\n\tpublic formValid = signal<boolean>( true );\n\tpublic filterData = signal<any>( null );\n\tpublic loading = signal<boolean>( false );\n\t\n\tngOnInit(): void {\n\t\t\n\t\tlet settings = this.settings();\n\t\tif ( settings.dyn !== undefined && settings.dyn !== null && settings.dyn.length != 0 )\n\t\t\tthis.dynData.data = settings.dyn;\n\t\t\n\t\tthis.saveState = settings.saveState === undefined ? false : settings.saveState;\n\t\tthis.saveStateId = settings.saveStateId === undefined ? null : settings.saveStateId;\n\t\tthis.formFields.set( this.formService.loadState( this.effectiveSaveKey, settings.fields ) );\n\t\tthis.extra = settings.extra || null;\n\t\t\n\t\tthis.waiter.pipe( debounceTime( 300 ), takeUntilDestroyed( this.destroyRef ) ).subscribe( event => {\n\n\t\t\tif ( event.valid ) {\n\t\t\t\tthis.dynData.filterData = this.filterData();\n\t\t\t\tthis.change.emit( this.filterData() );\n\t\t\t\tif ( this.saveState )\n\t\t\t\t\tthis.formService.saveState( this.effectiveSaveKey, event.value );\n\n\t\t\t\tif ( this.settings().url )\n\t\t\t\t\tthis.load();\n\t\t\t} else {\n\t\t\t\tthis.data.set( null );\n\t\t\t\tthis.dynData.filterData = null;\n\t\t\t\tthis.change.emit( null );\n\t\t\t}\n\t\t\tthis.cdr.markForCheck();\n\t\t} );\n\t}\n\n\tpublic formChanged( event: any ) {\n\t\tthis.formValid.set( event.valid );\n\n\t\tif ( this.extra !== null ) {\n\t\t\tif ( event.value && typeof event.value === 'object' )\n\t\t\t\tthis.filterData.set( { ...this.extra, ...event.value } );\n\t\t\telse\n\t\t\t\tthis.filterData.set( this.extra );\n\t\t} else\n\t\t\tthis.filterData.set( event.value );\n\n\t\t// Emit immediately on first valid change (for initial load), debounce subsequent changes\n\t\tif ( !this._initialChangeDone && event.valid ) {\n\t\t\tthis._initialChangeDone = true;\n\t\t\tthis.dynData.filterData = this.filterData();\n\t\t\tthis.change.emit( this.filterData() );\n\t\t\tif ( this.saveState )\n\t\t\t\tthis.formService.saveState( this.effectiveSaveKey, event.value );\n\t\t\tif ( this.settings().url )\n\t\t\t\tthis.load();\n\t\t} else {\n\t\t\tthis.waiter.next( event );\n\t\t}\n\t}\n\t\n\tpublic clickedButton( event: XiriButtonResult ) {\n\t\t\n\t\tif ( !event.loading && event.done ) {\n\t\t\tthis.data.set( event.result );\n\t\t\tthis.error.set( null );\n\t\t\tthis.change.emit( this.filterData() );\n\t\t} else {\n\t\t\tthis.data.set( null );\n\t\t\tthis.error.set( null );\n\t\t}\n\t\t\n\t\tthis.loading.set( event.loading );\n\t}\n\t\n\tprivate load() {\n\t\t\n\t\tthis.data.set( null );\n\t\tthis.error.set( null );\n\t\t\n\t\tlet call = this.dataService.post( this.settings().url, this.dynData.filterData );\n\t\t\n\t\tcall.pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe(\n\t\t\t{\n\t\t\t\tnext: ( res: any ) => {\n\t\t\t\t\tif ( !res ) {\n\t\t\t\t\t\tthis.error.set( 'Unknown Error' );\n\t\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// check if res is an array\n\t\t\t\t\tif ( Array.isArray( res.data ) )\n\t\t\t\t\t\tthis.data.set( res.data );\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.data.set( [ res.data ] );\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t},\n\t\t\t\terror: ( err: any ) => {\n\t\t\t\t\tif ( err.status === 404 )\n\t\t\t\t\t\tthis.error.set( 'Page not found' );\n\t\t\t\t\telse if ( err.status === 401 )\n\t\t\t\t\t\tthis.error.set( 'No permission to view page' );\n\t\t\t\t\telse if ( err.status === 403 )\n\t\t\t\t\t\tthis.error.set( 'Access denied' );\n\t\t\t\t\telse if ( err.status === 500 )\n\t\t\t\t\t\tthis.error.set( 'Internal Error' );\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.error.set( 'Unknown Error' );\n\n\t\t\t\t\tconsole.log( 'XiriQueryComponent error', err );\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t}\n\t\t\t} );\n\t}\n}\n","<div class=\"xrow\">\n\t<div class=\"xcol\">\n\t\t@if (settings().collapsed !== undefined) {\n\t\t\t<mat-expansion-panel [expanded]=\"!settings().collapsed\" 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@if (error()) {\n\t\t\t\t\t\t<div class=\"error\">{{ error() }}</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@if (error()) {\n\t\t\t\t\t<div class=\"error\">{{ error() }}</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n\t@if (settings().buttonline) {\n\t\t<div class=\"xcol formbtnline\" [class]=\"settings().buttonline.display\">\n\t\t\t<xiri-buttonline [settings]=\"settings().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\">\n\t\t\t<ng-container *ngTemplateOutlet=\"dyncomponent(); context: { $implicit: data() }\"></ng-container>\n\t\t</div>\n\t}\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nexport type XiriSkeletonType = 'text' | 'circle' | 'rect' | 'table-row';\n\n@Component( {\n\t selector: 'xiri-skeleton',\n\t templateUrl: './skeleton.component.html',\n\t styleUrl: './skeleton.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t host: { 'role': 'status', 'aria-label': 'Laden...', '[class.fill]': 'fill()' }\n } )\nexport class XiriSkeletonComponent {\n\n\ttype = input<XiriSkeletonType>( 'text' );\n\twidth = input<string>( '100%' );\n\theight = input<string>( '1em' );\n\tlines = input<number>( 1 );\n\tcolumns = input<number>( 4 );\n\tanimate = input<boolean>( true );\n\tfill = input<boolean>( false );\n\n\tlinesArray = computed( () => Array.from( { length: this.lines() } ) );\n\tcolumnsArray = computed( () => Array.from( { length: this.columns() } ) );\n}\n","@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","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport { RouterLink } from '@angular/router';\nimport { XiriColor } from '../types/color.type';\n\n\nexport interface XiriInfopointSettings {\n\ttext: string\n\tinfo: string\n\n\turl?: string\n\turlParams?: object\n\n\ticon: string\n\ticonSet?: string;\n\ticonColor: XiriColor\n\n\tdense?: boolean\n\tcompact?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-infopoint',\n\t templateUrl: './infopoint.component.html',\n\t styleUrl: './infopoint.component.scss',\n\t imports: [ RouterLink, MatCard, MatCardContent, MatIcon ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t host: { '[class.compact]': 'compact()' }\n } )\nexport class XiriInfopointComponent {\n\n\tsettings = input.required<XiriInfopointSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n}\n","<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<div class=\"text\">{{ settings().text }}</div>\n\t\t\t\t}\n\t\t\t\t<div class=\"info\">{{ settings().info }}</div>\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<div class=\"text\">{{ settings().text }}</div>\n\t\t\t\t\t}\n\t\t\t\t\t<div class=\"info\">{{ settings().info }}</div>\n\t\t\t\t</div>\n\t\t\t</mat-card-content>\n\t\t</mat-card>\n\t}\n</div>\n","import { ChangeDetectionStrategy, Component, DestroyRef, inject, input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { XiriDataService } from \"../services/data.service\";\nimport { XiriColor } from '../types/color.type';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { RouterLink } from '@angular/router';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport {\n\tMatListItem,\n\tMatListItemIcon,\n\tMatListItemLine,\n\tMatListItemMeta,\n\tMatListItemTitle,\n\tMatListSubheaderCssMatStyler,\n\tMatNavList\n} from '@angular/material/list';\n\nexport interface XiriListSettings {\n\tsections: XiriListSection[];\n}\n\nexport interface XiriListSection {\n\tname: string;\n\tdata: XiriListItem[];\n}\n\nexport interface XiriListItem {\n\tname: string;\n\tinfo: string;\n\ticon: string;\n\ticonSet?: string;\n\ticonColor: XiriColor;\n\turl: string;\n\thasFavorite?: boolean;\n\tisFavorite?: boolean;\n\tfavoriteUrl?: string;\n\tfavoriteHint?: string;\n}\n\n@Component( {\n\t selector: 'xiri-list',\n\t templateUrl: './list.component.html',\n\t styleUrl: './list.component.scss',\n\t imports: [\n\t\t MatListSubheaderCssMatStyler,\n\t\t MatCard,\n\t\t MatCardContent,\n\t\t MatNavList,\n\t\t MatListItem,\n\t\t RouterLink,\n\t\t MatListItemIcon,\n\t\t MatIcon,\n\t\t MatListItemTitle,\n\t\t MatListItemLine,\n\t\t MatListItemMeta,\n\t\t MatIconButton,\n\t\t MatTooltip,\n\t ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriListComponent {\n\n\tsettings = input.required<XiriListSettings>();\n\tprivate dataService = inject( XiriDataService );\n\tprivate destroyRef = inject( DestroyRef );\n\n\tchangeFavorite( item: XiriListItem, event: Event ) {\n\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\n\t\tlet url = item.favoriteUrl + ( item.isFavorite ? '0' : '1' );\n\t\tthis.dataService.get( url ).pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe();\n\t\titem.isFavorite = !item.isFavorite;\n\t}\n}\n","@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<a mat-list-item [routerLink]=\"item.url\" 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\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","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport interface XiriHeaderSettings {\n\ttext: string\n\tcolor: string\n\tsize: string\n}\n\n@Component( {\n\t selector: 'xiri-header',\n\t templateUrl: './header.component.html',\n\t styleUrl: './header.component.scss',\n\t imports: [],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriHeaderComponent {\n\t\n\tsettings = input.required<XiriHeaderSettings>();\n}\n","<div class=\"name\" [class]=\"settings().color + ' ' + settings().size\">{{ settings().text }}</div>\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tDestroyRef,\n\tinject,\n\tinput,\n\tOnInit,\n\tsignal,\n\tviewChild,\n\tWritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { XiriButton } from \"../button/button.component\";\nimport { Observable, Subscription } from \"rxjs\";\nimport { MatStep, MatStepper } from \"@angular/material/stepper\";\nimport { XiriDataService } from \"../services/data.service\";\nimport { Location } from \"@angular/common\";\nimport { Router } from \"@angular/router\";\nimport { StepperSelectionEvent } from \"@angular/cdk/stepper\";\nimport { XiriFormField } from \"../formfields/field.interface\";\nimport { XiriDoneComponent } from '../done/done.component';\nimport { XiriButtonstyleComponent } from '../buttonstyle/buttonstyle.component';\nimport { XiriErrorComponent } from '../error/error.component';\nimport { XiriFormFieldsComponent } from '../formfields/form-fields.component';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\n\nexport interface XiriStepperSettings {\n\turl?: string\n\tsteps: XiriStepperStep[]\n}\n\nexport interface XiriStepperStep {\n\turl?: string\n\ttitle: string\n\tfields: XiriFormField[]\n\tdata?: any\n\textra?: any\n\tbuttons: XiriButton[]\n}\n\ninterface StepState {\n\turl?: string\n\ttitle: string\n\tcompleted: WritableSignal<boolean>\n\tcheck: WritableSignal<boolean>\n\tvalid: WritableSignal<boolean>\n\tload: WritableSignal<boolean>\n\tgotonext: WritableSignal<boolean>\n\terrorMsg: WritableSignal<string | null>\n\tfields: WritableSignal<XiriFormField[]>\n\tbuttons: WritableSignal<XiriButton[]>\n\tdata?: any\n\textra?: any\n}\n\n\n@Component( {\n\t selector: 'xiri-stepper',\n\t templateUrl: './stepper.component.html',\n\t styleUrl: './stepper.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatStepper,\n\t MatStep,\n\t MatProgressSpinner,\n\t XiriFormFieldsComponent,\n\t XiriErrorComponent,\n\t XiriButtonstyleComponent,\n\t XiriDoneComponent ]\n } )\nexport class XiriStepperComponent implements OnInit {\n\n\tprivate dataService: XiriDataService = inject( XiriDataService );\n\tprivate location: Location = inject( Location );\n\tprivate router: Router = inject( Router );\n\tprivate destroyRef = inject( DestroyRef );\n\n\tsettings = input.required<XiriStepperSettings>();\n\n\tpublic done = signal( false );\n\tprivate calls: Subscription[] = [];\n\n\tstepper = viewChild.required<MatStepper>( MatStepper );\n\n\tpublic steps = signal<StepState[]>( [] );\n\n\n\tngOnInit(): void {\n\t\tconst steps: StepState[] = [];\n\t\tfor ( let i = 0; i != this.settings().steps.length; i++ ) {\n\t\t\tconst step = this.settings().steps[ i ];\n\n\t\t\tsteps.push( {\n\t\t\t\turl: step.url,\n\t\t\t\ttitle: step.title,\n\t\t\t\tcompleted: signal( false ),\n\t\t\t\tcheck: signal( false ),\n\t\t\t\tvalid: signal( false ),\n\t\t\t\tload: signal( i > 0 ),\n\t\t\t\tgotonext: signal( false ),\n\t\t\t\terrorMsg: signal( null ),\n\t\t\t\tfields: signal<XiriFormField[]>( step.fields ),\n\t\t\t\tbuttons: signal<XiriButton[]>( step.buttons ),\n\t\t\t\tdata: step.data,\n\t\t\t\textra: step.extra\n\t\t\t} );\n\t\t}\n\t\tthis.steps.set( steps );\n\t}\n\n\tstepChanged( $event: StepperSelectionEvent ) {\n\t\tconst step = this.steps()[ $event.selectedIndex ];\n\n\t\tif ( step.gotonext() ) {\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.stepper().next();\n\t\t\t}, 10 );\n\t\t}\n\t}\n\n\tformChanged( step: StepState, event: any, i: number ) {\n\n\t\tif ( event.valid )\n\t\t\tstep.data = event.value;\n\t\tif ( !event.pristine ) {\n\t\t\tstep.completed.set( false );\n\t\t\tconst steps = this.steps();\n\t\t\tfor ( let x = i + 1; x < steps.length; x++ ) {\n\t\t\t\tsteps[ x ].completed.set( false );\n\t\t\t\tsteps[ x ].load.set( true );\n\t\t\t\tsteps[ x ].gotonext.set( false );\n\t\t\t}\n\t\t}\n\n\t\tstep.valid.set( event.valid );\n\t}\n\n\tclickButton( button: XiriButton ): void {\n\n\t\tif ( button.action == 'back' )\n\t\t\tthis.location.back();\n\t\telse if ( button.action == 'prev' ) {\n\t\t\tthis.calls.forEach( c => c.unsubscribe() );\n\t\t\tthis.calls = [];\n\n\t\t\tif ( this.stepper().selectedIndex != 0 ) {\n\t\t\t\tfor ( let i = this.stepper().selectedIndex - 1; i != 0; i-- ) {\n\t\t\t\t\tif ( this.steps()[ i ].gotonext() )\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tthis.stepper().selectedIndex = i;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.stepper().selectedIndex = 0;\n\t\t\t} else\n\t\t\t\tthis.location.back();\n\t\t} else if ( button.action == 'next' ) {\n\t\t\tconst step = this.steps()[ this.stepper().selectedIndex ];\n\t\t\tif ( step.valid() && !step.check() )\n\t\t\t\tthis.checkStep( this.stepper().selectedIndex );\n\t\t}\n\t\telse if ( button.action == 'get' ) {\n\t\t\t//\n\t\t} else if ( button.action == 'post' ) {\n\t\t\t//\n\t\t}\n\t}\n\n\tprivate checkStep( current: number ) {\n\t\tconst steps = this.steps();\n\t\tconst stepCurrent = steps[ current ];\n\t\tlet stepNext: StepState | null = null;\n\t\tlet needLoad: boolean;\n\n\t\tif ( current + 1 < steps.length ) {\n\t\t\tstepNext = steps[ current + 1 ];\n\t\t\tneedLoad = stepNext.load();\n\t\t} else {\n\t\t\tneedLoad = true;\n\t\t}\n\n\t\tif ( !needLoad ) {\n\t\t\tthis.stepper().next();\n\t\t\treturn;\n\t\t}\n\n\t\tstepCurrent.check.set( true );\n\t\tstepCurrent.errorMsg.set( null );\n\n\t\tconst x = this.sendStep( current ).pipe( takeUntilDestroyed( this.destroyRef ) ).subscribe(\n\t\t\t{\n\t\t\t\tnext: ( res: any ) => {\n\n\t\t\t\t\tif ( res == null ) {\n\t\t\t\t\t\tthis.showError( stepCurrent, null );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( res.step && res.step != current + 1 ) {\n\n\t\t\t\t\t\tfor ( let i = current + 1; i != res.step; i++ ) {\n\t\t\t\t\t\t\tsteps[ i ].completed.set( true );\n\t\t\t\t\t\t\tsteps[ i ].gotonext.set( true );\n\t\t\t\t\t\t\tsteps[ i ].load.set( false );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstepNext = steps[ res.step ];\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( res.fields )\n\t\t\t\t\t\tstepNext.fields.set( res.fields );\n\t\t\t\t\tif ( res.buttons )\n\t\t\t\t\t\tstepNext.buttons.set( res.buttons );\n\t\t\t\t\tif ( res.url )\n\t\t\t\t\t\tstepNext.url = res.url;\n\t\t\t\t\tif ( stepNext ) {\n\t\t\t\t\t\tstepNext.load.set( false );\n\t\t\t\t\t\tstepNext.gotonext.set( false );\n\t\t\t\t\t}\n\n\t\t\t\t\tstepCurrent.check.set( false );\n\t\t\t\t\tstepCurrent.completed.set( true );\n\n\t\t\t\t\tif ( res.step && stepNext ) {\n\t\t\t\t\t\tsetTimeout( () => {\n\t\t\t\t\t\t\tthis.stepper().selectedIndex = res.step;\n\t\t\t\t\t\t}, 0 )\n\t\t\t\t\t} else if ( res.goto ) {\n\t\t\t\t\t\tthis.done.set( true );\n\t\t\t\t\t\tsetTimeout( () => {\n\t\t\t\t\t\t\tthis.router.navigate( [ res.goto ] ).then();\n\t\t\t\t\t\t}, 1000 );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: ( err ) => {\n\t\t\t\t\tthis.showError( stepCurrent, err );\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.calls.push( x );\n\t}\n\n\tprivate showError( stepCurrent: StepState, err: any ) {\n\n\t\tif ( err == null )\n\t\t\tstepCurrent.errorMsg.set( 'Unknown error' );\n\t\telse if ( err.status == 400 )\n\t\t\tstepCurrent.errorMsg.set( err.error.error || 'Format Error' );\n\t\telse if ( err.status == 403 )\n\t\t\tstepCurrent.errorMsg.set( 'Access denied' );\n\t\telse\n\t\t\tstepCurrent.errorMsg.set( 'Unknown error' );\n\n\t\tstepCurrent.check.set( false );\n\t\tstepCurrent.completed.set( false );\n\t}\n\n\tprivate sendStep( i: number ): Observable<any> {\n\t\tconst steps = this.steps();\n\t\tlet data = {};\n\t\tconst step = steps[ i ];\n\n\t\tfor ( let x = 0; x <= i; x++ )\n\t\t\tdata = { ...data, ...steps[ x ].data };\n\n\t\tif ( step.extra )\n\t\t\tdata = { ...data, ...step.extra };\n\n\t\tconst url = step.url ? step.url : this.settings().url;\n\t\treturn this.dataService.post( url, data );\n\t}\n\n}\n","<mat-horizontal-stepper [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-horizontal-stepper>\n\n@if (done()) {\n\t<div class=\"xcol done\">\n\t\t<xiri-done></xiri-done>\n\t</div>\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, OnDestroy } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MatLine } from \"@angular/material/core\";\nimport { XiriButton } from \"../button/button.component\";\nimport { XiriColor } from '../types/color.type';\nimport { XiriDialogComponent } from \"../dialog/dialog.component\";\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\nimport { Router, RouterLink } from \"@angular/router\";\nimport { MatIconButton } from '@angular/material/button';\nimport { MatListItem, MatNavList } from '@angular/material/list';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n\tMatCard,\n\tMatCardAvatar,\n\tMatCardContent,\n\tMatCardHeader,\n\tMatCardSubtitle,\n\tMatCardTitle\n} from '@angular/material/card';\n\nexport interface XiriLinksSettings {\n\tdata: XiriButton[]\n\theaderIcon?: string\n\theaderIconColor?: XiriColor\n\theaderSub?: string\n\theader?: string\n\tcompact?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-links',\n\t templateUrl: './links.component.html',\n\t styleUrl: './links.component.scss',\n\t imports: [ MatCard,\n\t MatCardHeader,\n\t MatCardAvatar,\n\t MatIcon,\n\t MatCardSubtitle,\n\t MatCardTitle,\n\t MatCardContent,\n\t MatNavList,\n\t MatListItem,\n\t RouterLink,\n\t MatLine,\n\t MatIconButton,\n\t NgTemplateOutlet ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t host: { '[class.compact]': 'compact()' }\n } )\nexport class XiriLinksComponent implements OnDestroy {\n\n\tsettings = input.required<XiriLinksSettings>();\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\tprivate dialog = inject( MatDialog );\n\tprivate router = inject( Router );\n\t\n\tprivate dialogRef?: MatDialogRef<any>;\n\t\n\tngOnDestroy(): void {\n\t\tif ( this.dialogRef )\n\t\t\tthis.dialogRef.close( null );\n\t}\n\t\n\topenDialog( item: XiriButton ) {\n\t\t\n\t\tconst data = {\n\t\t\ttype: 'load',\n\t\t\turl: item.url,\n\t\t};\n\t\t\n\t\tthis.dialogRef = this.dialog.open( XiriDialogComponent, {\n\t\t\tdata: data,\n\t\t} );\n\t\t\n\t\tthis.dialogRef.afterClosed().subscribe( ( result: any ) => {\n\t\t\tif ( !result )\n\t\t\t\treturn;\n\t\t\tif ( result.page == 'refresh' || result.refresh == 'page' )\n\t\t\t\tthis.router.navigate( [ this.router.url ] ).then();\n\t\t} );\n\t\t\n\t\treturn true;\n\t}\n\t\n}\n","@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.action || item.action == 'link') {\n\t\t\t\t<a mat-list-item [routerLink]=\"item.url\">\n\t\t\t\t\t<div matLine>{{ item.text }}</div>\n\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t<button mat-icon-button [attr.aria-label]=\"item.text\">\n\t\t\t\t\t\t\t<mat-icon>{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t</a>\n\t\t\t} @else if (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<div matLine>{{ item.text }}</div>\n\t\t\t\t\t@if (item.icon) {\n\t\t\t\t\t\t<button mat-icon-button [attr.aria-label]=\"item.text\">\n\t\t\t\t\t\t\t<mat-icon [class]=\"item.color || 'primary'\">{{ item.icon }}</mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t</mat-list-item>\n\t\t\t}\n\t\t}\n\t</mat-nav-list>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatRipple } from '@angular/material/core';\nimport { MatCard, MatCardHeader, MatCardAvatar, MatCardTitle, MatCardSubtitle } from '@angular/material/card';\nimport { RouterLink } from '@angular/router';\n\nexport interface XiriCardlinkSettings {\n\tlink: string\n\ticon?: string\n\ticonSet: string\n\ttext?: string\n\tsub?: string\n\tcompact?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-cardlink',\n\t templateUrl: './cardlink.component.html',\n\t styleUrls: [ './cardlink.component.scss' ],\n\t imports: [ RouterLink,\n\t MatCard,\n\t MatRipple,\n\t MatCardHeader,\n\t MatCardAvatar,\n\t MatIcon,\n\t MatCardTitle,\n\t MatCardSubtitle ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t host: { '[class.compact]': 'compact()' }\n } )\nexport class XiriCardlinkComponent {\n\n\tsettings = input.required<XiriCardlinkSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n}\n","<a [routerLink]=\"settings().link\">\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","import { ChangeDetectionStrategy, Component, effect, input, signal, TemplateRef } from '@angular/core';\nimport { MatTabGroup, MatTab, MatTabLabel } from '@angular/material/tabs';\nimport { MatIcon } from '@angular/material/icon';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { XiriDynData } from '../dyncomponent/dyndata.interface';\n\nexport interface XiriTabSettings {\n\tlabel: string\n\ticon?: string\n\tdisabled?: boolean\n\tdata: XiriDynData[]\n\tlazy?: boolean\n\tunload?: boolean\n}\n\nexport interface XiriTabsSettings {\n\ttabs: XiriTabSettings[]\n\tselectedIndex?: number\n\tdynamicHeight?: boolean\n\tanimationDuration?: string\n\tlazy?: boolean\n\tunload?: boolean\n\theaderPosition?: 'above' | 'below'\n\talignTabs?: 'start' | 'center' | 'end'\n\tstretchTabs?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-tabs',\n\t templateUrl: './tabs.component.html',\n\t styleUrl: './tabs.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [\n\t\t MatTabGroup,\n\t\t MatTab,\n\t\t MatTabLabel,\n\t\t MatIcon,\n\t\t NgTemplateOutlet\n\t ]\n } )\nexport class XiriTabsComponent {\n\t\n\tsettings = input.required<XiriTabsSettings>();\n\tfilterData = input<any>( undefined );\n\tdyncomponent = input<TemplateRef<any>>();\n\t\n\tselectedIndex = signal( 0 );\n\tvisitedTabs = signal<Set<number>>( new Set( [ 0 ] ) );\n\t\n\tconstructor() {\n\t\teffect( () => {\n\t\t\tconst idx = this.settings().selectedIndex ?? 0;\n\t\t\tthis.selectedIndex.set( idx );\n\t\t\tthis.visitedTabs.update( set => {\n\t\t\t\tconst newSet = new Set( set );\n\t\t\t\tnewSet.add( idx );\n\t\t\t\treturn newSet;\n\t\t\t} );\n\t\t} );\n\t}\n\t\n\tonTabChange( index: number ): void {\n\t\tthis.selectedIndex.set( index );\n\t\tthis.visitedTabs.update( set => {\n\t\t\tconst newSet = new Set( set );\n\t\t\tnewSet.add( index );\n\t\t\treturn newSet;\n\t\t} );\n\t}\n\t\n\tshouldRenderContent( index: number, tab: XiriTabSettings ): boolean {\n\t\tconst globalUnload = this.settings().unload ?? false;\n\t\tconst tabUnload = tab.unload ?? globalUnload;\n\n\t\tif ( tabUnload )\n\t\t\treturn this.selectedIndex() === index;\n\n\t\tconst globalLazy = this.settings().lazy ?? false;\n\t\tconst tabLazy = tab.lazy ?? globalLazy;\n\n\t\tif ( !tabLazy ) return true;\n\t\treturn this.visitedTabs().has( index );\n\t}\n}\n","<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","import { ChangeDetectionStrategy, Component, input, signal, TemplateRef } from '@angular/core';\nimport { MatAccordion, MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription } from '@angular/material/expansion';\nimport { MatIcon } from '@angular/material/icon';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { XiriDynData } from '../dyncomponent/dyndata.interface';\n\nexport interface XiriExpansionPanelSettings {\n\ttitle: string\n\tdescription?: string\n\ticon?: string\n\tdisabled?: boolean\n\texpanded?: boolean\n\tdata: XiriDynData[]\n\tlazy?: boolean\n\tunload?: boolean\n}\n\nexport interface XiriExpansionSettings {\n\tpanels: XiriExpansionPanelSettings[]\n\tmulti?: boolean\n\tdisplayMode?: 'default' | 'flat'\n\ttogglePosition?: 'before' | 'after'\n\thideToggle?: boolean\n\tlazy?: boolean\n\tunload?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-expansion',\n\t templateUrl: './expansion.component.html',\n\t styleUrl: './expansion.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [\n\t\t MatAccordion,\n\t\t MatExpansionPanel,\n\t\t MatExpansionPanelHeader,\n\t\t MatExpansionPanelTitle,\n\t\t MatExpansionPanelDescription,\n\t\t MatIcon,\n\t\t NgTemplateOutlet\n\t ]\n } )\nexport class XiriExpansionComponent {\n\n\tsettings = input.required<XiriExpansionSettings>();\n\tfilterData = input<any>( undefined );\n\tdyncomponent = input<TemplateRef<any>>();\n\n\topenedPanels = signal<Set<number>>( new Set() );\n\tvisitedPanels = signal<Set<number>>( new Set() );\n\n\tonPanelOpened( index: number ): void {\n\t\tthis.openedPanels.update( set => {\n\t\t\tconst newSet = new Set( set );\n\t\t\tnewSet.add( index );\n\t\t\treturn newSet;\n\t\t} );\n\t\tthis.visitedPanels.update( set => {\n\t\t\tconst newSet = new Set( set );\n\t\t\tnewSet.add( index );\n\t\t\treturn newSet;\n\t\t} );\n\t}\n\n\tonPanelClosed( index: number ): void {\n\t\tthis.openedPanels.update( set => {\n\t\t\tconst newSet = new Set( set );\n\t\t\tnewSet.delete( index );\n\t\t\treturn newSet;\n\t\t} );\n\t}\n\n\tshouldRenderContent( index: number, panel: XiriExpansionPanelSettings ): boolean {\n\t\tconst globalUnload = this.settings().unload ?? false;\n\t\tconst panelUnload = panel.unload ?? globalUnload;\n\n\t\tif ( panelUnload )\n\t\t\treturn this.openedPanels().has( index );\n\n\t\tconst globalLazy = this.settings().lazy ?? false;\n\t\tconst panelLazy = panel.lazy ?? globalLazy;\n\n\t\tif ( !panelLazy ) return true;\n\t\treturn this.visitedPanels().has( index );\n\t}\n}\n","<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","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport { XiriColor } from '../types/color.type';\n\nexport interface XiriStatTrend {\n\tvalue: number\n\tdirection: 'up' | 'down' | 'neutral'\n}\n\nexport interface XiriStatSettings {\n\tvalue: string | number\n\tlabel: string\n\ticon?: string\n\ticonColor?: XiriColor\n\ttrend?: XiriStatTrend\n\tprefix?: string\n\tsuffix?: string\n\tcolor?: XiriColor\n\tcompact?: boolean\n}\n\n@Component( {\n\t selector: 'xiri-stat',\n\t templateUrl: './stat.component.html',\n\t styleUrl: './stat.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, MatCard, MatCardContent, NgTemplateOutlet ],\n\t host: { '[class.compact]': 'compact()' }\n } )\nexport class XiriStatComponent {\n\n\tsettings = input.required<XiriStatSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n}\n","@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</div>\n\t\t@if (settings().trend) {\n\t\t\t<div class=\"stat-trend\" [class]=\"settings().trend.direction\">\n\t\t\t\t<mat-icon>\n\t\t\t\t\t@switch (settings().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>{{ settings().trend.value > 0 ? '+' : '' }}{{ settings().trend.value }}%</span>\n\t\t\t</div>\n\t\t}\n\t</div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, forwardRef, input, signal, TemplateRef } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatDivider } from '@angular/material/divider';\nimport { XiriButtonlineComponent, XiriButtonlineSettings } from '../buttonline/buttonline.component';\nimport { XiriDynComponentComponent } from '../dyncomponent/dyncomponent.component';\nimport { XiriDynData } from '../dyncomponent/dyndata.interface';\n\nexport interface XiriSectionSettings {\n\ttitle?: string\n\tsubtitle?: string\n\ticon?: string\n\ticonColor?: string\n\tcollapsible?: boolean\n\tcollapsed?: boolean\n\tbuttons?: XiriButtonlineSettings\n\tcomponents?: XiriDynData[]\n}\n\n@Component( {\n\t selector: 'xiri-section',\n\t templateUrl: './section.component.html',\n\t styleUrl: './section.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, MatDivider, XiriButtonlineComponent, forwardRef( () => XiriDynComponentComponent ) ]\n } )\nexport class XiriSectionComponent {\n\n\tsettings = input.required<XiriSectionSettings>();\n\tdyncomponent = input<TemplateRef<any>>();\n\n\tcollapsed = signal<boolean>( false );\n\n\tconstructor() {\n\t}\n\n\tngOnInit() {\n\t\tif ( this.settings().collapsed ) {\n\t\t\tthis.collapsed.set( true );\n\t\t}\n\t}\n\n\ttoggle() {\n\t\tthis.collapsed.update( v => !v );\n\t}\n}\n","<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 (click)=\"settings().collapsible && toggle()\">\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","import { ChangeDetectionStrategy, Component, computed, forwardRef, input, TemplateRef } from '@angular/core';\nimport { XiriDynData } from \"./dyndata.interface\";\nimport { SafehtmlPipe } from '../pipes/safehtml.pipe';\nimport { XiriImagetextComponent } from '../imagetext/imagetext.component';\nimport { XiriMultiprogressComponent } from '../multiprogress/multiprogress.component';\nimport { XiriInfopointComponent } from '../infopoint/infopoint.component';\nimport { XiriListComponent } from '../list/list.component';\nimport { XiriHeaderComponent } from '../header/header.component';\nimport { XiriStepperComponent } from '../stepper/stepper.component';\nimport { XiriQueryComponent } from '../query/query.component';\nimport { XiriFormComponent } from '../form/form.component';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';\nimport { XiriLinksComponent } from '../links/links.component';\nimport { XiriCardlinkComponent } from '../cardlink/cardlink.component';\nimport { XiriTableComponent } from '../table/table.component';\nimport { XiriButtonlineComponent } from '../buttonline/buttonline.component';\nimport { XiriCardComponent } from '../card/card.component';\nimport { XiriTabsComponent } from '../tabs/tabs.component';\nimport { XiriExpansionComponent } from '../expansion/expansion.component';\nimport { XiriStatComponent } from '../stat/stat.component';\nimport { XiriEmptyStateComponent } from '../empty-state/empty-state.component';\nimport { XiriTimelineComponent } from '../timeline/timeline.component';\nimport { XiriPageHeaderComponent } from '../page-header/page-header.component';\nimport { XiriSectionComponent } from '../section/section.component';\nimport { XiriDividerComponent } from '../divider/divider.component';\nimport { XiriStatGridComponent } from '../stat-grid/stat-grid.component';\nimport { XiriToolbarComponent } from '../toolbar/toolbar.component';\nimport { XiriDescriptionListComponent } from '../description-list/description-list.component';\nimport { XiriBarChartComponent } from '../barchart/barchart.component';\nimport { XiriLineChartComponent } from '../linechart/linechart.component';\nimport { XiriPieChartComponent } from '../piechart/piechart.component';\nimport { XiriGaugeChartComponent } from '../gaugechart/gaugechart.component';\nimport { XiriHeatmapComponent } from '../heatmap/heatmap.component';\nimport { XiriCalendarComponent } from '../calendar/calendar.component';\nimport { XiriTreeComponent } from '../tree/tree.component';\nimport { XiriSankeyComponent } from '../sankey/sankey.component';\nimport { XiriGanttComponent } from '../gantt/gantt.component';\n\n\n@Component( {\n\t selector: 'xiri-dyncomponent',\n\t templateUrl: './dyncomponent.component.html',\n\t styleUrl: './dyncomponent.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ forwardRef( () => XiriCardComponent ),\n\t XiriButtonlineComponent,\n\t XiriTableComponent,\n\t XiriCardlinkComponent,\n\t XiriLinksComponent,\n\t MatCard,\n\t MatCardHeader,\n\t MatCardTitle,\n\t MatCardContent,\n\t XiriFormComponent,\n\t XiriQueryComponent,\n\t XiriStepperComponent,\n\t XiriHeaderComponent,\n\t XiriListComponent,\n\t XiriInfopointComponent,\n\t XiriMultiprogressComponent,\n\t XiriImagetextComponent,\n\t NgTemplateOutlet,\n\t SafehtmlPipe,\n\t XiriTabsComponent,\n\t XiriExpansionComponent,\n\t XiriStatComponent,\n\t XiriEmptyStateComponent,\n\t XiriTimelineComponent,\n\t XiriPageHeaderComponent,\n\t XiriSectionComponent,\n\t XiriDividerComponent,\n\t XiriStatGridComponent,\n\t XiriToolbarComponent,\n\t XiriDescriptionListComponent,\n\t XiriBarChartComponent,\n\t XiriLineChartComponent,\n\t XiriPieChartComponent,\n\t XiriGaugeChartComponent,\n\t XiriHeatmapComponent,\n\t XiriCalendarComponent,\n\t XiriTreeComponent,\n\t XiriSankeyComponent,\n\t XiriGanttComponent ]\n } )\nexport class XiriDynComponentComponent {\n\t\n\tdata = input.required<XiriDynData[]>();\n\tfilterData = input<any>( undefined );\n\tdyncomponent = input<TemplateRef<any>>();\n\t\n\tdataInt = computed( () => {\n\t\t\n\t\tlet data = this.data();\n\t\t\n\t\tif ( data === undefined || data === null )\n\t\t\treturn [];\n\t\tif ( !Array.isArray( data ) )\n\t\t\tdata = [ data ];\n\t\t\n\t\treturn data.map( ( d: XiriDynData ) => {\n\t\t\t\n\t\t\tif ( d.id === undefined )\n\t\t\t\td.id = Math.floor( Math.random() * 1000000 );\n\t\t\t\n\t\t\treturn d;\n\t\t} );\n\t} );\n}\n","@for (obj of dataInt(); track obj.id) {\n\n\t@switch (obj.type) {\n\t\t@case ('card') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-6 xcol-xl-4'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-card [settings]=\"obj.data\"></xiri-card>\n\t\t\t</div>\n\t\t}\n\t\t@case ('buttonline') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-buttonline [settings]=\"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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-table [settings]=\"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]=\"obj.display || 'xcol xcol-md-4 xcol-lg-3'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-cardlink [settings]=\"obj.data\"></xiri-cardlink>\n\t\t\t</div>\n\t\t}\n\t\t@case ('links') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-4 xcol-lg-3'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-links [settings]=\"obj.data\"></xiri-links>\n\t\t\t</div>\n\t\t}\n\t\t@case ('form') {\n\t\t\t<div [class]=\"obj.display || '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 (obj.data.header) {\n\t\t\t\t\t\t<mat-card-header>\n\t\t\t\t\t\t\t<mat-card-title>{{ 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]=\"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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-query [settings]=\"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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-stepper [settings]=\"obj.data\"></xiri-stepper>\n\t\t\t</div>\n\t\t}\n\t\t@case ('header') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-header [settings]=\"obj.data\"></xiri-header>\n\t\t\t</div>\n\t\t}\n\t\t@case ('list') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-list [settings]=\"obj.data\"></xiri-list>\n\t\t\t</div>\n\t\t}\n\t\t@case ('spacer') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<div class=\"spacer\">&nbsp;</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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t\t<xiri-dyncomponent [data]=\"obj.data\" [dyncomponent]=\"dyncomponent()\" class=\"row\"></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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-infopoint [settings]=\"obj.data\"></xiri-infopoint>\n\t\t\t</div>\n\t\t}\n\t\t@case ('multiprogress') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-4'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-multiprogress [settings]=\"obj.data\"></xiri-multiprogress> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('imagetext') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-4'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-imagetext [settings]=\"obj.data\"></xiri-imagetext> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('tabs') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-tabs [settings]=\"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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-expansion [settings]=\"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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<div class=\"infotext\">{{ obj.data.text }}</div>\n\t\t\t</div>\n\t\t}\n\t\t@case ('html') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<div class=\"html\" [innerHtml]=\"obj.data.html | safeHtml\"></div>\n\t\t\t</div>\n\t\t}\n\t\t@case ('stat') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-6 xcol-xl-4'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-stat [settings]=\"obj.data\"></xiri-stat>\n\t\t\t</div>\n\t\t}\n\t\t@case ('empty-state') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-empty-state [settings]=\"obj.data\"></xiri-empty-state>\n\t\t\t</div>\n\t\t}\n\t\t@case ('timeline') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-timeline [settings]=\"obj.data\"></xiri-timeline> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('page-header') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-page-header [settings]=\"obj.data\"></xiri-page-header> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('section') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t<xiri-section [settings]=\"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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-divider [settings]=\"obj.data\"></xiri-divider> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('stat-grid') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-stat-grid [settings]=\"obj.data\"></xiri-stat-grid> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('toolbar') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-toolbar [settings]=\"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]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-description-list [settings]=\"obj.data\"></xiri-description-list> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('barchart') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-6 xcol-xl-3'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-barchart [mode]=\"obj.mode\" [settings]=\"obj.data\"></xiri-barchart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('linechart') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-6 xcol-xl-3'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-linechart [settings]=\"obj.data\"></xiri-linechart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('piechart') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-6 xcol-xl-3'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-piechart [settings]=\"obj.data\"></xiri-piechart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('gaugechart') {\n\t\t\t<div [class]=\"obj.display || 'xcol xcol-md-6 xcol-xl-3'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-gaugechart [settings]=\"obj.data\"></xiri-gaugechart> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('heatmap') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-heatmap [settings]=\"obj.data\"></xiri-heatmap> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('calendar') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-calendar [settings]=\"obj.data\"></xiri-calendar> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('tree') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-tree [settings]=\"obj.data\"></xiri-tree> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('sankey') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-sankey [settings]=\"obj.data\"></xiri-sankey> }\n\t\t\t</div>\n\t\t}\n\t\t@case ('gantt') {\n\t\t\t<div [class]=\"obj.display || 'xcol'\" [class.xcol-start]=\"obj.newRow\">\n\t\t\t\t@defer { <xiri-gantt [settings]=\"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]=\"obj.data\" [filterData]=\"obj.filterData\" [dyncomponent]=\"dyncomponent()\" class=\"xrow\"></xiri-dyncomponent>\n</ng-template>\n<ng-template #defaultComponentUnknown let-obj>\n\t<div class=\"xcol\">unknown type: {{ obj.type }}</div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, forwardRef, inject, input, signal, Signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { XiriButton } from \"../button/button.component\";\nimport { XiriButtonlineSettings, XiriButtonlineComponent } from \"../buttonline/buttonline.component\";\nimport { XiriColor } from '../types/color.type';\nimport { XiriRawTableSettings, XiriRawTableComponent } from \"../raw-table/xiri-raw-table.component\";\nimport { XiriTableField } from \"../raw-table/tabefield.interface\";\nimport { XiriDataService } from '../services/data.service';\nimport { XiriSkeletonComponent } from '../skeleton/skeleton.component';\nimport { XiriDynData } from '../dyncomponent/dyndata.interface';\nimport { XiriDynComponentComponent } from '../dyncomponent/dyncomponent.component';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\nimport {\n\tMatCard,\n\tMatCardHeader,\n\tMatCardAvatar,\n\tMatCardTitle,\n\tMatCardSubtitle,\n\tMatCardContent,\n\tMatCardActions\n} from '@angular/material/card';\n\nexport interface XiriCardSettings {\n\turl?: string\n\treload?: boolean\n\tdata?: any\n\tfields?: XiriTableField[]\n\tcomponents?: XiriDynData[]\n\theader?: string\n\theaderSub?: string\n\theaderIcon?: string\n\theaderIconColor?: XiriColor\n\tbuttonsTop?: XiriButtonlineSettings\n\tbuttonsBottom?: XiriButtonlineSettings\n\tdense?: number\n\tforceMinWidth?: boolean\n\tshowHeader?: boolean\n\tcollapsible?: boolean\n\tcollapsed?: boolean\n\tmaxHeight?: string\n\tpadding?: string // Token 'xs'|'sm'|'md'|'lg'|'xl' oder freier CSS-Wert ('16px', '1rem', 'var(--…)').\n\t // Wirkt nur im Multi-Component-Modus (settings.components).\n\t // Auf xs-Viewport (<576px) immer 8px.\n}\n\n@Component( {\n\t selector: 'xiri-card',\n\t templateUrl: './card.component.html',\n\t styleUrl: './card.component.scss',\n\t imports: [ MatCard,\n\t MatCardHeader,\n\t MatCardAvatar,\n\t MatIcon,\n\t MatIconButton,\n\t MatCardTitle,\n\t MatCardSubtitle,\n\t XiriButtonlineComponent,\n\t MatCardContent,\n\t XiriRawTableComponent,\n\t XiriSkeletonComponent,\n\t MatCardActions,\n\t forwardRef( () => XiriDynComponentComponent ) ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriCardComponent {\n\n\tprivate dataService = inject( XiriDataService );\n\tprivate destroyRef = inject( DestroyRef );\n\n\tsettings = input.required<XiriCardSettings>();\n\n\tloading = signal<boolean>( false );\n\terrorMsg = signal<string>( '' );\n\tisCollapsed = signal<boolean>( false );\n\tprivate _data = signal<any>( null );\n\n\tcardData = computed( () => this._data() ?? this.settings().data );\n\n\thasComponents = computed( () => ( this.settings().components?.length ?? 0 ) > 0 );\n\n\t/** Resolves padding setting (token or free CSS value) into a CSS length string. */\n\tcomponentsPadding = computed<string>( () => {\n\t\tconst v = this.settings().padding;\n\t\tif ( !v ) return 'var(--xiri-spacing-md, 16px)';\n\t\tswitch ( v ) {\n\t\t\tcase 'xs': return 'var(--xiri-spacing-xs, 4px)';\n\t\t\tcase 'sm': return 'var(--xiri-spacing-sm, 8px)';\n\t\t\tcase 'md': return 'var(--xiri-spacing-md, 16px)';\n\t\t\tcase 'lg': return 'var(--xiri-spacing-lg, 24px)';\n\t\t\tcase 'xl': return 'var(--xiri-spacing-xl, 32px)';\n\t\t\tdefault: return v; // freier CSS-Wert\n\t\t}\n\t} );\n\n\trawTable: Signal<XiriRawTableSettings | null> = computed( () => {\n\n\t\tconst data = this.cardData();\n\t\tif ( data == null ) return null;\n\n\t\tlet rt: XiriRawTableSettings = {\n\t\t\tdata: data,\n\t\t\tfields: this.settings().fields,\n\t\t\tdense: this.settings().dense,\n\t\t\tforceMinWidth: this.settings().forceMinWidth,\n\t\t\tshowHeader: this.settings().showHeader,\n\t\t};\n\n\t\tif ( !this.settings().fields && data.length !== 0 ) {\n\n\t\t\tlet fields: XiriTableField[] = [];\n\t\t\tif ( Array.isArray( data ) ) {\n\t\t\t\tfields.push( {\n\t\t\t\t\t id: '0',\n\t\t\t\t\t name: '0',\n\t\t\t\t\t format: 'text',\n\t\t\t\t\t display: 'info',\n\t\t\t\t\t minWidth: '30px',\n\t\t\t\t } );\n\t\t\t\tfields.push( {\n\t\t\t\t\t id: '1',\n\t\t\t\t\t name: '1',\n\t\t\t\t\t format: 'html',\n\t\t\t\t\t display: 'right',\n\t\t\t\t\t minWidth: '30px',\n\t\t\t\t } );\n\t\t\t} else {\n\n\t\t\t\tfields.push( {\n\t\t\t\t\t id: 'f0',\n\t\t\t\t\t name: 'f0',\n\t\t\t\t\t format: 'text',\n\t\t\t\t\t display: 'info',\n\t\t\t\t\t minWidth: '30px',\n\t\t\t\t } );\n\t\t\t\tfields.push( {\n\t\t\t\t\t id: 'f1',\n\t\t\t\t\t name: 'f1',\n\t\t\t\t\t format: 'html',\n\t\t\t\t\t display: 'right',\n\t\t\t\t\t minWidth: '30px',\n\t\t\t\t } );\n\n\t\t\t\tlet transformedData = [];\n\t\t\t\tfor ( let key in data ) {\n\t\t\t\t\tif ( data.hasOwnProperty( key ) ) {\n\t\t\t\t\t\ttransformedData.push( {\n\t\t\t\t\t\t\t 'f0': key,\n\t\t\t\t\t\t\t 'f1': data[ key ],\n\t\t\t\t\t\t } );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trt.data = transformedData;\n\t\t\t}\n\n\t\t\trt.fields = fields;\n\t\t}\n\n\t\treturn rt;\n\t} );\n\n\tconstructor() {\n\t\teffect( () => {\n\t\t\tconst s = this.settings();\n\t\t\tif ( s.collapsed !== undefined ) {\n\t\t\t\tthis.isCollapsed.set( s.collapsed );\n\t\t\t}\n\t\t} );\n\t\teffect( () => {\n\t\t\tconst url = this.settings().url;\n\t\t\tif ( url ) {\n\t\t\t\tthis.loadData();\n\t\t\t}\n\t\t} );\n\t}\n\n\ttoggleCollapse(): void {\n\t\tthis.isCollapsed.update( v => !v );\n\t}\n\n\tprivate loadData() {\n\t\tthis.loading.set( true );\n\t\tthis.errorMsg.set( '' );\n\t\tthis.dataService.post( this.settings().url!, null )\n\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe( {\n\t\t\t\tnext: ( res ) => {\n\t\t\t\t\tthis._data.set( res.data ?? res );\n\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t},\n\t\t\t\terror: ( err ) => {\n\t\t\t\t\tthis.errorMsg.set( err.error?.error || 'Fehler beim Laden' );\n\t\t\t\t\tthis.loading.set( false );\n\t\t\t\t}\n\t\t\t} );\n\t}\n\n\treload() {\n\t\tif ( this.loading() ) return;\n\t\tthis.loadData();\n\t}\n\n}\n","<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","import { ChangeDetectionStrategy, Component, DestroyRef, OnInit, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n\tMAT_DIALOG_DATA,\n\tMatDialogRef,\n\tMatDialogTitle,\n\tMatDialogContent,\n\tMatDialogActions\n} from '@angular/material/dialog';\nimport { BreakpointObserver, Breakpoints, BreakpointState } from '@angular/cdk/layout';\nimport { XiriButton } from \"../button/button.component\";\nimport { SafehtmlPipe } from '../pipes/safehtml.pipe';\nimport { XiriButtonstyleComponent } from '../buttonstyle/buttonstyle.component';\nimport { MatDivider } from '@angular/material/divider';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\n\n\nexport interface XiriAlertConfig {\n\theader: string\n\ttext: string\n\ticon: string\n\tbuttons: XiriButton[]\n}\n\n@Component( {\n\t selector: 'xiri-alert',\n\t templateUrl: './alert.component.html',\n\t styleUrls: [ './alert.component.scss' ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatDialogTitle,\n\t CdkScrollable,\n\t MatDialogContent,\n\t MatProgressSpinner,\n\t MatIcon,\n\t MatDivider,\n\t MatDialogActions,\n\t XiriButtonstyleComponent,\n\t SafehtmlPipe ]\n } )\nexport class XiriAlertComponent implements OnInit {\n\tdialogRef = inject<MatDialogRef<XiriAlertComponent>>( MatDialogRef );\n\tinitData = inject( MAT_DIALOG_DATA );\n\tprivate breakpointObserver = inject( BreakpointObserver );\n\tprivate destroyRef = inject( DestroyRef );\n\n\n\tloading = signal(true);\n\theader = signal('');\n\tbuttons = signal<XiriButton[]>([]);\n\ttext = signal('');\n\ticon = signal('warning');\n\n\tngOnInit() {\n\n\t\tthis.breakpointObserver\n\t\t\t.observe( [ Breakpoints.XSmall, Breakpoints.Small ] )\n\t\t\t.pipe( takeUntilDestroyed( this.destroyRef ) )\n\t\t\t.subscribe( ( state: BreakpointState ) => {\n\t\t\t\tif ( state.matches )\n\t\t\t\t\tthis.dialogRef.updateSize( '80vw' );\n\t\t\t\telse\n\t\t\t\t\tthis.dialogRef.updateSize( '600px' );\n\t\t\t} );\n\n\t\tthis.loadData( this.initData );\n\t}\n\t\n\tprivate loadData( res: XiriAlertConfig ): void {\n\n\t\tif ( res.buttons ) {\n\t\t\tthis.header.set( res.header );\n\t\t\tthis.buttons.set( res.buttons );\n\t\t\tthis.text.set( res.text );\n\t\t\tthis.icon.set( res.icon ? res.icon : 'warning' );\n\t\t} else {\n\t\t\tthis.dialogRef.close( res );\n\t\t}\n\n\t\tthis.loading.set( false );\n\t}\n\t\n\tclickButton( button: XiriButton ): void {\n\n\t\tthis.dialogRef.close( button );\n\t}\n}\n","@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","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core';\nimport { SlicePipe } from '@angular/common';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatCard, MatCardAvatar, MatCardContent } from '@angular/material/card';\nimport { XiriColor } from '../types/color.type';\n\n\nexport interface XiriMultiprogressSettings {\n\tdata: XiriMultiprogressItem[]\n\theaderIcon?: string\n\theaderIconColor?: XiriColor\n\theader?: string\n\tshow?: number\n\tcompact?: boolean\n}\n\nexport interface XiriMultiprogressItem {\n\ttext: string\n\tvalue: string\n\tprogress: number\n\tcolor?: XiriColor\n}\n\n@Component( {\n\t selector: 'xiri-multiprogress',\n\t templateUrl: './multiprogress.component.html',\n\t styleUrls: [ './multiprogress.component.scss' ],\n\t imports: [ MatCard, MatCardAvatar, MatIcon, MatIconButton, MatCardContent, MatProgressBar, SlicePipe ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t host: { '[class.compact]': 'compact()' }\n } )\nexport class XiriMultiprogressComponent {\n\tpublic isOpen = signal<boolean>(false);\n\n\tsettings = input.required<XiriMultiprogressSettings>();\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n}\n","@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","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { XiriColor } from '../types/color.type';\nimport { MatIcon } from '@angular/material/icon';\nimport {\n\tMatCard,\n\tMatCardAvatar,\n\tMatCardContent,\n\tMatCardHeader,\n\tMatCardSubtitle,\n\tMatCardTitle\n} from '@angular/material/card';\n\nexport interface XiriImagetextSettings {\n\turl: string;\n\tinfo: string;\n\n\theaderIcon?: string\n\theaderIconColor?: XiriColor\n\theaderSub?: string\n\theader?: string\n\tcompact?: boolean\n}\n\n\n@Component( {\n\t selector: 'xiri-imagetext',\n\t templateUrl: './imagetext.component.html',\n\t styleUrl: './imagetext.component.scss',\n\t imports: [ MatCard,\n\t MatCardHeader,\n\t MatCardAvatar,\n\t MatIcon,\n\t MatCardTitle,\n\t MatCardSubtitle,\n\t MatCardContent,\n\t MatProgressSpinner ],\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t host: { '[class.compact]': 'compact()' }\n } )\nexport class XiriImagetextComponent {\n\n\tsettings = input.required<XiriImagetextSettings>();\n\tloading = signal<boolean>( true )\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n}\n","@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","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, effect, inject, input } from '@angular/core';\nimport { filter } from \"rxjs\";\nimport { Event, NavigationEnd, Router, RouterLink } from \"@angular/router\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { MatIcon } from '@angular/material/icon';\nimport { MatListItem, MatListItemIcon, MatListItemMeta, MatListItemTitle } from '@angular/material/list';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\n\nexport interface XiriSidebarSettings {\n\t\n\tprefix: string\n\tfields: XiriNavigationField[]\n}\n\nexport interface XiriNavigationField {\n\tname: string\n\tlink?: string\n\ticon: string\n\ticonSet?: string\n\textern?: string\n\tactive?: boolean\n\tpath?: string\n\tregex?: RegExp\n\t\n\tmenu?: boolean\n\tshowSubmenu?: boolean\n\tsub?: XiriNavigationField[]\n}\n\n@Component( {\n\t selector: 'xiri-sidenav',\n\t templateUrl: './sidenav.component.html',\n\t styleUrls: [ './sidenav.component.scss' ],\n\t imports: [\n\t\t MatProgressSpinner,\n\t\t MatListItem,\n\t\t RouterLink,\n\t\t MatIcon,\n\t\t MatListItemIcon,\n\t\t MatListItemTitle,\n\t\t MatListItemMeta,\n\t ],\n\t changeDetection: ChangeDetectionStrategy.OnPush\n } )\nexport class XiriSidenavComponent {\n\t\n\tprivate router: Router = inject( Router );\n\tprivate cdr: ChangeDetectorRef = inject( ChangeDetectorRef );\n\t\n\tsettings = input<XiriSidebarSettings>();\n\tloading: boolean = true;\n\tfields: XiriNavigationField[] = [];\n\tprivate prefix: string;\n\t\n\tconstructor() {\n\n\t\tthis.router.events.pipe(\n\t\t\tfilter( ( event: Event ) => event instanceof NavigationEnd ),\n\t\t\ttakeUntilDestroyed()\n\t\t).subscribe( ( route: NavigationEnd ) => {\n\t\t\tthis.checkUrl( route.urlAfterRedirects );\n\t\t} );\n\n\t\teffect( () => {\n\t\t\tconst value = this.settings();\n\n\t\t\tthis.loading = value == null || value.fields == null;\n\n\t\t\tif ( !this.loading ) {\n\t\t\t\tthis.fields = value.fields;\n\t\t\t\tthis.prefix = value.prefix;\n\n\t\t\t\tfor ( let i = 0; i != this.fields.length; i++ ) {\n\t\t\t\t\tlet field = this.fields[ i ];\n\n\t\t\t\t\tif ( field.path )\n\t\t\t\t\t\tfield.regex = new RegExp( '^' + field.path )\n\t\t\t\t}\n\n\t\t\t\tthis.checkUrl( this.router.url );\n\t\t\t} else {\n\t\t\t\tthis.fields = [];\n\t\t\t}\n\t\t} );\n\t}\n\t\n\tprivate checkUrl( url: string ): void {\n\t\t\n\t\tif ( !this.fields )\n\t\t\treturn;\n\t\t\n\t\tif ( this.prefix ) {\n\t\t\tif ( url.startsWith( this.prefix ) )\n\t\t\t\turl = url.substring( this.prefix.length );\n\t\t}\n\t\t\n\t\tfor ( let i = 0; i != this.fields.length; i++ ) {\n\t\t\t\n\t\t\tlet field = this.fields[ i ];\n\t\t\t\n\t\t\tif ( field.menu ) {\n\t\t\t\t\n\t\t\t\tlet found = false;\n\t\t\t\tfor ( let j = 0; j != field.sub.length; j++ ) {\n\t\t\t\t\tlet sub = field.sub[ j ];\n\t\t\t\t\tsub.active = sub.link == url;\n\t\t\t\t\tif ( sub.active || ( field.regex && field.regex.test( url ) ) ) {\n\t\t\t\t\t\tfield.active = true;\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfield.active = found;\n\t\t\t\tfield.showSubmenu = found;\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tfield.active = field.link == url;\n\t\t\t\tif ( field.active )\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif ( field.regex && field.regex.test( url ) )\n\t\t\t\t\tfield.active = true;\n\t\t\t}\n\t\t}\n\n\t\tthis.cdr.markForCheck();\n\t}\n\t\n}\n","@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@if ( nav.link ) {\n\t\t<a mat-list-item [routerLink]=\"nav.link\" [class.active]=\"nav.active\">\n\t\t\t@if (nav.iconSet) {\n\t\t\t\t<mat-icon matListItemIcon [fontSet]=\"nav.iconSet\" [class]=\"nav.active ? 'primary' : 'accent'\">{{ nav.icon }}</mat-icon>\n\t\t\t} @else {\n\t\t\t\t<mat-icon matListItemIcon [class]=\"nav.active ? 'primary' : 'accent'\">{{ nav.icon }}</mat-icon>\n\t\t\t}\n\t\t\t<span matListItemTitle>{{ nav.name }}</span>\n\t\t</a>\n\t} @else if (nav.menu) {\n\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@if (nav.iconSet) {\n\t\t\t\t<mat-icon matListItemIcon [fontSet]=\"nav.iconSet\" [class]=\"nav.active ? 'primary' : 'accent'\">{{ nav.icon }}</mat-icon>\n\t\t\t} @else {\n\t\t\t\t<mat-icon matListItemIcon [class]=\"nav.active ? 'primary' : 'accent'\">{{ nav.icon }}</mat-icon>\n\t\t\t}\n\t\t\t<span matListItemTitle>{{ nav.name }}</span>\n\t\t\t<span matListItemMeta>\n\t\t\t\t<mat-icon class=\"menu-button\" [class.rotated]=\"nav.showSubmenu\">expand_more</mat-icon>\n\t\t\t</span>\n\t\t</mat-list-item>\n\t\t<div class=\"submenu\" [class.expanded]=\"nav.showSubmenu\">\n\t\t\t@for (subnav of nav.sub; track subnav) {\n\t\t\t\t@if (subnav.link) {\n\t\t\t\t\t<a mat-list-item [routerLink]=\"subnav.link\" [class.active]=\"subnav.active\">{{ subnav.name }}</a>\n\t\t\t\t} @else if (subnav.extern) {\n\t\t\t\t\t<a mat-list-item [href]=\"subnav.extern\">{{ subnav.name }}</a>\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t} @else if (nav.extern) {\n\t\t<a mat-list-item [href]=\"nav.extern\">\n\t\t\t@if (nav.iconSet) {\n\t\t\t\t<mat-icon matListItemIcon [fontSet]=\"nav.iconSet\" class=\"accent\">{{ nav.icon }}</mat-icon>\n\t\t\t} @else {\n\t\t\t\t<mat-icon matListItemIcon class=\"accent\">{{ nav.icon }}</mat-icon>\n\t\t\t}\n\t\t\t<span matListItemTitle>{{ nav.name }}</span>\n\t\t</a>\n\t}\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { RouterLink } from '@angular/router';\n\nexport interface XiriBreadcrumbItem {\n\tlabel: string;\n\tlink?: string;\n\ticon?: string;\n\textern?: boolean;\n}\n\n@Component( {\n\t selector: 'xiri-breadcrumb',\n\t templateUrl: './breadcrumb.component.html',\n\t styleUrl: './breadcrumb.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, RouterLink ]\n } )\nexport class XiriBreadcrumbComponent {\n\n\tsettings = input.required<XiriBreadcrumbItem[]>();\n}\n","<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<a [routerLink]=\"item.link\">\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","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { XiriColor } from '../types/color.type';\n\nexport interface XiriTimelineItem {\n\ttitle: string;\n\tdescription?: string;\n\tdatetime?: string;\n\ticon?: string;\n\ticonColor?: XiriColor;\n}\n\nexport interface XiriTimelineSettings {\n\titems: XiriTimelineItem[];\n\torientation?: 'horizontal' | 'vertical';\n}\n\n@Component( {\n\t selector: 'xiri-timeline',\n\t templateUrl: './timeline.component.html',\n\t styleUrl: './timeline.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon ]\n } )\nexport class XiriTimelineComponent {\n\n\tsettings = input.required<XiriTimelineSettings>();\n}\n","<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","import {\n\tAfterViewInit,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tDestroyRef,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tNgZone,\n\tOnDestroy,\n\tsignal,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport { MatIcon } from '@angular/material/icon';\nimport { XiriColor } from '../types/color.type';\n\n/**\n * `xiri-echarts-host` — shared echarts plumbing for all chart components.\n *\n * Handles lazy `import('echarts')`, init / setOption / dispose, ResizeObserver,\n * the optional mat-card surface (with header + compact mode), and a flat\n * variant when nested inside another card.\n *\n * Specialized chart components (`xiri-barchart`, `xiri-linechart`, …) build\n * a typed echarts option from their settings and feed it via the `option`\n * input. Each re-emit of `option` re-renders the chart with `setOption(option, true)`.\n *\n * Compact-Mode strips the outer mat-card so the chart sits flat inside an\n * outer xiri-card without card-in-card visuals.\n */\n@Component( {\n\tselector: 'xiri-echarts-host',\n\ttemplateUrl: './echarts-host.component.html',\n\tstyleUrl: './echarts-host.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\timports: [ MatCard, MatCardContent, MatIcon ],\n\thost: { '[class.compact]': 'compact()' }\n} )\nexport class XiriEchartsHostComponent implements AfterViewInit, OnDestroy {\n\n\toption = input.required<any>();\n\tcompact = input<boolean>( false );\n\ttitle = input<string | undefined>( undefined );\n\theaderIcon = input<string | undefined>( undefined );\n\theaderIconColor = input<XiriColor | undefined>( undefined );\n\tchartHeight = input<string>( '200px' );\n\n\tchartHostRef = viewChild.required<ElementRef<HTMLDivElement>>( 'chartHost' );\n\n\tprivate zone = inject( NgZone );\n\tprivate destroyRef = inject( DestroyRef );\n\n\tprivate chart: any | null = null;\n\tprivate echarts: any | null = null;\n\tprivate resizeObserver: ResizeObserver | null = null;\n\tprivate loadError = signal<string | null>( null );\n\n\treadonly error = this.loadError.asReadonly();\n\treadonly hasHeader = computed( () => !!( this.title() || this.headerIcon() ) );\n\n\tconstructor() {\n\t\teffect( () => {\n\t\t\t// Re-render whenever the option changes.\n\t\t\tthis.option();\n\t\t\tif ( this.chart ) {\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t} );\n\t}\n\n\tasync ngAfterViewInit(): Promise<void> {\n\t\ttry {\n\t\t\tthis.echarts = await import( 'echarts' );\n\t\t} catch {\n\t\t\tthis.loadError.set( 'echarts is not installed. Add `npm install echarts` to your app.' );\n\t\t\treturn;\n\t\t}\n\n\t\tthis.zone.runOutsideAngular( () => {\n\t\t\tthis.chart = this.echarts.init( this.chartHostRef().nativeElement );\n\t\t\tthis.render();\n\n\t\t\tthis.resizeObserver = new ResizeObserver( () => this.chart?.resize() );\n\t\t\tthis.resizeObserver.observe( this.chartHostRef().nativeElement );\n\t\t} );\n\n\t\tthis.destroyRef.onDestroy( () => this.dispose() );\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.dispose();\n\t}\n\n\tprivate dispose(): void {\n\t\tthis.resizeObserver?.disconnect();\n\t\tthis.resizeObserver = null;\n\t\tthis.chart?.dispose();\n\t\tthis.chart = null;\n\t}\n\n\tprivate render(): void {\n\t\tif ( !this.chart ) return;\n\t\tconst opt = this.option();\n\t\tif ( !opt ) return;\n\t\tthis.chart.setOption( opt, true );\n\t}\n}\n","@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","import { XiriColor } from '../types/color.type';\n\n/**\n * Maps semantic XiriColor names to concrete CSS color values.\n *\n * Theme tokens use Material 3 system variables; extended tokens use\n * fixed brand colors that work both in light and dark themes.\n */\nexport const COLOR_CSS_VAR: Record<string, string> = {\n\tprimary: 'var(--mat-sys-primary)',\n\tsecondary: 'var(--mat-sys-secondary)',\n\ttertiary: 'var(--mat-sys-tertiary)',\n\taccent: 'var(--mat-sys-tertiary)',\n\twarn: '#f5a623',\n\terror: 'var(--mat-sys-error)',\n\tsuccess: '#2e7d32',\n\temerald: '#10b981',\n\tred: '#e53935',\n\tyellow: '#fbc02d',\n\tgreen: '#43a047',\n\tblue: '#1e88e5',\n\tpurple: '#8b5cf6',\n\torange: '#fb8c00',\n\tgray: '#9e9e9e',\n\tlightgray: '#cfcfcf',\n\tdarkgray: '#616161',\n\twhite: '#ffffff',\n\tblack: '#000000',\n\tinherit: 'currentColor'\n};\n\n/**\n * Resolves a XiriColor token (or a freeform CSS color) to a CSS-color string\n * usable in echarts options. Unknown tokens fall back to the given fallback.\n */\nexport function resolveColor( color: XiriColor | string | undefined, fallback = '#8b5cf6' ): string {\n\tif ( !color ) return fallback;\n\treturn COLOR_CSS_VAR[ color ] ?? fallback;\n}\n","/** Escapes characters that would otherwise be interpreted as HTML in echarts tooltip strings. */\nexport function escapeHtml( s: string ): string {\n\treturn String( s ?? '' )\n\t\t.replace( /&/g, '&amp;' )\n\t\t.replace( /</g, '&lt;' )\n\t\t.replace( />/g, '&gt;' )\n\t\t.replace( /\"/g, '&quot;' );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriColor } from '../types/color.type';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { resolveColor } from '../echarts/color';\nimport { escapeHtml } from '../echarts/tooltip';\n\nexport type XiriBarChartMode = 'simple' | 'stacked' | 'heatmap';\n\nexport interface XiriBarChartSegment {\n\tvalue: number;\n\tcolor?: XiriColor;\n\tname?: string;\n}\n\nexport interface XiriBarChartBar {\n\tlabel: string;\n\tvalue?: number;\n\tsegments?: XiriBarChartSegment[];\n\tname?: string;\n}\n\nexport interface XiriBarChartPoint {\n\ttime: number;\n\tvalue: number;\n\tname?: string;\n}\n\nexport interface XiriBarChartSettings {\n\ttitle?: string;\n\tyMin?: number;\n\tyMax?: number;\n\tcolor?: XiriColor;\n\tbars?: XiriBarChartBar[];\n\tpoints?: XiriBarChartPoint[];\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-barchart',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriBarChartComponent {\n\n\tmode = input<XiriBarChartMode | string>( 'simple' );\n\tsettings = input.required<XiriBarChartSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\toption = computed( () => {\n\t\tconst m = this.mode();\n\t\tswitch ( m ) {\n\t\t\tcase 'stacked': return this.stackedOption();\n\t\t\tcase 'heatmap': return this.heatmapOption();\n\t\t\tdefault: return this.simpleOption();\n\t\t}\n\t} );\n\n\tprivate baseGrid() {\n\t\t// Compact mode: outer card already provides padding — shrink the\n\t\t// echarts grid so we don't get a \"double margin\".\n\t\tif ( this.compact() ) {\n\t\t\treturn { left: 0, right: 0, top: 4, bottom: 0, containLabel: true };\n\t\t}\n\t\treturn { left: 32, right: 16, top: 24, bottom: 24, containLabel: true };\n\t}\n\n\tprivate simpleOption() {\n\t\tconst s = this.settings();\n\t\tconst bars = s.bars ?? [];\n\t\tconst color = resolveColor( s.color, '#8b5cf6' );\n\t\treturn {\n\t\t\tgrid: this.baseGrid(),\n\t\t\ttooltip: {\n\t\t\t\ttrigger: 'axis',\n\t\t\t\tformatter: ( params: any ) => {\n\t\t\t\t\tconst arr = Array.isArray( params ) ? params : [ params ];\n\t\t\t\t\tif ( !arr.length ) return '';\n\t\t\t\t\tconst p = arr[ 0 ];\n\t\t\t\t\tconst bar = bars[ p.dataIndex ];\n\t\t\t\t\tconst header = bar?.name ?? bar?.label ?? p.axisValueLabel ?? '';\n\t\t\t\t\treturn `<b>${ escapeHtml( header ) }</b><br/>${ p.marker }${ p.value }`;\n\t\t\t\t}\n\t\t\t},\n\t\t\txAxis: {\n\t\t\t\ttype: 'category',\n\t\t\t\tdata: bars.map( b => b.label ),\n\t\t\t\taxisLine: { show: false },\n\t\t\t\taxisTick: { show: false }\n\t\t\t},\n\t\t\tyAxis: {\n\t\t\t\ttype: 'value',\n\t\t\t\tmin: s.yMin,\n\t\t\t\tmax: s.yMax,\n\t\t\t\tsplitLine: { lineStyle: { color: '#eee' } }\n\t\t\t},\n\t\t\tseries: [ {\n\t\t\t\ttype: 'bar',\n\t\t\t\tdata: bars.map( b => b.value ?? 0 ),\n\t\t\t\titemStyle: { color, borderRadius: [ 3, 3, 0, 0 ] },\n\t\t\t\tbarCategoryGap: '40%'\n\t\t\t} ]\n\t\t};\n\t}\n\n\tprivate stackedOption() {\n\t\tconst s = this.settings();\n\t\tconst bars = s.bars ?? [];\n\t\tconst segCount = Math.max( 0, ...bars.map( b => b.segments?.length ?? 0 ) );\n\n\t\t// Derive a default series name per segment-position from the first bar that has it.\n\t\tconst seriesNames: string[] = [];\n\t\tfor ( let i = 0; i < segCount; i++ ) {\n\t\t\tconst found = bars.find( b => b.segments?.[ i ]?.name )?.segments?.[ i ]?.name;\n\t\t\tseriesNames.push( found ?? '' );\n\t\t}\n\n\t\tconst series: any[] = [];\n\t\tfor ( let i = 0; i < segCount; i++ ) {\n\t\t\tseries.push( {\n\t\t\t\ttype: 'bar',\n\t\t\t\tstack: 'total',\n\t\t\t\tname: seriesNames[ i ] || `Segment ${ i + 1 }`,\n\t\t\t\tbarCategoryGap: '40%',\n\t\t\t\tdata: bars.map( b => {\n\t\t\t\t\tconst seg = b.segments?.[ i ];\n\t\t\t\t\tif ( !seg ) return { value: 0, itemStyle: { color: 'transparent' } };\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvalue: seg.value,\n\t\t\t\t\t\tname: seg.name ?? seriesNames[ i ] ?? '',\n\t\t\t\t\t\titemStyle: { color: resolveColor( seg.color, '#9e9e9e' ) }\n\t\t\t\t\t};\n\t\t\t\t} )\n\t\t\t} );\n\t\t}\n\n\t\treturn {\n\t\t\tgrid: this.baseGrid(),\n\t\t\ttooltip: {\n\t\t\t\ttrigger: 'axis',\n\t\t\t\tformatter: ( params: any ) => {\n\t\t\t\t\tconst arr = Array.isArray( params ) ? params : [ params ];\n\t\t\t\t\tif ( !arr.length ) return '';\n\t\t\t\t\tconst idx = arr[ 0 ].dataIndex;\n\t\t\t\t\tconst bar = bars[ idx ];\n\t\t\t\t\tconst header = bar?.name ?? bar?.label ?? '';\n\t\t\t\t\tlet body = '';\n\t\t\t\t\tfor ( const p of arr ) {\n\t\t\t\t\t\tif ( !p.value && p.value !== 0 ) continue;\n\t\t\t\t\t\tif ( p.value === 0 ) continue;\n\t\t\t\t\t\tconst seg = bar?.segments?.[ p.seriesIndex ];\n\t\t\t\t\t\tconst label = seg?.name ?? p.seriesName ?? '';\n\t\t\t\t\t\tbody += `<br/>${ p.marker }${ escapeHtml( label ) }: <b>${ p.value }</b>`;\n\t\t\t\t\t}\n\t\t\t\t\treturn `<b>${ escapeHtml( header ) }</b>${ body }`;\n\t\t\t\t}\n\t\t\t},\n\t\t\txAxis: {\n\t\t\t\ttype: 'category',\n\t\t\t\tdata: bars.map( b => b.label ),\n\t\t\t\taxisLine: { show: false },\n\t\t\t\taxisTick: { show: false }\n\t\t\t},\n\t\t\tyAxis: {\n\t\t\t\ttype: 'value',\n\t\t\t\tmin: s.yMin,\n\t\t\t\tmax: s.yMax,\n\t\t\t\tsplitLine: { lineStyle: { color: '#eee' } }\n\t\t\t},\n\t\t\tseries\n\t\t};\n\t}\n\n\tprivate heatmapOption() {\n\t\tconst s = this.settings();\n\t\tconst points = s.points ?? [];\n\t\tconst color = resolveColor( s.color, '#8b5cf6' );\n\t\treturn {\n\t\t\tgrid: { ...this.baseGrid(), left: 8, right: 8 },\n\t\t\ttooltip: {\n\t\t\t\ttrigger: 'axis',\n\t\t\t\tformatter: ( params: any ) => {\n\t\t\t\t\tconst arr = Array.isArray( params ) ? params : [ params ];\n\t\t\t\t\tif ( !arr.length ) return '';\n\t\t\t\t\tconst p = arr[ 0 ];\n\t\t\t\t\tconst point = points[ p.dataIndex ];\n\t\t\t\t\tconst date = new Date( p.value[ 0 ] ).toLocaleString();\n\t\t\t\t\tconst head = point?.name ? `<b>${ escapeHtml( point.name ) }</b><br/>` : '';\n\t\t\t\t\treturn `${ head }${ escapeHtml( date ) }<br/>${ p.marker }<b>${ p.value[ 1 ] }</b>`;\n\t\t\t\t}\n\t\t\t},\n\t\t\txAxis: {\n\t\t\t\ttype: 'time',\n\t\t\t\taxisLine: { show: false },\n\t\t\t\taxisTick: { show: false },\n\t\t\t\tsplitLine: { show: false }\n\t\t\t},\n\t\t\tyAxis: {\n\t\t\t\ttype: 'value',\n\t\t\t\tmin: s.yMin ?? 0,\n\t\t\t\tmax: s.yMax,\n\t\t\t\tshow: false\n\t\t\t},\n\t\t\tseries: [ {\n\t\t\t\ttype: 'bar',\n\t\t\t\tbarMinWidth: 1,\n\t\t\t\tbarMaxWidth: 3,\n\t\t\t\tdata: points.map( p => [ p.time, p.value ] ),\n\t\t\t\titemStyle: { color }\n\t\t\t} ]\n\t\t};\n\t}\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriColor } from '../types/color.type';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { resolveColor } from '../echarts/color';\nimport { escapeHtml } from '../echarts/tooltip';\n\nexport interface XiriLineChartLine {\n\tname: string;\n\tvalues: number[];\n\tcolor?: XiriColor;\n\tdashed?: boolean;\n\tarea?: boolean; // fill area below the line\n}\n\nexport interface XiriLineChartSettings {\n\ttitle?: string;\n\txLabels: string[];\n\tlines: XiriLineChartLine[];\n\tyMin?: number;\n\tyMax?: number;\n\tsmooth?: boolean;\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-linechart',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriLineChartComponent {\n\n\tsettings = input.required<XiriLineChartSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst lines = s.lines ?? [];\n\t\tconst labels = s.xLabels ?? [];\n\n\t\tconst series = lines.map( ( line, i ) => {\n\t\t\tconst color = resolveColor( line.color, FALLBACK_COLORS[ i % FALLBACK_COLORS.length ] );\n\t\t\treturn {\n\t\t\t\ttype: 'line',\n\t\t\t\tname: line.name,\n\t\t\t\tsmooth: !!s.smooth,\n\t\t\t\tsymbol: 'circle',\n\t\t\t\tsymbolSize: 6,\n\t\t\t\tlineStyle: {\n\t\t\t\t\twidth: 2,\n\t\t\t\t\ttype: line.dashed ? 'dashed' : 'solid',\n\t\t\t\t\tcolor,\n\t\t\t\t},\n\t\t\t\titemStyle: { color },\n\t\t\t\tareaStyle: line.area ? { color, opacity: 0.15 } : undefined,\n\t\t\t\tdata: line.values,\n\t\t\t};\n\t\t} );\n\n\t\treturn {\n\t\t\tgrid: this.compact()\n\t\t\t\t? { left: 0, right: 0, top: 4, bottom: 0, containLabel: true }\n\t\t\t\t: { left: 32, right: 16, top: 24, bottom: 24, containLabel: true },\n\t\t\ttooltip: {\n\t\t\t\ttrigger: 'axis',\n\t\t\t\tformatter: ( params: any ) => {\n\t\t\t\t\tconst arr = Array.isArray( params ) ? params : [ params ];\n\t\t\t\t\tif ( !arr.length ) return '';\n\t\t\t\t\tconst header = escapeHtml( String( arr[ 0 ].axisValueLabel ?? arr[ 0 ].name ?? '' ) );\n\t\t\t\t\tlet body = '';\n\t\t\t\t\tfor ( const p of arr ) {\n\t\t\t\t\t\tbody += `<br/>${ p.marker }${ escapeHtml( String( p.seriesName ?? '' ) ) }: <b>${ p.value }</b>`;\n\t\t\t\t\t}\n\t\t\t\t\treturn `<b>${ header }</b>${ body }`;\n\t\t\t\t}\n\t\t\t},\n\t\t\tlegend: lines.length > 1 ? { top: 0, right: 0, type: 'scroll' } : undefined,\n\t\t\txAxis: {\n\t\t\t\ttype: 'category',\n\t\t\t\tdata: labels,\n\t\t\t\tboundaryGap: false,\n\t\t\t\taxisLine: { show: false },\n\t\t\t\taxisTick: { show: false }\n\t\t\t},\n\t\t\tyAxis: {\n\t\t\t\ttype: 'value',\n\t\t\t\tmin: s.yMin,\n\t\t\t\tmax: s.yMax,\n\t\t\t\tsplitLine: { lineStyle: { color: '#eee' } }\n\t\t\t},\n\t\t\tseries,\n\t\t};\n\t} );\n}\n\n/** Fallback color rotation when a line has no explicit color. */\nconst FALLBACK_COLORS = [ '#8b5cf6', '#10b981', '#1e88e5', '#fb8c00', '#e53935', '#fbc02d', '#43a047', '#616161' ];\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriColor } from '../types/color.type';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { resolveColor } from '../echarts/color';\nimport { escapeHtml } from '../echarts/tooltip';\n\nexport interface XiriPieChartSlice {\n\tname: string;\n\tvalue: number;\n\tcolor?: XiriColor;\n}\n\nexport interface XiriPieChartSettings {\n\ttitle?: string;\n\tslices: XiriPieChartSlice[];\n\tdonut?: boolean; // ring instead of full pie\n\tnightingale?: boolean; // rose/nightingale: slice radius scales with value\n\tnightingaleType?: 'radius' | 'area'; // 'radius' (default) or 'area'\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-piechart',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriPieChartComponent {\n\n\tsettings = input.required<XiriPieChartSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst slices = s.slices ?? [];\n\t\t// nightingale: smaller inner radius even on full pie so the rose has a visible center\n\t\tconst radius: [ string, string ] = s.donut\n\t\t\t? [ '55%', '78%' ]\n\t\t\t: ( s.nightingale ? [ '20%', '78%' ] : [ '0', '78%' ] );\n\n\t\tconst series: any = {\n\t\t\ttype: 'pie',\n\t\t\tradius,\n\t\t\tcenter: [ '50%', '45%' ],\n\t\t\tavoidLabelOverlap: true,\n\t\t\tlabel: {\n\t\t\t\tshow: !s.donut && !this.compact(),\n\t\t\t\tformatter: '{b}\\n{d}%',\n\t\t\t},\n\t\t\tlabelLine: { show: !s.donut && !this.compact() },\n\t\t\tdata: slices.map( ( slice, i ) => ( {\n\t\t\t\tname: slice.name,\n\t\t\t\tvalue: slice.value,\n\t\t\t\titemStyle: { color: resolveColor( slice.color, FALLBACK_COLORS[ i % FALLBACK_COLORS.length ] ) }\n\t\t\t} ) )\n\t\t};\n\t\tif ( s.nightingale ) {\n\t\t\tseries.roseType = s.nightingaleType ?? 'radius';\n\t\t}\n\n\t\treturn {\n\t\t\ttooltip: {\n\t\t\t\ttrigger: 'item',\n\t\t\t\tformatter: ( p: any ) => {\n\t\t\t\t\tconst name = escapeHtml( String( p.name ?? '' ) );\n\t\t\t\t\treturn `<b>${ name }</b><br/>${ p.marker }<b>${ p.value }</b> (${ p.percent }%)`;\n\t\t\t\t}\n\t\t\t},\n\t\t\tlegend: { bottom: 0, type: 'scroll' },\n\t\t\tseries: [ series ]\n\t\t};\n\t} );\n}\n\nconst FALLBACK_COLORS = [ '#8b5cf6', '#10b981', '#1e88e5', '#fb8c00', '#e53935', '#fbc02d', '#43a047', '#616161' ];\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriColor } from '../types/color.type';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { resolveColor } from '../echarts/color';\n\nexport interface XiriGaugeChartSettings {\n\ttitle?: string;\n\tvalue: number;\n\tmin?: number; // default 0\n\tmax?: number; // default 100\n\tcolor?: XiriColor;\n\tlabel?: string; // detail label below the value (e.g. \"%\", \"MB/s\")\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-gaugechart',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriGaugeChartComponent {\n\n\tsettings = input.required<XiriGaugeChartSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst min = s.min ?? 0;\n\t\tconst max = s.max ?? 100;\n\t\tconst color = resolveColor( s.color, '#8b5cf6' );\n\n\t\treturn {\n\t\t\tseries: [ {\n\t\t\t\ttype: 'gauge',\n\t\t\t\tmin,\n\t\t\t\tmax,\n\t\t\t\tcenter: [ '50%', '60%' ],\n\t\t\t\tradius: this.compact() ? '90%' : '80%',\n\t\t\t\tprogress: {\n\t\t\t\t\tshow: true,\n\t\t\t\t\twidth: 12,\n\t\t\t\t\titemStyle: { color }\n\t\t\t\t},\n\t\t\t\taxisLine: {\n\t\t\t\t\tlineStyle: { width: 12, color: [ [ 1, '#eee' ] ] }\n\t\t\t\t},\n\t\t\t\tpointer: { show: false },\n\t\t\t\taxisTick: { show: !this.compact() },\n\t\t\t\tsplitLine: { show: !this.compact() },\n\t\t\t\taxisLabel: { show: !this.compact(), distance: 18, fontSize: 11 },\n\t\t\t\tanchor: { show: false },\n\t\t\t\ttitle: { show: false },\n\t\t\t\tdetail: {\n\t\t\t\t\tvalueAnimation: true,\n\t\t\t\t\toffsetCenter: [ 0, '15%' ],\n\t\t\t\t\tfontSize: this.compact() ? 18 : 24,\n\t\t\t\t\tfontWeight: 'bold',\n\t\t\t\t\tformatter: s.label ? `{value}\\n{label|${ s.label }}` : '{value}',\n\t\t\t\t\trich: { label: { fontSize: 11, fontWeight: 'normal', color: '#888' } },\n\t\t\t\t\tcolor\n\t\t\t\t},\n\t\t\t\tdata: [ { value: s.value } ]\n\t\t\t} ]\n\t\t};\n\t} );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { escapeHtml } from '../echarts/tooltip';\n\nexport interface XiriHeatmapCell {\n\tx: number; // index into xLabels\n\ty: number; // index into yLabels\n\tvalue: number;\n\tlabel?: string; // optional override for the cell's display value\n}\n\nexport interface XiriHeatmapSettings {\n\ttitle?: string;\n\txLabels: string[];\n\tyLabels: string[];\n\tcells: XiriHeatmapCell[];\n\tmin?: number;\n\tmax?: number;\n\tcolorRange?: [ string, string ]; // CSS colors for low/high; default light → purple\n\tshowValues?: boolean; // print values inside cells (only readable for small grids)\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-heatmap',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\"\n\t\t\t[chartHeight]=\"height()\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriHeatmapComponent {\n\n\tsettings = input.required<XiriHeatmapSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\theight = computed<string>( () => {\n\t\tconst rows = this.settings().yLabels.length || 1;\n\t\tconst px = Math.max( 200, rows * 32 + 40 );\n\t\treturn px + 'px';\n\t} );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst cells = s.cells ?? [];\n\t\tconst values = cells.map( c => c.value );\n\t\tconst min = s.min ?? Math.min( 0, ...values );\n\t\tconst max = s.max ?? Math.max( 0, ...values );\n\t\tconst [ lowColor, highColor ] = s.colorRange ?? [ '#ede9fe', '#7c3aed' ];\n\n\t\treturn {\n\t\t\tgrid: this.compact()\n\t\t\t\t? { left: 0, right: 0, top: 4, bottom: 0, containLabel: true }\n\t\t\t\t: { left: 32, right: 16, top: 24, bottom: 24, containLabel: true },\n\t\t\ttooltip: {\n\t\t\t\tposition: 'top',\n\t\t\t\tformatter: ( p: any ) => {\n\t\t\t\t\tconst x = s.xLabels[ p.value[ 0 ] ] ?? '';\n\t\t\t\t\tconst y = s.yLabels[ p.value[ 1 ] ] ?? '';\n\t\t\t\t\treturn `<b>${ escapeHtml( y ) }</b> / <b>${ escapeHtml( x ) }</b><br/>${ p.marker }<b>${ p.value[ 2 ] }</b>`;\n\t\t\t\t}\n\t\t\t},\n\t\t\txAxis: {\n\t\t\t\ttype: 'category',\n\t\t\t\tdata: s.xLabels,\n\t\t\t\tsplitArea: { show: true },\n\t\t\t\taxisLine: { show: false },\n\t\t\t\taxisTick: { show: false }\n\t\t\t},\n\t\t\tyAxis: {\n\t\t\t\ttype: 'category',\n\t\t\t\tdata: s.yLabels,\n\t\t\t\tsplitArea: { show: true },\n\t\t\t\taxisLine: { show: false },\n\t\t\t\taxisTick: { show: false }\n\t\t\t},\n\t\t\tvisualMap: {\n\t\t\t\tmin,\n\t\t\t\tmax,\n\t\t\t\tcalculable: true,\n\t\t\t\torient: 'horizontal',\n\t\t\t\tleft: 'center',\n\t\t\t\tbottom: 0,\n\t\t\t\tinRange: { color: [ lowColor, highColor ] },\n\t\t\t\tshow: !this.compact()\n\t\t\t},\n\t\t\tseries: [ {\n\t\t\t\ttype: 'heatmap',\n\t\t\t\tdata: cells.map( c => [ c.x, c.y, c.value ] ),\n\t\t\t\tlabel: { show: !!s.showValues, formatter: ( p: any ) => String( p.value[ 2 ] ) },\n\t\t\t\temphasis: { itemStyle: { shadowBlur: 6, shadowColor: 'rgba(0, 0, 0, 0.3)' } }\n\t\t\t} ]\n\t\t};\n\t} );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { escapeHtml } from '../echarts/tooltip';\n\nexport interface XiriCalendarCell {\n\tdate: string; // 'YYYY-MM-DD'\n\tvalue: number;\n}\n\nexport interface XiriCalendarSettings {\n\ttitle?: string;\n\trange: string | [ string, string ]; // year 'YYYY' | ['YYYY-MM-DD', 'YYYY-MM-DD']\n\tcells: XiriCalendarCell[];\n\tmin?: number;\n\tmax?: number;\n\tcolorRange?: [ string, string ]; // CSS colors for low/high; default light green → dark green (GitHub-like)\n\tcellSize?: number; // cell size in px (default 16, compact 12)\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-calendar',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\"\n\t\t\t[chartHeight]=\"height()\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriCalendarComponent {\n\n\tsettings = input.required<XiriCalendarSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\tprivate cellSize = computed<number>( () => this.settings().cellSize ?? ( this.compact() ? 12 : 16 ) );\n\n\theight = computed<string>( () => {\n\t\t// 7 weekday rows + label space\n\t\tconst px = this.cellSize() * 7 + 60;\n\t\treturn px + 'px';\n\t} );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst cells = s.cells ?? [];\n\t\tconst values = cells.map( c => c.value );\n\t\tconst min = s.min ?? Math.min( 0, ...values );\n\t\tconst max = s.max ?? Math.max( 0, ...values );\n\t\tconst [ lowColor, highColor ] = s.colorRange ?? [ '#e6f4ea', '#2e7d32' ];\n\t\tconst sz = this.cellSize();\n\n\t\treturn {\n\t\t\ttooltip: {\n\t\t\t\tformatter: ( p: any ) => {\n\t\t\t\t\tconst date = String( p.value[ 0 ] );\n\t\t\t\t\tconst v = p.value[ 1 ];\n\t\t\t\t\treturn `<b>${ escapeHtml( date ) }</b><br/>${ p.marker }<b>${ v }</b>`;\n\t\t\t\t}\n\t\t\t},\n\t\t\tvisualMap: {\n\t\t\t\tmin,\n\t\t\t\tmax,\n\t\t\t\torient: 'horizontal',\n\t\t\t\tleft: 'center',\n\t\t\t\tbottom: 0,\n\t\t\t\tshow: !this.compact(),\n\t\t\t\tinRange: { color: [ lowColor, highColor ] }\n\t\t\t},\n\t\t\tcalendar: {\n\t\t\t\trange: s.range,\n\t\t\t\tcellSize: [ sz, sz ],\n\t\t\t\tsplitLine: { show: false },\n\t\t\t\titemStyle: { borderColor: '#fff', borderWidth: 2 },\n\t\t\t\tyearLabel: { show: false },\n\t\t\t\tdayLabel: { fontSize: 10 },\n\t\t\t\tmonthLabel: { fontSize: 11 },\n\t\t\t\ttop: 24,\n\t\t\t\tleft: 32,\n\t\t\t\tright: 16,\n\t\t\t},\n\t\t\tseries: [ {\n\t\t\t\ttype: 'heatmap',\n\t\t\t\tcoordinateSystem: 'calendar',\n\t\t\t\tdata: cells.map( c => [ c.date, c.value ] )\n\t\t\t} ]\n\t\t};\n\t} );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\n\nexport interface XiriTreeNode {\n\tname: string;\n\tvalue?: number;\n\tchildren?: XiriTreeNode[];\n\tcollapsed?: boolean;\n}\n\nexport interface XiriTreeSettings {\n\ttitle?: string;\n\troot: XiriTreeNode;\n\torient?: 'LR' | 'RL' | 'TB' | 'BT'; // default 'LR'\n\tlayout?: 'orthogonal' | 'radial'; // default 'orthogonal'\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-tree',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\"\n\t\t\t[chartHeight]=\"height()\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriTreeComponent {\n\n\tsettings = input.required<XiriTreeSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\theight = computed<string>( () => {\n\t\t// Estimate based on leaf count\n\t\tconst leaves = countLeaves( this.settings().root );\n\t\tconst px = Math.max( 240, leaves * 24 + 80 );\n\t\treturn px + 'px';\n\t} );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst orient = s.orient ?? 'LR';\n\t\tconst layout = s.layout ?? 'orthogonal';\n\n\t\treturn {\n\t\t\ttooltip: {\n\t\t\t\ttrigger: 'item',\n\t\t\t\ttriggerOn: 'mousemove',\n\t\t\t\tformatter: ( p: any ) => {\n\t\t\t\t\tconst v = p.data?.value;\n\t\t\t\t\tconst head = `<b>${ escapeText( p.name ) }</b>`;\n\t\t\t\t\treturn v != null ? `${ head }<br/>${ p.marker }<b>${ v }</b>` : head;\n\t\t\t\t}\n\t\t\t},\n\t\t\tseries: [ {\n\t\t\t\ttype: 'tree',\n\t\t\t\tdata: [ s.root ],\n\t\t\t\ttop: 16,\n\t\t\t\tbottom: 16,\n\t\t\t\t// Reserve enough space for leaf labels so they don't get truncated by echarts.\n\t\t\t\tleft: layout === 'radial' ? '5%' : ( orient === 'LR' ? 96 : ( orient === 'RL' ? 16 : 16 ) ),\n\t\t\t\tright: layout === 'radial' ? '5%' : ( orient === 'RL' ? 96 : ( orient === 'LR' ? 96 : 16 ) ),\n\t\t\t\tlayout,\n\t\t\t\torient,\n\t\t\t\tsymbol: 'emptyCircle',\n\t\t\t\tsymbolSize: 7,\n\t\t\t\tinitialTreeDepth: 3,\n\t\t\t\tlabel: {\n\t\t\t\t\tposition: orient === 'TB' ? 'top' : 'left',\n\t\t\t\t\talign: orient === 'LR' ? 'right' : 'center',\n\t\t\t\t\tverticalAlign: 'middle',\n\t\t\t\t\tfontSize: 12,\n\t\t\t\t\toverflow: 'none'\n\t\t\t\t},\n\t\t\t\tleaves: {\n\t\t\t\t\tlabel: {\n\t\t\t\t\t\tposition: orient === 'TB' ? 'bottom' : 'right',\n\t\t\t\t\t\talign: orient === 'LR' ? 'left' : 'center',\n\t\t\t\t\t\toverflow: 'none'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texpandAndCollapse: true,\n\t\t\t\tanimationDuration: 250,\n\t\t\t\tanimationDurationUpdate: 250\n\t\t\t} ]\n\t\t};\n\t} );\n}\n\nfunction countLeaves( n: XiriTreeNode ): number {\n\tif ( !n.children?.length ) return 1;\n\treturn n.children.reduce( ( sum, c ) => sum + countLeaves( c ), 0 );\n}\n\nfunction escapeText( s: string ): string {\n\treturn String( s ?? '' ).replace( /</g, '&lt;' ).replace( />/g, '&gt;' );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriColor } from '../types/color.type';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { resolveColor } from '../echarts/color';\n\nexport interface XiriSankeyNode {\n\tname: string;\n\tcolor?: XiriColor;\n}\n\nexport interface XiriSankeyLink {\n\tsource: string;\n\ttarget: string;\n\tvalue: number;\n}\n\nexport interface XiriSankeySettings {\n\ttitle?: string;\n\tnodes: XiriSankeyNode[];\n\tlinks: XiriSankeyLink[];\n\torient?: 'horizontal' | 'vertical'; // default 'horizontal'\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-sankey',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\"\n\t\t\t[chartHeight]=\"height()\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriSankeyComponent {\n\n\tsettings = input.required<XiriSankeySettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\theight = computed<string>( () => {\n\t\tconst n = this.settings().nodes.length || 1;\n\t\tconst px = Math.max( 280, n * 20 + 80 );\n\t\treturn px + 'px';\n\t} );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\treturn {\n\t\t\ttooltip: { trigger: 'item', triggerOn: 'mousemove' },\n\t\t\tseries: [ {\n\t\t\t\ttype: 'sankey',\n\t\t\t\torient: s.orient ?? 'horizontal',\n\t\t\t\ttop: 16,\n\t\t\t\tbottom: 16,\n\t\t\t\tleft: 16,\n\t\t\t\tright: 80,\n\t\t\t\temphasis: { focus: 'adjacency' },\n\t\t\t\tlineStyle: { color: 'gradient', curveness: 0.5 },\n\t\t\t\tlabel: { fontSize: 12 },\n\t\t\t\tdata: s.nodes.map( ( n, i ) => ( {\n\t\t\t\t\tname: n.name,\n\t\t\t\t\titemStyle: { color: resolveColor( n.color, FALLBACK_COLORS[ i % FALLBACK_COLORS.length ] ) }\n\t\t\t\t} ) ),\n\t\t\t\tlinks: s.links\n\t\t\t} ]\n\t\t};\n\t} );\n}\n\nconst FALLBACK_COLORS = [ '#8b5cf6', '#10b981', '#1e88e5', '#fb8c00', '#e53935', '#fbc02d', '#43a047', '#616161' ];\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { XiriColor } from '../types/color.type';\nimport { XiriEchartsHostComponent } from '../echarts/echarts-host.component';\nimport { resolveColor } from '../echarts/color';\nimport { escapeHtml } from '../echarts/tooltip';\n\nexport interface XiriGanttTask {\n\trow: number; // index into rows[]\n\tname: string;\n\tstart: number; // unix milliseconds\n\tend: number; // unix milliseconds\n\tcolor?: XiriColor;\n}\n\nexport interface XiriGanttSettings {\n\ttitle?: string;\n\trows: string[]; // y-axis categories (top to bottom in render order)\n\ttasks: XiriGanttTask[];\n\trangeStart?: number; // optional x-axis start (ms)\n\trangeEnd?: number; // optional x-axis end (ms)\n\tcompact?: boolean;\n}\n\n@Component( {\n\tselector: 'xiri-gantt',\n\ttemplate: `\n\t\t<xiri-echarts-host\n\t\t\t[option]=\"option()\"\n\t\t\t[compact]=\"compact()\"\n\t\t\t[title]=\"settings().title\"\n\t\t\t[chartHeight]=\"height()\">\n\t\t</xiri-echarts-host>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [ XiriEchartsHostComponent ]\n} )\nexport class XiriGanttComponent {\n\n\tsettings = input.required<XiriGanttSettings>();\n\n\tcompact = computed<boolean>( () => !!this.settings().compact );\n\n\theight = computed<string>( () => {\n\t\tconst rows = this.settings().rows.length || 1;\n\t\tconst px = Math.max( 220, rows * 36 + 80 );\n\t\treturn px + 'px';\n\t} );\n\n\toption = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst rows = s.rows ?? [];\n\n\t\t// Each datum: [rowIndex, start, end, name, color]\n\t\tconst data = ( s.tasks ?? [] ).map( t => [\n\t\t\tt.row,\n\t\t\tt.start,\n\t\t\tt.end,\n\t\t\tt.name,\n\t\t\tresolveColor( t.color, '#8b5cf6' )\n\t\t] );\n\n\t\tconst renderItem = ( _params: any, api: any ) => {\n\t\t\tconst rowIdx = api.value( 0 );\n\t\t\tconst start = api.coord( [ api.value( 1 ), rowIdx ] );\n\t\t\tconst end = api.coord( [ api.value( 2 ), rowIdx ] );\n\t\t\tconst cellH = api.size( [ 0, 1 ] )[ 1 ];\n\t\t\tconst height = Math.max( 4, cellH * 0.6 );\n\t\t\treturn {\n\t\t\t\ttype: 'rect',\n\t\t\t\ttransition: [ 'shape' ],\n\t\t\t\tshape: {\n\t\t\t\t\tx: start[ 0 ],\n\t\t\t\t\ty: start[ 1 ] - height / 2,\n\t\t\t\t\twidth: Math.max( 1, end[ 0 ] - start[ 0 ] ),\n\t\t\t\t\theight,\n\t\t\t\t\tr: 4\n\t\t\t\t},\n\t\t\t\tstyle: { fill: api.value( 4 ) }\n\t\t\t};\n\t\t};\n\n\t\treturn {\n\t\t\ttooltip: {\n\t\t\t\tformatter: ( p: any ) => {\n\t\t\t\t\tconst v = p.value;\n\t\t\t\t\tconst fmt = ( ms: number ) => new Date( ms ).toLocaleString();\n\t\t\t\t\tconst row = rows[ v[ 0 ] ] ?? '';\n\t\t\t\t\treturn `<b>${ escapeHtml( v[ 3 ] ) }</b><br/>${ escapeHtml( row ) }<br/>${ escapeHtml( fmt( v[ 1 ] ) ) } → ${ escapeHtml( fmt( v[ 2 ] ) ) }`;\n\t\t\t\t}\n\t\t\t},\n\t\t\tgrid: { left: 8, right: 16, top: 16, bottom: 24, containLabel: true },\n\t\t\txAxis: {\n\t\t\t\ttype: 'time',\n\t\t\t\tmin: s.rangeStart,\n\t\t\t\tmax: s.rangeEnd,\n\t\t\t\tsplitLine: { lineStyle: { color: '#eee' } }\n\t\t\t},\n\t\t\tyAxis: {\n\t\t\t\ttype: 'category',\n\t\t\t\tdata: rows,\n\t\t\t\tinverse: true,\n\t\t\t\tsplitLine: { show: false },\n\t\t\t\taxisLine: { show: false },\n\t\t\t\taxisTick: { show: false }\n\t\t\t},\n\t\t\tseries: [ {\n\t\t\t\ttype: 'custom',\n\t\t\t\tencode: { x: [ 1, 2 ], y: 0 },\n\t\t\t\tclip: true,\n\t\t\t\trenderItem,\n\t\t\t\tdata\n\t\t\t} ]\n\t\t};\n\t} );\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { XiriButtonlineComponent, XiriButtonlineSettings } from '../buttonline/buttonline.component';\n\nexport interface XiriPageHeaderSettings {\n\ttitle: string\n\tsubtitle?: string\n\ticon?: string\n\ticonColor?: string\n\tbuttons?: XiriButtonlineSettings\n}\n\n@Component( {\n\t selector: 'xiri-page-header',\n\t templateUrl: './page-header.component.html',\n\t styleUrl: './page-header.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, XiriButtonlineComponent ]\n } )\nexport class XiriPageHeaderComponent {\n\n\tsettings = input.required<XiriPageHeaderSettings>();\n}\n","<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","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatDivider } from '@angular/material/divider';\n\nexport interface XiriDividerSettings {\n\ttext?: string\n\ticon?: string\n\tspacing?: 'compact' | 'normal' | 'large'\n}\n\n@Component( {\n\t selector: 'xiri-divider',\n\t templateUrl: './divider.component.html',\n\t styleUrl: './divider.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, MatDivider ]\n } )\nexport class XiriDividerComponent {\n\n\tsettings = input.required<XiriDividerSettings>();\n}\n","<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","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { XiriStatComponent, XiriStatSettings } from '../stat/stat.component';\n\nexport interface XiriStatGridSettings {\n\tstats: XiriStatSettings[]\n\tcolumns?: number\n\ttitle?: string\n}\n\n@Component( {\n\t selector: 'xiri-stat-grid',\n\t templateUrl: './stat-grid.component.html',\n\t styleUrl: './stat-grid.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ XiriStatComponent ]\n } )\nexport class XiriStatGridComponent {\n\n\tsettings = input.required<XiriStatGridSettings>();\n}\n","@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","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { XiriButtonlineComponent, XiriButtonlineSettings } from '../buttonline/buttonline.component';\nimport { XiriSearchComponent } from '../search/search.component';\n\nexport interface XiriToolbarSearchConfig {\n\tplaceholder?: string\n}\n\nexport interface XiriToolbarSettings {\n\ttitle?: string\n\ticon?: string\n\tsearch?: boolean | XiriToolbarSearchConfig\n\tbuttons?: XiriButtonlineSettings\n}\n\n@Component( {\n\t selector: 'xiri-toolbar',\n\t templateUrl: './toolbar.component.html',\n\t styleUrl: './toolbar.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, XiriButtonlineComponent, XiriSearchComponent ]\n } )\nexport class XiriToolbarComponent {\n\n\tsettings = input.required<XiriToolbarSettings>();\n\tfilterData = input<any>( undefined );\n\n\tsearchChanged = output<string>();\n\n\tsearchPlaceholder = computed( () => {\n\t\tconst search = this.settings().search;\n\t\tif ( typeof search === 'object' && search?.placeholder ) {\n\t\t\treturn search.placeholder;\n\t\t}\n\t\treturn '';\n\t} );\n}\n","<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","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { SafehtmlPipe } from '../pipes/safehtml.pipe';\n\nexport interface XiriDescriptionListItem {\n\tlabel: string\n\tvalue: string\n\ticon?: string\n\tcolor?: string\n\ttype?: 'text' | 'link' | 'html' | 'badge'\n}\n\nexport interface XiriDescriptionListSettings {\n\titems: XiriDescriptionListItem[]\n\tcolumns?: 1 | 2 | 3\n\tlayout?: 'horizontal' | 'stacked'\n}\n\n@Component( {\n\t selector: 'xiri-description-list',\n\t templateUrl: './description-list.component.html',\n\t styleUrl: './description-list.component.scss',\n\t changeDetection: ChangeDetectionStrategy.OnPush,\n\t imports: [ MatIcon, SafehtmlPipe ]\n } )\nexport class XiriDescriptionListComponent {\n\n\tsettings = input.required<XiriDescriptionListSettings>();\n\n\tlayoutClass = computed( () => {\n\t\tconst s = this.settings();\n\t\tconst layout = s.layout || 'stacked';\n\t\treturn `${ layout } cols-${ s.columns || 2 }`;\n\t} );\n}\n","<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","import { Injectable } from '@angular/core';\n\n\n@Injectable( {\n\t providedIn: 'root'\n } )\nexport class XiriLocalStorageService {\n\t\n\tprivate readonly isSupported: boolean = false;\n\tprivate data: { [ name: string ]: any } = {};\n\t\n\tconstructor() {\n\t\t\n\t\tif ( window.localStorage )\n\t\t\tthis.isSupported = true;\n\t}\n\t\n\tpublic clear() {\n\t\t\n\t\tthis.data = {};\n\t\tif ( this.isSupported )\n\t\t\tlocalStorage.clear();\n\t}\n\t\n\tpublic set( name: string, value: any ) {\n\t\t\n\t\tlet val = {\n\t\t\ttime: Date.now(),\n\t\t\tvalue: value,\n\t\t}\n\t\t\n\t\tthis.data[ name ] = val;\n\t\tif ( this.isSupported )\n\t\t\tlocalStorage.setItem( name, JSON.stringify( val ) );\n\t}\n\t\n\tprivate getStruct( name: string ): any {\n\t\t\n\t\tif ( this.data[ name ] )\n\t\t\treturn this.data[ name ];\n\t\t\n\t\tif ( this.isSupported ) {\n\t\t\tconst valstr = localStorage.getItem( name );\n\t\t\tif ( valstr ) {\n\t\t\t\tconst val = JSON.parse( valstr );\n\t\t\t\tthis.data[ name ] = val;\n\t\t\t\treturn val;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn null;\n\t}\n\t\n\tpublic remove( name: string ) {\n\t\t\n\t\tdelete this.data[ name ];\n\t\tif ( this.isSupported )\n\t\t\tlocalStorage.removeItem( name );\n\t}\n\t\n\tpublic get( name: string ): any {\n\t\t\n\t\tlet val = this.getStruct( name );\n\t\tif ( !val )\n\t\t\treturn null;\n\t\t\n\t\treturn val.value;\n\t}\n\t\n\t/**\n\t * @param name\n\t * @param maxTime in seconds\n\t */\n\tpublic getTimeout( name: string, maxTime: number ): any {\n\t\t\n\t\tlet val = this.getStruct( name );\n\t\tif ( !val )\n\t\t\treturn null;\n\t\t\n\t\tif ( val.time < Date.now() - maxTime * 1000 ) {\n\t\t\tthis.remove( name );\n\t\t\treturn null;\n\t\t}\n\t\t\n\t\treturn val.value;\n\t}\n\t\n}\n","import { Injectable, signal, computed, effect, PLATFORM_ID, inject } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nexport type ThemeMode = 'light' | 'dark' | 'auto';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n\tprivate readonly platformId = inject(PLATFORM_ID);\n\tprivate readonly isBrowser = isPlatformBrowser(this.platformId);\n\n\t/** Current theme mode setting */\n\tprivate readonly _mode = signal<ThemeMode>('auto');\n\n\t/** Observable theme mode */\n\treadonly mode = this._mode.asReadonly();\n\n\t/** Whether dark mode is currently active (considering auto mode) */\n\treadonly isDark = computed(() => {\n\t\tconst mode = this._mode();\n\t\tif (mode === 'auto') {\n\t\t\treturn this.isBrowser ? this.getSystemPreference() : false;\n\t\t}\n\t\treturn mode === 'dark';\n\t});\n\n\t/** Whether light mode is currently active */\n\treadonly isLight = computed(() => !this.isDark());\n\n\tconstructor() {\n\t\tif (this.isBrowser) {\n\t\t\t// Load saved preference\n\t\t\tconst saved = localStorage.getItem('theme') as ThemeMode | null;\n\t\t\tif (saved && ['light', 'dark', 'auto'].includes(saved)) {\n\t\t\t\tthis._mode.set(saved);\n\t\t\t}\n\n\t\t\t// Apply initial theme\n\t\t\tthis.applyTheme();\n\n\t\t\t// React to mode changes\n\t\t\teffect(() => {\n\t\t\t\tthis.applyTheme();\n\t\t\t});\n\n\t\t\t// Listen for system preference changes\n\t\t\tconst mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\t\t\tmediaQuery.addEventListener('change', () => {\n\t\t\t\tif (this._mode() === 'auto') {\n\t\t\t\t\tthis.applyTheme();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Set the theme mode\n\t * @param mode - 'light', 'dark', or 'auto' (follow system preference)\n\t */\n\tsetTheme(mode: ThemeMode): void {\n\t\tthis._mode.set(mode);\n\t\tif (this.isBrowser) {\n\t\t\tlocalStorage.setItem('theme', mode);\n\t\t}\n\t}\n\n\t/**\n\t * Toggle between light and dark mode\n\t * If currently auto, switches to opposite of current system preference\n\t */\n\ttoggle(): void {\n\t\tconst current = this._mode();\n\t\tif (current === 'auto') {\n\t\t\t// Switch to opposite of current system preference\n\t\t\tthis.setTheme(this.getSystemPreference() ? 'light' : 'dark');\n\t\t} else {\n\t\t\tthis.setTheme(current === 'light' ? 'dark' : 'light');\n\t\t}\n\t}\n\n\t/**\n\t * Reset to auto (system preference)\n\t */\n\tresetToAuto(): void {\n\t\tthis.setTheme('auto');\n\t}\n\n\tprivate getSystemPreference(): boolean {\n\t\tif (!this.isBrowser) return false;\n\t\treturn window.matchMedia('(prefers-color-scheme: dark)').matches;\n\t}\n\n\tprivate applyTheme(): void {\n\t\tif (!this.isBrowser) return;\n\n\t\tconst mode = this._mode();\n\t\tconst root = document.documentElement;\n\n\t\t// Remove existing theme classes\n\t\troot.classList.remove('light-theme', 'dark-theme');\n\n\t\t// Apply theme class based on mode\n\t\tif (mode === 'light') {\n\t\t\troot.classList.add('light-theme');\n\t\t} else if (mode === 'dark') {\n\t\t\troot.classList.add('dark-theme');\n\t\t}\n\t\t// 'auto' mode: no class needed, CSS media query handles it\n\t}\n}\n","import { defaultXiriDataServiceConfig, XiriDataServiceConfig } from \"./services/data.service\";\nimport { EnvironmentProviders, makeEnvironmentProviders } from \"@angular/core\";\n\nexport function provideXiriServices(\n\tconfig: Partial<XiriDataServiceConfig>\n): EnvironmentProviders {\n\tconst merged = { ...defaultXiriDataServiceConfig, ...config };\n\t\n\treturn makeEnvironmentProviders( [\n\t\t {\n\t\t\t provide: XiriDataServiceConfig,\n\t\t\t useValue: merged,\n\t\t }\n\t ] );\n}","/*\n * Public API Surface of xiri-ng\n */\n\nexport * from './lib/types/color.type';\nexport { SafehtmlPipe } from \"./lib/pipes/safehtml.pipe\";\n\nexport * from \"./lib/formfields/field.interface\";\nexport * from \"./lib/formfields/form-fields.component\";\nexport * from \"./lib/formfields/select/select.directive\";\n\nexport * from \"./lib/raw-table/tabefield.interface\";\nexport * from \"./lib/raw-table/xiri-raw-table.component\";\nexport * from \"./lib/table/table.component\";\n\nexport * from \"./lib/form/form.component\";\nexport * from \"./lib/dialog/dialog.component\";\nexport * from './lib/query/query.component';\n\nexport * from \"./lib/card/card.component\";\nexport * from './lib/buttonstyle/buttonstyle.component';\nexport * from './lib/button/button.component';\nexport * from \"./lib/buttonline/buttonline.component\";\nexport * from \"./lib/dyncomponent/dyndata.interface\";\nexport * from \"./lib/dyncomponent/dyncomponent.component\";\nexport * from \"./lib/cardlink/cardlink.component\";\nexport * from './lib/links/links.component';\nexport * from \"./lib/alert/alert.component\";\nexport * from './lib/stepper/stepper.component';\nexport * from './lib/done/done.component';\nexport * from './lib/error/error.component';\nexport * from \"./lib/header/header.component\";\nexport * from './lib/list/list.component';\nexport * from './lib/infopoint/infopoint.component';\nexport * from './lib/multiprogress/multiprogress.component';\nexport * from './lib/imagetext/imagetext.component';\nexport * from './lib/search/search.component';\nexport * from './lib/sidenav/sidenav.component';\nexport * from './lib/tabs/tabs.component';\nexport * from './lib/expansion/expansion.component';\n\nexport * from './lib/breadcrumb/breadcrumb.component';\nexport * from './lib/skeleton/skeleton.component';\nexport * from './lib/empty-state/empty-state.component';\nexport * from './lib/stat/stat.component';\nexport * from './lib/timeline/timeline.component';\nexport * from './lib/barchart/barchart.component';\nexport * from './lib/linechart/linechart.component';\nexport * from './lib/piechart/piechart.component';\nexport * from './lib/gaugechart/gaugechart.component';\nexport * from './lib/heatmap/heatmap.component';\nexport * from './lib/calendar/calendar.component';\nexport * from './lib/tree/tree.component';\nexport * from './lib/sankey/sankey.component';\nexport * from './lib/gantt/gantt.component';\nexport * from './lib/echarts';\n\nexport * from './lib/page-header/page-header.component';\nexport * from './lib/section/section.component';\nexport * from './lib/divider/divider.component';\nexport * from './lib/stat-grid/stat-grid.component';\nexport * from './lib/toolbar/toolbar.component';\nexport * from './lib/description-list/description-list.component';\n\nexport * from './lib/services/data.service';\nexport * from './lib/services/date.service';\nexport * from './lib/services/form.service';\nexport * from './lib/services/localStorage.service';\nexport * from './lib/services/sessionStorage.service';\nexport * from './lib/services/number.service';\nexport * from './lib/services/theme.service';\nexport * from './lib/services/snackbar.service';\nexport * from './lib/services/response-handler.service';\nexport * from './lib/services/download.service';\n\nexport * from './lib/provider';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["MatOption","filter","FALLBACK_COLORS"],"mappings":"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"}