@lenne.tech/ng-base 14.13.0 → 14.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/base-components/components/change-password/change-password.component.mjs +41 -21
- package/esm2020/base-components/components/input/input.component.mjs +2 -2
- package/esm2020/base-components/components/upload-image/upload-image.component.mjs +3 -3
- package/esm2020/shared/services/file.service.mjs +1 -2
- package/esm2020/shared/validators/secure-password.validator.mjs +2 -2
- package/fesm2015/lenne.tech-ng-base-base-components.mjs +44 -24
- package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base-shared.mjs +1 -2
- package/fesm2015/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-base-components.mjs +44 -24
- package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-shared.mjs +1 -2
- package/fesm2020/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lenne.tech-ng-base-base-components.mjs","sources":["../../../projects/ng-base/base-components/components/input/input.component.ts","../../../projects/ng-base/base-components/components/input/input.component.html","../../../projects/ng-base/base-components/components/select/select.component.ts","../../../projects/ng-base/base-components/components/select/select.component.html","../../../projects/ng-base/base-components/components/checkbox/checkbox.component.ts","../../../projects/ng-base/base-components/components/checkbox/checkbox.component.html","../../../projects/ng-base/base-components/components/textarea/textarea.component.ts","../../../projects/ng-base/base-components/components/textarea/textarea.component.html","../../../projects/ng-base/base-components/components/toast/toast.component.ts","../../../projects/ng-base/base-components/components/toast/toast.component.html","../../../projects/ng-base/base-components/components/tags/tags.component.ts","../../../projects/ng-base/base-components/components/tags/tags.component.html","../../../projects/ng-base/base-components/components/loading-bar/loading-bar.component.ts","../../../projects/ng-base/base-components/components/loading-bar/loading-bar.component.html","../../../projects/ng-base/base-components/components/skeleton-loader/skeleton-loader.component.ts","../../../projects/ng-base/base-components/components/skeleton-loader/skeleton-loader.component.html","../../../projects/ng-base/base-components/components/breadcrumb/breadcrumb.component.ts","../../../projects/ng-base/base-components/components/breadcrumb/breadcrumb.component.html","../../../projects/ng-base/base-components/directives/sort.directive.ts","../../../projects/ng-base/base-components/directives/context-menu.directive.ts","../../../projects/ng-base/base-components/components/upload-image/upload-image.component.ts","../../../projects/ng-base/base-components/components/upload-image/upload-image.component.html","../../../projects/ng-base/base-components/components/refence-input/refence-input.component.ts","../../../projects/ng-base/base-components/components/refence-input/refence-input.component.html","../../../projects/ng-base/base-components/components/model-form-sub/model-form-sub.component.ts","../../../projects/ng-base/base-components/components/model-form-sub/model-form-sub.component.html","../../../projects/ng-base/base-components/components/fab-button/fab-button.component.ts","../../../projects/ng-base/base-components/components/fab-button/fab-button.component.html","../../../projects/ng-base/base-components/components/model-form/model-form.component.ts","../../../projects/ng-base/base-components/components/model-form/model-form.component.html","../../../projects/ng-base/base-components/pipes/ellipses.pipe.ts","../../../projects/ng-base/base-components/components/model-table/model-table.component.ts","../../../projects/ng-base/base-components/components/model-table/model-table.component.html","../../../projects/ng-base/base-components/components/change-password/change-password.component.ts","../../../projects/ng-base/base-components/components/change-password/change-password.component.html","../../../projects/ng-base/base-components/components/delete-account/delete-account.component.ts","../../../projects/ng-base/base-components/components/delete-account/delete-account.component.html","../../../projects/ng-base/base-components/directives/back-button.directive.ts","../../../projects/ng-base/base-components/base-components.module.ts","../../../projects/ng-base/base-components/public-api.ts","../../../projects/ng-base/base-components/lenne.tech-ng-base-base-components.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'base-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n})\nexport class InputComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string;\n @Input() placeholder?: string = '';\n @Input() autocomplete?: string;\n @Input() tabIndex?: number;\n @Input() control: any;\n @Input() type = 'text';\n @Input() required = false;\n @Input() eyeButton = false;\n\n @Output() enter = new EventEmitter();\n\n /**\n * If the control has a value, emit the enter event\n */\n enterEvent() {\n if (this.control?.value) {\n this.enter.emit();\n }\n }\n\n /**\n * Switch input type\n */\n togglePasswordType() {\n if (this.type === 'password') {\n this.type = 'text';\n } else {\n this.type = 'password';\n }\n }\n}\n","<div class=\"form-group mb-3\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <div class=\"input-group\">\n <input\n [id]=\"id\"\n [name]=\"name\"\n class=\"form-control\"\n [type]=\"type\"\n [formControl]=\"control\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n (keyup.enter)=\"enterEvent()\"\n [attr.aria-describedby]=\"id + 'eye-button'\"\n />\n <button\n class=\"btn btn-outline-primary\"\n type=\"button\"\n [id]=\"id + 'eye-button'\"\n (click)=\"togglePasswordType()\"\n *ngIf=\"eyeButton\"\n >\n <i class=\"bi bi-eye\" *ngIf=\"type === 'password'\"></i>\n <i class=\"bi bi-eye-slash\" *ngIf=\"type === 'text'\"></i>\n </button>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestlänge für dieses Feld beträgt\n {{control.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale Länge für dieses Feld beträgt\n {{control.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte eine gültige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['pattern'] && type === 'tel'\">Bitte eine gültige Telefonnummer angeben.</div>\n <div *ngIf=\"control?.errors?.['invalidEmail']\">Bitte eine gültige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['matching']\">Die Passwörter müssen überein stimmen.</div>\n <div *ngIf=\"control?.errors?.['invalidSecurePassword']\">\n Das Passwort ist zu unsicher. Es muss mind. 8 Zeichen lang sein und ein Großbustabe, ein Kleinbuchstabe, eine\n Zahl und ein Sonderzeichen enthalten.\n </div>\n </div>\n </div>\n</div>\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\n\ninterface Option {\n text: string;\n value: string | number;\n}\n\n@Component({\n selector: 'base-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n})\nexport class SelectComponent implements OnInit {\n @ViewChild('select') select: ElementRef;\n\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string;\n @Input() placeholder?: string = '';\n @Input() control: any;\n @Input() tabIndex?: number;\n @Input() required = false;\n @Input() multiple = false;\n @Input() search = false;\n @Input() options: Option[] = [];\n\n ngOnInit() {\n if (this.multiple) {\n this.select.nativeElement.setAttribute('multiple', true);\n }\n }\n}\n","<div class=\"form-group mb-3\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <select\n #select\n [id]=\"id\"\n [name]=\"name\"\n class=\"form-select\"\n [attr.aria-label]=\"placeholder\"\n [attr.data-live-search]=\"search\"\n [formControl]=\"control\"\n [required]=\"required\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n >\n <option [ngValue]=\"null\" disabled selected>{{ placeholder }}</option>\n <option *ngFor=\"let option of options\" [ngValue]=\"option.value\">\n {{ option.text }}\n </option>\n </select>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestlänge für dieses Feld beträgt\n {{control?.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale Länge für dieses Feld beträgt\n {{control?.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte eine gültige E-Mail Adresse angeben.</div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'base-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n})\nexport class CheckboxComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string;\n @Input() value: string | number;\n @Input() control: any;\n @Input() required = false;\n}\n","<div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [formControl]=\"control\"\n [required]=\"required\"\n [value]=\"value\"\n [id]=\"id\"\n [name]=\"name\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n />\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\">\n <ng-container *ngIf=\"label\">\n {{ label }}\n </ng-container>\n <ng-content></ng-content>\n </label>\n\n <div class=\"invalid-feedback ms-0 m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'base-textarea',\n templateUrl: './textarea.component.html',\n styleUrls: ['./textarea.component.scss'],\n})\nexport class TextareaComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string = '';\n @Input() placeholder?: string = '';\n @Input() control: any;\n @Input() rows = 5;\n @Input() required = false;\n @Input() tabIndex?: number;\n}\n","<div class=\"form-group mb-3\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <textarea\n class=\"form-control\"\n [id]=\"id\"\n [name]=\"name\"\n [rows]=\"rows\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n ></textarea>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestlänge für dieses Feld beträgt\n {{control?.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale Länge für dieses Feld beträgt\n {{control?.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n </div>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { animate, query, style, transition, trigger } from '@angular/animations';\nimport { Subscription } from 'rxjs';\nimport { Toast, ToastService, ToastType } from '@lenne.tech/ng-base/shared';\n\nconst toastAnimation = trigger('toastAnimation', [\n transition('* <=> *', [\n query(\n ':enter',\n [style({ transform: 'translateX(100%)' }), animate('200ms ease-in', style({ transform: 'translateX(0%)' }))],\n { optional: true }\n ),\n query(':leave', animate('200ms ease-in', style({ transform: 'translateX(100%)' })), { optional: true }),\n ]),\n]);\n\n@Component({\n selector: 'base-toast',\n templateUrl: './toast.component.html',\n styleUrls: ['./toast.component.scss'],\n animations: [toastAnimation],\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n toasts: Toast[] = [];\n ToastType = ToastType;\n subscriptions = new Subscription();\n @Input() position: 'top-right' | 'bottom-right' = 'bottom-right';\n\n constructor(private toastService: ToastService) {}\n\n ngOnInit(): void {\n this.subscriptions.add(\n this.toastService.toastsAsObservable.subscribe({\n next: (value) => {\n this.toasts = value;\n },\n })\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n getDefaultTitle(toast: Toast): string {\n switch (toast.type) {\n case ToastType.ERROR:\n return 'Irgendetwas ist schiefgelaufen';\n case ToastType.INFO:\n return 'Info';\n case ToastType.WARNING:\n return 'Achtung';\n case ToastType.SUCCESS:\n return 'Erfolgreich';\n }\n }\n\n getDefaultDescription(toast: Toast): string {\n switch (toast.type) {\n case ToastType.ERROR:\n return 'Sollte das Problem länger bestehen bleiben, dann wenden Sie sich bitte\\n' + ' an den Support.';\n case ToastType.INFO:\n return 'Info';\n case ToastType.WARNING:\n return 'Warning';\n case ToastType.SUCCESS:\n return 'Die Änderungen wurden erfolgreich gespeichert.';\n }\n }\n\n reload() {\n location.reload();\n }\n}\n","<div class=\"toast-container position-fixed\" [ngClass]=\"position\" [@toastAnimation]=\"toasts.length\">\n <div\n class=\"toast show\"\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n *ngFor=\"let toast of toasts\"\n [ngClass]=\"toast.type\"\n >\n <div class=\"toast-header\">\n <strong class=\"me-auto\">{{ toast?.title ?? getDefaultTitle(toast) }}</strong>\n <button type=\"button\" class=\"btn-close btn-close-white\" data-bs-dismiss=\"toast\" aria-label=\"Close\"></button>\n </div>\n <div class=\"toast-body\">\n {{ toast?.description ?? getDefaultDescription(toast) }}\n\n <div class=\"mt-2\" *ngIf=\"toast?.errorCode\">\n <code>ERROR: {{ toast.errorCode }}</code>\n </div>\n\n <div class=\"mt-2\" *ngIf=\"toast.type === ToastType.ERROR\">\n <a class=\"color-secondary\" href=\"#\" (click)=\"reload()\">Seite neu laden</a>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'base-tags',\n templateUrl: './tags.component.html',\n styleUrls: ['./tags.component.scss'],\n})\nexport class TagsComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string = '';\n @Input() placeholder?: string = '';\n @Input() autocomplete?: string;\n @Input() tabIndex?: number;\n @Input() control: any;\n @Input() options?: { text: string; value: string }[];\n @Input() custom = true;\n @Input() removeByKey = true;\n @Input() required = false;\n inputValue = '';\n selectedElement: HTMLElement;\n\n /**\n * Convert id into text field\n */\n getReadableTag(tag: string) {\n if (this.control?.value && this.options) {\n const foundElement = this.options.find((e) => e.value === tag);\n\n if (foundElement) {\n return foundElement.text;\n } else {\n return tag;\n }\n } else {\n return tag;\n }\n }\n\n /**\n * Listen to enter keys\n *\n * @param event\n */\n enterKey(event: any): void {\n this.selectedElement = event.target;\n\n if (this.removeByKey && event.code === 'Backspace' && !this.inputValue) {\n this.removeTag();\n return;\n } else {\n if (event.code === 'Comma' || event.code === 'Space' || event.code === 'Enter') {\n this.addTag(this.inputValue);\n }\n }\n }\n\n /**\n * Add new tag\n *\n * @param tag\n */\n addTag(tag: string): void {\n if (tag.endsWith(',') || tag.endsWith(' ')) {\n tag = tag.slice(0, -1);\n }\n\n let foundOption;\n if (!this.options) {\n foundOption = { value: tag, text: tag };\n } else {\n foundOption = this.options.find((e) => e.text === tag);\n }\n\n if (!this.custom && !foundOption) {\n return;\n }\n\n this.selectedElement = null;\n\n if (!this.control.value) {\n this.control.setValue([]);\n }\n\n if (this.control.value?.length === 0) {\n this.control.setValue([foundOption.value]);\n this.inputValue = '';\n this.control.setErrors(null);\n return;\n }\n\n if (\n tag.length > 0 &&\n this.control.value &&\n !this.control.value.some((item: string) => item === foundOption.value)\n ) {\n this.control.setValue([...this.control.value, foundOption.value]);\n this.inputValue = '';\n this.control.setErrors(null);\n }\n }\n\n /**\n * Remove tag\n *\n * @param tag\n */\n removeTag(tag?: string): void {\n let foundOption;\n if (!this.options) {\n foundOption = { value: tag, text: tag };\n } else {\n foundOption = this.options.find((e) => e.value === tag);\n }\n\n this.control.markAsTouched();\n if (foundOption) {\n this.control.setValue(this.control.value.filter((item: string) => item !== foundOption.value));\n } else if (this.control.value) {\n this.control.value.splice(-1);\n }\n\n if (this.control.value?.length === 0) {\n this.control.setErrors({ required: true });\n }\n }\n\n /**\n * Filter options for drop down\n */\n filterOptions(): { text: string; value: string }[] {\n return this.options\n ? this.options.filter(\n (e) => (!this.inputValue || e?.text?.includes(this.inputValue)) && !this.control.value?.includes(e.value)\n )\n : [];\n }\n\n /**\n * Show dropdown focus\n */\n onFocus(event?) {\n if (event) {\n this.control.setErrors(null);\n this.selectedElement = event.target;\n } else {\n this.control.markAsTouched();\n\n setTimeout(() => {\n if (this.options && this.inputValue) {\n if (this.options.find((e) => e.text === this.inputValue)) {\n this.addTag(this.inputValue);\n this.control.setErrors(null);\n } else {\n this.inputValue = '';\n }\n }\n\n if (!this.control.value || this.control.value?.length === 0) {\n this.control.setErrors({ required: true });\n }\n\n this.selectedElement = null;\n }, 250);\n }\n }\n}\n","<div class=\"form-group position-relative\" *ngIf=\"control\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n\n <div class=\"tag-wrapper\" *ngIf=\"control?.value\">\n <div class=\"tag\" *ngFor=\"let tag of control?.value\">\n {{ getReadableTag(tag) }}\n <span (click)=\"removeTag(tag)\"><i class=\"bi bi-x-circle\"></i></span>\n </div>\n </div>\n <input [formControl]=\"control\" hidden />\n <input\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n [(ngModel)]=\"inputValue\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onFocus()\"\n type=\"text\"\n class=\"form-control\"\n (keyup)=\"enterKey($event)\"\n />\n\n <div class=\"tag-options\" *ngIf=\"options && selectedElement\">\n <div class=\"tag-option-item\" *ngFor=\"let option of filterOptions()\" (click)=\"addTag(option?.text)\">\n {{ option?.text }}\n </div>\n </div>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['invalidReference'] && inputValue\">\n {{ inputValue }} ist kein gültiger Wert für {{ label }}.\n </div>\n </div>\n</div>\n","import { ChangeDetectorRef, Component, Input, NgZone, OnDestroy, OnInit } from '@angular/core';\nimport { LoaderService } from '@lenne.tech/ng-base/shared';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'base-loading-bar',\n templateUrl: './loading-bar.component.html',\n styleUrls: ['./loading-bar.component.scss'],\n})\nexport class LoadingBarComponent implements OnInit, OnDestroy {\n @Input() manuallyLoading = false;\n loading = false;\n subscription = new Subscription();\n\n constructor(\n private ngZone: NgZone,\n private changeDetectorRef: ChangeDetectorRef,\n private loaderService: LoaderService\n ) {}\n\n ngOnInit() {\n this.ngZone.runOutsideAngular(() => {\n this.subscription.add(\n this.loaderService.isLoading.subscribe((value) => {\n this.loading = value;\n this.changeDetectorRef.detectChanges();\n })\n );\n });\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n}\n","<div class=\"slider\" *ngIf=\"loading || manuallyLoading\">\n <div class=\"line\"></div>\n <div class=\"subline inc\"></div>\n <div class=\"subline dec\"></div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { SkeletonType } from '@lenne.tech/ng-base/shared';\n\n@Component({\n selector: 'base-skeleton-loader',\n templateUrl: './skeleton-loader.component.html',\n styleUrls: ['./skeleton-loader.component.scss'],\n})\nexport class SkeletonLoaderComponent {\n @Input() type!: SkeletonType;\n @Input() count = 1;\n @Input() size = 18;\n\n convertToArray(value): any {\n if (!value) {\n return [];\n }\n const res = [];\n\n for (let i = 0; i < value; i++) {\n res.push(i);\n }\n\n return res;\n }\n}\n","<ng-container *ngIf=\"type\" [ngSwitch]=\"type\">\n <div *ngSwitchCase=\"'LINE'\">\n <div class=\"line-loader-wrapper\">\n <div class=\"line-loader\" *ngFor=\"let key of convertToArray(count)\"></div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'RECTANGLE'\">\n <div class=\"line-rectangle\" [ngStyle]=\"{ height: size + 'px' }\"></div>\n </div>\n\n <div *ngSwitchCase=\"'AVATAR'\">\n <div class=\"line-avatar\" [ngStyle]=\"{ height: size + 'px', width: size + 'px' }\"></div>\n </div>\n</ng-container>\n","import { Component } from '@angular/core';\nimport { Breadcrumb, BreadcrumbService } from '@lenne.tech/ng-base/shared';\n\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'base-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.scss'],\n})\nexport class BreadcrumbComponent {\n breadcrumbs$: Observable<Breadcrumb[]>;\n\n constructor(private readonly breadcrumbService: BreadcrumbService) {\n this.breadcrumbs$ = breadcrumbService.breadcrumbsObservable;\n }\n}\n","<ul class=\"pt-3\">\n <li *ngFor=\"let breadcrumb of breadcrumbs$ | async\">\n <a [routerLink]=\"breadcrumb.url\">{{ breadcrumb.label }}</a>\n </li>\n</ul>\n","import { Directive, ElementRef, HostListener, Inject, Input, Renderer2 } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Sort } from '@lenne.tech/ng-base/shared';\n\n@Directive({\n selector: '[baseSort]',\n})\nexport class SortDirective {\n @Input() baseSort: Array<any>;\n constructor(private renderer: Renderer2, private targetElem: ElementRef, @Inject(DOCUMENT) document: Document) {}\n\n /**\n * Sorts columns on click\n */\n @HostListener('click')\n sortColumn(): void {\n const items = document.getElementsByTagName('th');\n for (let i = 0; i < items.length; i++) {\n items[i].classList.remove('asc');\n items[i].classList.remove('desc');\n }\n\n const sort = new Sort();\n\n const elem = this.targetElem.nativeElement;\n\n const order = elem.getAttribute('data-order');\n\n const type = elem.getAttribute('data-type');\n\n const property = elem.getAttribute('data-name');\n\n if (order === 'desc') {\n this.baseSort.sort(sort.startSort(property, order, type));\n elem.setAttribute('data-order', 'asc');\n elem.classList.remove('desc');\n elem.classList.add('asc');\n } else {\n this.baseSort.sort(sort.startSort(property, order, type));\n elem.setAttribute('data-order', 'desc');\n elem.classList.remove('asc');\n elem.classList.add('desc');\n }\n }\n}\n","import { Directive, ElementRef, Input, OnInit, Output } from '@angular/core';\n\n/**\n * Directive vor context menu\n * See https://stackblitz.com/edit/angular-custom-context-menu\n */\n@Directive({\n selector: '[ltContextMenu]',\n exportAs: 'contextMenuData',\n})\nexport class ContextMenuDirective implements OnInit {\n @Input() contextMenuData?: any;\n @Input() ltContextMenu: HTMLElement;\n @Input() xGap = 0;\n @Input() yGap = 0;\n @Input() overflowSpace = 10;\n @Input() selectors = '*';\n @Output() clickedElement: Element = null;\n previousDisplayStatus: string = null;\n\n constructor(private el: ElementRef) {}\n\n ngOnInit() {\n if (this.ltContextMenu) {\n this.previousDisplayStatus = this.ltContextMenu.style.display;\n }\n\n // Add a click listener to the window,\n // so that we can close the context menu on left click\n window.addEventListener('click', () => {\n this.showContextMenu(null, false);\n });\n\n // Close context menu when escape is pressed\n window.addEventListener('keydown', (e) => {\n if (e.code === 'Escape') {\n this.showContextMenu(null, false);\n }\n });\n\n // Add an event listener to listen to the 'contextmenu' event\n this.el.nativeElement.addEventListener('contextmenu', (e) => {\n // Prevent the default context menu to popup\n if (e.preventDefault) {\n e.preventDefault();\n }\n // Shows our own context menu\n this.showContextMenu(e, true);\n });\n }\n\n // Shows or hides our custom context menu, which is specified as a input\n showContextMenu(event, show: boolean) {\n const cm = this.ltContextMenu;\n if (cm) {\n // Try to open context menu\n if (show && event && event instanceof MouseEvent) {\n // Get valid clicked structureElement\n const clickedElement = (event?.target as HTMLElement)?.closest(this.selectors);\n if (clickedElement) {\n this.clickedElement = clickedElement;\n\n setTimeout(() => {\n // Set display status\n cm.style.display = 'block';\n\n // Calculate top position\n let top = event.y + this.yGap;\n if (top + cm.offsetHeight + 10 > document.documentElement.clientHeight) {\n top = document.documentElement.clientHeight - cm.offsetHeight - this.overflowSpace;\n }\n\n // Calculate left position\n let left = event.x + this.xGap;\n if (left + cm.offsetWidth + 10 > document.documentElement.clientWidth) {\n left = document.documentElement.clientWidth - cm.offsetWidth - this.overflowSpace;\n }\n\n // Set position\n cm.style.top = top + 'px';\n cm.style.left = left + 'px';\n\n // Show\n cm.style.opacity = '1.0';\n cm.style['pointer-events'] = 'auto';\n }, 1);\n\n return;\n }\n }\n\n // Close context menu\n this.clickedElement = null;\n if (this.previousDisplayStatus) {\n cm.style.display = this.previousDisplayStatus;\n }\n cm.style.opacity = '0.01';\n cm.style['pointer-events'] = 'none';\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { AuthService, CompressOptions, FileService, ToastService, ToastType } from '@lenne.tech/ng-base/shared';\n\n@Component({\n selector: 'base-upload-image',\n templateUrl: './upload-image.component.html',\n styleUrls: ['./upload-image.component.scss'],\n})\nexport class UploadImageComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string;\n @Input() supportText = 'Supports: JPEG, JPG, PNG';\n @Input() required = false;\n @Input() defaultDragText = 'Drag & Drop';\n @Input() defaultReleaseText = 'Release to Upload';\n @Input() preButtonText = 'or';\n @Input() buttonText = 'browse';\n @Input() validExtensions = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp'];\n @Input() control: any;\n @Input() url = 'http://localhost:3000';\n @Input() uploadPath = '/files/upload';\n @Input() deletePath = '/files/';\n @Input() path = '/files/';\n @Input() compressOptions: CompressOptions;\n @Input() maxSize: number;\n @Input() uploadDirectly = false;\n\n @Output() imageUploaded = new EventEmitter();\n @Output() imageDeleted = new EventEmitter();\n @Output() fileChanged = new EventEmitter<{ field: string; file: File | null }>();\n\n dragActive = false;\n dragText = 'Drag & Drop';\n selectedFile: File;\n fileUrl: string;\n loading = false;\n\n constructor(\n private httpClient: HttpClient,\n private authService: AuthService,\n private fileService: FileService,\n private toastService: ToastService\n ) {}\n\n /**\n * The dragOver function is called when the user drags a file over the dropzone. It prevents the default action of the\n * event, and sets the dragText to 'Release to Upload' and the dragActive to true\n *\n * @param event - any - This is the event that is triggered when the user drags a file over the dropzone.\n */\n dragOver(event: any) {\n event.preventDefault();\n this.dragText = this.defaultReleaseText;\n this.dragActive = true;\n }\n\n /**\n * When the user drags a file over the drop zone, the dragActive variable is set to true, which will change the color of\n * the drop zone to green\n *\n * @param event - The event object that is passed to the dragLeave event.\n */\n dragLeave(event: any) {\n this.dragText = this.defaultDragText;\n this.dragActive = false;\n }\n\n /**\n * The function takes an event as a parameter, prevents the default action of the event, sets the URL of the image to the\n * file that was dragged and dropped, sets the text of the drag and drop area to the default text, and sets the\n * dragActive variable to false\n *\n * @param event - any - This is the event that is triggered when the user drags and drops a file.\n */\n drop(event: any) {\n event.preventDefault();\n this.setUrl(event.dataTransfer.files[0]);\n this.dragText = 'Drag & Drop';\n this.dragActive = false;\n }\n\n /**\n * It takes a file as an argument, checks if the file type is valid, and if it is, it creates a new FileReader object,\n * sets the onload function to set the fileUrl to the result of the fileReader, sets the selectedFile to the file, and\n * calls the upload function\n *\n * @param file - any - this is the file that is selected by the user.\n */\n setUrl(file: File) {\n if (this.maxSize && file.size > this.maxSize) {\n this.toastService.show(\n {\n id: 'image-invalid-size',\n type: ToastType.ERROR,\n title: 'Fehlgeschlagen',\n description:\n 'Die Datei ist zu groß. Die Datei darf nicht größer als ' +\n (this.maxSize / (1024 * 1024)).toFixed(2) +\n 'MB sein.',\n },\n 3500\n );\n return;\n }\n\n if (this.validExtensions.includes(file.type)) {\n const fileReader = new FileReader();\n fileReader.onload = (result) => {\n this.loading = true;\n this.fileUrl = fileReader.result as string;\n this.selectedFile = file;\n this.upload();\n };\n fileReader.readAsDataURL(file);\n } else {\n this.toastService.show(\n {\n id: 'image-invalid-format',\n type: ToastType.ERROR,\n title: 'Fehlgeschlagen',\n description: 'Das Format der Datei wird nicht unterstützt.',\n },\n 3500\n );\n }\n }\n\n /**\n * The function takes an event as an argument, and then sets the url of the file to the first file in the event's\n * target's files array\n *\n * @param event - any - The event that is triggered when the user selects a file.\n */\n selectFile(event: any) {\n this.setUrl(event.target.files[0]);\n }\n\n /**\n * We create a new FormData object, append the selected file to it, and then send it to the server\n */\n async upload() {\n let result;\n if (this.uploadDirectly) {\n result = await this.fileService.upload(this.url, this.uploadPath, this.selectedFile, this.compressOptions);\n } else {\n this.control.markAsTouched();\n this.fileChanged.emit({ field: this.id, file: this.selectedFile });\n this.loading = false;\n return;\n }\n\n if (result?.id) {\n this.control.setValue(result.id);\n this.imageUploaded.emit(result.id);\n }\n\n this.control.markAsTouched();\n this.loading = false;\n }\n\n /**\n * It deletes the file from the server and sets the selectedFile and fileUrl to null\n *\n * @param [id] - The id of the file to delete.\n */\n async deleteFile(id?: string) {\n if (!this.uploadDirectly) {\n this.selectedFile = null;\n this.fileUrl = null;\n this.control.setValue('');\n this.control.markAsTouched();\n this.fileChanged.emit({ field: this.id, file: null });\n return;\n }\n\n this.loading = true;\n this.selectedFile = null;\n this.fileUrl = null;\n\n if (id) {\n const result = await this.fileService.delete(this.url, this.deletePath, id);\n if (result) {\n this.selectedFile = null;\n this.fileUrl = null;\n this.control.setValue('');\n this.imageDeleted.emit();\n this.loading = false;\n }\n }\n }\n}\n","<div class=\"form-group mt-3\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <div\n class=\"drag-area\"\n (dragover)=\"dragOver($event)\"\n (dragleave)=\"dragLeave($event)\"\n (drop)=\"drop($event)\"\n [ngClass]=\"{ active: dragActive }\"\n >\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n\n <ng-container *ngIf=\"selectedFile && !control?.value && !loading\">\n <img [src]=\"fileUrl\" *ngIf=\"selectedFile\" />\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteFile()\">Löschen</button>\n </ng-container>\n\n <ng-container *ngIf=\"control?.value && !loading\">\n <img [src]=\"url + path + control?.value\" />\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteFile(control?.value)\">Löschen</button>\n </ng-container>\n\n <ng-container *ngIf=\"!selectedFile && !control?.value && !loading\">\n <div class=\"icon\">\n <i class=\"bi bi-images\"></i>\n </div>\n\n <span class=\"header\">{{ dragText }}</span>\n <span class=\"header\"\n >{{ preButtonText }} <span class=\"button\" (click)=\"fileInput.click()\">{{ buttonText }}</span></span\n >\n <input type=\"file\" (change)=\"selectFile($event)\" [attr.accept]=\"validExtensions?.join(',')\" hidden #fileInput />\n <span class=\"support\" [innerText]=\"supportText\"></span>\n </ng-container>\n </div>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestlänge für dieses Feld beträgt\n {{control?.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale Länge für dieses Feld beträgt\n {{control?.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte eine gültige E-Mail Adresse angeben.</div>\n </div>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { GraphQLRequestType, GraphQLService } from '@lenne.tech/ng-base/shared';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'base-refence-input',\n templateUrl: './refence-input.component.html',\n styleUrls: ['./refence-input.component.scss'],\n})\nexport class RefenceInputComponent implements OnInit, OnDestroy {\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string;\n @Input() isList = false;\n @Input() search = true;\n @Input() placeholder?: string = '';\n @Input() autocomplete?: string;\n @Input() tabIndex?: number;\n @Input() control: any;\n @Input() required = false;\n @Input() method = 'find';\n @Input() fields = ['id', 'name'];\n @Input() valueField = 'id';\n @Input() nameField = 'name';\n objects: any[] = [];\n currentValue: any;\n optionsForTagInput = [];\n selectedElement: HTMLElement;\n subscription = new Subscription();\n\n constructor(private graphQLService: GraphQLService) {}\n\n async ngOnInit() {\n this.getReferences();\n\n this.subscription.add(\n this.control.valueChanges.subscribe(() => {\n if (!this.currentValue) {\n this.setValue();\n }\n })\n );\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n /**\n * It gets the references from the GraphQL server and sets the value of the select\n */\n getReferences() {\n const fields = [...this.fields];\n\n if (Array.isArray(this.nameField)) {\n for (const field of this.nameField) {\n if (!fields.includes(field)) {\n fields.push(field);\n }\n }\n } else {\n if (!fields.includes(this.nameField)) {\n fields.push(this.nameField);\n }\n }\n\n this.graphQLService\n .graphQl(this.method, {\n fields,\n type: GraphQLRequestType.QUERY,\n })\n .subscribe(async (result) => {\n if (result) {\n this.objects = result;\n this.setObjectsAsOptions();\n\n if (!this.currentValue) {\n this.setValue();\n }\n }\n });\n }\n\n /**\n * If the current value is not valid, set the control to an invalid state\n */\n checkValidReference() {\n if (!this.currentValue) {\n this.control.markAsTouched();\n this.control.markAsDirty();\n this.control.setValue('');\n this.control.setErrors(null);\n return;\n }\n\n const foundElement = this.objects.find((e) => e[this.valueField] === this.currentValue);\n if (!foundElement) {\n this.control.setValue(null);\n this.control.markAsTouched();\n this.control.markAsDirty();\n this.control.setErrors({ invalidReference: true });\n } else {\n this.control.setErrors(null);\n }\n }\n\n /**\n * If the user presses the enter key, mark the control as touched\n */\n enterKey(event) {\n this.selectedElement = event.target;\n this.control.markAsTouched();\n }\n\n /**\n * If the control has a value and the objects array is not empty, then find the object in the array that has the same\n * value as the control's value and set the currentValue to the textField of that object. If the control has a value but\n * the objects array is empty, then set the currentValue to the control's value\n */\n setValue() {\n if (this.control?.value && this.objects?.length > 0) {\n if (this.control?.value?.id) {\n this.control.setValue(this.control.value.id);\n }\n\n const foundElement = this.objects.find((e) => e[this.valueField] === this.control.value);\n if (foundElement) {\n this.currentValue = this.prepareNameField(foundElement);\n }\n }\n }\n\n /**\n * It sets the value of the control to the id of the selected option\n */\n set(id: string) {\n this.control.markAsTouched();\n this.control.markAsDirty();\n this.control.setValue(id);\n this.setValue();\n this.selectedElement = null;\n }\n\n /**\n * Filter options for drop down\n */\n filterOptions(): any[] {\n return this.objects\n ? this.objects.filter(\n (e) => (!this.currentValue || this.checkForNameFields(e)) && !this.control?.value?.includes(e?.value)\n )\n : [];\n }\n\n /**\n * It takes an array of objects and returns an array of objects with the text and value fields specified\n */\n setObjectsAsOptions() {\n this.optionsForTagInput = this.objects.map((e) => {\n return {\n text: this.prepareNameField(e),\n value: e[this.valueField],\n };\n });\n }\n\n /**\n * Show dropdown focus\n */\n onFocus(event?) {\n if (event) {\n this.selectedElement = event.target;\n } else {\n this.checkValidReference();\n setTimeout(() => {\n this.selectedElement = null;\n }, 250);\n }\n }\n\n /**\n * Prepare string function if name fields is an array\n */\n prepareNameField(object: any) {\n let result;\n\n if (Array.isArray(this.nameField)) {\n for (const field of this.nameField) {\n if (!result) {\n result = object[field];\n } else {\n result = result + ' ' + object[field];\n }\n }\n } else {\n result = object[this.nameField];\n }\n\n return result;\n }\n\n /**\n * Check function if name fields is an array\n */\n checkForNameFields(object: any) {\n if (Array.isArray(this.nameField)) {\n let result = false;\n\n for (const field of this.nameField) {\n const check = object[field].includes(this.currentValue);\n if (check) {\n result = check;\n }\n }\n\n return result;\n } else {\n return object[this.nameField]?.includes(this.currentValue);\n }\n }\n}\n","<ng-container *ngIf=\"!isList\">\n <div class=\"form-group mb-3\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n\n <div class=\"position-relative\" *ngIf=\"search\">\n <input [formControl]=\"control\" hidden />\n <input\n [id]=\"id\"\n [name]=\"name\"\n class=\"form-control\"\n [(ngModel)]=\"currentValue\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onFocus()\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n (keyup)=\"enterKey($event)\"\n />\n <div class=\"options\" *ngIf=\"objects && selectedElement\">\n <div class=\"option-item\" *ngFor=\"let object of filterOptions()\" (click)=\"set(object[valueField])\">\n {{ prepareNameField(object) }}\n </div>\n </div>\n </div>\n\n <div *ngIf=\"!search\">\n <select\n [id]=\"id\"\n [name]=\"name\"\n class=\"form-select\"\n [attr.aria-label]=\"placeholder\"\n [formControl]=\"control\"\n [required]=\"required\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n >\n <option [ngValue]=\"null\" selected>{{ placeholder }}</option>\n <option *ngFor=\"let object of objects\" [ngValue]=\"object[valueField]\">\n {{ prepareNameField(object) }}\n </option>\n </select>\n </div>\n\n <div\n class=\"d-block invalid-feedback m-2\"\n *ngIf=\"control?.invalid && (control?.dirty || control?.touched) && !selectedElement\"\n >\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['invalidReference'] && currentValue\">\n {{ currentValue }} ist kein gültiger Wert für {{ label }}.\n </div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestlänge für dieses Feld beträgt\n {{control.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale Länge für dieses Feld beträgt\n {{control.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte eine gültige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['matching']\">Die Passwörter müssen überein stimmen.</div>\n </div>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isList\">\n <base-tags\n [id]=\"id\"\n [label]=\"label\"\n [name]=\"name\"\n [control]=\"control\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [custom]=\"false\"\n [options]=\"optionsForTagInput\"\n ></base-tags>\n</ng-container>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { AbstractControl, UntypedFormControl } from '@angular/forms';\nimport { AuthService, BasicUser, GraphQLType } from '@lenne.tech/ng-base/shared';\n\n@Component({\n selector: 'base-model-form-sub',\n templateUrl: './model-form-sub.component.html',\n styleUrls: ['./model-form-sub.component.scss'],\n})\nexport class ModelFormSubComponent implements OnInit {\n @Input() fields: Record<string, GraphQLType>;\n @Input() form: any;\n @Input() config: any = {};\n\n @Output() imageChanged = new EventEmitter<string>();\n @Output() fileChanged = new EventEmitter<{ field: string; file: File | null }>();\n\n keys: string[] = [];\n user: BasicUser;\n\n constructor(private authService: AuthService) {}\n\n ngOnInit(): void {\n // Get keys\n const unsortedKeys = Object.keys(this.fields);\n\n // Sort keys by config order\n this.keys = unsortedKeys.sort((a, b) => {\n return (\n (this.config[a]?.order ? this.config[a]?.order : 99) - (this.config[b]?.order ? this.config[b]?.order : 99)\n );\n });\n\n // Set user for roles check\n this.user = BasicUser.map(this.authService.currentUser);\n }\n\n /**\n * If the field has fields, return true, otherwise return false.\n */\n checkFieldHasFields(field: GraphQLType) {\n return Object.keys(field.fields)?.length !== 0;\n }\n\n /**\n * It takes a string, capitalizes the first letter, and returns the new string\n *\n * @param value - The string that you want to capitalize the first letter of.\n * @returns The first letter of the string is being capitalized and the rest of the string is being returned.\n */\n capitalizeFirstLetter(value: string) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n }\n\n /**\n * It takes an array of values and returns an array of objects with a value and text property\n *\n * @param values - any[] - the array of values that you want to convert to a selectable list\n * @param config\n * @returns An array of objects with a value and text property.\n */\n prepareEnumForSelect(values: any[], config = {}) {\n return values\n .filter((i) => {\n return !(config && config[i]?.roles && !this.user.hasAllRoles(config[i]?.roles));\n })\n .map((e) => {\n return {\n value: e,\n text: config && config[e]?.text ? config[e].text : e,\n };\n });\n }\n\n /**\n * It takes an AbstractControl and returns a FormControl\n *\n * @param control - AbstractControl | null | undefined\n * @returns A FormControl\n */\n transformToControl(control: AbstractControl | null | undefined) {\n return control as UntypedFormControl;\n }\n}\n","<div class=\"mt-3\" *ngFor=\"let key of keys\">\n <ng-container\n *ngIf=\"checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)\"\n >\n <fieldset class=\"border rounded-3 p-3 mt-3\">\n <legend class=\"float-none w-auto px-3\">\n {{ config[key]?.label ? config[key].label : capitalizeFirstLetter(key) }}\n </legend>\n <base-model-form-sub\n [fields]=\"fields[key].fields\"\n [config]=\"config[key]?.fields || {}\"\n [form]=\"form.get(key)\"\n ></base-model-form-sub>\n </fieldset>\n </ng-container>\n\n <ng-container\n *ngIf=\"!checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)\"\n >\n <ng-container *ngIf=\"fields[key]?.isEnum && !config[key]?.exclude\">\n <base-select\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || 'Bitte einen Wert auswählen'\"\n [options]=\"prepareEnumForSelect(fields[key]?.validEnums, config[key]?.enumValues)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\"\n ></base-select>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isEnum && !config[key]?.exclude\">\n <ng-container [ngSwitch]=\"config[key]?.type ? config[key]?.type : fields[key]?.type\">\n <ng-container *ngSwitchCase=\"'String'\">\n <ng-container *ngIf=\"fields[key]?.isList && !config[key]?.exclude\">\n <base-tags\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-tags>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isList && !config[key]?.exclude\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'text'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-input>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Image'\">\n <base-upload-image\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [url]=\"config[key]?.url\"\n [path]=\"config[key]?.path || '/files/'\"\n [uploadPath]=\"config[key]?.uploadPath || '/files/upload'\"\n [deletePath]=\"config[key]?.deletePath || '/files/'\"\n [supportText]=\"config[key]?.supportText || 'Unterstützte Formate: JPEG, JPG, PNG'\"\n [defaultDragText]=\"config[key]?.dragText || 'Drag & Drop'\"\n [defaultReleaseText]=\"config[key]?.releaseText || 'Loslassen zum hochladen'\"\n [preButtonText]=\"config[key]?.preButtonText || 'or'\"\n [buttonText]=\"config[key]?.buttonText || 'browse'\"\n [validExtensions]=\"config[key]?.validExtensions || ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [compressOptions]=\"config[key]?.compressOptions\"\n [maxSize]=\"config[key]?.maxSize\"\n [uploadDirectly]=\"false\"\n (fileChanged)=\"fileChanged.emit($event)\"\n (imageDeleted)=\"imageChanged.emit(key)\"\n (imageUploaded)=\"imageChanged.emit(key)\"\n ></base-upload-image>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Reference'\">\n <base-refence-input\n [id]=\"key\"\n [name]=\"key\"\n [isList]=\"fields[key]?.isList\"\n [search]=\"config[key]?.searchable ?? true\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [method]=\"config[key]?.method || 'find'\"\n [fields]=\"config[key]?.fields || ['id', 'name']\"\n [valueField]=\"config[key]?.valueField || 'id'\"\n [nameField]=\"config[key]?.nameField || 'name'\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-refence-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Boolean'\">\n <base-checkbox\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'LongText'\">\n <base-textarea\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-textarea>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Float'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [type]=\"'number'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Password'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [type]=\"'password'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Color'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [type]=\"'color'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'URL'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'url'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Email'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'email'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'DateTime'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'datetime-local'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-input>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n","import { Component, EventEmitter, Input } from '@angular/core';\n\nexport interface Button {\n icon: string;\n color: string;\n routerLink?: string;\n event?: EventEmitter<boolean>;\n method?: string;\n}\n\n@Component({\n selector: 'base-fab-button',\n templateUrl: './fab-button.component.html',\n styleUrls: ['./fab-button.component.scss'],\n})\nexport class FabButtonComponent {\n @Input() fabIcon = 'bi-list';\n @Input() buttons: Button[];\n toggle = false;\n}\n","<div class=\"fab-container\" [ngClass]=\"{ 'fab-container-active': toggle }\">\n <div class=\"fab shadow\">\n <div class=\"fab-content\" (click)=\"toggle = !toggle\">\n <i class=\"bi bi-x-lg\" *ngIf=\"toggle\"></i>\n <i class=\"bi\" *ngIf=\"!toggle\" [ngClass]=\"fabIcon\"></i>\n </div>\n </div>\n <div\n class=\"sub-button shadow\"\n *ngFor=\"let button of buttons\"\n (click)=\"button.event.emit(true); toggle = !toggle\"\n [ngStyle]=\"{ backgroundColor: button.color }\"\n >\n <a [routerLink]=\"button.routerLink\">\n <i class=\"bi\" [ngClass]=\"button.icon\"></i>\n </a>\n </div>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport {\n AuthService,\n BasicUser,\n CmsService,\n FileService,\n FormsService,\n fullEmail,\n GraphQLMeta,\n GraphQLMetaService,\n GraphQLRequestType,\n GraphQLService,\n GraphQLType,\n IGraphQLTypeCollection,\n ToastService,\n ToastType,\n} from '@lenne.tech/ng-base/shared';\nimport { AbstractControl, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Button } from '../fab-button/fab-button.component';\n\n@Component({\n selector: 'base-model-form',\n templateUrl: './model-form.component.html',\n styleUrls: ['./model-form.component.scss'],\n})\nexport class ModelFormComponent implements OnInit, OnChanges {\n @Input() modelName: string;\n @Input() label: string;\n @Input() id: string | null;\n @Input() delete = true;\n @Input() onlyUpdateMode = false;\n @Input() duplicate = false;\n @Input() logging = false;\n @Input() config: any = {};\n @Input() showFavButton = true;\n\n @Output() finished = new EventEmitter();\n\n meta: GraphQLMeta;\n form: UntypedFormGroup;\n _loading = false;\n fields: Record<string, GraphQLType>;\n operation: string;\n keys: string[] = [];\n user: BasicUser;\n object: any;\n fabButtons: Button[] = [];\n fileChanges: [{ field: string; file: File | null }];\n\n set loading(value: boolean) {\n if (!value) {\n setTimeout(() => {\n this._loading = value;\n }, 400);\n } else {\n this._loading = value;\n }\n }\n\n constructor(\n private graphQLMetaService: GraphQLMetaService,\n private graphQLService: GraphQLService,\n private formsService: FormsService,\n private authService: AuthService,\n private router: Router,\n private route: ActivatedRoute,\n private cmsService: CmsService,\n private toastService: ToastService,\n private fileService: FileService\n ) {}\n\n ngOnInit(): void {\n // Set user for roles check\n this.user = BasicUser.map(this.authService.currentUser);\n\n this.graphQLMetaService.getMeta().subscribe((meta) => {\n this.meta = meta;\n\n if (this.modelName) {\n this.init();\n }\n });\n\n this.initFabActions();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // Reinit form for new model or load and patch form with new id\n if (changes['modelName'] || changes['id']) {\n this.init();\n }\n }\n\n /**\n * > If the model name and metadata are present, set the operation to update or create, get the fields from the\n * metadata, create the form, and if the value is present, patch the form with the value\n */\n init(id?: string) {\n if (id) {\n this.id = id;\n }\n\n if (!this.id && this.onlyUpdateMode) {\n return;\n }\n\n if (this.modelName && this.meta) {\n this.operation = this.id ? 'update' : 'create';\n\n if (this.logging) {\n console.log('ModelFormComponent::init->operation', this.operation);\n console.log(\n 'ModelFormComponent::init->meta.getArgs',\n this.operation + this.capitalizeFirstLetter(this.modelName)\n );\n }\n\n this.fields = this.meta.getArgs(this.operation + this.capitalizeFirstLetter(this.modelName), {\n type: GraphQLRequestType.MUTATION,\n }).fields;\n this.fields = this.fields['input'].fields as any;\n this.keys = Object.keys(this.fields);\n\n if (this.logging) {\n console.log('ModelFormComponent::init->id', this.id);\n console.log('ModelFormComponent::init->fields', this.fields);\n console.log('ModelFormComponent::init->keys', this.keys);\n }\n\n this.form = this.createForm(this.fields);\n\n if (this.id) {\n this.getObjectById(this.id);\n }\n }\n }\n\n /**\n * It takes a key as an argument, and returns an array of keys from the sub-object\n */\n getKeysFromSubObject(key: string) {\n return Object.keys(this.fields[key]);\n }\n\n /**\n * It takes an id, and then calls the graphQLService to get the object from the database\n *\n * @param id - The id of the object to be loaded\n */\n getObjectById(id: string) {\n if (!id) {\n return;\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::getObjectById->id', id);\n console.log('ModelFormComponent::getObjectById->requestFields', this.createRequestObject(this.fields));\n }\n\n this.graphQLService\n .graphQl('get' + this.capitalizeFirstLetter(this.modelName), {\n arguments: { id },\n fields: this.createRequestObject(this.fields),\n type: GraphQLRequestType.QUERY,\n })\n .subscribe({\n next: (response) => {\n if (this.logging) {\n console.log('ModelFormComponent::get->value', response);\n }\n\n this.object = response;\n this.form.patchValue({ ...{}, ...response });\n\n // Process patchFields for reference input\n for (const [key, value] of Object.entries(this.config)) {\n // If it not an array\n if (this.config[key]?.type === 'Reference' && !this.fields[key]?.isList) {\n if (this.form.get(key)) {\n this.form\n .get(key)\n .patchValue(response[this.config[key]?.patchField ? this.config[key]?.patchField : key]?.id);\n }\n }\n\n // If value is an array\n if (this.config[key]?.type === 'Reference' && this.fields[key]?.isList) {\n if (this.form.get(key)) {\n this.form\n .get(key)\n .patchValue(\n response[this.config[key]?.patchField ? this.config[key]?.patchField : key]?.map((e) => e?.id)\n );\n }\n }\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::getObjectById->patchedForm', this.form);\n }\n },\n error: (err) => {\n console.error('Error on load object', err);\n this.finished.emit(null);\n },\n });\n }\n\n /**\n * It takes a GraphQL type collection and returns an array of strings and objects\n *\n * @param fields - IGraphQLTypeCollection - This is the object that is returned from the\n * introspection query.\n * @returns An array of strings and objects.\n */\n createRequestObject(fields: IGraphQLTypeCollection) {\n const requestFields: any = [];\n\n for (const [key, value] of Object.entries(fields)) {\n if (this.config[key]?.exclude !== undefined && this.config[key]?.exclude) {\n continue;\n }\n\n if (Object.keys(fields[key]?.fields)?.length === 0) {\n if (this.config[key]?.type !== 'Reference') {\n requestFields.push(key);\n } else {\n requestFields.push({ [this.config[key]?.patchField ? this.config[key]?.patchField : key]: ['id'] });\n }\n } else {\n const subkeys = this.createRequestObject(fields[key].fields as IGraphQLTypeCollection);\n const resultObject = {};\n resultObject[key] = subkeys;\n requestFields.push(resultObject);\n }\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::createRequestObject->requestFields', requestFields);\n }\n\n return requestFields;\n }\n\n /**\n * It takes a collection of GraphQL types and creates a form group with a form control for each type\n *\n * @param fields - IGraphQLTypeCollection\n */\n createForm(fields: IGraphQLTypeCollection) {\n const group: any = {};\n\n for (const [key, value] of Object.entries(fields)) {\n if (Object.keys(value?.fields)?.length === 0) {\n group[key] = new UntypedFormControl(null, this.processValidators(this.config[key], value));\n } else {\n group[key] = this.createForm(fields[key].fields as IGraphQLTypeCollection);\n }\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::createForm->group', group);\n }\n\n return new UntypedFormGroup(group);\n }\n\n /**\n * Process form validators for control\n */\n processValidators(config: any, value: IGraphQLTypeCollection | GraphQLType) {\n const validators = [];\n\n if (config) {\n if (config?.required !== undefined ? config?.required : value.isRequired) {\n validators.push(Validators.required);\n }\n\n if (config?.type === 'Email') {\n validators.push(fullEmail());\n }\n\n if (config?.type === 'Password') {\n validators.push(Validators.minLength(6));\n }\n\n if (typeof config?.min === 'number') {\n validators.push(Validators.min(config.min));\n }\n\n if (typeof config?.max === 'number') {\n validators.push(Validators.max(config.max));\n }\n }\n\n return validators;\n }\n\n /**\n * It calls the graphQLService to delete the object with the id of the object that is currently being edited\n */\n deleteObject() {\n this.cmsService.deleteObject(this.id, this.modelName).then(() => {\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description: this.label + ' wurde erfolgreich gelöscht.',\n });\n this.finished.emit(null);\n });\n }\n\n /**\n * It sends a GraphQL mutation to the server to duplicate the object\n */\n async duplicateObject() {\n this.cmsService.duplicateObject(this.id, this.modelName).then(async (value) => {\n if (value?.id) {\n await this.router.navigate(['../'], { relativeTo: this.route });\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description: this.label + ' wurde erfolgreich dupliziert.',\n });\n } else {\n this.finished.emit(null);\n }\n });\n }\n\n /**\n * It takes a string, capitalizes the first letter, and returns the modified string\n *\n * @param value - The string to capitalize.\n * @returns The first letter of the string is being capitalized and the rest of the string is being returned.\n */\n capitalizeFirstLetter(value: string) {\n return this.cmsService.capitalizeFirstLetter(value);\n }\n\n /**\n * It takes an AbstractControl and returns a FormControl\n *\n * @param control - AbstractControl | null | undefined\n * @returns A FormControl\n */\n transformToControl(control: AbstractControl | null | undefined) {\n return control as UntypedFormControl;\n }\n\n /**\n * It takes the key of the form control that has changed, gets the value of that form control, creates an object with the\n * key and value, and then sends that object to the GraphQL server to update the database\n */\n imageChanged(key: string) {\n const data = {};\n data[key] = this.form.get(key).value;\n\n if (this.logging) {\n console.log('ModelFormComponent::imageChanged->body', data);\n }\n\n if (this.id) {\n try {\n this.graphQLService\n .graphQl('update' + this.capitalizeFirstLetter(this.modelName), {\n arguments: { id: this.id, input: data },\n fields: ['id'],\n type: GraphQLRequestType.MUTATION,\n })\n .subscribe({\n next: (value) => {\n if (this.logging) {\n console.log('ModelFormComponent::imageChanged->success', value);\n }\n },\n });\n } catch (e) {\n if (this.logging) {\n console.log('ModelFormComponent::imageChanged->error', e);\n }\n }\n }\n }\n\n /**\n * It takes the form, validates it, and then sends it to the GraphQL server\n *\n * @returns The id of the newly created or updated object.\n */\n submit(secret = false) {\n return new Promise(async (resolve, reject) => {\n if (!secret) {\n this.loading = true;\n }\n\n if (this.form.invalid && !secret) {\n this.formsService.validateAllFormFields(this.form as any);\n this.formsService.scrollToInvalidControl(this.form);\n this.loading = false;\n resolve(null);\n return;\n }\n\n if (this.operation === 'update' && !this.id) {\n console.error('ID is missing for update!');\n this.loading = false;\n resolve(null);\n return;\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::submit->formValue', this.form.value);\n }\n\n const data = Object.assign({}, this.form.value);\n for (const [key, value] of Object.entries(data)) {\n if (\n (this.config[key]?.roles ? !this.user.hasAllRoles(this.config[key]?.roles) : false) ||\n this.config[key]?.exclude\n ) {\n delete data[key];\n }\n\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n data[key] = Object.keys(data[key])\n .filter((k) => data[key][k] != null)\n .reduce((a, k) => ({ ...a, [k]: data[key][k] }), {});\n\n if (Object.keys(data[key])?.length === 0) {\n if (this.logging) {\n console.log('Object is empty from result');\n }\n data[key] = null;\n }\n }\n\n // Set type for graphql method\n if (this.fields[key]?.type === 'Float') {\n data[key] = Number(value);\n }\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::submit->valueToGraphql', data);\n }\n\n if (this.fileChanges?.length) {\n for (const fileChange of this.fileChanges) {\n const key = fileChange.field;\n if (fileChange.file) {\n // Upload\n if (this.form.get(key).value) {\n // Delete\n const deleteResult = await this.fileService.delete(\n this.config[key]?.url,\n this.config[key]?.deletePath || '/files/',\n this.object[key]\n );\n\n if (deleteResult) {\n data[key] = '';\n }\n }\n\n const uploadResult = await this.fileService.upload(\n this.config[key]?.url,\n this.config[key]?.uploadPath || '/files/upload',\n fileChange.file,\n this.config[key]?.compressOptions\n );\n\n if (uploadResult?.id) {\n data[key] = uploadResult.id;\n }\n } else {\n // Delete\n const result = await this.fileService.delete(\n this.config[key]?.url,\n this.config[key]?.deletePath || '/files/',\n this.object[key]\n );\n\n if (result) {\n data[key] = '';\n }\n }\n }\n }\n\n this.graphQLService\n .graphQl(this.operation + this.capitalizeFirstLetter(this.modelName), {\n arguments: this.operation === 'update' ? { id: this.id, input: data } : { input: data },\n fields: ['id'],\n type: GraphQLRequestType.MUTATION,\n })\n .subscribe({\n next: (value) => {\n if (!secret) {\n this.loading = false;\n this.finished.emit(null);\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description:\n this.label + ' wurde erfolgreich ' + (this.operation === 'create' ? 'erstellt.' : 'aktualisiert.'),\n });\n }\n\n resolve(value);\n },\n error: (err) => {\n if (!secret) {\n console.error('Failed on ' + this.operation, err);\n this.loading = false;\n\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.ERROR,\n description:\n 'Beim ' +\n (this.operation === 'create' ? 'erstellen' : 'aktualisieren') +\n ' von ' +\n this.label +\n ' ist etwas schiefgelaufen.',\n });\n }\n\n reject();\n },\n });\n });\n }\n\n /**\n * Init fab buttons for mobile devices\n */\n initFabActions() {\n const saveEvent = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-check-lg', color: 'var(--bs-success)', event: saveEvent });\n saveEvent.subscribe(() => this.submit(false));\n\n if (this.duplicate && this.operation === 'update') {\n const event = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-back', color: 'var(--bs-info)', event });\n event.subscribe(() => this.duplicateObject());\n }\n\n if (this.operation === 'update' && this.delete) {\n const event = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-trash3', color: 'var(--bs-danger)', event });\n event.subscribe(() => this.deleteObject());\n }\n }\n\n processFileChanges(event: { field: string; file: File | null }) {\n const index = this.fileChanges?.findIndex((e) => e.field === event.field);\n\n if (index !== undefined && index !== -1) {\n this.fileChanges[index] = event;\n } else if (this.fileChanges) {\n this.fileChanges.push(event);\n } else {\n this.fileChanges = [event];\n }\n }\n}\n","<div class=\"w-100\" *ngIf=\"form\">\n <div class=\"d-flex flex-row justify-content-between mt-3\">\n <div class=\"responsive-back d-flex d-lg-none\">\n <i class=\"bi bi-arrow-left\" routerLink=\"../\"></i>\n </div>\n <h2 class=\"mb-0\">\n {{ label ? label : capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}\n </h2>\n\n <div class=\"d-none d-lg-flex flex-row align-items-center justify-content-end\">\n <button class=\"btn btn-outline-primary me-2\" *ngIf=\"id && duplicate && !_loading\" (click)=\"duplicateObject()\">\n Duplizieren\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n *ngIf=\"!_loading\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"_loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n\n <form [formGroup]=\"form\">\n <base-model-form-sub\n [fields]=\"fields\"\n [config]=\"config\"\n [form]=\"form\"\n (imageChanged)=\"imageChanged($event)\"\n (fileChanged)=\"processFileChanges($event)\"\n ></base-model-form-sub>\n\n <div class=\"d-none d-lg-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">Löschen</button>\n </div>\n <div>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n *ngIf=\"!_loading\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"_loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n\n<div class=\"d-block d-lg-none responsive-action-button\" *ngIf=\"showFavButton\">\n <base-fab-button [buttons]=\"fabButtons\"></base-fab-button>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Truncate string with ellipses\n */\n@Pipe({\n name: 'baseEllipses',\n})\nexport class EllipsesPipe implements PipeTransform {\n transform(value: string, limit: number): string {\n if (!value) {\n return null;\n }\n\n return value.length > limit ? value.substring(0, limit) + '...' : value;\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport {\n CmsService,\n GraphQLMeta,\n GraphQLMetaService,\n GraphQLRequestType,\n GraphQLService,\n} from '@lenne.tech/ng-base/shared';\n\n@Component({\n selector: 'base-model-table',\n templateUrl: './model-table.component.html',\n styleUrls: ['./model-table.component.scss'],\n})\nexport class ModelTableComponent implements OnInit, OnChanges {\n @Input() modelName: string;\n @Input() objectId: string;\n @Input() createMode = false;\n @Input() logging = false;\n @Input() create = true;\n @Input() update = true;\n @Input() delete = true;\n @Input() duplicate = true;\n @Input() config: any = {};\n @Input() fieldConfig: any = {};\n @Input() showFavButton = true;\n uniqueField = 'id';\n\n @Output() idSelected = new EventEmitter<string>();\n @Output() createModeChanged = new EventEmitter<boolean>();\n\n tableFields = {\n id: { label: 'ID' },\n name: { label: 'Name' },\n title: { label: 'Titel' },\n description: { label: 'Beschreibung' },\n email: { label: 'E-Mail' },\n createdAt: { label: 'Erstellt am', dateFormat: 'dd.MM.YYYY HH:mm' },\n updatedAt: { label: 'Bearbeitet am', dateFormat: 'dd.MM.YYYY HH:mm' },\n };\n meta!: GraphQLMeta;\n objects: any[] = [];\n availableFields: string[] = [];\n selectedId = '';\n queryName = null;\n camelModelName: string;\n\n constructor(\n private graphQLMetaService: GraphQLMetaService,\n private graphQLService: GraphQLService,\n private cmsService: CmsService\n ) {}\n\n ngOnInit(): void {\n this.graphQLMetaService.getMeta().subscribe((meta) => {\n this.meta = meta;\n\n if (this.modelName) {\n this.init();\n }\n\n if (this.objectId) {\n this.selectedId = this.objectId;\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['modelName'] && this.meta) {\n this.init();\n }\n\n if (changes['objectId'] && this.meta) {\n if (this.selectedId !== this.objectId) {\n if (this.logging) {\n console.log('ModelTableComponent::ngOnChanges->selectedId', this.selectedId);\n }\n\n this.selectedId = this.objectId;\n }\n }\n }\n\n /**\n * We're using the `meta` service to get the fields that are available for the `find` query for the model we're working\n * with. We're then using that information to populate the `availableFields` array\n */\n init() {\n this.availableFields = [];\n this.camelModelName = this.kebabToCamelCase(this.modelName);\n // Set query name\n if (!this.config?.queryName) {\n this.queryName = 'find' + this.capitalizeFirstLetter(this.camelModelName) + 's';\n } else {\n this.queryName = this.config?.queryName;\n }\n\n if (this.config?.tableFields) {\n this.tableFields = this.config.tableFields;\n }\n\n if (this.logging) {\n console.log('ModelTableComponent::init->modelName', this.modelName);\n console.log('ModelTableComponent::init->camelModelName', this.camelModelName);\n console.log('ModelTableComponent::init->queryName', this.queryName);\n console.log('ModelTableComponent::init->tableFields', this.tableFields);\n }\n\n const possibleFields = this.meta.getFields(this.queryName).fields;\n const keys = Object.keys(possibleFields);\n const tableFieldKeys = Object.keys(this.tableFields);\n tableFieldKeys?.forEach((field) => {\n if (keys.includes(field)) {\n this.availableFields.push(field);\n }\n });\n\n if (this.logging) {\n console.log('ModelTableComponent::init->possibleFields', possibleFields);\n console.log('ModelTableComponent::init->keys', keys);\n console.log('ModelTableComponent::init->availableFields', this.availableFields);\n }\n\n this.loadObjects(this.availableFields);\n }\n\n /**\n * When the user clicks the \"Create New\" button, the createModeChanged event is emitted, which is then handled by the\n * parent component\n */\n createNewObject() {\n this.createMode = true;\n this.createModeChanged.emit(true);\n }\n\n /**\n * It loads the objects from the database and stores them in the objects variable\n *\n * @param fields - string[] - The fields you want to load from the database.\n */\n loadObjects(fields: string[]) {\n const requestFields = [...fields];\n const idInFields = requestFields.find((e) => e === 'id');\n\n if (!idInFields) {\n requestFields.push('id');\n }\n\n this.objects = [];\n this.graphQLService\n .graphQl(this.queryName, {\n fields: requestFields,\n type: GraphQLRequestType.QUERY,\n })\n .subscribe({\n next: (value) => {\n if (this.logging) {\n console.log('ModelTableComponent::loadObjects->value', value);\n }\n\n const arrayForSort = [...value];\n this.objects = arrayForSort.sort(\n (a, b) =>\n (b?.createdAt ? new Date(b?.createdAt)?.getTime() : new Date().getTime()) -\n (a?.createdAt ? new Date(a?.createdAt)?.getTime() : new Date().getTime())\n );\n },\n error: (err) => {\n console.log('Error on loading objects', err);\n },\n });\n }\n\n /**\n * If the update property is true, then set the selectedId property to the id of the object passed in, and emit the\n * selectedId property\n */\n selectId(object: any) {\n if (!object) {\n this.createMode = false;\n this.createModeChanged.emit(false);\n }\n\n if (this.update) {\n this.selectedId = object['id'];\n this.idSelected.emit(this.selectedId);\n }\n }\n\n /**\n * It calls the duplicateObject function in the cmsService, passing in the id of the object to be duplicated and the\n * modelName of the object\n */\n async duplicateObject(id: string) {\n await this.cmsService.duplicateObject(id, this.camelModelName);\n this.loadObjects(this.availableFields);\n }\n\n /**\n * It calls the deleteObject function in the cmsService, passing in the id of the object to delete and the name of the\n * model\n */\n async deleteObject(id: string) {\n await this.cmsService.deleteObject(id, this.camelModelName);\n this.loadObjects(this.availableFields);\n }\n\n /**\n * It takes a string, capitalizes the first letter, and returns the modified string\n */\n capitalizeFirstLetter(value: string) {\n return this.cmsService.capitalizeFirstLetter(value);\n }\n\n /**\n * Kebab to camel case string\n */\n kebabToCamelCase(str: string) {\n return str.replace(/-./g, (match) => match[1].toUpperCase());\n }\n}\n","<div *ngIf=\"!selectedId && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between align-items-center mb-2 mb-lg-4\">\n <h2 class=\"mb-0\" *ngIf=\"modelName\">\n {{\n config?.plural ? config?.plural : config?.label ? config?.label : capitalizeFirstLetter(camelModelName) + 's'\n }}\n </h2>\n <div class=\"d-flex align-items-center d-none d-lg-block\">\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n\n <div\n class=\"table-responsive\"\n [ltContextMenu]=\"contextMenu\"\n [selectors]=\"'.object-col'\"\n #contextMenuData=\"contextMenuData\"\n >\n <table class=\"table table-hover bg-white d-none d-lg-table\">\n <thead>\n <tr>\n <th\n scope=\"col\"\n *ngFor=\"let field of availableFields\"\n [baseSort]=\"objects\"\n data-order=\"desc\"\n [attr.data-name]=\"field\"\n >\n {{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr class=\"object-col\" *ngFor=\"let object of objects\" [id]=\"object[uniqueField]\">\n <td class=\"cursor-pointer\" *ngFor=\"let field of availableFields\" (click)=\"selectId(object)\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date: tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"tableFields[field]?.enumValues\">\n {{ tableFields[field]?.enumValues[object[field]]?.text }}\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat && !tableFields[field]?.enumValues\">\n {{ object[field] | baseEllipses: 60 }}\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div class=\"d-flex d-lg-none flex-column flex-grow-1\">\n <div class=\"table-card\" *ngFor=\"let object of objects\" [id]=\"object[uniqueField]\">\n <div class=\"table-card-entry\" *ngFor=\"let field of availableFields; let i = index\" (click)=\"selectId(object)\">\n <b *ngIf=\"i > 0\"\n >{{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}:</b\n >\n <p [ngClass]=\"{ 'table-card-entry-first': i === 0 }\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date: tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"tableFields[field]?.enumValues\">\n {{ tableFields[field]?.enumValues[object[field]]?.text }}\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat && !tableFields[field]?.enumValues\">\n {{ object[field] | baseEllipses: 60 }}\n </ng-container>\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"context-menu\" #contextMenu>\n <div class=\"context-menu-item\" (click)=\"selectId({ id: contextMenuData.clickedElement?.id })\">Bearbeiten</div>\n <div class=\"context-menu-item\" *ngIf=\"duplicate\" (click)=\"duplicateObject(contextMenuData.clickedElement?.id)\">\n Duplizieren\n </div>\n <div class=\"context-menu-item\" *ngIf=\"delete\" (click)=\"deleteObject(contextMenuData.clickedElement?.id)\">\n Löschen\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"w-100\" *ngIf=\"selectedId || createMode\">\n <button class=\"d-none d-lg-block btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zurück</button>\n <base-model-form\n [modelName]=\"camelModelName\"\n [label]=\"config?.label\"\n [config]=\"fieldConfig\"\n [logging]=\"logging\"\n [id]=\"selectedId\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n [duplicate]=\"duplicate\"\n [showFavButton]=\"showFavButton\"\n ></base-model-form>\n</div>\n\n<div class=\"responsive-action-button d-block d-lg-none\">\n <base-fab-button\n [fabIcon]=\"'bi-plus'\"\n (click)=\"createNewObject()\"\n *ngIf=\"!(selectedId || createMode) && showFavButton\"\n ></base-fab-button>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, UntypedFormGroup, Validators } from '@angular/forms';\nimport {\n AuthService,\n FormsService,\n securePasswordValidator,\n ToastService,\n ToastType,\n UserService,\n Validation,\n} from '@lenne.tech/ng-base/shared';\n\n@Component({\n selector: 'base-change-password',\n templateUrl: './change-password.component.html',\n styleUrls: ['./change-password.component.scss'],\n})\nexport class ChangePasswordComponent implements OnInit {\n form: FormGroup;\n loading = false;\n\n constructor(\n private formsService: FormsService,\n private userService: UserService,\n private authService: AuthService,\n private toastService: ToastService\n ) {}\n\n ngOnInit(): void {\n this.createForm();\n }\n\n /**\n * Create password change form\n */\n createForm() {\n this.form = new UntypedFormGroup(\n {\n password: new FormControl<string>('', [Validators.required, securePasswordValidator()]),\n passwordConfirm: new FormControl<string>('', [Validators.required, securePasswordValidator()]),\n },\n { validators: Validation.match('password', 'passwordConfirm') }\n );\n }\n\n /**\n * Submit form and change password of user\n */\n submit() {\n this.loading = true;\n\n if (this.form.invalid) {\n this.formsService.validateAllFormFields(this.form);\n this.loading = false;\n return;\n }\n\n this.userService.changePassword(this.authService.currentUser.id, this.form.get('password').value).subscribe({\n next: (response) => {\n if (response) {\n this.form.reset();\n this.toastService.show({\n id: 'password-change-success',\n title: 'Erfolgreich',\n description: 'Passwort wurde erfolgreich geändert.',\n type: ToastType.SUCCESS,\n });\n }\n\n this.loading = false;\n },\n error: (error) => {\n this.loading = false;\n this.toastService.show({\n id: 'password-change-error',\n title: 'Fehlgeschlagen',\n description: 'Passwort ändern ist fehlgeschlagen, bitte versuche es später erneut.',\n type: ToastType.ERROR,\n });\n },\n });\n }\n}\n","<h3>Passwort ändern</h3>\n\n<form [formGroup]=\"form\">\n <base-input\n [id]=\"'password'\"\n [label]=\"'Passwort'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('password')\"\n [tabIndex]=\"1\"\n [eyeButton]=\"true\"\n ></base-input>\n <base-input\n [id]=\"'password-confirm'\"\n [label]=\"'Passwort bestätigen'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('passwordConfirm')\"\n [tabIndex]=\"2\"\n [eyeButton]=\"true\"\n ></base-input>\n\n <div class=\"d-flex justify-content-end\">\n <div>\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">Passwort ändern</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n </div>\n </div>\n</form>\n","import { Component, Input } from '@angular/core';\nimport { AuthService, ToastService, ToastType, UserService } from '@lenne.tech/ng-base/shared';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'base-delete-account',\n templateUrl: './delete-account.component.html',\n styleUrls: ['./delete-account.component.scss'],\n})\nexport class DeleteAccountComponent {\n @Input() description =\n 'Mit dem Löschen Deines Kontos werden alle persönlichen Daten sofort gelöscht und sind nicht wiederherstellbar.';\n loading = false;\n\n constructor(\n private userService: UserService,\n private authService: AuthService,\n private toastService: ToastService,\n private router: Router\n ) {}\n\n deleteAccount() {\n this.loading = true;\n\n if (!confirm('Willst Du wirklich ein Konto unwiderruflich löschen?')) {\n this.loading = false;\n return;\n }\n\n this.userService.delete(this.authService.currentUser.id).subscribe({\n next: (response) => {\n if (response) {\n this.toastService.show({\n id: 'delete-user-success',\n title: 'Erfolgreich',\n description: 'Dein Konto wurde erfolgreich gelöscht.',\n type: ToastType.SUCCESS,\n });\n }\n this.authService.logout();\n this.router.navigate(['/']);\n\n this.loading = false;\n },\n error: (error) => {\n this.loading = false;\n this.toastService.show({\n id: 'delete-user-error',\n title: 'Fehlgeschlagen',\n description: 'Konto löschen ist fehlgeschlagen, bitte versuche es später erneut.',\n type: ToastType.ERROR,\n });\n },\n });\n }\n}\n","<div>\n <h3>Konto löschen</h3>\n\n <p>{{ description }}</p>\n\n <div class=\"d-flex justify-content-end mt-3\">\n <div>\n <button class=\"btn btn-primary\" (click)=\"deleteAccount()\" *ngIf=\"!loading\">Konto löschen</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n </div>\n </div>\n</div>\n","import { Directive, HostListener } from '@angular/core';\nimport { NavigationService } from '@lenne.tech/ng-base/shared';\n\n@Directive({\n selector: '[baseBackButton]',\n})\nexport class BackButtonDirective {\n constructor(private navigation: NavigationService) {}\n\n @HostListener('click')\n onClick(): void {\n this.navigation.back();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nimport { InputComponent } from './components/input/input.component';\nimport { SelectComponent } from './components/select/select.component';\nimport { CheckboxComponent } from './components/checkbox/checkbox.component';\nimport { TextareaComponent } from './components/textarea/textarea.component';\nimport { ToastComponent } from './components/toast/toast.component';\nimport { TagsComponent } from './components/tags/tags.component';\nimport { LoadingBarComponent } from './components/loading-bar/loading-bar.component';\nimport { SkeletonLoaderComponent } from './components/skeleton-loader/skeleton-loader.component';\nimport { BreadcrumbComponent } from './components/breadcrumb/breadcrumb.component';\nimport { ModelTableComponent } from './components/model-table/model-table.component';\nimport { ModelFormComponent } from './components/model-form/model-form.component';\nimport { ModelFormSubComponent } from './components/model-form-sub/model-form-sub.component';\nimport { UploadImageComponent } from './components/upload-image/upload-image.component';\nimport { RefenceInputComponent } from './components/refence-input/refence-input.component';\nimport { ChangePasswordComponent } from './components/change-password/change-password.component';\nimport { DeleteAccountComponent } from './components/delete-account/delete-account.component';\nimport { FabButtonComponent } from './components/fab-button/fab-button.component';\n\nimport { BackButtonDirective } from './directives/back-button.directive';\nimport { SortDirective } from './directives/sort.directive';\nimport { ContextMenuDirective } from './directives/context-menu.directive';\n\nimport { EllipsesPipe } from './pipes/ellipses.pipe';\nimport { RouterModule } from '@angular/router';\n\n// Modules\nconst imports = [FormsModule, ReactiveFormsModule, CommonModule, RouterModule];\n\n// Imported and exported elements\nconst elements = [\n // Directives\n SortDirective,\n BackButtonDirective,\n ContextMenuDirective,\n\n // Components\n InputComponent,\n SelectComponent,\n CheckboxComponent,\n TextareaComponent,\n ToastComponent,\n TagsComponent,\n LoadingBarComponent,\n SkeletonLoaderComponent,\n BreadcrumbComponent,\n ModelFormComponent,\n ModelTableComponent,\n ModelFormSubComponent,\n UploadImageComponent,\n RefenceInputComponent,\n ChangePasswordComponent,\n DeleteAccountComponent,\n FabButtonComponent,\n\n // Pipes\n EllipsesPipe,\n];\n\n@NgModule({\n declarations: elements,\n imports,\n exports: elements,\n})\nexport class BaseComponentsModule {}\n","/**\n * Exports for public API\n */\n\n// Module\nexport * from './base-components.module';\n\n// Directives\nexport * from './directives/sort.directive';\nexport * from './directives/back-button.directive';\nexport * from './directives/context-menu.directive';\n\n// Pipes\nexport * from './pipes/ellipses.pipe';\n\n// Components\nexport * from './components/input/input.component';\nexport * from './components/select/select.component';\nexport * from './components/checkbox/checkbox.component';\nexport * from './components/textarea/textarea.component';\nexport * from './components/tags/tags.component';\nexport * from './components/toast/toast.component';\nexport * from './components/loading-bar/loading-bar.component';\nexport * from './components/skeleton-loader/skeleton-loader.component';\nexport * from './components/breadcrumb/breadcrumb.component';\nexport * from './components/model-form/model-form.component';\nexport * from './components/model-table/model-table.component';\nexport * from './components/model-form-sub/model-form-sub.component';\nexport * from './components/upload-image/upload-image.component';\nexport * from './components/refence-input/refence-input.component';\nexport * from './components/change-password/change-password.component';\nexport * from './components/delete-account/delete-account.component';\nexport * from './components/fab-button/fab-button.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i2","i4.TagsComponent","i3.InputComponent","i4.SelectComponent","i5.CheckboxComponent","i6.TextareaComponent","i7.TagsComponent","i8.UploadImageComponent","i9.RefenceInputComponent","i4","i5.ModelFormSubComponent","i6.FabButtonComponent","i3.SortDirective","i4.ContextMenuDirective","i5.ModelFormComponent","i7.EllipsesPipe","i4.InputComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lenne.tech-ng-base-base-components.mjs","sources":["../../../projects/ng-base/base-components/components/input/input.component.ts","../../../projects/ng-base/base-components/components/input/input.component.html","../../../projects/ng-base/base-components/components/select/select.component.ts","../../../projects/ng-base/base-components/components/select/select.component.html","../../../projects/ng-base/base-components/components/checkbox/checkbox.component.ts","../../../projects/ng-base/base-components/components/checkbox/checkbox.component.html","../../../projects/ng-base/base-components/components/textarea/textarea.component.ts","../../../projects/ng-base/base-components/components/textarea/textarea.component.html","../../../projects/ng-base/base-components/components/toast/toast.component.ts","../../../projects/ng-base/base-components/components/toast/toast.component.html","../../../projects/ng-base/base-components/components/tags/tags.component.ts","../../../projects/ng-base/base-components/components/tags/tags.component.html","../../../projects/ng-base/base-components/components/loading-bar/loading-bar.component.ts","../../../projects/ng-base/base-components/components/loading-bar/loading-bar.component.html","../../../projects/ng-base/base-components/components/skeleton-loader/skeleton-loader.component.ts","../../../projects/ng-base/base-components/components/skeleton-loader/skeleton-loader.component.html","../../../projects/ng-base/base-components/components/breadcrumb/breadcrumb.component.ts","../../../projects/ng-base/base-components/components/breadcrumb/breadcrumb.component.html","../../../projects/ng-base/base-components/directives/sort.directive.ts","../../../projects/ng-base/base-components/directives/context-menu.directive.ts","../../../projects/ng-base/base-components/components/upload-image/upload-image.component.ts","../../../projects/ng-base/base-components/components/upload-image/upload-image.component.html","../../../projects/ng-base/base-components/components/refence-input/refence-input.component.ts","../../../projects/ng-base/base-components/components/refence-input/refence-input.component.html","../../../projects/ng-base/base-components/components/model-form-sub/model-form-sub.component.ts","../../../projects/ng-base/base-components/components/model-form-sub/model-form-sub.component.html","../../../projects/ng-base/base-components/components/fab-button/fab-button.component.ts","../../../projects/ng-base/base-components/components/fab-button/fab-button.component.html","../../../projects/ng-base/base-components/components/model-form/model-form.component.ts","../../../projects/ng-base/base-components/components/model-form/model-form.component.html","../../../projects/ng-base/base-components/pipes/ellipses.pipe.ts","../../../projects/ng-base/base-components/components/model-table/model-table.component.ts","../../../projects/ng-base/base-components/components/model-table/model-table.component.html","../../../projects/ng-base/base-components/components/change-password/change-password.component.ts","../../../projects/ng-base/base-components/components/change-password/change-password.component.html","../../../projects/ng-base/base-components/components/delete-account/delete-account.component.ts","../../../projects/ng-base/base-components/components/delete-account/delete-account.component.html","../../../projects/ng-base/base-components/directives/back-button.directive.ts","../../../projects/ng-base/base-components/base-components.module.ts","../../../projects/ng-base/base-components/public-api.ts","../../../projects/ng-base/base-components/lenne.tech-ng-base-base-components.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'base-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n})\nexport class InputComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string;\n @Input() placeholder?: string = '';\n @Input() autocomplete?: string;\n @Input() tabIndex?: number;\n @Input() control: any;\n @Input() type = 'text';\n @Input() required = false;\n @Input() eyeButton = false;\n\n @Output() enter = new EventEmitter();\n\n /**\n * If the control has a value, emit the enter event\n */\n enterEvent() {\n if (this.control?.value) {\n this.enter.emit();\n }\n }\n\n /**\n * Switch input type\n */\n togglePasswordType() {\n if (this.type === 'password') {\n this.type = 'text';\n } else {\n this.type = 'password';\n }\n }\n}\n","<div class=\"form-group mb-3\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <div class=\"input-group\">\n <input\n [id]=\"id\"\n [name]=\"name\"\n class=\"form-control\"\n [type]=\"type\"\n [formControl]=\"control\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n (keyup.enter)=\"enterEvent()\"\n [attr.aria-describedby]=\"id + 'eye-button'\"\n />\n <button\n class=\"btn btn-outline-primary\"\n type=\"button\"\n [id]=\"id + 'eye-button'\"\n (click)=\"togglePasswordType()\"\n *ngIf=\"eyeButton\"\n >\n <i class=\"bi bi-eye\" *ngIf=\"type === 'password'\"></i>\n <i class=\"bi bi-eye-slash\" *ngIf=\"type === 'text'\"></i>\n </button>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestlänge für dieses Feld beträgt\n {{control.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale Länge für dieses Feld beträgt\n {{control.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte eine gültige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['pattern'] && type === 'tel'\">Bitte eine gültige Telefonnummer angeben.</div>\n <div *ngIf=\"control?.errors?.['invalidEmail']\">Bitte eine gültige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['matching']\">Die Passwörter müssen überein stimmen.</div>\n <div *ngIf=\"control?.errors?.['invalidSecurePassword']\">\n Das Passwort ist zu unsicher. Es muss mind. 8 Zeichen lang sein und ein Großbustabe, ein Kleinbuchstabe, eine\n Zahl und ein Sonderzeichen enthalten.\n </div>\n </div>\n </div>\n</div>\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\n\ninterface Option {\n text: string;\n value: string | number;\n}\n\n@Component({\n selector: 'base-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n})\nexport class SelectComponent implements OnInit {\n @ViewChild('select') select: ElementRef;\n\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string;\n @Input() placeholder?: string = '';\n @Input() control: any;\n @Input() tabIndex?: number;\n @Input() required = false;\n @Input() multiple = false;\n @Input() search = false;\n @Input() options: Option[] = [];\n\n ngOnInit() {\n if (this.multiple) {\n this.select.nativeElement.setAttribute('multiple', true);\n }\n }\n}\n","<div class=\"form-group mb-3\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <select\n #select\n [id]=\"id\"\n [name]=\"name\"\n class=\"form-select\"\n [attr.aria-label]=\"placeholder\"\n [attr.data-live-search]=\"search\"\n [formControl]=\"control\"\n [required]=\"required\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n >\n <option [ngValue]=\"null\" disabled selected>{{ placeholder }}</option>\n <option *ngFor=\"let option of options\" [ngValue]=\"option.value\">\n {{ option.text }}\n </option>\n </select>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestlänge für dieses Feld beträgt\n {{control?.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale Länge für dieses Feld beträgt\n {{control?.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte eine gültige E-Mail Adresse angeben.</div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'base-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n})\nexport class CheckboxComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string;\n @Input() value: string | number;\n @Input() control: any;\n @Input() required = false;\n}\n","<div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [formControl]=\"control\"\n [required]=\"required\"\n [value]=\"value\"\n [id]=\"id\"\n [name]=\"name\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n />\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\">\n <ng-container *ngIf=\"label\">\n {{ label }}\n </ng-container>\n <ng-content></ng-content>\n </label>\n\n <div class=\"invalid-feedback ms-0 m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'base-textarea',\n templateUrl: './textarea.component.html',\n styleUrls: ['./textarea.component.scss'],\n})\nexport class TextareaComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string = '';\n @Input() placeholder?: string = '';\n @Input() control: any;\n @Input() rows = 5;\n @Input() required = false;\n @Input() tabIndex?: number;\n}\n","<div class=\"form-group mb-3\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <textarea\n class=\"form-control\"\n [id]=\"id\"\n [name]=\"name\"\n [rows]=\"rows\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n ></textarea>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestlänge für dieses Feld beträgt\n {{control?.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale Länge für dieses Feld beträgt\n {{control?.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n </div>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { animate, query, style, transition, trigger } from '@angular/animations';\nimport { Subscription } from 'rxjs';\nimport { Toast, ToastService, ToastType } from '@lenne.tech/ng-base/shared';\n\nconst toastAnimation = trigger('toastAnimation', [\n transition('* <=> *', [\n query(\n ':enter',\n [style({ transform: 'translateX(100%)' }), animate('200ms ease-in', style({ transform: 'translateX(0%)' }))],\n { optional: true }\n ),\n query(':leave', animate('200ms ease-in', style({ transform: 'translateX(100%)' })), { optional: true }),\n ]),\n]);\n\n@Component({\n selector: 'base-toast',\n templateUrl: './toast.component.html',\n styleUrls: ['./toast.component.scss'],\n animations: [toastAnimation],\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n toasts: Toast[] = [];\n ToastType = ToastType;\n subscriptions = new Subscription();\n @Input() position: 'top-right' | 'bottom-right' = 'bottom-right';\n\n constructor(private toastService: ToastService) {}\n\n ngOnInit(): void {\n this.subscriptions.add(\n this.toastService.toastsAsObservable.subscribe({\n next: (value) => {\n this.toasts = value;\n },\n })\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n getDefaultTitle(toast: Toast): string {\n switch (toast.type) {\n case ToastType.ERROR:\n return 'Irgendetwas ist schiefgelaufen';\n case ToastType.INFO:\n return 'Info';\n case ToastType.WARNING:\n return 'Achtung';\n case ToastType.SUCCESS:\n return 'Erfolgreich';\n }\n }\n\n getDefaultDescription(toast: Toast): string {\n switch (toast.type) {\n case ToastType.ERROR:\n return 'Sollte das Problem länger bestehen bleiben, dann wenden Sie sich bitte\\n' + ' an den Support.';\n case ToastType.INFO:\n return 'Info';\n case ToastType.WARNING:\n return 'Warning';\n case ToastType.SUCCESS:\n return 'Die Änderungen wurden erfolgreich gespeichert.';\n }\n }\n\n reload() {\n location.reload();\n }\n}\n","<div class=\"toast-container position-fixed\" [ngClass]=\"position\" [@toastAnimation]=\"toasts.length\">\n <div\n class=\"toast show\"\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n *ngFor=\"let toast of toasts\"\n [ngClass]=\"toast.type\"\n >\n <div class=\"toast-header\">\n <strong class=\"me-auto\">{{ toast?.title ?? getDefaultTitle(toast) }}</strong>\n <button type=\"button\" class=\"btn-close btn-close-white\" data-bs-dismiss=\"toast\" aria-label=\"Close\"></button>\n </div>\n <div class=\"toast-body\">\n {{ toast?.description ?? getDefaultDescription(toast) }}\n\n <div class=\"mt-2\" *ngIf=\"toast?.errorCode\">\n <code>ERROR: {{ toast.errorCode }}</code>\n </div>\n\n <div class=\"mt-2\" *ngIf=\"toast.type === ToastType.ERROR\">\n <a class=\"color-secondary\" href=\"#\" (click)=\"reload()\">Seite neu laden</a>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'base-tags',\n templateUrl: './tags.component.html',\n styleUrls: ['./tags.component.scss'],\n})\nexport class TagsComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string = '';\n @Input() placeholder?: string = '';\n @Input() autocomplete?: string;\n @Input() tabIndex?: number;\n @Input() control: any;\n @Input() options?: { text: string; value: string }[];\n @Input() custom = true;\n @Input() removeByKey = true;\n @Input() required = false;\n inputValue = '';\n selectedElement: HTMLElement;\n\n /**\n * Convert id into text field\n */\n getReadableTag(tag: string) {\n if (this.control?.value && this.options) {\n const foundElement = this.options.find((e) => e.value === tag);\n\n if (foundElement) {\n return foundElement.text;\n } else {\n return tag;\n }\n } else {\n return tag;\n }\n }\n\n /**\n * Listen to enter keys\n *\n * @param event\n */\n enterKey(event: any): void {\n this.selectedElement = event.target;\n\n if (this.removeByKey && event.code === 'Backspace' && !this.inputValue) {\n this.removeTag();\n return;\n } else {\n if (event.code === 'Comma' || event.code === 'Space' || event.code === 'Enter') {\n this.addTag(this.inputValue);\n }\n }\n }\n\n /**\n * Add new tag\n *\n * @param tag\n */\n addTag(tag: string): void {\n if (tag.endsWith(',') || tag.endsWith(' ')) {\n tag = tag.slice(0, -1);\n }\n\n let foundOption;\n if (!this.options) {\n foundOption = { value: tag, text: tag };\n } else {\n foundOption = this.options.find((e) => e.text === tag);\n }\n\n if (!this.custom && !foundOption) {\n return;\n }\n\n this.selectedElement = null;\n\n if (!this.control.value) {\n this.control.setValue([]);\n }\n\n if (this.control.value?.length === 0) {\n this.control.setValue([foundOption.value]);\n this.inputValue = '';\n this.control.setErrors(null);\n return;\n }\n\n if (\n tag.length > 0 &&\n this.control.value &&\n !this.control.value.some((item: string) => item === foundOption.value)\n ) {\n this.control.setValue([...this.control.value, foundOption.value]);\n this.inputValue = '';\n this.control.setErrors(null);\n }\n }\n\n /**\n * Remove tag\n *\n * @param tag\n */\n removeTag(tag?: string): void {\n let foundOption;\n if (!this.options) {\n foundOption = { value: tag, text: tag };\n } else {\n foundOption = this.options.find((e) => e.value === tag);\n }\n\n this.control.markAsTouched();\n if (foundOption) {\n this.control.setValue(this.control.value.filter((item: string) => item !== foundOption.value));\n } else if (this.control.value) {\n this.control.value.splice(-1);\n }\n\n if (this.control.value?.length === 0) {\n this.control.setErrors({ required: true });\n }\n }\n\n /**\n * Filter options for drop down\n */\n filterOptions(): { text: string; value: string }[] {\n return this.options\n ? this.options.filter(\n (e) => (!this.inputValue || e?.text?.includes(this.inputValue)) && !this.control.value?.includes(e.value)\n )\n : [];\n }\n\n /**\n * Show dropdown focus\n */\n onFocus(event?) {\n if (event) {\n this.control.setErrors(null);\n this.selectedElement = event.target;\n } else {\n this.control.markAsTouched();\n\n setTimeout(() => {\n if (this.options && this.inputValue) {\n if (this.options.find((e) => e.text === this.inputValue)) {\n this.addTag(this.inputValue);\n this.control.setErrors(null);\n } else {\n this.inputValue = '';\n }\n }\n\n if (!this.control.value || this.control.value?.length === 0) {\n this.control.setErrors({ required: true });\n }\n\n this.selectedElement = null;\n }, 250);\n }\n }\n}\n","<div class=\"form-group position-relative\" *ngIf=\"control\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n\n <div class=\"tag-wrapper\" *ngIf=\"control?.value\">\n <div class=\"tag\" *ngFor=\"let tag of control?.value\">\n {{ getReadableTag(tag) }}\n <span (click)=\"removeTag(tag)\"><i class=\"bi bi-x-circle\"></i></span>\n </div>\n </div>\n <input [formControl]=\"control\" hidden />\n <input\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n [(ngModel)]=\"inputValue\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onFocus()\"\n type=\"text\"\n class=\"form-control\"\n (keyup)=\"enterKey($event)\"\n />\n\n <div class=\"tag-options\" *ngIf=\"options && selectedElement\">\n <div class=\"tag-option-item\" *ngFor=\"let option of filterOptions()\" (click)=\"addTag(option?.text)\">\n {{ option?.text }}\n </div>\n </div>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['invalidReference'] && inputValue\">\n {{ inputValue }} ist kein gültiger Wert für {{ label }}.\n </div>\n </div>\n</div>\n","import { ChangeDetectorRef, Component, Input, NgZone, OnDestroy, OnInit } from '@angular/core';\nimport { LoaderService } from '@lenne.tech/ng-base/shared';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'base-loading-bar',\n templateUrl: './loading-bar.component.html',\n styleUrls: ['./loading-bar.component.scss'],\n})\nexport class LoadingBarComponent implements OnInit, OnDestroy {\n @Input() manuallyLoading = false;\n loading = false;\n subscription = new Subscription();\n\n constructor(\n private ngZone: NgZone,\n private changeDetectorRef: ChangeDetectorRef,\n private loaderService: LoaderService\n ) {}\n\n ngOnInit() {\n this.ngZone.runOutsideAngular(() => {\n this.subscription.add(\n this.loaderService.isLoading.subscribe((value) => {\n this.loading = value;\n this.changeDetectorRef.detectChanges();\n })\n );\n });\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n}\n","<div class=\"slider\" *ngIf=\"loading || manuallyLoading\">\n <div class=\"line\"></div>\n <div class=\"subline inc\"></div>\n <div class=\"subline dec\"></div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { SkeletonType } from '@lenne.tech/ng-base/shared';\n\n@Component({\n selector: 'base-skeleton-loader',\n templateUrl: './skeleton-loader.component.html',\n styleUrls: ['./skeleton-loader.component.scss'],\n})\nexport class SkeletonLoaderComponent {\n @Input() type!: SkeletonType;\n @Input() count = 1;\n @Input() size = 18;\n\n convertToArray(value): any {\n if (!value) {\n return [];\n }\n const res = [];\n\n for (let i = 0; i < value; i++) {\n res.push(i);\n }\n\n return res;\n }\n}\n","<ng-container *ngIf=\"type\" [ngSwitch]=\"type\">\n <div *ngSwitchCase=\"'LINE'\">\n <div class=\"line-loader-wrapper\">\n <div class=\"line-loader\" *ngFor=\"let key of convertToArray(count)\"></div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'RECTANGLE'\">\n <div class=\"line-rectangle\" [ngStyle]=\"{ height: size + 'px' }\"></div>\n </div>\n\n <div *ngSwitchCase=\"'AVATAR'\">\n <div class=\"line-avatar\" [ngStyle]=\"{ height: size + 'px', width: size + 'px' }\"></div>\n </div>\n</ng-container>\n","import { Component } from '@angular/core';\nimport { Breadcrumb, BreadcrumbService } from '@lenne.tech/ng-base/shared';\n\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'base-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.scss'],\n})\nexport class BreadcrumbComponent {\n breadcrumbs$: Observable<Breadcrumb[]>;\n\n constructor(private readonly breadcrumbService: BreadcrumbService) {\n this.breadcrumbs$ = breadcrumbService.breadcrumbsObservable;\n }\n}\n","<ul class=\"pt-3\">\n <li *ngFor=\"let breadcrumb of breadcrumbs$ | async\">\n <a [routerLink]=\"breadcrumb.url\">{{ breadcrumb.label }}</a>\n </li>\n</ul>\n","import { Directive, ElementRef, HostListener, Inject, Input, Renderer2 } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Sort } from '@lenne.tech/ng-base/shared';\n\n@Directive({\n selector: '[baseSort]',\n})\nexport class SortDirective {\n @Input() baseSort: Array<any>;\n constructor(private renderer: Renderer2, private targetElem: ElementRef, @Inject(DOCUMENT) document: Document) {}\n\n /**\n * Sorts columns on click\n */\n @HostListener('click')\n sortColumn(): void {\n const items = document.getElementsByTagName('th');\n for (let i = 0; i < items.length; i++) {\n items[i].classList.remove('asc');\n items[i].classList.remove('desc');\n }\n\n const sort = new Sort();\n\n const elem = this.targetElem.nativeElement;\n\n const order = elem.getAttribute('data-order');\n\n const type = elem.getAttribute('data-type');\n\n const property = elem.getAttribute('data-name');\n\n if (order === 'desc') {\n this.baseSort.sort(sort.startSort(property, order, type));\n elem.setAttribute('data-order', 'asc');\n elem.classList.remove('desc');\n elem.classList.add('asc');\n } else {\n this.baseSort.sort(sort.startSort(property, order, type));\n elem.setAttribute('data-order', 'desc');\n elem.classList.remove('asc');\n elem.classList.add('desc');\n }\n }\n}\n","import { Directive, ElementRef, Input, OnInit, Output } from '@angular/core';\n\n/**\n * Directive vor context menu\n * See https://stackblitz.com/edit/angular-custom-context-menu\n */\n@Directive({\n selector: '[ltContextMenu]',\n exportAs: 'contextMenuData',\n})\nexport class ContextMenuDirective implements OnInit {\n @Input() contextMenuData?: any;\n @Input() ltContextMenu: HTMLElement;\n @Input() xGap = 0;\n @Input() yGap = 0;\n @Input() overflowSpace = 10;\n @Input() selectors = '*';\n @Output() clickedElement: Element = null;\n previousDisplayStatus: string = null;\n\n constructor(private el: ElementRef) {}\n\n ngOnInit() {\n if (this.ltContextMenu) {\n this.previousDisplayStatus = this.ltContextMenu.style.display;\n }\n\n // Add a click listener to the window,\n // so that we can close the context menu on left click\n window.addEventListener('click', () => {\n this.showContextMenu(null, false);\n });\n\n // Close context menu when escape is pressed\n window.addEventListener('keydown', (e) => {\n if (e.code === 'Escape') {\n this.showContextMenu(null, false);\n }\n });\n\n // Add an event listener to listen to the 'contextmenu' event\n this.el.nativeElement.addEventListener('contextmenu', (e) => {\n // Prevent the default context menu to popup\n if (e.preventDefault) {\n e.preventDefault();\n }\n // Shows our own context menu\n this.showContextMenu(e, true);\n });\n }\n\n // Shows or hides our custom context menu, which is specified as a input\n showContextMenu(event, show: boolean) {\n const cm = this.ltContextMenu;\n if (cm) {\n // Try to open context menu\n if (show && event && event instanceof MouseEvent) {\n // Get valid clicked structureElement\n const clickedElement = (event?.target as HTMLElement)?.closest(this.selectors);\n if (clickedElement) {\n this.clickedElement = clickedElement;\n\n setTimeout(() => {\n // Set display status\n cm.style.display = 'block';\n\n // Calculate top position\n let top = event.y + this.yGap;\n if (top + cm.offsetHeight + 10 > document.documentElement.clientHeight) {\n top = document.documentElement.clientHeight - cm.offsetHeight - this.overflowSpace;\n }\n\n // Calculate left position\n let left = event.x + this.xGap;\n if (left + cm.offsetWidth + 10 > document.documentElement.clientWidth) {\n left = document.documentElement.clientWidth - cm.offsetWidth - this.overflowSpace;\n }\n\n // Set position\n cm.style.top = top + 'px';\n cm.style.left = left + 'px';\n\n // Show\n cm.style.opacity = '1.0';\n cm.style['pointer-events'] = 'auto';\n }, 1);\n\n return;\n }\n }\n\n // Close context menu\n this.clickedElement = null;\n if (this.previousDisplayStatus) {\n cm.style.display = this.previousDisplayStatus;\n }\n cm.style.opacity = '0.01';\n cm.style['pointer-events'] = 'none';\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { AuthService, CompressOptions, FileService, ToastService, ToastType } from '@lenne.tech/ng-base/shared';\n\n@Component({\n selector: 'base-upload-image',\n templateUrl: './upload-image.component.html',\n styleUrls: ['./upload-image.component.scss'],\n})\nexport class UploadImageComponent {\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string;\n @Input() supportText = 'Supports: JPEG, JPG, PNG';\n @Input() required = false;\n @Input() defaultDragText = 'Drag & Drop';\n @Input() defaultReleaseText = 'Release to Upload';\n @Input() preButtonText = 'or';\n @Input() buttonText = 'browse';\n @Input() validExtensions = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp'];\n @Input() control: any;\n @Input() url = 'http://localhost:3000';\n @Input() uploadPath = '/files/upload';\n @Input() deletePath = '/files/';\n @Input() path = '/files/';\n @Input() compressOptions: CompressOptions;\n @Input() maxSize: number;\n @Input() uploadDirectly = false;\n\n @Output() imageUploaded = new EventEmitter();\n @Output() imageDeleted = new EventEmitter();\n @Output() fileChanged = new EventEmitter<{ field: string; file: File | null }>();\n\n dragActive = false;\n dragText = 'Drag & Drop';\n selectedFile: File;\n fileUrl: string;\n loading = false;\n\n constructor(\n private httpClient: HttpClient,\n private authService: AuthService,\n private fileService: FileService,\n private toastService: ToastService\n ) {}\n\n /**\n * The dragOver function is called when the user drags a file over the dropzone. It prevents the default action of the\n * event, and sets the dragText to 'Release to Upload' and the dragActive to true\n *\n * @param event - any - This is the event that is triggered when the user drags a file over the dropzone.\n */\n dragOver(event: any) {\n event.preventDefault();\n this.dragText = this.defaultReleaseText;\n this.dragActive = true;\n }\n\n /**\n * When the user drags a file over the drop zone, the dragActive variable is set to true, which will change the color of\n * the drop zone to green\n *\n * @param event - The event object that is passed to the dragLeave event.\n */\n dragLeave(event: any) {\n this.dragText = this.defaultDragText;\n this.dragActive = false;\n }\n\n /**\n * The function takes an event as a parameter, prevents the default action of the event, sets the URL of the image to the\n * file that was dragged and dropped, sets the text of the drag and drop area to the default text, and sets the\n * dragActive variable to false\n *\n * @param event - any - This is the event that is triggered when the user drags and drops a file.\n */\n drop(event: any) {\n event.preventDefault();\n this.setUrl(event.dataTransfer.files[0]);\n this.dragText = 'Drag & Drop';\n this.dragActive = false;\n }\n\n /**\n * It takes a file as an argument, checks if the file type is valid, and if it is, it creates a new FileReader object,\n * sets the onload function to set the fileUrl to the result of the fileReader, sets the selectedFile to the file, and\n * calls the upload function\n *\n * @param file - any - this is the file that is selected by the user.\n */\n setUrl(file: File) {\n if (this.maxSize && file.size > this.maxSize) {\n this.toastService.show(\n {\n id: 'image-invalid-size',\n type: ToastType.ERROR,\n title: 'Fehlgeschlagen',\n description:\n 'Die Datei ist zu groß. Die Datei darf nicht größer als ' +\n (this.maxSize / (1024 * 1024)).toFixed(2) +\n 'MB sein.',\n },\n 3500\n );\n return;\n }\n\n if (this.validExtensions.includes(file.type)) {\n const fileReader = new FileReader();\n fileReader.onload = (result) => {\n this.loading = true;\n this.fileUrl = fileReader.result as string;\n this.selectedFile = file;\n this.upload();\n };\n fileReader.readAsDataURL(file);\n } else {\n this.toastService.show(\n {\n id: 'image-invalid-format',\n type: ToastType.ERROR,\n title: 'Fehlgeschlagen',\n description: 'Das Format der Datei wird nicht unterstützt.',\n },\n 3500\n );\n }\n }\n\n /**\n * The function takes an event as an argument, and then sets the url of the file to the first file in the event's\n * target's files array\n *\n * @param event - any - The event that is triggered when the user selects a file.\n */\n selectFile(event: any) {\n this.setUrl(event.target.files[0]);\n }\n\n /**\n * We create a new FormData object, append the selected file to it, and then send it to the server\n */\n async upload() {\n let result;\n if (this.uploadDirectly) {\n result = await this.fileService.upload(this.url, this.uploadPath, this.selectedFile, this.compressOptions);\n } else {\n this.control.markAsTouched();\n this.fileChanged.emit({ field: this.id, file: this.selectedFile });\n this.loading = false;\n return;\n }\n\n if (result?.id) {\n this.control.setValue(result.id);\n this.imageUploaded.emit(result.id);\n }\n\n this.control.markAsTouched();\n this.loading = false;\n }\n\n /**\n * It deletes the file from the server and sets the selectedFile and fileUrl to null\n *\n * @param [id] - The id of the file to delete.\n */\n async deleteFile(id?: string) {\n if (!this.uploadDirectly) {\n this.selectedFile = null;\n this.fileUrl = null;\n this.control.setValue('');\n this.control.markAsTouched();\n this.fileChanged.emit({ field: this.id, file: null });\n return;\n }\n\n this.loading = true;\n this.selectedFile = null;\n this.fileUrl = null;\n\n if (id) {\n const result = await this.fileService.delete(this.url, this.deletePath, id);\n if (result) {\n this.selectedFile = null;\n this.fileUrl = null;\n this.control.setValue('');\n this.imageDeleted.emit();\n this.loading = false;\n }\n }\n }\n}\n","<div class=\"form-group mt-3\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <div\n class=\"drag-area\"\n (dragover)=\"dragOver($event)\"\n (dragleave)=\"dragLeave($event)\"\n (drop)=\"drop($event)\"\n [ngClass]=\"{ active: dragActive }\"\n >\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n\n <ng-container *ngIf=\"selectedFile && !loading\">\n <img [src]=\"fileUrl\" *ngIf=\"selectedFile\" />\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteFile()\">Löschen</button>\n </ng-container>\n\n <ng-container *ngIf=\"control?.value && !selectedFile && !loading\">\n <img [src]=\"url + path + control?.value\" />\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteFile(control?.value)\">Löschen</button>\n </ng-container>\n\n <ng-container *ngIf=\"!selectedFile && !control?.value && !loading\">\n <div class=\"icon\">\n <i class=\"bi bi-images\"></i>\n </div>\n\n <span class=\"header\">{{ dragText }}</span>\n <span class=\"header\"\n >{{ preButtonText }} <span class=\"button\" (click)=\"fileInput.click()\">{{ buttonText }}</span></span\n >\n <input type=\"file\" (change)=\"selectFile($event)\" [attr.accept]=\"validExtensions?.join(',')\" hidden #fileInput />\n <span class=\"support\" [innerText]=\"supportText\"></span>\n </ng-container>\n </div>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestlänge für dieses Feld beträgt\n {{control?.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale Länge für dieses Feld beträgt\n {{control?.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte eine gültige E-Mail Adresse angeben.</div>\n </div>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { GraphQLRequestType, GraphQLService } from '@lenne.tech/ng-base/shared';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'base-refence-input',\n templateUrl: './refence-input.component.html',\n styleUrls: ['./refence-input.component.scss'],\n})\nexport class RefenceInputComponent implements OnInit, OnDestroy {\n @Input() id: string;\n @Input() name: string;\n @Input() label?: string;\n @Input() isList = false;\n @Input() search = true;\n @Input() placeholder?: string = '';\n @Input() autocomplete?: string;\n @Input() tabIndex?: number;\n @Input() control: any;\n @Input() required = false;\n @Input() method = 'find';\n @Input() fields = ['id', 'name'];\n @Input() valueField = 'id';\n @Input() nameField = 'name';\n objects: any[] = [];\n currentValue: any;\n optionsForTagInput = [];\n selectedElement: HTMLElement;\n subscription = new Subscription();\n\n constructor(private graphQLService: GraphQLService) {}\n\n async ngOnInit() {\n this.getReferences();\n\n this.subscription.add(\n this.control.valueChanges.subscribe(() => {\n if (!this.currentValue) {\n this.setValue();\n }\n })\n );\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n /**\n * It gets the references from the GraphQL server and sets the value of the select\n */\n getReferences() {\n const fields = [...this.fields];\n\n if (Array.isArray(this.nameField)) {\n for (const field of this.nameField) {\n if (!fields.includes(field)) {\n fields.push(field);\n }\n }\n } else {\n if (!fields.includes(this.nameField)) {\n fields.push(this.nameField);\n }\n }\n\n this.graphQLService\n .graphQl(this.method, {\n fields,\n type: GraphQLRequestType.QUERY,\n })\n .subscribe(async (result) => {\n if (result) {\n this.objects = result;\n this.setObjectsAsOptions();\n\n if (!this.currentValue) {\n this.setValue();\n }\n }\n });\n }\n\n /**\n * If the current value is not valid, set the control to an invalid state\n */\n checkValidReference() {\n if (!this.currentValue) {\n this.control.markAsTouched();\n this.control.markAsDirty();\n this.control.setValue('');\n this.control.setErrors(null);\n return;\n }\n\n const foundElement = this.objects.find((e) => e[this.valueField] === this.currentValue);\n if (!foundElement) {\n this.control.setValue(null);\n this.control.markAsTouched();\n this.control.markAsDirty();\n this.control.setErrors({ invalidReference: true });\n } else {\n this.control.setErrors(null);\n }\n }\n\n /**\n * If the user presses the enter key, mark the control as touched\n */\n enterKey(event) {\n this.selectedElement = event.target;\n this.control.markAsTouched();\n }\n\n /**\n * If the control has a value and the objects array is not empty, then find the object in the array that has the same\n * value as the control's value and set the currentValue to the textField of that object. If the control has a value but\n * the objects array is empty, then set the currentValue to the control's value\n */\n setValue() {\n if (this.control?.value && this.objects?.length > 0) {\n if (this.control?.value?.id) {\n this.control.setValue(this.control.value.id);\n }\n\n const foundElement = this.objects.find((e) => e[this.valueField] === this.control.value);\n if (foundElement) {\n this.currentValue = this.prepareNameField(foundElement);\n }\n }\n }\n\n /**\n * It sets the value of the control to the id of the selected option\n */\n set(id: string) {\n this.control.markAsTouched();\n this.control.markAsDirty();\n this.control.setValue(id);\n this.setValue();\n this.selectedElement = null;\n }\n\n /**\n * Filter options for drop down\n */\n filterOptions(): any[] {\n return this.objects\n ? this.objects.filter(\n (e) => (!this.currentValue || this.checkForNameFields(e)) && !this.control?.value?.includes(e?.value)\n )\n : [];\n }\n\n /**\n * It takes an array of objects and returns an array of objects with the text and value fields specified\n */\n setObjectsAsOptions() {\n this.optionsForTagInput = this.objects.map((e) => {\n return {\n text: this.prepareNameField(e),\n value: e[this.valueField],\n };\n });\n }\n\n /**\n * Show dropdown focus\n */\n onFocus(event?) {\n if (event) {\n this.selectedElement = event.target;\n } else {\n this.checkValidReference();\n setTimeout(() => {\n this.selectedElement = null;\n }, 250);\n }\n }\n\n /**\n * Prepare string function if name fields is an array\n */\n prepareNameField(object: any) {\n let result;\n\n if (Array.isArray(this.nameField)) {\n for (const field of this.nameField) {\n if (!result) {\n result = object[field];\n } else {\n result = result + ' ' + object[field];\n }\n }\n } else {\n result = object[this.nameField];\n }\n\n return result;\n }\n\n /**\n * Check function if name fields is an array\n */\n checkForNameFields(object: any) {\n if (Array.isArray(this.nameField)) {\n let result = false;\n\n for (const field of this.nameField) {\n const check = object[field].includes(this.currentValue);\n if (check) {\n result = check;\n }\n }\n\n return result;\n } else {\n return object[this.nameField]?.includes(this.currentValue);\n }\n }\n}\n","<ng-container *ngIf=\"!isList\">\n <div class=\"form-group mb-3\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n\n <div class=\"position-relative\" *ngIf=\"search\">\n <input [formControl]=\"control\" hidden />\n <input\n [id]=\"id\"\n [name]=\"name\"\n class=\"form-control\"\n [(ngModel)]=\"currentValue\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onFocus()\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n (keyup)=\"enterKey($event)\"\n />\n <div class=\"options\" *ngIf=\"objects && selectedElement\">\n <div class=\"option-item\" *ngFor=\"let object of filterOptions()\" (click)=\"set(object[valueField])\">\n {{ prepareNameField(object) }}\n </div>\n </div>\n </div>\n\n <div *ngIf=\"!search\">\n <select\n [id]=\"id\"\n [name]=\"name\"\n class=\"form-select\"\n [attr.aria-label]=\"placeholder\"\n [formControl]=\"control\"\n [required]=\"required\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n >\n <option [ngValue]=\"null\" selected>{{ placeholder }}</option>\n <option *ngFor=\"let object of objects\" [ngValue]=\"object[valueField]\">\n {{ prepareNameField(object) }}\n </option>\n </select>\n </div>\n\n <div\n class=\"d-block invalid-feedback m-2\"\n *ngIf=\"control?.invalid && (control?.dirty || control?.touched) && !selectedElement\"\n >\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['invalidReference'] && currentValue\">\n {{ currentValue }} ist kein gültiger Wert für {{ label }}.\n </div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestlänge für dieses Feld beträgt\n {{control.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale Länge für dieses Feld beträgt\n {{control.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte eine gültige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['matching']\">Die Passwörter müssen überein stimmen.</div>\n </div>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isList\">\n <base-tags\n [id]=\"id\"\n [label]=\"label\"\n [name]=\"name\"\n [control]=\"control\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [custom]=\"false\"\n [options]=\"optionsForTagInput\"\n ></base-tags>\n</ng-container>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { AbstractControl, UntypedFormControl } from '@angular/forms';\nimport { AuthService, BasicUser, GraphQLType } from '@lenne.tech/ng-base/shared';\n\n@Component({\n selector: 'base-model-form-sub',\n templateUrl: './model-form-sub.component.html',\n styleUrls: ['./model-form-sub.component.scss'],\n})\nexport class ModelFormSubComponent implements OnInit {\n @Input() fields: Record<string, GraphQLType>;\n @Input() form: any;\n @Input() config: any = {};\n\n @Output() imageChanged = new EventEmitter<string>();\n @Output() fileChanged = new EventEmitter<{ field: string; file: File | null }>();\n\n keys: string[] = [];\n user: BasicUser;\n\n constructor(private authService: AuthService) {}\n\n ngOnInit(): void {\n // Get keys\n const unsortedKeys = Object.keys(this.fields);\n\n // Sort keys by config order\n this.keys = unsortedKeys.sort((a, b) => {\n return (\n (this.config[a]?.order ? this.config[a]?.order : 99) - (this.config[b]?.order ? this.config[b]?.order : 99)\n );\n });\n\n // Set user for roles check\n this.user = BasicUser.map(this.authService.currentUser);\n }\n\n /**\n * If the field has fields, return true, otherwise return false.\n */\n checkFieldHasFields(field: GraphQLType) {\n return Object.keys(field.fields)?.length !== 0;\n }\n\n /**\n * It takes a string, capitalizes the first letter, and returns the new string\n *\n * @param value - The string that you want to capitalize the first letter of.\n * @returns The first letter of the string is being capitalized and the rest of the string is being returned.\n */\n capitalizeFirstLetter(value: string) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n }\n\n /**\n * It takes an array of values and returns an array of objects with a value and text property\n *\n * @param values - any[] - the array of values that you want to convert to a selectable list\n * @param config\n * @returns An array of objects with a value and text property.\n */\n prepareEnumForSelect(values: any[], config = {}) {\n return values\n .filter((i) => {\n return !(config && config[i]?.roles && !this.user.hasAllRoles(config[i]?.roles));\n })\n .map((e) => {\n return {\n value: e,\n text: config && config[e]?.text ? config[e].text : e,\n };\n });\n }\n\n /**\n * It takes an AbstractControl and returns a FormControl\n *\n * @param control - AbstractControl | null | undefined\n * @returns A FormControl\n */\n transformToControl(control: AbstractControl | null | undefined) {\n return control as UntypedFormControl;\n }\n}\n","<div class=\"mt-3\" *ngFor=\"let key of keys\">\n <ng-container\n *ngIf=\"checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)\"\n >\n <fieldset class=\"border rounded-3 p-3 mt-3\">\n <legend class=\"float-none w-auto px-3\">\n {{ config[key]?.label ? config[key].label : capitalizeFirstLetter(key) }}\n </legend>\n <base-model-form-sub\n [fields]=\"fields[key].fields\"\n [config]=\"config[key]?.fields || {}\"\n [form]=\"form.get(key)\"\n ></base-model-form-sub>\n </fieldset>\n </ng-container>\n\n <ng-container\n *ngIf=\"!checkFieldHasFields(fields[key]) && (config[key]?.roles ? user?.hasAllRoles(config[key]?.roles) : true)\"\n >\n <ng-container *ngIf=\"fields[key]?.isEnum && !config[key]?.exclude\">\n <base-select\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || 'Bitte einen Wert auswählen'\"\n [options]=\"prepareEnumForSelect(fields[key]?.validEnums, config[key]?.enumValues)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\"\n ></base-select>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isEnum && !config[key]?.exclude\">\n <ng-container [ngSwitch]=\"config[key]?.type ? config[key]?.type : fields[key]?.type\">\n <ng-container *ngSwitchCase=\"'String'\">\n <ng-container *ngIf=\"fields[key]?.isList && !config[key]?.exclude\">\n <base-tags\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-tags>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isList && !config[key]?.exclude\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'text'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-input>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Image'\">\n <base-upload-image\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [url]=\"config[key]?.url\"\n [path]=\"config[key]?.path || '/files/'\"\n [uploadPath]=\"config[key]?.uploadPath || '/files/upload'\"\n [deletePath]=\"config[key]?.deletePath || '/files/'\"\n [supportText]=\"config[key]?.supportText || 'Unterstützte Formate: JPEG, JPG, PNG'\"\n [defaultDragText]=\"config[key]?.dragText || 'Drag & Drop'\"\n [defaultReleaseText]=\"config[key]?.releaseText || 'Loslassen zum hochladen'\"\n [preButtonText]=\"config[key]?.preButtonText || 'or'\"\n [buttonText]=\"config[key]?.buttonText || 'browse'\"\n [validExtensions]=\"config[key]?.validExtensions || ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n [compressOptions]=\"config[key]?.compressOptions\"\n [maxSize]=\"config[key]?.maxSize\"\n [uploadDirectly]=\"false\"\n (fileChanged)=\"fileChanged.emit($event)\"\n (imageDeleted)=\"imageChanged.emit(key)\"\n (imageUploaded)=\"imageChanged.emit(key)\"\n ></base-upload-image>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Reference'\">\n <base-refence-input\n [id]=\"key\"\n [name]=\"key\"\n [isList]=\"fields[key]?.isList\"\n [search]=\"config[key]?.searchable ?? true\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [method]=\"config[key]?.method || 'find'\"\n [fields]=\"config[key]?.fields || ['id', 'name']\"\n [valueField]=\"config[key]?.valueField || 'id'\"\n [nameField]=\"config[key]?.nameField || 'name'\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-refence-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Boolean'\">\n <base-checkbox\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'LongText'\">\n <base-textarea\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-textarea>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Float'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [type]=\"'number'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Password'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [type]=\"'password'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Color'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [type]=\"'color'\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'URL'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'url'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Email'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'email'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-input>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'DateTime'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"config[key]?.label ? config[key].label : capitalizeFirstLetter(key)\"\n [placeholder]=\"config[key]?.placeholder || ''\"\n [type]=\"'datetime-local'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"\n config[key] && config[key]?.required !== undefined ? config[key]?.required : fields[key].isRequired\n \"\n ></base-input>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n","import { Component, EventEmitter, Input } from '@angular/core';\n\nexport interface Button {\n icon: string;\n color: string;\n routerLink?: string;\n event?: EventEmitter<boolean>;\n method?: string;\n}\n\n@Component({\n selector: 'base-fab-button',\n templateUrl: './fab-button.component.html',\n styleUrls: ['./fab-button.component.scss'],\n})\nexport class FabButtonComponent {\n @Input() fabIcon = 'bi-list';\n @Input() buttons: Button[];\n toggle = false;\n}\n","<div class=\"fab-container\" [ngClass]=\"{ 'fab-container-active': toggle }\">\n <div class=\"fab shadow\">\n <div class=\"fab-content\" (click)=\"toggle = !toggle\">\n <i class=\"bi bi-x-lg\" *ngIf=\"toggle\"></i>\n <i class=\"bi\" *ngIf=\"!toggle\" [ngClass]=\"fabIcon\"></i>\n </div>\n </div>\n <div\n class=\"sub-button shadow\"\n *ngFor=\"let button of buttons\"\n (click)=\"button.event.emit(true); toggle = !toggle\"\n [ngStyle]=\"{ backgroundColor: button.color }\"\n >\n <a [routerLink]=\"button.routerLink\">\n <i class=\"bi\" [ngClass]=\"button.icon\"></i>\n </a>\n </div>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport {\n AuthService,\n BasicUser,\n CmsService,\n FileService,\n FormsService,\n fullEmail,\n GraphQLMeta,\n GraphQLMetaService,\n GraphQLRequestType,\n GraphQLService,\n GraphQLType,\n IGraphQLTypeCollection,\n ToastService,\n ToastType,\n} from '@lenne.tech/ng-base/shared';\nimport { AbstractControl, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Button } from '../fab-button/fab-button.component';\n\n@Component({\n selector: 'base-model-form',\n templateUrl: './model-form.component.html',\n styleUrls: ['./model-form.component.scss'],\n})\nexport class ModelFormComponent implements OnInit, OnChanges {\n @Input() modelName: string;\n @Input() label: string;\n @Input() id: string | null;\n @Input() delete = true;\n @Input() onlyUpdateMode = false;\n @Input() duplicate = false;\n @Input() logging = false;\n @Input() config: any = {};\n @Input() showFavButton = true;\n\n @Output() finished = new EventEmitter();\n\n meta: GraphQLMeta;\n form: UntypedFormGroup;\n _loading = false;\n fields: Record<string, GraphQLType>;\n operation: string;\n keys: string[] = [];\n user: BasicUser;\n object: any;\n fabButtons: Button[] = [];\n fileChanges: [{ field: string; file: File | null }];\n\n set loading(value: boolean) {\n if (!value) {\n setTimeout(() => {\n this._loading = value;\n }, 400);\n } else {\n this._loading = value;\n }\n }\n\n constructor(\n private graphQLMetaService: GraphQLMetaService,\n private graphQLService: GraphQLService,\n private formsService: FormsService,\n private authService: AuthService,\n private router: Router,\n private route: ActivatedRoute,\n private cmsService: CmsService,\n private toastService: ToastService,\n private fileService: FileService\n ) {}\n\n ngOnInit(): void {\n // Set user for roles check\n this.user = BasicUser.map(this.authService.currentUser);\n\n this.graphQLMetaService.getMeta().subscribe((meta) => {\n this.meta = meta;\n\n if (this.modelName) {\n this.init();\n }\n });\n\n this.initFabActions();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // Reinit form for new model or load and patch form with new id\n if (changes['modelName'] || changes['id']) {\n this.init();\n }\n }\n\n /**\n * > If the model name and metadata are present, set the operation to update or create, get the fields from the\n * metadata, create the form, and if the value is present, patch the form with the value\n */\n init(id?: string) {\n if (id) {\n this.id = id;\n }\n\n if (!this.id && this.onlyUpdateMode) {\n return;\n }\n\n if (this.modelName && this.meta) {\n this.operation = this.id ? 'update' : 'create';\n\n if (this.logging) {\n console.log('ModelFormComponent::init->operation', this.operation);\n console.log(\n 'ModelFormComponent::init->meta.getArgs',\n this.operation + this.capitalizeFirstLetter(this.modelName)\n );\n }\n\n this.fields = this.meta.getArgs(this.operation + this.capitalizeFirstLetter(this.modelName), {\n type: GraphQLRequestType.MUTATION,\n }).fields;\n this.fields = this.fields['input'].fields as any;\n this.keys = Object.keys(this.fields);\n\n if (this.logging) {\n console.log('ModelFormComponent::init->id', this.id);\n console.log('ModelFormComponent::init->fields', this.fields);\n console.log('ModelFormComponent::init->keys', this.keys);\n }\n\n this.form = this.createForm(this.fields);\n\n if (this.id) {\n this.getObjectById(this.id);\n }\n }\n }\n\n /**\n * It takes a key as an argument, and returns an array of keys from the sub-object\n */\n getKeysFromSubObject(key: string) {\n return Object.keys(this.fields[key]);\n }\n\n /**\n * It takes an id, and then calls the graphQLService to get the object from the database\n *\n * @param id - The id of the object to be loaded\n */\n getObjectById(id: string) {\n if (!id) {\n return;\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::getObjectById->id', id);\n console.log('ModelFormComponent::getObjectById->requestFields', this.createRequestObject(this.fields));\n }\n\n this.graphQLService\n .graphQl('get' + this.capitalizeFirstLetter(this.modelName), {\n arguments: { id },\n fields: this.createRequestObject(this.fields),\n type: GraphQLRequestType.QUERY,\n })\n .subscribe({\n next: (response) => {\n if (this.logging) {\n console.log('ModelFormComponent::get->value', response);\n }\n\n this.object = response;\n this.form.patchValue({ ...{}, ...response });\n\n // Process patchFields for reference input\n for (const [key, value] of Object.entries(this.config)) {\n // If it not an array\n if (this.config[key]?.type === 'Reference' && !this.fields[key]?.isList) {\n if (this.form.get(key)) {\n this.form\n .get(key)\n .patchValue(response[this.config[key]?.patchField ? this.config[key]?.patchField : key]?.id);\n }\n }\n\n // If value is an array\n if (this.config[key]?.type === 'Reference' && this.fields[key]?.isList) {\n if (this.form.get(key)) {\n this.form\n .get(key)\n .patchValue(\n response[this.config[key]?.patchField ? this.config[key]?.patchField : key]?.map((e) => e?.id)\n );\n }\n }\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::getObjectById->patchedForm', this.form);\n }\n },\n error: (err) => {\n console.error('Error on load object', err);\n this.finished.emit(null);\n },\n });\n }\n\n /**\n * It takes a GraphQL type collection and returns an array of strings and objects\n *\n * @param fields - IGraphQLTypeCollection - This is the object that is returned from the\n * introspection query.\n * @returns An array of strings and objects.\n */\n createRequestObject(fields: IGraphQLTypeCollection) {\n const requestFields: any = [];\n\n for (const [key, value] of Object.entries(fields)) {\n if (this.config[key]?.exclude !== undefined && this.config[key]?.exclude) {\n continue;\n }\n\n if (Object.keys(fields[key]?.fields)?.length === 0) {\n if (this.config[key]?.type !== 'Reference') {\n requestFields.push(key);\n } else {\n requestFields.push({ [this.config[key]?.patchField ? this.config[key]?.patchField : key]: ['id'] });\n }\n } else {\n const subkeys = this.createRequestObject(fields[key].fields as IGraphQLTypeCollection);\n const resultObject = {};\n resultObject[key] = subkeys;\n requestFields.push(resultObject);\n }\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::createRequestObject->requestFields', requestFields);\n }\n\n return requestFields;\n }\n\n /**\n * It takes a collection of GraphQL types and creates a form group with a form control for each type\n *\n * @param fields - IGraphQLTypeCollection\n */\n createForm(fields: IGraphQLTypeCollection) {\n const group: any = {};\n\n for (const [key, value] of Object.entries(fields)) {\n if (Object.keys(value?.fields)?.length === 0) {\n group[key] = new UntypedFormControl(null, this.processValidators(this.config[key], value));\n } else {\n group[key] = this.createForm(fields[key].fields as IGraphQLTypeCollection);\n }\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::createForm->group', group);\n }\n\n return new UntypedFormGroup(group);\n }\n\n /**\n * Process form validators for control\n */\n processValidators(config: any, value: IGraphQLTypeCollection | GraphQLType) {\n const validators = [];\n\n if (config) {\n if (config?.required !== undefined ? config?.required : value.isRequired) {\n validators.push(Validators.required);\n }\n\n if (config?.type === 'Email') {\n validators.push(fullEmail());\n }\n\n if (config?.type === 'Password') {\n validators.push(Validators.minLength(6));\n }\n\n if (typeof config?.min === 'number') {\n validators.push(Validators.min(config.min));\n }\n\n if (typeof config?.max === 'number') {\n validators.push(Validators.max(config.max));\n }\n }\n\n return validators;\n }\n\n /**\n * It calls the graphQLService to delete the object with the id of the object that is currently being edited\n */\n deleteObject() {\n this.cmsService.deleteObject(this.id, this.modelName).then(() => {\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description: this.label + ' wurde erfolgreich gelöscht.',\n });\n this.finished.emit(null);\n });\n }\n\n /**\n * It sends a GraphQL mutation to the server to duplicate the object\n */\n async duplicateObject() {\n this.cmsService.duplicateObject(this.id, this.modelName).then(async (value) => {\n if (value?.id) {\n await this.router.navigate(['../'], { relativeTo: this.route });\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description: this.label + ' wurde erfolgreich dupliziert.',\n });\n } else {\n this.finished.emit(null);\n }\n });\n }\n\n /**\n * It takes a string, capitalizes the first letter, and returns the modified string\n *\n * @param value - The string to capitalize.\n * @returns The first letter of the string is being capitalized and the rest of the string is being returned.\n */\n capitalizeFirstLetter(value: string) {\n return this.cmsService.capitalizeFirstLetter(value);\n }\n\n /**\n * It takes an AbstractControl and returns a FormControl\n *\n * @param control - AbstractControl | null | undefined\n * @returns A FormControl\n */\n transformToControl(control: AbstractControl | null | undefined) {\n return control as UntypedFormControl;\n }\n\n /**\n * It takes the key of the form control that has changed, gets the value of that form control, creates an object with the\n * key and value, and then sends that object to the GraphQL server to update the database\n */\n imageChanged(key: string) {\n const data = {};\n data[key] = this.form.get(key).value;\n\n if (this.logging) {\n console.log('ModelFormComponent::imageChanged->body', data);\n }\n\n if (this.id) {\n try {\n this.graphQLService\n .graphQl('update' + this.capitalizeFirstLetter(this.modelName), {\n arguments: { id: this.id, input: data },\n fields: ['id'],\n type: GraphQLRequestType.MUTATION,\n })\n .subscribe({\n next: (value) => {\n if (this.logging) {\n console.log('ModelFormComponent::imageChanged->success', value);\n }\n },\n });\n } catch (e) {\n if (this.logging) {\n console.log('ModelFormComponent::imageChanged->error', e);\n }\n }\n }\n }\n\n /**\n * It takes the form, validates it, and then sends it to the GraphQL server\n *\n * @returns The id of the newly created or updated object.\n */\n submit(secret = false) {\n return new Promise(async (resolve, reject) => {\n if (!secret) {\n this.loading = true;\n }\n\n if (this.form.invalid && !secret) {\n this.formsService.validateAllFormFields(this.form as any);\n this.formsService.scrollToInvalidControl(this.form);\n this.loading = false;\n resolve(null);\n return;\n }\n\n if (this.operation === 'update' && !this.id) {\n console.error('ID is missing for update!');\n this.loading = false;\n resolve(null);\n return;\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::submit->formValue', this.form.value);\n }\n\n const data = Object.assign({}, this.form.value);\n for (const [key, value] of Object.entries(data)) {\n if (\n (this.config[key]?.roles ? !this.user.hasAllRoles(this.config[key]?.roles) : false) ||\n this.config[key]?.exclude\n ) {\n delete data[key];\n }\n\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n data[key] = Object.keys(data[key])\n .filter((k) => data[key][k] != null)\n .reduce((a, k) => ({ ...a, [k]: data[key][k] }), {});\n\n if (Object.keys(data[key])?.length === 0) {\n if (this.logging) {\n console.log('Object is empty from result');\n }\n data[key] = null;\n }\n }\n\n // Set type for graphql method\n if (this.fields[key]?.type === 'Float') {\n data[key] = Number(value);\n }\n }\n\n if (this.logging) {\n console.log('ModelFormComponent::submit->valueToGraphql', data);\n }\n\n if (this.fileChanges?.length) {\n for (const fileChange of this.fileChanges) {\n const key = fileChange.field;\n if (fileChange.file) {\n // Upload\n if (this.form.get(key).value) {\n // Delete\n const deleteResult = await this.fileService.delete(\n this.config[key]?.url,\n this.config[key]?.deletePath || '/files/',\n this.object[key]\n );\n\n if (deleteResult) {\n data[key] = '';\n }\n }\n\n const uploadResult = await this.fileService.upload(\n this.config[key]?.url,\n this.config[key]?.uploadPath || '/files/upload',\n fileChange.file,\n this.config[key]?.compressOptions\n );\n\n if (uploadResult?.id) {\n data[key] = uploadResult.id;\n }\n } else {\n // Delete\n const result = await this.fileService.delete(\n this.config[key]?.url,\n this.config[key]?.deletePath || '/files/',\n this.object[key]\n );\n\n if (result) {\n data[key] = '';\n }\n }\n }\n }\n\n this.graphQLService\n .graphQl(this.operation + this.capitalizeFirstLetter(this.modelName), {\n arguments: this.operation === 'update' ? { id: this.id, input: data } : { input: data },\n fields: ['id'],\n type: GraphQLRequestType.MUTATION,\n })\n .subscribe({\n next: (value) => {\n if (!secret) {\n this.loading = false;\n this.finished.emit(null);\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.SUCCESS,\n title: 'Erfolgreich',\n description:\n this.label + ' wurde erfolgreich ' + (this.operation === 'create' ? 'erstellt.' : 'aktualisiert.'),\n });\n }\n\n resolve(value);\n },\n error: (err) => {\n if (!secret) {\n console.error('Failed on ' + this.operation, err);\n this.loading = false;\n\n this.toastService.show({\n id: this.modelName + '-success',\n type: ToastType.ERROR,\n description:\n 'Beim ' +\n (this.operation === 'create' ? 'erstellen' : 'aktualisieren') +\n ' von ' +\n this.label +\n ' ist etwas schiefgelaufen.',\n });\n }\n\n reject();\n },\n });\n });\n }\n\n /**\n * Init fab buttons for mobile devices\n */\n initFabActions() {\n const saveEvent = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-check-lg', color: 'var(--bs-success)', event: saveEvent });\n saveEvent.subscribe(() => this.submit(false));\n\n if (this.duplicate && this.operation === 'update') {\n const event = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-back', color: 'var(--bs-info)', event });\n event.subscribe(() => this.duplicateObject());\n }\n\n if (this.operation === 'update' && this.delete) {\n const event = new EventEmitter<boolean>();\n this.fabButtons.push({ icon: 'bi-trash3', color: 'var(--bs-danger)', event });\n event.subscribe(() => this.deleteObject());\n }\n }\n\n processFileChanges(event: { field: string; file: File | null }) {\n const index = this.fileChanges?.findIndex((e) => e.field === event.field);\n\n if (index !== undefined && index !== -1) {\n this.fileChanges[index] = event;\n } else if (this.fileChanges) {\n this.fileChanges.push(event);\n } else {\n this.fileChanges = [event];\n }\n }\n}\n","<div class=\"w-100\" *ngIf=\"form\">\n <div class=\"d-flex flex-row justify-content-between mt-3\">\n <div class=\"responsive-back d-flex d-lg-none\">\n <i class=\"bi bi-arrow-left\" routerLink=\"../\"></i>\n </div>\n <h2 class=\"mb-0\">\n {{ label ? label : capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}\n </h2>\n\n <div class=\"d-none d-lg-flex flex-row align-items-center justify-content-end\">\n <button class=\"btn btn-outline-primary me-2\" *ngIf=\"id && duplicate && !_loading\" (click)=\"duplicateObject()\">\n Duplizieren\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n *ngIf=\"!_loading\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"_loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n\n <form [formGroup]=\"form\">\n <base-model-form-sub\n [fields]=\"fields\"\n [config]=\"config\"\n [form]=\"form\"\n (imageChanged)=\"imageChanged($event)\"\n (fileChanged)=\"processFileChanges($event)\"\n ></base-model-form-sub>\n\n <div class=\"d-none d-lg-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">Löschen</button>\n </div>\n <div>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n [disabled]=\"!form.touched && !form.dirty\"\n (click)=\"submit(false)\"\n *ngIf=\"!_loading\"\n >\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"_loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n\n<div class=\"d-block d-lg-none responsive-action-button\" *ngIf=\"showFavButton\">\n <base-fab-button [buttons]=\"fabButtons\"></base-fab-button>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Truncate string with ellipses\n */\n@Pipe({\n name: 'baseEllipses',\n})\nexport class EllipsesPipe implements PipeTransform {\n transform(value: string, limit: number): string {\n if (!value) {\n return null;\n }\n\n return value.length > limit ? value.substring(0, limit) + '...' : value;\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport {\n CmsService,\n GraphQLMeta,\n GraphQLMetaService,\n GraphQLRequestType,\n GraphQLService,\n} from '@lenne.tech/ng-base/shared';\n\n@Component({\n selector: 'base-model-table',\n templateUrl: './model-table.component.html',\n styleUrls: ['./model-table.component.scss'],\n})\nexport class ModelTableComponent implements OnInit, OnChanges {\n @Input() modelName: string;\n @Input() objectId: string;\n @Input() createMode = false;\n @Input() logging = false;\n @Input() create = true;\n @Input() update = true;\n @Input() delete = true;\n @Input() duplicate = true;\n @Input() config: any = {};\n @Input() fieldConfig: any = {};\n @Input() showFavButton = true;\n uniqueField = 'id';\n\n @Output() idSelected = new EventEmitter<string>();\n @Output() createModeChanged = new EventEmitter<boolean>();\n\n tableFields = {\n id: { label: 'ID' },\n name: { label: 'Name' },\n title: { label: 'Titel' },\n description: { label: 'Beschreibung' },\n email: { label: 'E-Mail' },\n createdAt: { label: 'Erstellt am', dateFormat: 'dd.MM.YYYY HH:mm' },\n updatedAt: { label: 'Bearbeitet am', dateFormat: 'dd.MM.YYYY HH:mm' },\n };\n meta!: GraphQLMeta;\n objects: any[] = [];\n availableFields: string[] = [];\n selectedId = '';\n queryName = null;\n camelModelName: string;\n\n constructor(\n private graphQLMetaService: GraphQLMetaService,\n private graphQLService: GraphQLService,\n private cmsService: CmsService\n ) {}\n\n ngOnInit(): void {\n this.graphQLMetaService.getMeta().subscribe((meta) => {\n this.meta = meta;\n\n if (this.modelName) {\n this.init();\n }\n\n if (this.objectId) {\n this.selectedId = this.objectId;\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['modelName'] && this.meta) {\n this.init();\n }\n\n if (changes['objectId'] && this.meta) {\n if (this.selectedId !== this.objectId) {\n if (this.logging) {\n console.log('ModelTableComponent::ngOnChanges->selectedId', this.selectedId);\n }\n\n this.selectedId = this.objectId;\n }\n }\n }\n\n /**\n * We're using the `meta` service to get the fields that are available for the `find` query for the model we're working\n * with. We're then using that information to populate the `availableFields` array\n */\n init() {\n this.availableFields = [];\n this.camelModelName = this.kebabToCamelCase(this.modelName);\n // Set query name\n if (!this.config?.queryName) {\n this.queryName = 'find' + this.capitalizeFirstLetter(this.camelModelName) + 's';\n } else {\n this.queryName = this.config?.queryName;\n }\n\n if (this.config?.tableFields) {\n this.tableFields = this.config.tableFields;\n }\n\n if (this.logging) {\n console.log('ModelTableComponent::init->modelName', this.modelName);\n console.log('ModelTableComponent::init->camelModelName', this.camelModelName);\n console.log('ModelTableComponent::init->queryName', this.queryName);\n console.log('ModelTableComponent::init->tableFields', this.tableFields);\n }\n\n const possibleFields = this.meta.getFields(this.queryName).fields;\n const keys = Object.keys(possibleFields);\n const tableFieldKeys = Object.keys(this.tableFields);\n tableFieldKeys?.forEach((field) => {\n if (keys.includes(field)) {\n this.availableFields.push(field);\n }\n });\n\n if (this.logging) {\n console.log('ModelTableComponent::init->possibleFields', possibleFields);\n console.log('ModelTableComponent::init->keys', keys);\n console.log('ModelTableComponent::init->availableFields', this.availableFields);\n }\n\n this.loadObjects(this.availableFields);\n }\n\n /**\n * When the user clicks the \"Create New\" button, the createModeChanged event is emitted, which is then handled by the\n * parent component\n */\n createNewObject() {\n this.createMode = true;\n this.createModeChanged.emit(true);\n }\n\n /**\n * It loads the objects from the database and stores them in the objects variable\n *\n * @param fields - string[] - The fields you want to load from the database.\n */\n loadObjects(fields: string[]) {\n const requestFields = [...fields];\n const idInFields = requestFields.find((e) => e === 'id');\n\n if (!idInFields) {\n requestFields.push('id');\n }\n\n this.objects = [];\n this.graphQLService\n .graphQl(this.queryName, {\n fields: requestFields,\n type: GraphQLRequestType.QUERY,\n })\n .subscribe({\n next: (value) => {\n if (this.logging) {\n console.log('ModelTableComponent::loadObjects->value', value);\n }\n\n const arrayForSort = [...value];\n this.objects = arrayForSort.sort(\n (a, b) =>\n (b?.createdAt ? new Date(b?.createdAt)?.getTime() : new Date().getTime()) -\n (a?.createdAt ? new Date(a?.createdAt)?.getTime() : new Date().getTime())\n );\n },\n error: (err) => {\n console.log('Error on loading objects', err);\n },\n });\n }\n\n /**\n * If the update property is true, then set the selectedId property to the id of the object passed in, and emit the\n * selectedId property\n */\n selectId(object: any) {\n if (!object) {\n this.createMode = false;\n this.createModeChanged.emit(false);\n }\n\n if (this.update) {\n this.selectedId = object['id'];\n this.idSelected.emit(this.selectedId);\n }\n }\n\n /**\n * It calls the duplicateObject function in the cmsService, passing in the id of the object to be duplicated and the\n * modelName of the object\n */\n async duplicateObject(id: string) {\n await this.cmsService.duplicateObject(id, this.camelModelName);\n this.loadObjects(this.availableFields);\n }\n\n /**\n * It calls the deleteObject function in the cmsService, passing in the id of the object to delete and the name of the\n * model\n */\n async deleteObject(id: string) {\n await this.cmsService.deleteObject(id, this.camelModelName);\n this.loadObjects(this.availableFields);\n }\n\n /**\n * It takes a string, capitalizes the first letter, and returns the modified string\n */\n capitalizeFirstLetter(value: string) {\n return this.cmsService.capitalizeFirstLetter(value);\n }\n\n /**\n * Kebab to camel case string\n */\n kebabToCamelCase(str: string) {\n return str.replace(/-./g, (match) => match[1].toUpperCase());\n }\n}\n","<div *ngIf=\"!selectedId && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between align-items-center mb-2 mb-lg-4\">\n <h2 class=\"mb-0\" *ngIf=\"modelName\">\n {{\n config?.plural ? config?.plural : config?.label ? config?.label : capitalizeFirstLetter(camelModelName) + 's'\n }}\n </h2>\n <div class=\"d-flex align-items-center d-none d-lg-block\">\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n\n <div\n class=\"table-responsive\"\n [ltContextMenu]=\"contextMenu\"\n [selectors]=\"'.object-col'\"\n #contextMenuData=\"contextMenuData\"\n >\n <table class=\"table table-hover bg-white d-none d-lg-table\">\n <thead>\n <tr>\n <th\n scope=\"col\"\n *ngFor=\"let field of availableFields\"\n [baseSort]=\"objects\"\n data-order=\"desc\"\n [attr.data-name]=\"field\"\n >\n {{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr class=\"object-col\" *ngFor=\"let object of objects\" [id]=\"object[uniqueField]\">\n <td class=\"cursor-pointer\" *ngFor=\"let field of availableFields\" (click)=\"selectId(object)\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date: tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"tableFields[field]?.enumValues\">\n {{ tableFields[field]?.enumValues[object[field]]?.text }}\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat && !tableFields[field]?.enumValues\">\n {{ object[field] | baseEllipses: 60 }}\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div class=\"d-flex d-lg-none flex-column flex-grow-1\">\n <div class=\"table-card\" *ngFor=\"let object of objects\" [id]=\"object[uniqueField]\">\n <div class=\"table-card-entry\" *ngFor=\"let field of availableFields; let i = index\" (click)=\"selectId(object)\">\n <b *ngIf=\"i > 0\"\n >{{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}:</b\n >\n <p [ngClass]=\"{ 'table-card-entry-first': i === 0 }\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date: tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"tableFields[field]?.enumValues\">\n {{ tableFields[field]?.enumValues[object[field]]?.text }}\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat && !tableFields[field]?.enumValues\">\n {{ object[field] | baseEllipses: 60 }}\n </ng-container>\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"context-menu\" #contextMenu>\n <div class=\"context-menu-item\" (click)=\"selectId({ id: contextMenuData.clickedElement?.id })\">Bearbeiten</div>\n <div class=\"context-menu-item\" *ngIf=\"duplicate\" (click)=\"duplicateObject(contextMenuData.clickedElement?.id)\">\n Duplizieren\n </div>\n <div class=\"context-menu-item\" *ngIf=\"delete\" (click)=\"deleteObject(contextMenuData.clickedElement?.id)\">\n Löschen\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"w-100\" *ngIf=\"selectedId || createMode\">\n <button class=\"d-none d-lg-block btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zurück</button>\n <base-model-form\n [modelName]=\"camelModelName\"\n [label]=\"config?.label\"\n [config]=\"fieldConfig\"\n [logging]=\"logging\"\n [id]=\"selectedId\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n [duplicate]=\"duplicate\"\n [showFavButton]=\"showFavButton\"\n ></base-model-form>\n</div>\n\n<div class=\"responsive-action-button d-block d-lg-none\">\n <base-fab-button\n [fabIcon]=\"'bi-plus'\"\n (click)=\"createNewObject()\"\n *ngIf=\"!(selectedId || createMode) && showFavButton\"\n ></base-fab-button>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, UntypedFormGroup, Validators } from '@angular/forms';\nimport {\n AuthService,\n FormsService,\n securePasswordValidator,\n ToastService,\n ToastType,\n UserService,\n Validation,\n} from '@lenne.tech/ng-base/shared';\n\n@Component({\n selector: 'base-change-password',\n templateUrl: './change-password.component.html',\n styleUrls: ['./change-password.component.scss'],\n})\nexport class ChangePasswordComponent implements OnInit {\n form: FormGroup;\n loading = false;\n\n constructor(\n private formsService: FormsService,\n private userService: UserService,\n private authService: AuthService,\n private toastService: ToastService\n ) {}\n\n ngOnInit(): void {\n this.createForm();\n }\n\n /**\n * Create password change form\n */\n createForm() {\n this.form = new UntypedFormGroup(\n {\n current: new FormControl<string>('', [Validators.required]),\n password: new FormControl<string>('', [Validators.required, securePasswordValidator()]),\n passwordConfirm: new FormControl<string>('', [Validators.required, securePasswordValidator()]),\n },\n { validators: Validation.match('password', 'passwordConfirm') }\n );\n }\n\n /**\n * Submit form and change password of user\n */\n submit() {\n this.loading = true;\n this.userService\n .login({\n email: this.authService.currentUser.email,\n password: this.form.get('current').value,\n })\n .subscribe({\n next: () => {\n if (this.form.invalid) {\n this.formsService.validateAllFormFields(this.form);\n this.loading = false;\n return;\n }\n\n this.userService.changePassword(this.authService.currentUser.id, this.form.get('password').value).subscribe({\n next: (response) => {\n if (response) {\n this.form.reset();\n this.toastService.show({\n id: 'password-change-success',\n title: 'Erfolgreich',\n description: 'Passwort wurde erfolgreich geändert.',\n type: ToastType.SUCCESS,\n });\n }\n\n this.loading = false;\n },\n error: () => {\n this.loading = false;\n this.toastService.show({\n id: 'password-change-error',\n title: 'Fehlgeschlagen',\n description: 'Passwort ändern ist fehlgeschlagen, bitte versuche es später erneut.',\n type: ToastType.ERROR,\n });\n },\n });\n },\n error: () => {\n this.loading = false;\n this.toastService.show({\n id: 'password-change-error',\n title: 'Fehlgeschlagen',\n description: 'Passwort ändern ist fehlgeschlagen. Falsches Passwort.',\n type: ToastType.ERROR,\n errorCode: '401',\n });\n },\n });\n }\n}\n","<h3>Passwort ändern</h3>\n\n<form [formGroup]=\"form\">\n <base-input\n [id]=\"'Aktuelles Passwort'\"\n [label]=\"'Passwort'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('current')\"\n [tabIndex]=\"1\"\n [eyeButton]=\"true\"\n ></base-input>\n <base-input\n [id]=\"'password'\"\n [label]=\"'Neues Passwort'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('password')\"\n [tabIndex]=\"2\"\n [eyeButton]=\"true\"\n ></base-input>\n <base-input\n [id]=\"'password-confirm'\"\n [label]=\"'Neues Passwort bestätigen'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('passwordConfirm')\"\n [tabIndex]=\"3\"\n [eyeButton]=\"true\"\n ></base-input>\n\n <div class=\"d-flex justify-content-end\">\n <div>\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">Passwort ändern</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n </div>\n </div>\n</form>\n","import { Component, Input } from '@angular/core';\nimport { AuthService, ToastService, ToastType, UserService } from '@lenne.tech/ng-base/shared';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'base-delete-account',\n templateUrl: './delete-account.component.html',\n styleUrls: ['./delete-account.component.scss'],\n})\nexport class DeleteAccountComponent {\n @Input() description =\n 'Mit dem Löschen Deines Kontos werden alle persönlichen Daten sofort gelöscht und sind nicht wiederherstellbar.';\n loading = false;\n\n constructor(\n private userService: UserService,\n private authService: AuthService,\n private toastService: ToastService,\n private router: Router\n ) {}\n\n deleteAccount() {\n this.loading = true;\n\n if (!confirm('Willst Du wirklich ein Konto unwiderruflich löschen?')) {\n this.loading = false;\n return;\n }\n\n this.userService.delete(this.authService.currentUser.id).subscribe({\n next: (response) => {\n if (response) {\n this.toastService.show({\n id: 'delete-user-success',\n title: 'Erfolgreich',\n description: 'Dein Konto wurde erfolgreich gelöscht.',\n type: ToastType.SUCCESS,\n });\n }\n this.authService.logout();\n this.router.navigate(['/']);\n\n this.loading = false;\n },\n error: (error) => {\n this.loading = false;\n this.toastService.show({\n id: 'delete-user-error',\n title: 'Fehlgeschlagen',\n description: 'Konto löschen ist fehlgeschlagen, bitte versuche es später erneut.',\n type: ToastType.ERROR,\n });\n },\n });\n }\n}\n","<div>\n <h3>Konto löschen</h3>\n\n <p>{{ description }}</p>\n\n <div class=\"d-flex justify-content-end mt-3\">\n <div>\n <button class=\"btn btn-primary\" (click)=\"deleteAccount()\" *ngIf=\"!loading\">Konto löschen</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n </div>\n </div>\n</div>\n","import { Directive, HostListener } from '@angular/core';\nimport { NavigationService } from '@lenne.tech/ng-base/shared';\n\n@Directive({\n selector: '[baseBackButton]',\n})\nexport class BackButtonDirective {\n constructor(private navigation: NavigationService) {}\n\n @HostListener('click')\n onClick(): void {\n this.navigation.back();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nimport { InputComponent } from './components/input/input.component';\nimport { SelectComponent } from './components/select/select.component';\nimport { CheckboxComponent } from './components/checkbox/checkbox.component';\nimport { TextareaComponent } from './components/textarea/textarea.component';\nimport { ToastComponent } from './components/toast/toast.component';\nimport { TagsComponent } from './components/tags/tags.component';\nimport { LoadingBarComponent } from './components/loading-bar/loading-bar.component';\nimport { SkeletonLoaderComponent } from './components/skeleton-loader/skeleton-loader.component';\nimport { BreadcrumbComponent } from './components/breadcrumb/breadcrumb.component';\nimport { ModelTableComponent } from './components/model-table/model-table.component';\nimport { ModelFormComponent } from './components/model-form/model-form.component';\nimport { ModelFormSubComponent } from './components/model-form-sub/model-form-sub.component';\nimport { UploadImageComponent } from './components/upload-image/upload-image.component';\nimport { RefenceInputComponent } from './components/refence-input/refence-input.component';\nimport { ChangePasswordComponent } from './components/change-password/change-password.component';\nimport { DeleteAccountComponent } from './components/delete-account/delete-account.component';\nimport { FabButtonComponent } from './components/fab-button/fab-button.component';\n\nimport { BackButtonDirective } from './directives/back-button.directive';\nimport { SortDirective } from './directives/sort.directive';\nimport { ContextMenuDirective } from './directives/context-menu.directive';\n\nimport { EllipsesPipe } from './pipes/ellipses.pipe';\nimport { RouterModule } from '@angular/router';\n\n// Modules\nconst imports = [FormsModule, ReactiveFormsModule, CommonModule, RouterModule];\n\n// Imported and exported elements\nconst elements = [\n // Directives\n SortDirective,\n BackButtonDirective,\n ContextMenuDirective,\n\n // Components\n InputComponent,\n SelectComponent,\n CheckboxComponent,\n TextareaComponent,\n ToastComponent,\n TagsComponent,\n LoadingBarComponent,\n SkeletonLoaderComponent,\n BreadcrumbComponent,\n ModelFormComponent,\n ModelTableComponent,\n ModelFormSubComponent,\n UploadImageComponent,\n RefenceInputComponent,\n ChangePasswordComponent,\n DeleteAccountComponent,\n FabButtonComponent,\n\n // Pipes\n EllipsesPipe,\n];\n\n@NgModule({\n declarations: elements,\n imports,\n exports: elements,\n})\nexport class BaseComponentsModule {}\n","/**\n * Exports for public API\n */\n\n// Module\nexport * from './base-components.module';\n\n// Directives\nexport * from './directives/sort.directive';\nexport * from './directives/back-button.directive';\nexport * from './directives/context-menu.directive';\n\n// Pipes\nexport * from './pipes/ellipses.pipe';\n\n// Components\nexport * from './components/input/input.component';\nexport * from './components/select/select.component';\nexport * from './components/checkbox/checkbox.component';\nexport * from './components/textarea/textarea.component';\nexport * from './components/tags/tags.component';\nexport * from './components/toast/toast.component';\nexport * from './components/loading-bar/loading-bar.component';\nexport * from './components/skeleton-loader/skeleton-loader.component';\nexport * from './components/breadcrumb/breadcrumb.component';\nexport * from './components/model-form/model-form.component';\nexport * from './components/model-table/model-table.component';\nexport * from './components/model-form-sub/model-form-sub.component';\nexport * from './components/upload-image/upload-image.component';\nexport * from './components/refence-input/refence-input.component';\nexport * from './components/change-password/change-password.component';\nexport * from './components/delete-account/delete-account.component';\nexport * from './components/fab-button/fab-button.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i2","i4.TagsComponent","i3.InputComponent","i4.SelectComponent","i5.CheckboxComponent","i6.TextareaComponent","i7.TagsComponent","i8.UploadImageComponent","i9.RefenceInputComponent","i4","i5.ModelFormSubComponent","i6.FabButtonComponent","i3.SortDirective","i4.ContextMenuDirective","i5.ModelFormComponent","i7.EllipsesPipe","i4.InputComponent"],"mappings":"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"}
|