@zambon-dev/library 1.6.3 → 2.0.0
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/CHANGELOG.md +44 -1
- package/README.md +3 -1
- package/fesm2022/zambon-dev-library.mjs +52 -52
- package/fesm2022/zambon-dev-library.mjs.map +1 -1
- package/lib/components/catalog-select/catalog-select.component.d.ts +2 -3
- package/lib/components/data-grid/data-grid.component.d.ts +2 -2
- package/lib/components/form-input/form-input.component.d.ts +6 -6
- package/lib/components/group-accordion/group-accordion.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zambon-dev-library.mjs","sources":["../../../../libs/library/src/lib/components/base.component.ts","../../../../libs/library/src/lib/helpers/date-helpers.ts","../../../../libs/library/src/lib/helpers/display-controls.ts","../../../../libs/library/src/lib/helpers/guid-helper.ts","../../../../libs/library/src/lib/helpers/route-formatter.ts","../../../../libs/library/src/lib/services/catalog.service.ts","../../../../libs/library/src/lib/services/data-providers/data-provider.service.ts","../../../../libs/library/src/lib/services/datasets/base.dataset.ts","../../../../libs/library/src/lib/services/configs-providers/grid-configs.provider.ts","../../../../libs/library/src/lib/services/datasets/grid.dataset.ts","../../../../libs/library/src/lib/services/datasets/data-grid.dataset.ts","../../../../libs/library/src/lib/services/datasets/multi-editor.dataset.ts","../../../../libs/library/src/lib/services/datasets/multi-select-result.dataset.ts","../../../../libs/library/src/lib/services/form-group.service.ts","../../../../libs/library/src/lib/services/form.service.ts","../../../../libs/library/src/lib/models/ribbon-group-child.ts","../../../../libs/library/src/lib/models/sidebar/sidebar-configs.ts","../../../../libs/library/src/lib/models/sidebar/sidebar-menu.ts","../../../../libs/library/src/lib/models/sidebar/sidebar-menu-open-mode.ts","../../../../libs/library/src/lib/services/sidebar.service.ts","../../../../libs/library/src/lib/components/form-input/form-input.component.ts","../../../../libs/library/src/lib/components/form-input/form-input.component.html","../../../../libs/library/src/lib/components/form-input-group/form-input-group.component.ts","../../../../libs/library/src/lib/components/form-input-group/form-input-group.component.html","../../../../libs/library/src/lib/components/catalog-select/catalog-select.component.ts","../../../../libs/library/src/lib/components/catalog-select/catalog-select.component.html","../../../../libs/library/src/lib/components/data-grid-row/data-grid-row.component.ts","../../../../libs/library/src/lib/components/data-grid-row/data-grid-row.component.html","../../../../libs/library/src/lib/components/data-grid/data-grid.component.ts","../../../../libs/library/src/lib/components/data-grid/data-grid.component.html","../../../../libs/library/src/lib/components/form-group/form-group.component.ts","../../../../libs/library/src/lib/components/form-group/form-group.component.html","../../../../libs/library/src/lib/components/group-accordion/group-accordion.component.ts","../../../../libs/library/src/lib/components/group-accordion/group-accordion.component.html","../../../../libs/library/src/lib/directives/scroll-spy.directive.ts","../../../../libs/library/src/lib/components/group-container/group-container.component.ts","../../../../libs/library/src/lib/components/group-container/group-container.component.html","../../../../libs/library/src/lib/components/group-scroll-spy/group-scroll-spy.component.ts","../../../../libs/library/src/lib/components/group-scroll-spy/group-scroll-spy.component.html","../../../../libs/library/src/lib/components/modal/modal.component.ts","../../../../libs/library/src/lib/components/modal/modal.component.html","../../../../libs/library/src/lib/components/multi-editor/multi-editor.component.ts","../../../../libs/library/src/lib/components/multi-editor/multi-editor.component.html","../../../../libs/library/src/lib/components/multi-select/result-grid/result-grid.component.ts","../../../../libs/library/src/lib/components/multi-select/result-grid/result-grid.component.html","../../../../libs/library/src/lib/components/multi-select/multi-select.component.ts","../../../../libs/library/src/lib/components/multi-select/multi-select.component.html","../../../../libs/library/src/lib/components/sidebar-item/sidebar-item.component.ts","../../../../libs/library/src/lib/components/sidebar-item/sidebar-item.component.html","../../../../libs/library/src/lib/components/sidebar/sidebar.component.ts","../../../../libs/library/src/lib/components/sidebar/sidebar.component.html","../../../../libs/library/src/lib/components/ribbon-button/ribbon-button.component.ts","../../../../libs/library/src/lib/components/ribbon-button/ribbon-button.component.html","../../../../libs/library/src/lib/components/ribbon/ribbon.component.ts","../../../../libs/library/src/lib/components/ribbon/ribbon.component.html","../../../../libs/library/src/lib/components/ribbon-group/ribbon-group.component.ts","../../../../libs/library/src/lib/components/ribbon-group/ribbon-group.component.html","../../../../libs/library/src/lib/pipes/enum.ts","../../../../libs/library/src/lib/pipes/replace-many.pipe.ts","../../../../libs/library/src/lib/pipes/replace.pipe.ts","../../../../libs/library/src/lib/library.module.ts","../../../../libs/library/src/lib/services/configs-providers/data-grid-configs.provider.ts","../../../../libs/library/src/lib/validators/date.validators.ts","../../../../libs/library/src/zambon-dev-library.ts"],"sourcesContent":["import { Component, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Component({ template: '' })\nexport abstract class BaseComponent implements OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Host listeners\n //#endregion\n\n //#region Variables\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","export class DateHelpers {\n //#region Public methods\n public static diffDays(initialDate: Date, finalDate: Date): number {\n const initialDateOnly: Date = new Date(initialDate.getFullYear(), initialDate.getMonth(), initialDate.getDate());\n const finalDateOnly: Date = new Date(finalDate.getFullYear(), finalDate.getMonth(), finalDate.getDate());\n\n const diff: number = initialDateOnly.getTime() - finalDateOnly.getTime();\n return Math.floor(diff / (1000 * 60 * 60 * 24));\n }\n //#endregion\n}\n","import { AbstractControl } from '@angular/forms';\n\n/**\n * Tracks the form controls that exist only to show a catalog selection's label.\n *\n * `lib-catalog-select` works in pairs: the control named by `controlName` holds the identifier, and\n * the one named by `displayControlName` holds the text the user reads. The second is created by the\n * component itself when a screen does not declare it, so a form ends up carrying controls nobody\n * wrote down — and a filters form then submits them alongside the real filters.\n *\n * The mark lives in a `WeakSet` keyed by the control instance rather than by its name. That is the\n * only scope that is actually correct: two forms may each have an `employeeName`, and only the one\n * a catalog select drives is a display control. It also keeps nothing alive.\n */\nexport class DisplayControls {\n //#region Variables\n private static readonly marked: WeakSet<AbstractControl> = new WeakSet<AbstractControl>();\n //#endregion\n\n //#region Public methods\n /**\n * Whether the control exists only to display a catalog selection's label.\n *\n * @param control The control, which may be absent.\n * @returns `true` when a catalog select drives it as its display control.\n */\n public static isDisplayControl(control: AbstractControl | null | undefined): boolean {\n return !!control && DisplayControls.marked.has(control);\n }\n\n /**\n * Marks the control as existing only to display a catalog selection's label.\n *\n * @param control The control, which may be absent.\n */\n public static markAsDisplayControl(control: AbstractControl | null | undefined): void {\n if (control) {\n DisplayControls.marked.add(control);\n }\n }\n //#endregion\n}\n","export class GuidHelper {\n public static generateGUID(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c: string) => {\n const r: number = (Math.random() * 16) | 0;\n const v: number = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}","import { ActivatedRouteSnapshot } from '@angular/router';\n\nexport abstract class RouterFormatter {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public static getURL(route: ActivatedRouteSnapshot): string {\n let parentRoute = '';\n if (route.parent) {\n parentRoute = this.getURL(route.parent);\n }\n\n let path = route.routeConfig?.path ?? '';\n route.paramMap.keys\n .forEach(k => {\n path = path.replace(':' + k,\n k === 'view'\n ? ''\n : (route.paramMap.get(k) ?? '')\n );\n });\n\n if (!route.parent || (parentRoute !== '' && parentRoute !== '/' && route.routeConfig?.path && path)) {\n parentRoute += '/';\n }\n\n return parentRoute + path;\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { ICatalogResult } from '../models/catalog-result';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CatalogService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private http: HttpClient = inject(HttpClient);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public search(endpoint: string, maxResults: number, criteria?: string, filters: { [key: string ] : string } | null = null): Observable<ICatalogResult> {\n return this.http.post<ICatalogResult>(`${endpoint}`, { maxResults, criteria, filters });\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { HttpErrorResponse } from '@angular/common/http';\nimport { inject, Injectable, OnDestroy } from '@angular/core';\nimport { ActivatedRoute, ParamMap } from '@angular/router';\nimport { Observable, ReplaySubject, Subject, take } from 'rxjs';\n\n@Injectable()\nexport abstract class DataProviderService<TEntityModel> implements OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected activatedRoute: ActivatedRoute = inject(ActivatedRoute);\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n protected shouldLazyLoad: boolean = false;\n\n private _entityID?: number;\n private errorSubject: Subject<HttpErrorResponse> = new Subject<HttpErrorResponse>();\n private isLoading: boolean = false;\n private isModelLoaded: boolean = false;\n private modelCache: ReplaySubject<TEntityModel | null> = new ReplaySubject<TEntityModel | null>(1);\n //#endregion\n\n //#region Properties\n public get entityID(): number | undefined {\n return this._entityID\n }\n\n public get hasEntityID(): boolean {\n return !!this.entityID;\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n this.activatedRoute.paramMap\n .pipe(take(1))\n .subscribe((paramMap: ParamMap) => {\n const newID: number = Number(paramMap.get('id'));\n if (newID !== this.entityID) {\n this._entityID = newID;\n \n // Need to wait for the data-provider to be initialized.\n queueMicrotask(() => {\n // When lazy loading, the model should be loaded by the consuming component.\n if (!this.shouldLazyLoad) {\n this.refreshModel();\n }\n });\n }\n });\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public getError$(): Observable<HttpErrorResponse> {\n return this.errorSubject.asObservable();\n }\n\n public abstract getTitle(entity: TEntityModel): string;\n \n public getModel$(): Observable<TEntityModel | null> {\n if (!this.isModelLoaded && !this.shouldLazyLoad) {\n this.refreshModel();\n }\n return this.modelCache.asObservable();\n }\n\n public refreshModel(): void {\n if (this.isLoading) {\n return;\n }\n\n this.isLoading = true;\n\n this.loadModel(this.entityID)\n .pipe(take(1))\n .subscribe({\n next: (model: TEntityModel | null) => {\n this.isLoading = false;\n this.updateModel(model);\n },\n error: (error: HttpErrorResponse) => {\n this.isLoading = false;\n this.isModelLoaded = true;\n this.modelCache.next(null);\n this.errorSubject.next(error);\n },\n });\n }\n\n public resetForNewEntity(): void {\n this._entityID = undefined;\n this.isModelLoaded = false;\n this.modelCache.next(null);\n }\n\n public abstract saveModel(model: any): Observable<TEntityModel>;\n\n public updateModel(model: any): void {\n this.isModelLoaded = true;\n\n // Update entity ID if changed.\n if (model && (model as any).id !== this.entityID) {\n this._entityID = (model as any).id;\n }\n\n this.modelCache.next(model);\n }\n //#endregion\n\n //#region Private methods\n protected abstract loadModel(entityID?: number): Observable<TEntityModel | null>;\n //#endregion\n}","import { inject, Injectable, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { DataProviderService } from '../data-providers';\n\n@Injectable()\nexport abstract class BaseDataset implements OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataProvider: DataProviderService<any> | null;\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n \n // TODO: Remove.\n private _parentEntityId?: any;\n //#endregion\n\n //#region Properties\n // TODO: Remove.\n public get parentEntityId(): any {\n return this._parentEntityId;\n }\n public set parentEntityId(value: any) {\n this._parentEntityId = value;\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n this.dataProvider = inject(DataProviderService, { optional: true });\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","import { Injectable } from '@angular/core';\nimport { GridConfigs } from '../../models/configs/grid-configs';\n\n@Injectable()\nexport class GridConfigsProvider<TGridConfigs extends GridConfigs = GridConfigs> {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected _configs: TGridConfigs;\n //#endregion\n\n //#region Properties\n public get configs(): TGridConfigs {\n return this._configs;\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n this._configs = {\n loadingDisplayText: 'Loading...',\n messageOnEmpty: 'No results',\n recordBlockSize: 100,\n rowHeight: 41.6,\n rowsToDisplay: 6,\n } as TGridConfigs;\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { EventEmitter, inject, Injectable } from '@angular/core';\nimport { Observable, take } from 'rxjs';\nimport { GuidHelper } from '../../helpers';\nimport { GridConfigs } from '../../models/configs/grid-configs';\nimport { GridConfigsProvider } from '../configs-providers/grid-configs.provider';\nimport { BaseDataset } from './base.dataset';\n\nconst KEY_FIELD: string = '_key';\n\n@Injectable()\nexport abstract class GridDataset extends BaseDataset {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n public configs: GridConfigs;\n public filtersChanged: EventEmitter<{ [key: string]: string }> = new EventEmitter<{ [key: string]: string }>();\n public isLoading: boolean = false;\n public loadedLastRow: boolean = false;\n public loadFinished: EventEmitter<boolean> = new EventEmitter<boolean>();\n public loadStarted: EventEmitter<void> = new EventEmitter<void>();\n public totalRows?: number;\n\n protected compareProperty: string = 'id';\n protected configsProvider: GridConfigsProvider;\n protected focusedRow: string | null = null;\n protected recordBlock: number = 0;\n\n private _hasBeenLoaded: boolean = false;\n private _loadedKeys?: string[];\n private _loadedRows?: any[];\n private queryFilters?: { [key: string]: string; };\n //#endregion\n\n //#region Properties\n public get filters(): { [key: string]: string; } | undefined {\n return this.queryFilters;\n }\n\n public get hasBeenLoaded(): boolean {\n return this._hasBeenLoaded;\n }\n\n public get hasLoadedRows(): boolean {\n return !!this._loadedRows && this._loadedRows.length > 0;\n }\n\n public get keyProperty(): string {\n return this.compareProperty;\n }\n\n public get loadedKeys(): string[] | undefined {\n return this._loadedKeys;\n }\n\n public get loadedRows(): any[] | undefined {\n return this._loadedRows;\n }\n\n public override get parentEntityId(): any {\n return super.parentEntityId;\n }\n\n public override set parentEntityId(value: any) {\n super.parentEntityId = value;\n if (!!this.loadedRows) {\n this.refresh();\n }\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.configsProvider = inject(GridConfigsProvider);\n this.configs = JSON.parse(JSON.stringify(this.configsProvider.configs));\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public addNewRow(row: any): void {\n this.updateLoadedRows([row]);\n }\n\n public clearFocusedRow(): void {\n this.focusedRow = null;\n }\n\n public getRowData(key: string): any | null {\n if (this.hasLoadedRows) {\n const index: number = this._loadedKeys!.indexOf(key);\n return this.loadedRows![index];\n }\n return null;\n }\n\n public getRowID(key: string): any {\n const row: any = this.getRowData(key);\n\n return this.compareProperty.split('.')\n .reduce((row: any, property: string) => row[property], row);\n }\n\n public getRowInternalKey(row: any): string {\n return row[KEY_FIELD];\n }\n\n public hasRowWithID(id: any): boolean {\n if (!this.hasLoadedRows) {\n return false;\n }\n\n const loadedIDs: any[] = this.compareProperty.split('.')\n .reduce((loadedRows: any[], property: string) => loadedRows.map((row: any) => row[property]), this._loadedRows ?? [])\n .map((row: any) =>\n typeof id === 'string' ? `${row}`\n : typeof id === 'number' ? parseInt(`${row}`)\n : row\n );\n\n return loadedIDs.indexOf(id) >= 0;\n }\n\n public isKeyExists(key: string): boolean {\n return this.hasLoadedRows && this._loadedKeys!.some((x: string) => x === key);\n }\n\n public loadRows(): void {\n if (this.isLoading) {\n return;\n }\n\n this.isLoading = true;\n this.loadStarted.emit();\n\n const parameters: any = {\n endRow: this.configsProvider.configs.recordBlockSize,\n filters: this.queryFilters,\n startRow: this.recordBlock,\n };\n\n this.getData(parameters)\n .pipe(take(1))\n .subscribe({\n next: (response: any[] | { items: any[]; totalRows: number }) => {\n let rows: any[];\n if (Array.isArray(response)) {\n rows = response;\n } else {\n rows = response?.items ?? [];\n this.totalRows = response?.totalRows;\n }\n\n this.updateLoadedRows(rows ?? []);\n\n this.isLoading = false;\n this._hasBeenLoaded = true;\n this.loadFinished.emit(true);\n },\n error: (_: any) => {\n this.isLoading = false;\n this.loadFinished.emit(false);\n }\n });\n }\n\n public refresh(): void {\n if (this.focusedRow) {\n this.clearFocusedRow();\n }\n this.clearLoadedRows();\n this.loadRows();\n }\n\n public removeKeys(keys: string[]): void {\n if (!this.hasLoadedRows) {\n return;\n }\n\n keys.forEach((key: string) => {\n if (this.focusedRow === key) {\n this.clearFocusedRow();\n }\n\n const indexToRemove: number = this._loadedKeys!.indexOf(key);\n\n if (indexToRemove >= 0) {\n // Need to set again the array values to trigger the change detection.\n this._loadedKeys = this._loadedKeys!.filter((_, index) => index !== indexToRemove);\n this._loadedRows = this._loadedRows!.filter((_, index) => index !== indexToRemove);\n }\n });\n }\n\n public setFilters(filters?: { [key: string ] : string }): void {\n this.queryFilters = filters;\n this.filtersChanged.emit(filters);\n this.refresh();\n }\n\n public setFocusedRow(key: string): void {\n this.focusedRow = key;\n }\n\n public updateRow(key: string, newRowData: any): void {\n if (!this.hasLoadedRows) {\n return;\n }\n\n const index: number = this._loadedKeys!.indexOf(key);\n if (index >= 0) {\n // Need to set the KEY_FIELD value into the new data, to make sure this information is not lost.\n newRowData[KEY_FIELD] = key;\n\n this._loadedRows![index] = newRowData;\n\n // Need to update loaded rows to force displayed rows to refresh.\n this.updateLoadedRows([]);\n }\n }\n //#endregion\n\n //#region Private methods\n protected clearLoadedRows(): void {\n this._hasBeenLoaded = false;\n this._loadedRows = undefined;\n this._loadedKeys = undefined;\n this.recordBlock = 0;\n this.loadedLastRow = false;\n this.totalRows = undefined;\n }\n\n protected updateLoadedRows(rows: any[]): void {\n // Assign individual key to each row.\n rows.forEach((row: any) => {\n row[KEY_FIELD] = GuidHelper.generateGUID();\n });\n\n this._loadedRows = [ ...this._loadedRows ?? [], ...rows];\n this._loadedKeys = [ ...this._loadedKeys ?? [], ...rows.map((row: any) => row[KEY_FIELD])];\n\n this.recordBlock += rows.length;\n if (rows.length < this.configsProvider.configs.recordBlockSize) {\n this.loadedLastRow = true;\n }\n }\n //#endregion\n\n //#region Abstract methods\n abstract getData(params?: any): Observable<any[] | { items: any[]; totalRows: number }>;\n //#endregion\n}\n","import { HttpResponse } from '@angular/common/http';\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { DataGridConfigs } from '../../models/configs/data-grid-configs';\nimport { IListParameters } from '../../models/data-grid-parameters';\nimport { IGridColumn } from '../../models/grid-column';\nimport { GridDataset } from './grid.dataset';\n\n@Injectable()\nexport abstract class DataGridDataset extends GridDataset {\n //#region ViewChilds, Inputs, Outputs\n public selectedRowsChanged: EventEmitter<{ [id: string]: { rowData: any; selected: boolean }}> = new EventEmitter<{ [id: string]: { rowData: any; selected: boolean }}>();\n //#endregion\n\n //#region Variables\n public columns!: IGridColumn[];\n public override configs: DataGridConfigs;\n public selectedRowKeys: string[] = [];\n //#endregion\n\n //#region Properties\n public get columnsSize(): string {\n const sizes: string[] = [];\n\n if (this.configs.multiSelect) {\n sizes.push(this.configs.multiSelectSize ?? 'minmax(1.5rem,min-content)');\n }\n\n sizes.push(...this.columns.map((col: IGridColumn) => col.size ?? 'minmax(0,1fr)'));\n\n return sizes.join(' ');\n }\n\n public get hasSelectedRows(): boolean {\n return this.selectedRowKeys.length > 0;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.configs = JSON.parse(JSON.stringify(this.configsProvider.configs));\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public clearSelection(): void {\n if (!this.hasLoadedRows || !this.hasSelectedRows) {\n return;\n }\n\n const selectedKeys: string[] = this.selectedRowKeys;\n\n this.selectedRowKeys = [];\n this.clearFocusedRow();\n this.selectedRowsChanged.emit(selectedKeys.reduce((keys: { [id: string]: { rowData: any; selected: boolean } }, key: string) => {\n keys[key] = {\n rowData: this.getRowData(key),\n selected: false\n };\n return keys;\n }, {}));\n }\n\n public export(_format: string, _parameters: IListParameters): Observable<HttpResponse<Blob>> {\n return throwError(() => new Error(`Export is not implemented for ${this.constructor.name}.`));\n }\n\n public deselectRow(key: string): void {\n if (!this.hasLoadedRows || !this.isKeySelected(key)) {\n return;\n }\n\n this.removeSelectedRow(key);\n\n this.selectedRowsChanged.emit({\n [key]: {\n rowData: this.getRowData(key),\n selected: false,\n }\n });\n }\n\n public deselectRowID(id: any): void {\n if (!this.hasLoadedRows) {\n return;\n }\n\n const index: number = this.loadedKeys!.map((key: string) => this.getRowID(key))\n .indexOf(id);\n\n const key: string = this.loadedKeys![index];\n this.deselectRow(key);\n }\n\n public getSelectedRowsData(): any[] {\n if (!this.hasLoadedRows || !this.hasSelectedRows) {\n return [];\n }\n\n return this.selectedRowKeys.map((key: string) => this.loadedKeys!.indexOf(key))\n .filter((index: number) => index >= 0)\n .map((index: number) => this.loadedRows![index]);\n }\n\n public isKeySelected(key: any): boolean {\n return this.selectedRowKeys.indexOf(key) >= 0;\n }\n\n public override refresh(): void {\n if (this.hasSelectedRows) {\n this.clearSelection();\n }\n super.refresh();\n }\n\n public override removeKeys(keys: string[]): void {\n if (!this.hasLoadedRows) {\n return;\n }\n\n if (this.hasSelectedRows) {\n keys.filter((key: string) => this.isKeySelected(key))\n .forEach((key: string) => {\n this.removeSelectedRow(key);\n });\n }\n\n super.removeKeys(keys);\n }\n\n public selectRow(key: string): void {\n if (!this.hasLoadedRows) {\n return;\n }\n\n if (!this.configs.multiSelect){\n if (this.isKeySelected(key)) {\n return;\n }\n // Clear current selected row.\n this.removeSelectedRow(this.selectedRowKeys[0]);\n }\n\n if (!this.isKeySelected(key)) {\n this.selectedRowKeys.push(key);\n this.selectedRowsChanged.emit({\n [key]: {\n rowData: this.getRowData(key),\n selected: true,\n }\n });\n }\n }\n\n public selectRowID(id: any): void {\n if (!this.hasLoadedRows) {\n return;\n }\n\n if (this.hasRowWithID(id)) {\n const rowIndex: number = this.loadedRows!.findIndex((row: any) => row[this.compareProperty] === id);\n \n if (rowIndex < 0) {\n return;\n }\n\n const key: string | undefined = this.loadedKeys![rowIndex];\n if (!!key) {\n this.selectRow(key);\n }\n }\n }\n\n public selectRows(keys: string[]): void {\n if (!this.hasLoadedRows || !this.configs.multiSelect) {\n return;\n }\n\n // Filter only the keys that are not selected yet.\n const keysNotSelected: string[] = keys.filter((key: string) => !this.isKeySelected(key));\n \n if (keysNotSelected.length > 0) {\n this.selectedRowKeys.push(...keysNotSelected);\n this.selectedRowsChanged.emit(keys.reduce((keys: { [id: string]: { rowData: any; selected: boolean } }, key: string) => {\n keys[key] = {\n rowData: this.getRowData(key),\n selected: true,\n };\n return keys;\n }, {}));\n }\n }\n\n public override setFocusedRow(key: any): void {\n super.setFocusedRow(key);\n\n if (!this.configs.multiSelect) {\n this.selectRow(key);\n } else if (this.configs.selectOnClick ?? true) {\n if (this.isKeySelected(key)) {\n this.deselectRow(key);\n } else {\n this.selectRow(key);\n }\n }\n }\n //#endregion\n\n //#region Private methods\n protected removeSelectedRow(key: string): void {\n const index: number = this.selectedRowKeys.indexOf(key);\n if (index >= 0) {\n this.selectedRowKeys.splice(index, 1);\n }\n }\n //#endregion\n}\n","import { EventEmitter, inject, Injectable } from '@angular/core';\nimport { Observable, tap } from 'rxjs';\nimport { IBatchUpdate } from '../../models/batch-update';\nimport { IMultiEditorChanges } from '../../models/multi-editor-changes';\nimport { BaseDataset } from './base.dataset';\nimport { DataGridDataset } from './data-grid.dataset';\n\n@Injectable()\nexport abstract class MultiEditorDataset extends BaseDataset {\n //#region ViewChilds, Inputs, Outputs\n public savedChanges: EventEmitter<void> = new EventEmitter();\n //#endregion\n\n //#region Variables\n protected readonly dataGridDataset: DataGridDataset;\n\n private fakeIDsGenerated: any[] = [];\n private modifiedValues: IMultiEditorChanges = {\n changed: {},\n removed: [],\n };\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataGridDataset = inject(DataGridDataset);\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public clearChangedValues(): void {\n this.fakeIDsGenerated = [];\n\n this.modifiedValues = {\n changed: {},\n removed: [],\n };\n }\n\n public removeValue(key: string) : void {\n if (this.modifiedValues.changed[key]) {\n delete this.modifiedValues.changed[key]; \n }\n\n const id: any = this.dataGridDataset.getRowID(key);\n this.dataGridDataset.removeKeys([key]);\n\n if (!id) {\n return;\n }\n\n if (this.fakeIDsGenerated.indexOf(id) < 0) {\n this.modifiedValues.removed.push(id);\n } else {\n this.fakeIDsGenerated.splice(this.fakeIDsGenerated.indexOf(id), 1);\n }\n }\n\n public saveChanges(): Observable<any> {\n const batchUpdate: IBatchUpdate<any,any> = {\n entitiesToInsertOrUpdate: Object.entries(this.modifiedValues.changed).map(([_, v]: [string, string]) => v),\n entitiesToDelete: this.modifiedValues.removed,\n };\n\n return this.saveData(batchUpdate)\n .pipe(tap(() => this.savedChanges.emit()));\n }\n\n public storeFakeIDGenerated(id: any): void {\n if (this.fakeIDsGenerated.indexOf(id) >= 0) {\n return;\n }\n\n this.fakeIDsGenerated.push(id);\n }\n\n public updateValues(key: string, newRowData: any): void {\n this.modifiedValues.changed[key] = newRowData;\n\n this.dataGridDataset.updateRow(key, newRowData);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n\n //#region Abstract methods\n public abstract newData(id: any): any;\n\n public abstract saveData(batchUpdate: IBatchUpdate<any,any>): Observable<any>;\n //#endregion\n}","import { EventEmitter, Injectable } from '@angular/core';\nimport { Observable, tap } from 'rxjs';\nimport { IMultiSelectorChanges } from '../../models/multi-selector-changes';\nimport { GridDataset } from './grid.dataset';\n\n@Injectable()\nexport abstract class MultiSelectResultDataset extends GridDataset {\n //#region ViewChilds, Inputs, Outputs\n public savedChanges: EventEmitter<void> = new EventEmitter();\n //#endregion\n\n //#region Variables\n public displayedIDs: any[] = [];\n public displayedRows: any[] = [];\n\n private _idsToAdd: any[] = [];\n private _idsToRemove: any[] = [];\n private addedRowData: any[] = [];\n //#endregion\n \n //#region Properties\n public get idsToAdd(): any[] {\n return this._idsToAdd;\n }\n\n public get idsToRemove(): any[] {\n return this._idsToRemove;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public override refresh(): void {\n this.clearSelection();\n super.refresh();\n }\n\n public saveChanges(): Observable<any> {\n const changes: IMultiSelectorChanges = {\n idsToAdd: this.idsToAdd,\n idsToRemove: this.idsToRemove,\n };\n\n return this.saveData(changes)\n .pipe(\n tap(() => {\n this.savedChanges.emit();\n this.clearSelection();\n this.clearLoadedRows();\n })\n );\n }\n\n public setIDToAdd(idToAdd: any, rowData: any): void {\n const index: number = this._idsToRemove.indexOf(idToAdd);\n if (index >= 0) {\n this._idsToRemove.splice(index, 1);\n } else if (!this.isExistingID(idToAdd)) {\n this._idsToAdd.push(idToAdd);\n this.addedRowData.push(rowData);\n }\n this.updateDisplayedRows();\n }\n\n public setIDToRemove(idToRemove: any): void {\n const index: number = this._idsToAdd.indexOf(idToRemove);\n if (index >= 0) {\n this._idsToAdd.splice(index, 1);\n this.addedRowData.splice(index, 1);\n } else if (this.isExistingID(idToRemove)) {\n this._idsToRemove.push(idToRemove);\n }\n this.updateDisplayedRows();\n }\n\n protected override updateLoadedRows(rows: any[]): void {\n super.updateLoadedRows(rows);\n this.updateDisplayedRows();\n }\n //#endregion\n\n //#region Private methods\n private clearSelection(): void {\n this._idsToAdd = [];\n this._idsToRemove = [];\n this.addedRowData = [];\n\n this.updateDisplayedRows();\n }\n\n private isExistingID(id: any): boolean {\n return (this.loadedKeys ?? [])\n .map((key: string) => this.getRowID(key))\n .indexOf(id) >= 0;\n }\n\n private updateDisplayedRows() {\n const loadedKeys: string[] = (this.loadedKeys ?? [])\n .filter((key: string) => this.idsToRemove.indexOf(this.getRowID(key)) < 0);\n \n this.displayedIDs = loadedKeys.map((key: string) => this.getRowID(key));\n this.displayedIDs.push(...this._idsToAdd);\n\n this.displayedRows = loadedKeys.map((key: string) => this.getRowData(key));\n this.displayedRows.push(...this.addedRowData);\n }\n //#endregion\n\n //#region Abstract methods\n protected abstract saveData(changedIds: IMultiSelectorChanges): Observable<any>;\n //#endregion\n}","import { EventEmitter, Injectable } from '@angular/core';\n\n@Injectable()\nexport class FormGroupService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n //#endregion\n \n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { HttpErrorResponse } from '@angular/common/http';\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable()\nexport class FormService {\n //#region ViewChilds, Inputs, Outputs\n public fieldRefreshed = new EventEmitter<{ fieldName: string; value?: any; loading?: boolean; }>();\n public modelRefreshed = new EventEmitter<any | null>;\n //#endregion\n\n //#region Variables\n private _loading: boolean = false;\n private _model: any | null = null;\n private currentMode: 'edit' | 'view' = 'view';\n private editCanceled$: Subject<void> = new Subject<void>();\n private form?: FormGroup;\n private initialValue?: any;\n //#endregion\n\n //#region Properties\n public get editCanceled(): Observable<void> {\n return this.editCanceled$.asObservable();\n }\n\n public get isEditMode(): boolean {\n return this.currentMode === 'edit';\n }\n\n public get isValid(): boolean {\n return this.form?.valid ?? false;\n }\n\n public get loading(): boolean {\n return this._loading;\n }\n\n public set loading(value: boolean) {\n if (this._loading !== value) {\n this._loading = value;\n if (value) {\n this.form?.disable();\n } else if (this.isEditMode) {\n this.form?.enable();\n }\n }\n }\n\n public get model(): any | null {\n return this._model;\n }\n\n public set model(value: any | null) {\n if (this._model !== value) {\n this._model = value;\n this.modelRefreshed.emit(value);\n }\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public beginEdit(): void {\n this.currentMode = 'edit';\n this.form?.enable();\n }\n\n public beginFieldLoading(fieldName: string) {\n this.fieldRefreshed.emit({\n fieldName,\n loading: true\n });\n }\n\n public cancelEdit(): void {\n this.currentMode = 'view';\n this.form?.disable();\n this.resetForm();\n this.editCanceled$.next();\n }\n\n public disableForm(): void {\n this.form?.disable();\n }\n\n public enableForm(): void {\n if (this.isEditMode) {\n this.form?.enable();\n }\n }\n\n public getModelFromForm(): any {\n return this.form?.getRawValue();\n }\n\n public initializeForm(form: FormGroup): void {\n this.form = form;\n this.initialValue = form.getRawValue();\n\n if (this.currentMode === 'view') {\n this.form.disable();\n }\n }\n\n public markAllAsTouched(): void {\n if (!this.form) {\n return;\n }\n\n this.form.markAllAsTouched();\n }\n\n public resetForm(): void {\n if (!this.form) {\n return;\n }\n\n this.form.reset();\n\n if (!!this.model) {\n this.form.patchValue(this.model);\n } else if (!!this.initialValue) {\n this.form.patchValue(this.initialValue);\n }\n\n this.form.updateValueAndValidity();\n }\n\n public setFieldValue(fieldName: string, value: any): void {\n this.fieldRefreshed.emit({\n fieldName,\n loading: false,\n value,\n });\n }\n\n public setValidationErrorsFromHttpResponse(errorResponse: HttpErrorResponse): void {\n if (!errorResponse || !this.form) {\n return;\n }\n\n // Error 400 = Validation issues\n if (errorResponse.status === 400 && errorResponse.error && errorResponse.error.errors) {\n const errors: { [id: string]: string[] } = <{ [id: string]: string[] }>errorResponse.error.errors;\n\n Object.keys(errors)\n .map((x: string) => { return { key: x, field: x.substring(0, 1).toLocaleLowerCase() + x.substring(1, x.length) }; })\n .forEach((err: { key: string; field: string }) => {\n setTimeout(() => {\n const field: FormControl = <FormControl>this.form!.get(err.field);\n field?.setErrors({ [errors[err.key][0]]: true });\n field?.markAsTouched();\n });\n });\n }\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","export abstract class RibbonGroupChild {\n abstract visible: boolean;\n}","\nimport { InjectionToken } from '@angular/core';\n\nexport const SIDEBAR_CONFIGS: InjectionToken<SidebarConfigs> = new InjectionToken<SidebarConfigs>('', {\n providedIn: 'root',\n factory: () => new SidebarConfigs(),\n});\n\nexport class SidebarConfigs {\n public errorText: string = 'Error';\n /** Tooltip for items that open in a new browser tab. Rendered as-is, like {@link errorText}. */\n public externalLinkText: string = 'Opens in a new browser tab';\n public loadingText: string = 'Loading';\n /**\n * Derive region headers from the menu tree instead of from {@link SidebarMenu.region}.\n *\n * With this on, a top-level menu that has children and no URL stops being a collapsible node\n * and becomes an area header, with its children rendered flat beneath it as top-level items --\n * icons included. The area is then a real menu row, so it carries its own translated label and\n * its own order, and no `region` label has to be repeated across every item that belongs to it.\n *\n * Off by default: without it a top-level parent stays the collapsible group it has always been.\n */\n public shouldDeriveAreasFromRootMenus: boolean = false;\n public logoCollapsedPath?: string;\n public logoExpandedPath?: string;\n\n constructor(options: Partial<SidebarConfigs> = {}) {\n Object.assign(this, options);\n }\n}","import { SidebarMenuOpenMode } from './sidebar-menu-open-mode';\n\nexport class SidebarMenu {\n public childCount: number = 0;\n public children: SidebarMenu[] = [];\n public height?: number;\n public icon?: string;\n public id: number = 0;\n public label: string = '';\n public isSelected: boolean = false;\n /**\n * How {@link url} is opened. An absent value means {@link SidebarMenuOpenMode.Internal}.\n *\n * Left optional and without an initializer on purpose: the constructor is an `Object.assign`,\n * which would overwrite a default with the `null` a nullable backend column serializes to.\n * Read it through `toSidebarMenuOpenMode(menu.openMode)` instead of comparing it directly.\n */\n public openMode?: SidebarMenuOpenMode;\n public parent: SidebarMenu | null = null;\n public region?: string;\n public url?: string;\n\n constructor(options: Partial<SidebarMenu> = {}) {\n Object.assign(this, options);\n }\n}\n","/**\n * How a {@link SidebarMenu}'s `url` is opened when the item is clicked.\n *\n * Read the value off a menu through {@link toSidebarMenuOpenMode} rather than comparing the\n * field directly: it crosses HTTP, so it can arrive as a string, as a number, as `null`, or not\n * at all.\n */\nexport enum SidebarMenuOpenMode {\n /** `url` is an internal Angular route and opens an application tab. The default. */\n Internal = 'internal',\n\n /** `url` is an absolute http(s) address and opens in a new browser tab. */\n ExternalNewTab = 'externalNewTab',\n\n /** `url` is an absolute http(s) address and opens embedded in an application tab. */\n ExternalEmbedded = 'externalEmbedded',\n}\n\n/** Ordinals matching the mode column stored by the backend, for a numeric payload. */\nconst ORDINAL_MODES: SidebarMenuOpenMode[] = [\n SidebarMenuOpenMode.Internal,\n SidebarMenuOpenMode.ExternalNewTab,\n SidebarMenuOpenMode.ExternalEmbedded,\n];\n\n/**\n * Parses the wire value of `SidebarMenu.openMode`.\n *\n * Deliberately a parser rather than a `?? Internal` fallback, because the field is deserialized\n * straight from each application's menu endpoint and its shape is not guaranteed:\n *\n * - a **number** is read as the backend's enum ordinal, which is what an ASP.NET Core enum\n * property serializes to unless that backend registers a string converter;\n * - a **string** is matched case-insensitively, so `'externalNewTab'` and `'ExternalNewTab'`\n * both work;\n * - anything else — an omitted field from a backend that predates this feature, `null`, or a\n * mode introduced by a newer one — degrades to {@link SidebarMenuOpenMode.Internal}.\n *\n * Degrading to `Internal` keeps an unrecognized mode behaving the way menus behaved before\n * external destinations existed, instead of producing an item that does nothing when clicked.\n */\nexport function toSidebarMenuOpenMode(value: unknown): SidebarMenuOpenMode {\n if (typeof value === 'number') {\n return ORDINAL_MODES[value] ?? SidebarMenuOpenMode.Internal;\n }\n\n if (typeof value === 'string') {\n const normalized: string = value.toLowerCase();\n\n return ORDINAL_MODES.find((mode: SidebarMenuOpenMode) => mode.toLowerCase() === normalized)\n ?? SidebarMenuOpenMode.Internal;\n }\n\n return SidebarMenuOpenMode.Internal;\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { map, Observable, take, tap } from 'rxjs';\nimport { ISidebarProfile, SidebarMenu, SidebarMenuOpenMode, toSidebarMenuOpenMode } from '../models';\nimport { HttpErrorResponse } from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root'\n})\nexport abstract class SidebarService {\n //#region ViewChilds, Inputs, Outputs\n public childrenFailed: EventEmitter<SidebarMenu> = new EventEmitter<SidebarMenu>();\n public childrenLoading: EventEmitter<SidebarMenu> = new EventEmitter<SidebarMenu>();\n public childrenInitialized: EventEmitter<SidebarMenu> = new EventEmitter<SidebarMenu>();\n public menuExternalUrlSelected: EventEmitter<SidebarMenu> = new EventEmitter<SidebarMenu>();\n public menuUrlSelected: EventEmitter<SidebarMenu> = new EventEmitter<SidebarMenu>();\n public selectionChanged: EventEmitter<SidebarMenu> = new EventEmitter<SidebarMenu>();\n //#endregion\n\n //#region Variables\n public isActive: boolean = false;\n public isCollapsed: boolean = false;\n public shouldActivate: boolean = false;\n\n private menus: SidebarMenu[] = [];\n private selectedMenu: SidebarMenu | null = null;\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Public methods\n public deselectAll(): void {\n this.menus\n .filter((menu: SidebarMenu) => menu.isSelected)\n .forEach((menu: SidebarMenu) => {\n this.deselectMenu(menu);\n });\n }\n\n public loadChildren(parentMenu: SidebarMenu): void {\n this.childrenLoading.emit(parentMenu);\n\n this.loadChildrenFor(parentMenu)\n .subscribe({\n error: (exception: HttpErrorResponse) => {\n this.childrenFailed.emit(parentMenu);\n throw exception;\n }\n });\n }\n\n /**\n * Loads a parent's children and hands them back, for callers that need them before the user\n * clicks -- a sidebar rendering areas flat has to have them up front. {@link loadChildren} is\n * the fire-and-forget variant that also raises the loading and failure events.\n */\n public loadChildrenFor(parentMenu: SidebarMenu): Observable<SidebarMenu[]> {\n return this.loadMenus(parentMenu)\n .pipe(\n take(1),\n map((menus: SidebarMenu[]) => menus.map((menu: SidebarMenu) => new SidebarMenu(menu))),\n tap((childrenMenus: SidebarMenu[]) => {\n parentMenu.children = childrenMenus;\n childrenMenus.forEach((childMenu: SidebarMenu) => childMenu.parent = parentMenu);\n }),\n );\n }\n\n public loadRoot(): Observable<SidebarMenu[]> {\n return this.loadMenus(null)\n .pipe(\n take(1),\n map((menus: SidebarMenu[]) => menus.map((menu: SidebarMenu) => new SidebarMenu(menu))),\n tap((menus: SidebarMenu[]) => this.menus = menus)\n );\n }\n \n public select(menu: SidebarMenu): void {\n if (menu.childCount > 0 && (menu.children?.length ?? 0) === 0) {\n this.loadChildren(menu);\n }\n\n const hasUrl: boolean = (menu.url?.length ?? 0) > 0;\n const openMode: SidebarMenuOpenMode = toSidebarMenuOpenMode(menu.openMode);\n const isExternal: boolean = hasUrl && openMode !== SidebarMenuOpenMode.Internal;\n\n // External destinations are announced on their own emitter, so a consumer that only knows\n // menuUrlSelected never receives an absolute URL it would hand to the Angular router.\n const urlSelected: EventEmitter<SidebarMenu> = isExternal ? this.menuExternalUrlSelected : this.menuUrlSelected;\n\n // Opening a new browser tab is an action, not a destination: the user stays on the view\n // already on screen, so the item must neither take the selection nor clear that view's.\n // Parents still fall through, so a parent that carries a URL keeps expanding instead of\n // becoming impossible to open.\n if (isExternal && openMode === SidebarMenuOpenMode.ExternalNewTab && menu.childCount === 0) {\n urlSelected.emit(menu);\n return;\n }\n\n // In case we're deselecting the menu because a child was selected, we need to keep track of the original selection state.\n const isSelected: boolean = menu.isSelected;\n\n if (!!this.selectedMenu && this.selectedMenu !== menu) {\n this.deselectAll();\n }\n\n if (!isSelected) {\n this.selectedMenu = menu;\n this.selectMenu(menu);\n\n if (hasUrl) {\n urlSelected.emit(menu);\n }\n\n } else if (hasUrl) {\n // Menu with a URL is already selected — navigate again instead of toggling off.\n urlSelected.emit(menu);\n } else {\n this.selectedMenu = null;\n this.deselectMenu(menu);\n }\n }\n //#endregion\n\n //#region Private methods\n private deselectMenu(menu: SidebarMenu, shouldUpdateParents: boolean = true): void {\n if (!menu.isSelected) {\n return;\n }\n\n menu.isSelected = false;\n this.selectionChanged.emit(menu);\n\n if ((menu.children?.length ?? 0) > 0) {\n menu.children\n .filter((child: SidebarMenu) => child.isSelected)\n .forEach((child: SidebarMenu) => {\n const shouldUpdateParents: boolean = false;\n this.deselectMenu(child, shouldUpdateParents);\n });\n }\n\n if (!!menu.parent && shouldUpdateParents) {\n while (!!menu.parent) {\n this.selectionChanged.emit(menu.parent);\n menu = menu.parent;\n }\n }\n }\n\n private selectMenu(menu: SidebarMenu): void {\n menu.isSelected = true;\n this.selectionChanged.emit(menu);\n\n if (!!menu.parent) {\n this.selectMenu(menu.parent);\n }\n }\n //#endregion\n\n //#region Abstract methods\n public abstract getMenuFromUrl(url: string): Observable<SidebarMenu>;\n\n public abstract getUserProfile(): ISidebarProfile | undefined;\n\n protected abstract loadMenus(parentMenuID: SidebarMenu | null): Observable<SidebarMenu[]>;\n //#endregion\n}","import { CommonModule, formatDate, NgIf, NgSwitch, NgSwitchCase } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { ControlContainer, FormControl, FormGroup, FormGroupDirective, FormGroupName, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { takeUntil } from 'rxjs';\nimport { FormService } from '../../services';\nimport { BaseComponent } from '../base.component';\n\n@Component({\n selector: 'lib-form-input',\n templateUrl: './form-input.component.html',\n styleUrls: ['./form-input.component.scss'],\n imports: [\n CommonModule,\n FormsModule,\n NgIf,\n NgSwitch,\n NgSwitchCase,\n ReactiveFormsModule,\n ],\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\n host: {\n '[class.full-height]': 'isFullHeight',\n // Clears a stray `type` attribute for the same reason as FormInputGroupComponent — see the\n // comment there. Applies when a consumer sets `type` on `lib-form-input` directly.\n '[attr.type]': 'null'\n }\n})\nexport class FormInputComponent extends BaseComponent implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() public autofocus: boolean = false;\n @Input() public controlName: string = '';\n @Input() public disabledControlName?: string;\n @Input() public displayReadOnlyAsDisabled: boolean = true;\n @Input() public fixedValue?: any;\n @Input() public format?: string;\n @Input() public invalid: boolean = false;\n @Input() public isDisabled: boolean = true;\n @Input() public isFullHeight: boolean = false;\n @Input() public maxLength?: number;\n @Input() public min?: number;\n @Input() public readOnly: boolean = false;\n @Input() public rows!: number;\n @Input() public step: number = 1;\n @Input() public type: string = 'text';\n\n @Output() public blur: EventEmitter<any> = new EventEmitter<any>();\n @Output() public change: EventEmitter<any> = new EventEmitter<any>();\n @Output() public fixedValueChanged: EventEmitter<any> = new EventEmitter<string>();\n @Output() public input: EventEmitter<any> = new EventEmitter<any>();\n @Output() public focus: EventEmitter<any> = new EventEmitter<any>();\n //#endregion\n\n //#region Host listeners\n //#endregion\n\n //#region Variables\n protected readonly formGroupDirective: FormGroupDirective = inject(FormGroupDirective);\n protected readonly formGroupName: FormGroupName = inject(FormGroupName, { optional: true })!;\n protected readonly formService: FormService = inject(FormService);\n //#endregion\n\n //#region Properties\n protected get formControl(): FormControl<any> | null {\n return this.controlName\n ? <FormControl>this.formGroup.get(this.controlName)\n : null;\n }\n\n protected get formControlName(): string {\n return [\n ...this.parentGroups,\n this.controlName,\n ].join('.');\n }\n\n protected get formGroup(): FormGroup {\n let formGroup: FormGroup = this.formGroupDirective.form;\n for (let group of this.parentGroups) {\n formGroup = <FormGroup>formGroup.get(group);\n }\n return formGroup;\n }\n\n protected get isFormControl(): boolean {\n return !!this.controlName && this.controlName.length > 0;\n }\n\n protected get isFormEditMode(): boolean {\n return this.formService.isEditMode;\n }\n\n protected get parentGroups(): string[] {\n return this.formGroupName?.path ?? [];\n }\n\n protected get stepAttributeValue(): number | null {\n if (this.type === 'number') {\n return this.step;\n }\n return null;\n }\n\n protected get minAttributeValue(): number | null {\n if (this.type === 'number') {\n return this.min ?? null;\n }\n return null;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n switch (this.type) {\n case 'number':\n if (!!this.formControl) {\n this.formControl.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe((value: any) => {\n if (value !== null && value === '') {\n this.formControl?.setValue(null);\n }\n });\n }\n break;\n\n case 'date':\n if (this.format === undefined) {\n this.format = 'yyyy-MM-dd';\n }\n\n if (!!this.formControl) {\n this.formControl.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe((value: any) => {\n if (value !== null) {\n try {\n if (value !== formatDate(value, 'yyyy-MM-dd', 'en')) {\n this.formControl?.setValue(formatDate(value, 'yyyy-MM-dd', 'en'), { emitEvent: false });\n }\n }\n catch {\n this.formControl?.setValue(null, { emitEvent: false });\n }\n }\n });\n }\n break;\n }\n }\n //#endregion\n\n //#region Event handlers\n protected onBlur(): void {\n this.blur.emit();\n }\n\n protected onChange(value: any): void {\n this.change.emit(value);\n }\n\n protected onFocus(): void {\n this.focus.emit();\n }\n\n protected onInput(): void {\n this.input.emit();\n }\n\n protected onValueChanged(newText: string): void {\n this.fixedValue = newText;\n this.fixedValueChanged.emit(this.fixedValue);\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<ng-container *ngIf=\"formGroupDirective.form?.enabled || isFormEditMode;else disabledControl\">\n <ng-container [ngSwitch]=\"type\">\n \n <textarea *ngSwitchCase=\"'textarea'\"\n [attr.autofocus]=\"autofocus ? true : null\"\n [attr.maxLength]=\"maxLength ?? null\"\n [attr.rows]=\"rows\"\n [class.invalid]=\"invalid\"\n [formControlName]=\"controlName\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n (input)=\"onInput()\">\n </textarea>\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <input *ngIf=\"isFormControl; else fixedCheckbox\"\n class=\"switch\"\n type=\"checkbox\"\n [attr.autofocus]=\"autofocus ? true : null\"\n [class.invalid]=\"invalid\"\n [formControlName]=\"controlName\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n (input)=\"onInput()\" />\n\n <ng-template #fixedCheckbox>\n <input\n class=\"switch\"\n type=\"checkbox\"\n [(ngModel)]=\"fixedValue\"\n [attr.readonly]=\"true\"\n [class.invalid]=\"invalid\"\n [class.readonly-as-disabled]=\"displayReadOnlyAsDisabled\"\n [disabled]=\"isDisabled\"\n [ngModelOptions]=\"{ standalone: true }\"\n (blur)=\"onBlur()\"\n (change)=\"onChange($event)\"\n (focus)=\"onFocus()\"\n (input)=\"onInput()\"\n (ngModelChange)=\"onValueChanged($event)\" />\n </ng-template>\n </ng-container>\n\n\n <ng-container *ngSwitchDefault>\n <input *ngIf=\"isFormControl; else fixedTextBox\"\n [attr.autofocus]=\"autofocus ? true : null\"\n [attr.maxLength]=\"maxLength ?? null\"\n [attr.min]=\"minAttributeValue\"\n [attr.readonly]=\"readOnly ? true : null\"\n [attr.step]=\"stepAttributeValue\"\n [class.invalid]=\"invalid\"\n [class.readonly-as-disabled]=\"displayReadOnlyAsDisabled\"\n [formControlName]=\"controlName\"\n [type]=\"type\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n (input)=\"onInput()\" />\n\n <ng-template #fixedTextBox>\n <input\n type=\"text\"\n [attr.maxLength]=\"maxLength ?? null\"\n [attr.min]=\"minAttributeValue\"\n [attr.readonly]=\"true\"\n [attr.step]=\"stepAttributeValue\"\n [class.invalid]=\"invalid\"\n [class.readonly-as-disabled]=\"displayReadOnlyAsDisabled\"\n [disabled]=\"isDisabled\"\n [ngModel]=\"type === 'date' || type === 'datetime-local' ? (fixedValue | date: format) : ( type === 'number' ? (fixedValue | number) : fixedValue )\" \n [ngModelOptions]=\"{ standalone: true }\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n (input)=\"onInput()\"\n (ngModelChange)=\"onValueChanged($event)\" />\n </ng-template>\n </ng-container>\n\n </ng-container>\n</ng-container>\n\n<ng-template #disabledControl>\n <ng-container [ngSwitch]=\"type\">\n <label *ngSwitchCase=\"'checkbox'\">\n <i [ngClass]=\"fixedValue ?? formGroupDirective.form.get(disabledControlName ?? controlName)?.value ? 'fa-solid fa-square-check' : 'fa-regular fa-square'\"></i>\n </label>\n\n <label *ngSwitchCase=\"'date'\">\n {{ fixedValue ?? formGroupDirective.form.get(disabledControlName ?? controlName)?.value | date: format }}\n </label>\n\n <label *ngSwitchCase=\"'datetime-local'\">\n {{ fixedValue ?? formGroupDirective.form.get(disabledControlName ?? controlName)?.value | date: format }}\n </label>\n\n <label *ngSwitchCase=\"'number'\">\n {{ fixedValue ?? formGroupDirective.form.get(disabledControlName ?? controlName)?.value | number: format }}\n </label>\n\n <label class=\"text\" *ngSwitchDefault>{{ fixedValue ?? formGroupDirective.form.get(disabledControlName ?? controlName)?.value }}</label>\n </ng-container>\n</ng-template>\n\n<ng-template #fixedTextbox let-fixedValue=\"fixedValue\">\n \n</ng-template>\n","import { KeyValuePipe, NgFor, NgIf, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { Component, inject, Input, OnInit, TemplateRef } from '@angular/core';\nimport { FormControl, FormGroup, FormGroupDirective, FormGroupName } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { filter, takeUntil } from 'rxjs';\nimport { FormService } from '../../services';\nimport { BaseComponent } from '../base.component';\nimport { FormInputComponent } from '../form-input/form-input.component';\n\n@Component({\n selector: 'lib-form-input-group',\n templateUrl: './form-input-group.component.html',\n styleUrls: ['./form-input-group.component.scss'],\n imports: [\n FormInputComponent,\n KeyValuePipe,\n NgFor,\n NgIf,\n NgStyle,\n NgTemplateOutlet,\n TranslatePipe,\n],\n host: {\n '[class.full-height]': 'isFullHeight',\n // Angular keeps static attributes in the DOM even when a directive consumes them as an\n // @Input(), so `type=\"checkbox\"` would linger on this host element — where\n // @tailwindcss/forms' tag-agnostic `[type=\"checkbox\"]` base rules style the host itself as\n // a checkbox (1px border, white fill, height:1rem). Clearing the attribute removes the\n // stray box for every type while leaving the `type` @Input() untouched.\n '[attr.type]': 'null'\n }\n})\nexport class FormInputGroupComponent extends BaseComponent implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() public autofocus: boolean = false;\n @Input() public alignContent: 'center' | 'end' | 'start' = 'center';\n @Input() public controlName!: string;\n @Input() public fixedValue?: any;\n @Input() public format?: string;\n @Input() public label!: string;\n @Input() public isDisabled: boolean = true;\n @Input() public isFullHeight: boolean = false;\n @Input() public maxLength?: number;\n @Input() public min?: number;\n @Input() public notes: string = '';\n @Input() public readOnly: boolean = false;\n @Input() public rows!: number;\n @Input() public showLabel: boolean = true;\n @Input() public step: number = 1;\n @Input() public template!: TemplateRef<any>;\n @Input() public type: string = 'text';\n @Input() public validations: { [id: string]: string; } = {};\n //#endregion\n\n //#region Host listeners\n //#endregion\n\n //#region Variables\n protected readonly formGroupDirective: FormGroupDirective = inject(FormGroupDirective);\n protected readonly formGroupName: FormGroupName = inject(FormGroupName, { optional: true })!;\n protected formService: FormService = inject(FormService);\n protected loadingField: boolean = false;\n //#endregion\n\n //#region Properties\n protected get formControl(): FormControl<any> | null {\n return this.controlName\n ? <FormControl>this.formGroup.get(this.controlName)\n : null;\n }\n\n protected get formGroup(): FormGroup {\n let formGroup: FormGroup = this.formGroupDirective.form;\n for (let group of this.parentGroups) {\n formGroup = <FormGroup>formGroup.get(group);\n }\n return formGroup;\n }\n\n protected get hasNotes(): boolean {\n return !!this.notes && this.notes.length > 0;\n }\n\n protected get parentGroups(): string[] {\n return this.formGroupName?.path ?? [];\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n this.formControl?.statusChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loadingField = false;\n });\n\n this.formControl?.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loadingField = false;\n });\n\n this.formService.fieldRefreshed\n .pipe(\n takeUntil(this.destroy$),\n filter((field: { fieldName?: string, value?: any, loading?: boolean }) => field.fieldName === this.controlName),\n )\n .subscribe((field: { fieldName?: string, value?: any, loading?: boolean }) => {\n this.loadingField = field.loading ?? false;\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n protected hasValidation(errorKey: string): boolean {\n return Object.keys(this.validations).indexOf(errorKey) >= 0;\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<label *ngIf=\"showLabel\"\n[attr.for]=\"controlName\">\n {{ label | translate }}:\n</label>\n\n<div class=\"field\"\n[class.col-span-2]=\"!showLabel\"\n[ngStyle]=\"{ 'align-content': alignContent }\" >\n <div class=\"loading\" *ngIf=\"(loadingField || (formService.loading && formService.model === null)); else content\">\n <div></div>\n </div>\n\n <ng-template #content>\n <ng-container *ngTemplateOutlet=\"template ? template : defaultTemplate\">\n </ng-container>\n \n <div class=\"validations\" [class.show]=\"formControl?.invalid\" *ngIf=\"formControl?.touched\">\n <ng-container *ngFor=\"let error of formControl?.errors | keyvalue\">\n <span *ngIf=\"hasValidation(error.key)\">{{ validations[error.key] | translate }}</span>\n <ng-template #defaultValidationError>{{ error.key }}</ng-template>\n </ng-container>\n </div>\n \n <ng-template #defaultTemplate>\n <lib-form-input #formInput\n [autofocus]=\"autofocus\"\n [controlName]=\"controlName\"\n [fixedValue]=\"fixedValue\"\n [format]=\"format\"\n [isDisabled]=\"isDisabled\"\n [isFullHeight]=\"isFullHeight\"\n [min]=\"min\"\n [maxLength]=\"maxLength\"\n [readOnly]=\"readOnly\"\n [rows]=\"rows\"\n [step]=\"step\"\n [type]=\"type\">\n </lib-form-input>\n </ng-template>\n \n <span class=\"text-sm italic\" *ngIf=\"hasNotes\">\n *{{ notes | translate }}\n </span>\n </ng-template>\n\n</div>\n","import { FlexibleConnectedPositionStrategy, Overlay, OverlayPositionBuilder, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { NgFor, NgIf } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, HostListener, inject, Input, KeyValueChanges, KeyValueDiffer, KeyValueDiffers, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { FormControl, FormGroup, FormGroupDirective, FormGroupName } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { debounceTime, forkJoin, Observable, of, pairwise, startWith, Subject, switchMap, take, takeUntil, tap } from 'rxjs';\nimport { DisplayControls } from '../../helpers';\nimport { ICatalogEntry, ICatalogResult } from '../../models';\nimport { CatalogService, DataGridDataset } from '../../services';\nimport { BaseComponent } from '../base.component';\nimport { FormInputGroupComponent } from '../form-input-group/form-input-group.component';\nimport { FormInputComponent } from '../form-input/form-input.component';\n\n@Component({\n selector: 'lib-catalog-select',\n templateUrl: './catalog-select.component.html',\n styleUrls: ['./catalog-select.component.scss'],\n imports: [\n FormInputComponent,\n FormInputGroupComponent,\n NgFor,\n NgIf,\n TranslatePipe,\n ]\n})\nexport class CatalogSelectComponent extends BaseComponent implements OnInit, AfterViewInit {\n //#region HostListeners\n @HostListener('body:mousedown', ['$event'])\n private bodyMouseDown(event: MouseEvent): void {\n const target: HTMLElement = <HTMLElement>event.target;\n if (this.isDropDownShown && !target.closest('.catalog-container.show')) {\n this.wasClickedOutside = (event.button === 0 && !target.closest('.dropdown-container')) ?? false;\n }\n }\n\n @HostListener('body:mouseup', ['$event'])\n private bodyMouseUp(event: MouseEvent): void {\n if (this.isDropDownShown && this.wasClickedOutside) {\n this.closeDropdownOverlay();\n this.wasClickedOutside = false;\n }\n }\n //#endregion\n\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('dropdownTemplate', { read: TemplateRef }) private dropdownTemplate!: TemplateRef<any>;\n @ViewChild('input', { read: ElementRef }) private inputElement!: ElementRef<HTMLDivElement>;\n \n @Input() public autofocus: boolean = false;\n @Input() public controlName!: string;\n @Input() public displayControlName!: string;\n @Input() public displayProperty: string = 'display';\n @Input() public set entriesList(value: any[] | { key: number; value: Observable<any> | string }[] | null | undefined) {\n if (this._entriesList !== value) {\n this._entriesList = value;\n if (this.isSubscriptionInitialized) {\n this.entriesDataSource = [];\n this.initializeEntriesDataSource();\n this.refreshSearch();\n }\n }\n }\n @Input() public set filters(value: { [id: string]: any; }) {\n if (this._filters !== value) {\n this._filters = value;\n this.updateFilters();\n }\n }\n @Input() public label!: string;\n @Input() public maxEntries: number = 100;\n @Input() public minimumLengthSearch: number = 3;\n @Input() public notes: string = '';\n @Input() public readOnly: boolean = false;\n @Input() public searchEndpoint?: string;\n @Input() public validations: { [id: string]: string; } = {};\n @Input() public valueProperty: string = 'value';\n //#endregion\n \n //#region Variables\n protected displayedEntries: ICatalogEntry[] = [];\n protected focusedIndex: number = -1;\n protected isDropDownShown: boolean = false;\n protected isFocused: boolean = false;\n protected isLoading: boolean = false;\n protected selectedValue: any;\n protected shouldUseCriteria: boolean = false;\n protected showFailureMessage: boolean = false;\n protected showMinimumCharactersMessage: boolean = false;\n protected showNoResultsMessage: boolean = false;\n\n private static instanceCounter: number = 0;\n private _entriesList?: any[] | { key: number; value: Observable<any> | string }[] | null;\n private _filters: { [id: string]: any; } = {};\n private catalogService: CatalogService = inject(CatalogService);\n private dataGridDataset: DataGridDataset = inject(DataGridDataset, { optional: true })!;\n private entriesDataSource: ICatalogEntry[] = [];\n private filterDiffer?: KeyValueDiffer<string, any>;\n private readonly formGroup: FormGroupDirective = inject(FormGroupDirective);\n private readonly formGroupName: FormGroupName = inject(FormGroupName, { optional: true })!;\n private instanceId: number;\n private isDataInitialized: boolean = false;\n private isSubscriptionInitialized: boolean = false;\n private keyValueDiffers: KeyValueDiffers = inject(KeyValueDiffers);\n private lastCriteriaUsed: string | null = null;\n private overlay: Overlay = inject(Overlay);\n private overlayRef?: OverlayRef;\n private positionBuilder: OverlayPositionBuilder = inject(OverlayPositionBuilder);\n private searchSubject: Subject<string | null> = new Subject<string | null>();\n private viewContainerRef: ViewContainerRef = inject(ViewContainerRef);\n private wasClickedOutside: boolean = false;\n //#endregion\n\n //#region Properties\n public get entriesList(): any[] | { key: number; value: Observable<any> | string }[] | null | undefined {\n return this._entriesList;\n }\n\n public get filters(): { [id: string]: any; } | undefined {\n return this._filters;\n }\n\n protected get activeDescendantId(): string | null {\n if (this.focusedIndex >= 0 && this.focusedIndex < this.displayedEntries.length) {\n return `catalog-select-${this.instanceId}-option-${this.focusedIndex}`;\n }\n return null;\n }\n\n protected get displayControl(): FormControl {\n return <FormControl>this.formGroup.form.get(this.formDisplayControlName);\n }\n\n protected get formControl(): FormControl {\n return <FormControl>this.formGroup.form.get(this.formControlName);\n }\n\n protected get formControlName(): string {\n return [\n ...this.formGroupName?.path ?? [],\n this.controlName\n ].join('.');\n }\n\n protected get formDisplayControlName(): string {\n return [\n ...this.formGroupName?.path ?? [],\n this.displayControlName\n ].join('.');\n }\n\n protected get isInvalid(): boolean {\n return this.formControl.invalid;\n }\n\n protected get isTouched(): boolean {\n return this.formControl.touched;\n }\n\n protected get listboxId(): string {\n return `catalog-select-${this.instanceId}-listbox`;\n }\n\n protected get showClearButton(): boolean {\n return this.selectedValue != null && !this.readOnly && (this.formControl?.enabled ?? false);\n }\n\n private get hasSearchEndpoint(): boolean {\n return !!this.searchEndpoint && this.searchEndpoint.length > 0;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n this.instanceId = CatalogSelectComponent.instanceCounter++;\n }\n\n public ngAfterViewInit(): void {\n this.setInputAriaAttributes();\n }\n\n public override ngOnDestroy(): void {\n this.closeDropdownOverlay();\n super.ngOnDestroy();\n }\n\n public ngOnInit(): void {\n // Check and add the display control, if it does not exist.\n const wasFormDisabled: boolean = this.formGroup.form.disabled;\n this.checkAndAddDisplayControl();\n if (wasFormDisabled) {\n this.formGroup.form.disable();\n }\n\n // Initialize the entries data source from the entries list, if provided.\n this.initializeEntriesDataSource();\n\n // Initialize the search functionality.\n this.initializeSearch();\n\n // Subscribe to changes in the display control to apply search criteria.\n this.displayControl?.valueChanges\n .pipe(\n takeUntil(this.destroy$),\n tap(() => {\n if (!this.isFocused) {\n return;\n }\n this.isLoading = true;\n this.resetMessages();\n }),\n debounceTime(500),\n startWith(null),\n pairwise(),\n )\n .subscribe(([ previous, current ]: string[]) => {\n if (!this.isFocused || previous === current) {\n this.isLoading = false;\n return;\n }\n this.applySearchCriteria(current);\n });\n\n this.filterDiffer = this.keyValueDiffers.find(this._filters).create();\n\n // Subscribe to changes in the form control to update the selected value and display control states.\n this.syncFormControlsEnabledDisabled();\n\n this.formControl?.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe((value: any) => {\n this.syncFormControlsEnabledDisabled();\n\n if (!this.shouldRefreshDisplay(value)) {\n return;\n }\n\n this.selectedValue = value;\n if (this.hasSearchEndpoint) {\n if (!value) {\n this.displayControl?.reset(null, { emitEvent: false });\n }\n } else {\n this.displayControl?.setValue(this.resolveDisplay(value), { emitEvent: false });\n }\n });\n\n // Initial sync: if the form control already has a value (e.g., the model was loaded\n // before this component initialized), sync the display control immediately.\n this.syncDisplayFromCurrentValue();\n }\n //#endregion\n\n //#region Event handlers\n protected onContainerBlur(): void {\n this.isFocused = false;\n }\n\n protected onContainerClick(): void {\n if ((!this.isDropDownShown || this.readOnly)\n && (this.formGroup.form?.enabled ?? false)\n && (this.formGroup.form?.get(this.formControlName)?.enabled ?? false)\n ) {\n this.openDropdownOverlay();\n }\n }\n\n protected onContainerFocus(): void {\n this.isFocused = true;\n if (!this.isDropDownShown && !this.readOnly\n && (this.formGroup.form?.enabled ?? false)\n && (this.formGroup.form?.get(this.formControlName)?.enabled ?? false)\n ) {\n this.openDropdownOverlay();\n }\n }\n\n protected onClearClick(event: MouseEvent): void {\n event.stopPropagation();\n\n if (this.formControl) {\n this.formControl.setValue(null);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n }\n\n if (this.displayControl) {\n this.displayControl.setValue('', { emitEvent: false });\n this.displayControl.markAsDirty();\n this.displayControl.markAsTouched();\n }\n\n this.selectedValue = null;\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isDropDownShown) {\n this.openDropdownOverlay();\n }\n if (this.displayedEntries.length > 0) {\n this.focusedIndex = Math.min(this.focusedIndex + 1, this.displayedEntries.length - 1);\n this.scrollFocusedItemIntoView();\n }\n this.updateInputAriaActiveDescendant();\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (this.isDropDownShown && this.displayedEntries.length > 0) {\n this.focusedIndex = Math.max(this.focusedIndex - 1, 0);\n this.scrollFocusedItemIntoView();\n }\n this.updateInputAriaActiveDescendant();\n break;\n\n case 'Enter':\n event.preventDefault();\n if (this.isDropDownShown && this.focusedIndex >= 0 && this.focusedIndex < this.displayedEntries.length) {\n this.onDropDownItemClick(this.displayedEntries[this.focusedIndex]);\n }\n break;\n\n case 'Escape':\n if (this.isDropDownShown) {\n event.preventDefault();\n this.closeDropdownOverlay();\n }\n break;\n\n case 'Tab':\n if (this.isDropDownShown) {\n this.closeDropdownOverlay();\n }\n break;\n }\n }\n\n protected onDropDownErrorClick(): void {\n this.refreshSearch();\n }\n\n protected onDropDownItemClick(entry: ICatalogEntry): void {\n if (this.displayControl) {\n this.displayControl.markAsDirty();\n this.displayControl.markAllAsTouched();\n this.displayControl.setValue(entry.display, { emitEvent: false });\n }\n\n if (this.formControl) {\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n this.formControl.setValue(entry.value);\n }\n\n this.closeDropdownOverlay();\n }\n\n protected onDropDownMessageClick(): void {\n this.closeDropdownOverlay();\n }\n //#endregion\n\n //#region Public methods\n protected getOptionId(index: number): string {\n return `catalog-select-${this.instanceId}-option-${index}`;\n }\n //#endregion\n\n //#region Private methods\n private applySearchCriteria(criteria: string | null): void {\n this.isLoading = true;\n this.resetMessages();\n\n this.searchSubject.next(criteria);\n }\n\n private checkAndAddDisplayControl(): void {\n let parent: FormGroup = this.formGroup.form;\n const controlNames: string[] = this.formDisplayControlName.split('.');\n\n controlNames.forEach((name, index) => {\n if (index < controlNames.length - 1) {\n parent = <FormGroup>parent.get(name);\n } else {\n if (!parent.get(name)) {\n parent.addControl(name, new FormControl(''));\n }\n\n // Marked whether this component created it or the screen declared it: what makes a control\n // a display control is being driven as one, not who wrote it down. A filters form reads the\n // mark to keep it out of what it submits.\n DisplayControls.markAsDisplayControl(parent.get(name));\n }\n });\n }\n\n private closeDropdownOverlay(): void {\n this.isDropDownShown = false;\n this.focusedIndex = -1;\n this.updateInputAriaActiveDescendant();\n if (this.overlayRef) {\n this.overlayRef.detach();\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n }\n }\n\n private initializeEntriesDataSource(): void {\n if (this.hasSearchEndpoint || !this._entriesList || this._entriesList.length === 0) {\n return;\n }\n\n const observables: Observable<string>[] = [];\n\n this._entriesList.forEach((entry: any | { key: number, value: Observable<any> }) => {\n const value: number = entry[this.valueProperty];\n const display: string | Observable<any> = entry[this.displayProperty];\n\n if (display instanceof Observable) {\n this.entriesDataSource.push({ value: value, display: 'Loading...' });\n \n observables.push(display\n .pipe(\n take(1),\n tap(v => {\n this.entriesDataSource.filter(x => x.value === value)[0].display = v;\n if (this.selectedValue === value) {\n this.displayControl.setValue(v);\n }\n })\n )\n );\n } else {\n this.entriesDataSource.push({ value, display });\n }\n });\n\n forkJoin(observables)\n .pipe(take(1))\n .subscribe(() => {\n });\n }\n\n private initializeSearch(): void {\n this.searchSubject\n .pipe(\n takeUntil(this.destroy$),\n switchMap((criteria: string | null) => {\n this.lastCriteriaUsed = criteria;\n\n if (!this.hasSearchEndpoint) {\n if (this.entriesDataSource.length === 0) {\n return of(null).pipe(take(1));\n }\n return of(this.entriesDataSource.filter((entry: ICatalogEntry) => entry.display.toLowerCase().indexOf(criteria?.toLowerCase() ?? '') > -1)).pipe(take(1));\n }\n\n this.updateMinimumCharactersMessageVisibility(criteria ?? '');\n if (this.showMinimumCharactersMessage) {\n return of(null).pipe(take(1));\n }\n\n return this.catalogService.search(this.searchEndpoint!, this.maxEntries, criteria ?? '', this.filters)\n .pipe(take(1));\n }),\n ).subscribe({\n next: (result: ICatalogResult | any[] | null | undefined) => {\n this.isLoading = false;\n this.displayedEntries = [];\n\n if (Array.isArray(result) && result.length > 0) {\n this.displayedEntries = result;\n\n } else if (result?.entries && Array.isArray(result.entries)) {\n const catalogResult: ICatalogResult = result as ICatalogResult;\n if (!catalogResult) {\n return;\n }\n\n this.displayedEntries = catalogResult.entries;\n\n if (!this.isDataInitialized) {\n // The shouldUseCriteria is only set from the initialization.\n this.isDataInitialized = true;\n this.shouldUseCriteria = catalogResult.shouldUseCriteria ?? false;\n this.showMinimumCharactersMessage = this.displayedEntries.length === 0;\n }\n }\n\n // Try to filter out already loaded rows from the data grid dataset.\n if (this.displayedEntries.length > 0 && this.dataGridDataset) {\n this.displayedEntries = this.tryFilterFromDataset(this.displayedEntries);\n }\n \n if (!this.showMinimumCharactersMessage && this.displayedEntries.length === 0) {\n this.showNoResultsMessage = true;\n }\n },\n error: (_: any) => {\n this.isLoading = false;\n this.displayedEntries = [];\n this.showFailureMessage = true;\n\n // Set a new subscription to allow retrying the search later.\n this.initializeSearch();\n }\n });\n\n if (!this.isSubscriptionInitialized) {\n this.isSubscriptionInitialized = true;\n this.applySearchCriteria(null);\n }\n }\n\n private openDropdownOverlay(): void {\n // Defensive cleanup of any stale overlay before creating a new one.\n if (this.overlayRef) {\n this.overlayRef.detach();\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n }\n\n const positionStrategy: FlexibleConnectedPositionStrategy = this.positionBuilder\n .flexibleConnectedTo(this.inputElement)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n }\n ]);\n \n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: false,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n });\n\n // Set overlay width to match input field\n const inputRect: DOMRect = this.inputElement.nativeElement.getBoundingClientRect();\n this.overlayRef.updateSize({ width: inputRect.width });\n\n const portal: TemplatePortal = new TemplatePortal(this.dropdownTemplate, this.viewContainerRef);\n this.overlayRef.attach(portal);\n this.isDropDownShown = true;\n this.focusedIndex = this.selectedValue != null\n ? this.displayedEntries.findIndex((entry: ICatalogEntry) => entry.value === this.selectedValue)\n : -1;\n this.updateInputAriaActiveDescendant();\n\n // Re-evaluate minimum characters message visibility when opening the dropdown,\n // in case it was incorrectly reset by a programmatic value change.\n if (this.shouldUseCriteria && !this.isLoading) {\n this.updateMinimumCharactersMessageVisibility(this.displayControl?.value ?? '');\n }\n\n // Scroll the selected item into view after the overlay renders.\n if (this.focusedIndex >= 0) {\n requestAnimationFrame(() => this.scrollFocusedItemIntoView());\n }\n }\n\n private refreshSearch(reInitialize: boolean = false): void {\n if (reInitialize) {\n this.isDataInitialized = false;\n }\n\n this.applySearchCriteria(this.lastCriteriaUsed);\n }\n\n private resetMessages(): void {\n this.showFailureMessage = false;\n this.showNoResultsMessage = false;\n this.showMinimumCharactersMessage = false;\n }\n\n private resolveDisplay(value: any): string {\n return this.entriesDataSource.filter((entry: ICatalogEntry) => entry.value === value)[0]?.display ?? '';\n }\n\n private syncDisplayFromCurrentValue(): void {\n const currentValue: any = this.formControl?.value;\n if (currentValue == null || !this.shouldRefreshDisplay(currentValue)) {\n return;\n }\n\n this.selectedValue = currentValue;\n if (!this.hasSearchEndpoint) {\n this.displayControl?.setValue(this.resolveDisplay(currentValue), { emitEvent: false });\n }\n }\n\n /**\n * Decides whether the display control has to be written again.\n *\n * The value on its own is not enough. Resetting a form clears the display control and then\n * patches the same value back, so an unchanged value can still leave the display empty. That\n * only happens when the stored value equals the control's initial value, which is why it used\n * to show up on the default entry alone.\n */\n private shouldRefreshDisplay(value: any): boolean {\n if (this.selectedValue !== value) {\n return true;\n }\n\n if (this.hasSearchEndpoint) {\n return false;\n }\n\n const display: string = this.resolveDisplay(value);\n return display.length > 0 && this.displayControl?.value !== display;\n }\n\n private syncFormControlsEnabledDisabled(): void {\n if (this.formControl.enabled !== this.displayControl.enabled) {\n if (this.formControl.disabled) {\n this.displayControl.disable({ emitEvent: false });\n } else {\n this.displayControl.enable({ emitEvent: false });\n }\n }\n }\n\n private tryFilterFromDataset(results: ICatalogEntry[]): ICatalogEntry[] {\n if (this.dataGridDataset\n && this.controlName === this.dataGridDataset?.keyProperty\n && this.dataGridDataset.hasLoadedRows\n ) {\n // If the control name is matching the ID property of the data grid dataset, filter out the loaded rows to remove duplicated IDs.\n const loadedIDs: any[] = this.dataGridDataset.loadedKeys!.map((key: string) => this.dataGridDataset.getRowID(key));\n return results.filter((result: ICatalogEntry) => loadedIDs.indexOf(result.value) < 0);\n }\n return results;\n }\n\n private updateFilters(): void {\n if (!this.filterDiffer || !this.filters) {\n return;\n }\n\n const changes: KeyValueChanges<string ,any> | null = this.filterDiffer.diff(this.filters);\n if (changes) {\n const reInitialize: boolean = true;\n this.refreshSearch(reInitialize);\n }\n }\n\n private updateMinimumCharactersMessageVisibility(criteria: string): void {\n this.showMinimumCharactersMessage =\n this.shouldUseCriteria\n && this.minimumLengthSearch > 0\n && (criteria?.length ?? 0) < this.minimumLengthSearch;\n }\n\n private getNativeInput(): HTMLInputElement | null {\n return this.inputElement?.nativeElement?.querySelector('input') ?? null;\n }\n\n private scrollFocusedItemIntoView(): void {\n if (!this.overlayRef || this.focusedIndex < 0) {\n return;\n }\n const optionId: string = this.getOptionId(this.focusedIndex);\n const element: HTMLElement | null = this.overlayRef.overlayElement.querySelector('#' + optionId);\n if (element) {\n element.scrollIntoView({ block: 'nearest' });\n }\n }\n\n private setInputAriaAttributes(): void {\n const input: HTMLInputElement | null = this.getNativeInput();\n if (!input) {\n return;\n }\n input.setAttribute('role', 'combobox');\n input.setAttribute('aria-autocomplete', 'list');\n input.setAttribute('aria-expanded', String(this.isDropDownShown));\n input.setAttribute('aria-haspopup', 'listbox');\n input.setAttribute('aria-owns', this.listboxId);\n }\n\n private updateInputAriaActiveDescendant(): void {\n const input: HTMLInputElement | null = this.getNativeInput();\n if (!input) {\n return;\n }\n input.setAttribute('aria-expanded', String(this.isDropDownShown));\n const descendantId: string | null = this.activeDescendantId;\n if (descendantId) {\n input.setAttribute('aria-activedescendant', descendantId);\n } else {\n input.removeAttribute('aria-activedescendant');\n }\n }\n //#endregion\n}\n","<lib-form-input-group\n[controlName]=\"controlName\"\n[label]=\"label\"\n[notes]=\"notes\"\n[template]=\"template\"\n[validations]=\"validations\">\n</lib-form-input-group>\n\n<ng-template #template>\n <div class=\"catalog-container\"\n [class.show]=\"isDropDownShown\">\n <lib-form-input #input\n [class.fixed-content]=\"readOnly && !shouldUseCriteria\"\n [autofocus]=\"autofocus\"\n [controlName]=\"displayControlName\"\n [invalid]=\"isInvalid && isTouched\"\n [readOnly]=\"readOnly\"\n (blur)=\"onContainerBlur()\"\n (click)=\"onContainerClick()\"\n (focus)=\"onContainerFocus()\"\n (keydown)=\"onKeyDown($event)\">\n </lib-form-input>\n <button *ngIf=\"showClearButton\"\n class=\"clear-button\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"onClearClick($event)\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n</ng-template>\n\n<ng-template #dropdownTemplate>\n <div class=\"dropdown-container\">\n <ul class=\"dropdown\"\n role=\"listbox\"\n [attr.id]=\"listboxId\">\n <li *ngIf=\"isLoading\"\n (click)=\"onDropDownMessageClick()\">\n {{ 'CatalogSelect-Loading' | translate }}\n </li>\n\n <li *ngIf=\"shouldUseCriteria && showMinimumCharactersMessage\"\n title=\"{{ 'CatalogSelect-MinimumLengthSearch' | translate: { minimumLengthSearch: minimumLengthSearch } }}\"\n (click)=\"onDropDownMessageClick()\">\n {{ 'CatalogSelect-MinimumLengthSearch' | translate: { minimumLengthSearch: minimumLengthSearch } }}\n </li>\n\n <li *ngIf=\"showNoResultsMessage\"\n title=\"{{ 'CatalogSelect-NoResultsFound' | translate }}\"\n (click)=\"onDropDownMessageClick()\">\n {{ 'CatalogSelect-NoResultsFound' | translate }}\n </li>\n\n <li *ngIf=\"showFailureMessage\"\n class=\"error\"\n title=\"{{ 'CatalogSelect-FailureMessage' | translate }}\"\n (click)=\"onDropDownErrorClick()\">\n {{ 'CatalogSelect-FailureMessage' | translate }}\n </li>\n\n <li class=\"dropdown-item\" *ngFor=\"let entry of displayedEntries; let i = index\"\n role=\"option\"\n [attr.id]=\"getOptionId(i)\"\n [attr.aria-selected]=\"selectedValue === entry.value\"\n [class.focused]=\"focusedIndex === i\"\n [class.selected]=\"selectedValue === entry.value\"\n (click)=\"onDropDownItemClick(entry)\">\n {{ entry.display }}\n </li>\n </ul>\n </div>\n</ng-template>","import { NgClass, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, inject, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgxResizeObserverModule } from 'ngx-resize-observer';\nimport { takeUntil } from 'rxjs';\nimport { IGridColumn } from '../../models';\nimport { DataGridDataset } from '../../services/datasets/data-grid.dataset';\nimport { BaseComponent } from '../base.component';\n\n@Component({\n selector: 'lib-data-grid-row',\n templateUrl: './data-grid-row.component.html',\n host: {\n '[class.focused]': 'dataGridDataset.focusedRow === rowData',\n '[class.selected]': 'dataGridDataset.isKeySelected(rowKey)',\n },\n styleUrls: ['./data-grid-row.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n NgClass,\n NgIf,\n NgFor,\n NgTemplateOutlet,\n NgxResizeObserverModule,\n ]\n})\nexport class DataGridRowComponent extends BaseComponent implements OnInit { \n //#region ViewChilds, Inputs, Outputs\n @Input() public disabled: boolean = false;\n @Input() public isFirstRow: boolean = false;\n @Input() public set rowData(value: any) {\n this._rowData = value;\n this.refreshSelection();\n }\n\n @Output() public selectionResized: EventEmitter<number> = new EventEmitter<number>();\n //#endregion\n\n //#region Host listeners\n @HostListener('click')\n public setFocus(): void {\n if (!this.disabled) {\n this.dataGridDataset.setFocusedRow(this.rowKey);\n \n if (this.dataGridDataset.configs.multiSelect && (this.dataGridDataset.configs.selectOnClick ?? true)) {\n this.selected = this.isRowDataSelected;\n }\n }\n }\n //#endregion\n\n //#region Variables\n protected changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n protected dataGridDataset: DataGridDataset = inject(DataGridDataset);\n protected selected: boolean = false;\n\n private _rowData!: any;\n private elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n //#endregion\n\n //#region Properties\n public get rowData(): any {\n return this._rowData;\n }\n\n protected get columns(): IGridColumn[] {\n return this.dataGridDataset.columns;\n }\n\n private get isLaidOut(): boolean {\n return (this.elementRef.nativeElement?.getBoundingClientRect().width ?? 0) > 0;\n }\n\n private get isRowDataSelected(): boolean {\n return this.dataGridDataset.isKeySelected(this.rowKey)\n }\n\n private get rowKey(): string {\n return this.dataGridDataset.getRowInternalKey(this.rowData);\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n this.selected = this.isRowDataSelected;\n\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe((selectionChanges: { [id:string]: { rowData: any; selected: boolean } }) => {\n if (this.rowKey in selectionChanges) {\n this.selected = selectionChanges[this.rowKey].selected;\n this.changeDetectorRef.detectChanges();\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onResize(colIndex: number, event: ResizeObserverEntry): void {\n const width: number = event.contentRect.width;\n\n // A zero means one of two very different things. Before the grid is laid out every column\n // reports zero, and taking that at face value would pin every heading at zero. Once the row\n // itself has a width the layout is live, and a zero is then the real thing: a 1fr column\n // collapsed for want of room, whose heading has to collapse with it or every column to its\n // right sits under the wrong one. Asking the row -- rather than remembering whether this\n // column once measured something -- also covers a column that is born collapsed and never\n // measures anything else.\n if (width <= 0 && !this.isLaidOut) {\n return;\n }\n\n // Reported on every change, not just the first. The body lays the columns out as a CSS grid of\n // minmax(x, min-content), so a column is only as wide as the content currently rendered --\n // which virtual scrolling keeps changing. Measuring once and latching left the header copying\n // a width the body no longer had, and with many columns that drift accumulated into cells\n // sitting under the wrong heading.\n if (this.columns[colIndex].realSize !== width) {\n this.columns[colIndex].realSize = width;\n }\n }\n\n protected onResizeSelection(event: ResizeObserverEntry): void {\n const width: number = event.contentRect.width;\n this.selectionResized.emit(width);\n }\n\n protected onToggleSelection(): void {\n if (this.disabled || (this.dataGridDataset.configs.multiSelect && (this.dataGridDataset.configs.selectOnClick ?? true))) {\n return;\n }\n \n this.selected = !this.selected;\n\n if (this.selected) {\n this.dataGridDataset.selectRow(this.rowKey);\n } else {\n this.dataGridDataset.deselectRow(this.rowKey);\n }\n }\n //#endregion\n\n //#region Public methods\n protected getValue(field: string): any {\n return field.split('.').reduce((value: any, field: string) => value[field], this.rowData);\n }\n //#endregion\n\n //#region Private methods\n private refreshSelection(): void {\n this.selected = this.isRowDataSelected;\n }\n //#endregion\n}\n","<div *ngIf=\"dataGridDataset.configs.multiSelect\"\nclass=\"cell selection\"\n(click)=\"onToggleSelection()\"\n(onResize)=\"onResizeSelection($event)\">\n <input class=\"form-input\"\n type=\"checkbox\"\n [attr.disabled]=\"disabled\"\n [(ngModel)]=\"selected\" />\n</div> \n\n<div #cell\n*ngFor=\"let column of columns; index as i\"\nclass=\"cell\"\n[class.disabled]=\"disabled\"\n[ngClass]=\"column.customClass\">\n <div *ngIf=\"isFirstRow\"\n class=\"spacer\"\n (onResize)=\"onResize(i, $event)\"></div>\n\n <ng-container *ngTemplateOutlet=\"column.template ? column.template : simpleTemplate; context: { rowData: rowData, column: column }\">\n </ng-container>\n</div>\n\n<ng-template #simpleTemplate let-rowData=\"rowData\" let-column=\"column\">\n <span>{{ getValue(column.field) }}</span>\n</ng-template>","import { ListRange } from '@angular/cdk/collections';\nimport { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, inject, Input, NgZone, OnInit, ViewChild } from '@angular/core';\nimport { NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { debounceTime, filter, fromEvent, Subject, takeUntil } from 'rxjs';\nimport { IGridColumn } from '../../models';\nimport { DataGridConfigs } from '../../models/configs';\nimport { DataGridDataset } from '../../services';\nimport { BaseComponent } from '../base.component';\nimport { DataGridRowComponent } from '../data-grid-row/data-grid-row.component';\n\n@Component({\n selector: 'lib-data-grid',\n templateUrl: './data-grid.component.html',\n styleUrls: ['./data-grid.component.scss'],\n host: {\n '[class.no-borders]': 'showButtons',\n },\n imports: [\n DataGridRowComponent,\n NgFor,\n NgIf,\n NgStyle,\n ScrollingModule,\n TranslatePipe,\n ]\n})\nexport class DataGridComponent extends BaseComponent implements OnInit, AfterViewInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('body') private bodyElement!: ElementRef<HTMLDivElement>;\n @ViewChild(CdkVirtualScrollViewport) private viewport?: CdkVirtualScrollViewport;\n\n @Input() public disabled: boolean = false;\n @Input() public lazyLoadRows: boolean = false;\n @Input() public showButtons: boolean = false;\n //#endregion\n\n //#region Variables\n protected changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n protected dataGridDataset: DataGridDataset = inject(DataGridDataset);\n protected hasFailed: boolean = false;\n protected headerRightMargin: number = 0;\n protected headerScrollLeft: number = 0;\n protected loading: boolean = false;\n\n private bodyResized$: Subject<void> = new Subject<void>();\n private bodyResizeObserver?: ResizeObserver;\n private gridRoute: string = '';\n private isGridCurrentUrl: boolean = false;\n private lastPosition: number = 0;\n private ngZone: NgZone = inject(NgZone);\n private router: Router = inject(Router);\n private selectionColRealSize?: number;\n //#endregion\n\n //#region Properties\n protected get bodyMinHeight(): number {\n let rowsToDisplay: number = this.configs.rowsToDisplay ?? 3;\n\n let rowsCount: number = this.dataGridDataset.loadedRows?.length ?? 0;\n if (rowsCount === 0) {\n rowsCount = 1;\n }\n\n if (rowsCount < rowsToDisplay) {\n rowsToDisplay = rowsCount;\n }\n\n return rowsToDisplay * this.configs.rowHeight;\n }\n\n protected get columns(): IGridColumn[] {\n return this.dataGridDataset.columns;\n }\n\n protected get configs(): DataGridConfigs {\n return this.dataGridDataset.configs;\n }\n\n protected get gridColumns(): string {\n return this.dataGridDataset.columnsSize;\n }\n\n protected get hasBeenLoaded(): boolean {\n return this.dataGridDataset.hasBeenLoaded;\n }\n\n protected get hasLoadedRows(): boolean {\n return (this.dataGridDataset.loadedRows?.length ?? 0) > 0;\n }\n\n protected get hasMessageToDisplayWhenEmpty(): boolean {\n return this.messageToDisplayWhenEmpty.length > 0;\n }\n\n protected get isHideColumns(): boolean {\n return this.dataGridDataset.configs.hideColumnHeaders ?? false;\n }\n\n protected get isShowMultiSelect(): boolean {\n return this.dataGridDataset.configs.multiSelect ?? false;\n }\n\n protected get messageToDisplayWhenEmpty(): string {\n return this.dataGridDataset?.configs?.messageOnEmpty ?? '';\n }\n\n protected get messageToDisplayWhenLazyLoad(): string {\n return this.dataGridDataset?.configs?.messageOnLazyLoad ?? '';\n }\n\n protected get messageToDisplayWhenFailed(): string {\n return this.dataGridDataset?.configs?.messageOnFailed ?? '';\n }\n\n protected get selectionColWidth(): string {\n return this.selectionColRealSize\n ? `${this.selectionColRealSize}px`\n : this.configs.multiSelectSize ?? 'minmax(1.5rem,min-content)';\n }\n\n protected get shouldDisplayMessageWhenEmpty(): boolean {\n return this.dataGridDataset?.configs?.showMessageOnEmpty ?? true;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n this.gridRoute = this.router.url;\n this.isGridCurrentUrl = true;\n\n this.router.events\n .pipe(\n takeUntil(this.destroy$),\n filter((events: any) => events instanceof NavigationStart || events instanceof NavigationEnd)\n )\n .subscribe((event: NavigationStart | NavigationEnd) => {\n if (event instanceof NavigationStart && this.isGridCurrentUrl) {\n this.lastPosition = this.viewport?.measureScrollOffset() ?? 0;\n this.isGridCurrentUrl = false;\n\n } else if (event instanceof NavigationEnd && event.url === this.gridRoute) {\n this.viewport?.scrollTo({ top: this.lastPosition });\n this.viewport?.checkViewportSize();\n this.isGridCurrentUrl = true;\n }\n });\n\n this.dataGridDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = true;\n });\n\n this.dataGridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe((isSuccess: boolean) => {\n this.loading = false;\n this.hasFailed = !isSuccess;\n\n setTimeout(() => {\n const viewportWidth: number = this.viewport?.measureViewportSize('horizontal') ?? 0;\n if (viewportWidth > 0) {\n this.headerRightMargin = this.bodyElement.nativeElement.clientWidth - viewportWidth;\n }\n }, 100);\n\n this.changeDetectorRef.detectChanges();\n\n setTimeout(() => {\n this.viewport?.checkViewportSize();\n });\n });\n\n\n if (!this.lazyLoadRows) {\n if (!this.dataGridDataset.loadedRows) {\n this.loading = true;\n }\n this.dataGridDataset.loadRows();\n } else if (this.dataGridDataset.isLoading) {\n this.loading = true;\n }\n }\n\n public ngAfterViewInit(): void {\n // The rows scroll sideways inside the CDK viewport while the header sits outside it, so the\n // header has to be moved by hand or the headings stay behind as the cells travel. Read outside\n // Angular and written back inside it, because this fires for every frame of a scroll.\n const viewportElement: HTMLElement | undefined = this.viewport?.elementRef?.nativeElement;\n\n if (viewportElement) {\n this.ngZone.runOutsideAngular(() => {\n fromEvent(viewportElement, 'scroll')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n const scrollLeft: number = viewportElement.scrollLeft;\n if (this.headerScrollLeft === scrollLeft) {\n return;\n }\n\n this.ngZone.run(() => {\n this.headerScrollLeft = scrollLeft;\n this.changeDetectorRef.detectChanges();\n });\n });\n });\n }\n\n this.viewport?.renderedRangeStream\n .pipe(takeUntil(this.destroy$))\n .subscribe((listRange: ListRange) => {\n const loadedRows: number = this.dataGridDataset.loadedRows?.length ?? 0;\n if (this.hasLoadedRows && !this.loading && listRange.end >= loadedRows && !this.dataGridDataset.loadedLastRow) {\n this.loading = true;\n this.dataGridDataset.loadRows();\n }\n });\n\n this.bodyResized$\n .pipe(\n debounceTime(150),\n takeUntil(this.destroy$)\n )\n .subscribe(() => {\n const viewportWidth: number = this.viewport?.measureViewportSize('horizontal') ?? 0;\n if (viewportWidth > 0) {\n this.headerRightMargin = this.bodyElement.nativeElement.clientWidth - viewportWidth;\n }\n this.viewport?.checkViewportSize();\n this.syncHeaderScroll();\n this.changeDetectorRef.detectChanges();\n });\n\n this.ngZone.runOutsideAngular(() => {\n this.bodyResizeObserver = new ResizeObserver(() => {\n this.bodyResized$.next();\n });\n this.bodyResizeObserver.observe(this.bodyElement.nativeElement);\n });\n }\n\n public override ngOnDestroy(): void {\n this.bodyResizeObserver?.disconnect();\n super.ngOnDestroy();\n }\n //#endregion\n\n //#region Event handlers\n protected onSelectionResized(newSize: number): void {\n if (this.selectionColRealSize != newSize) {\n this.selectionColRealSize = newSize;\n }\n }\n //#endregion\n\n //#region Public methods\n protected isFirstVisibleRow(rowIndex: number): boolean {\n const renderedRange: ListRange | undefined = this.viewport?.getRenderedRange();\n if (renderedRange) {\n return rowIndex === renderedRange.start;\n }\n return false;\n }\n //#endregion\n\n //#region Private methods\n private syncHeaderScroll(): void {\n // Re-inserting the viewport into the DOM -- which is what re-activating a detached tab does --\n // puts its scroll position back to zero without firing a scroll event, so nothing tells the\n // header to come back with it and the headings sit at an offset the body no longer has.\n const scrollLeft: number = this.viewport?.elementRef?.nativeElement?.scrollLeft ?? 0;\n\n if (this.headerScrollLeft !== scrollLeft) {\n this.headerScrollLeft = scrollLeft;\n }\n }\n\n protected trackByFn(index: number, item: any): number {\n return item.key;\n }\n //#endregion\n}\n","<div class=\"buttons\"\n*ngIf=\"showButtons\">\n <ng-content select=\"[buttons]\"></ng-content>\n</div>\n\n<div class=\"header\"\n[class.hide]=\"isHideColumns\"\n[style.padding-right.px]=\"headerRightMargin\">\n <!-- Translated by however far the body is scrolled sideways. The rows scroll inside the CDK\n viewport and the header sits outside it, so without this the headings simply stay put\n while the cells move away from them. -->\n <div class=\"header-row\"\n [style.transform]=\"headerScrollLeft ? 'translateX(-' + headerScrollLeft + 'px)' : null\">\n <div *ngIf=\"isShowMultiSelect\"\n class=\"header-cell selection\"\n [ngStyle]=\"{\n 'width': selectionColWidth ? selectionColWidth : null\n }\">\n \n </div>\n \n <!-- A measured zero is a width, not the absence of one: it is a 1fr column that collapsed,\n and its heading has to collapse too. The old test read `realSize ?? 0 > 0`, which binds\n as `realSize ?? (0 > 0)` and so turned zero into no width at all.\n\n Such a heading is removed rather than merely made zero wide, because a flex item still\n takes a gap on each side while the body grid allows the collapsed track only one, and\n that spare gap pushed every heading to its right out by 16px. -->\n <div *ngFor=\"let column of columns\"\n class=\"header-cell\"\n [ngStyle]=\"{\n 'display': column.realSize === 0 ? 'none' : null,\n 'width.px': column.realSize ?? null\n }\">\n <span>{{ column.headerName | translate }}</span>\n </div>\n </div>\n</div>\n\n<div #body\nclass=\"body\"\n[style.min-height.px]=\"bodyMinHeight\">\n <cdk-virtual-scroll-viewport\n [itemSize]=\"configs.rowHeight\"\n [style.grid-template-columns]=\"gridColumns\">\n <lib-data-grid-row #row\n *cdkVirtualFor=\"let row of dataGridDataset.loadedRows; index as i; trackBy: trackByFn\"\n [disabled]=\"disabled\"\n [isFirstRow]=\"isFirstVisibleRow(i)\"\n [rowData]=\"row\"\n [style.height.px]=\"configs.rowHeight\"\n (selectionResized)=\"onSelectionResized($event)\">\n </lib-data-grid-row>\n\n <div *ngIf=\"loading\"\n class=\"loading\"\n [style.height.px]=\"configs.rowHeight\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n \n <span>\n {{ dataGridDataset.configs.loadingDisplayText ?? '' | translate }} \n </span>\n </div>\n \n <div *ngIf=\"!loading && !hasBeenLoaded && lazyLoadRows\"\n class=\"message\"\n [style.height.px]=\"configs.rowHeight\">\n <span>\n {{ messageToDisplayWhenLazyLoad | translate }}\n </span>\n </div>\n\n <ng-container *ngIf=\"!loading && hasBeenLoaded && (!hasLoadedRows || hasFailed)\">\n <div *ngIf=\"!hasFailed && !hasLoadedRows && hasMessageToDisplayWhenEmpty && shouldDisplayMessageWhenEmpty\"\n class=\"message\"\n [style.height.px]=\"configs.rowHeight\">\n <span>\n {{ messageToDisplayWhenEmpty | translate }}\n </span>\n </div>\n\n <div *ngIf=\"hasFailed\"\n class=\"message\"\n [style.height.px]=\"configs.rowHeight\">\n <span>\n <i class=\"fas fa-exclamation-triangle mr-2 text-yellow-600\"></i>{{ messageToDisplayWhenFailed | translate }}\n </span>\n </div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n</div>","import { NgIf } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n selector: 'lib-form-group',\n templateUrl: './form-group.component.html',\n styleUrls: ['./form-group.component.scss'],\n imports: [\n NgIf,\n TranslatePipe,\n ],\n host: {\n '[class.expand]': 'shouldExpand'\n }\n})\nexport class FormGroupComponent {\n //#region ViewChilds, Inputs, Outputs\n @Input() public shouldExpand: boolean = false;\n @Input() public label!: string;\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n protected get hasTitle(): boolean {\n return !!this.label;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<h3 *ngIf=\"hasTitle\"\nclass=\"title\" >\n {{ label | translate }}\n</h3>\n\n<div class=\"content\"\n[class.has-title]=\"hasTitle\">\n <ng-content></ng-content>\n</div>","import { NgStyle } from '@angular/common';\nimport { Component, ElementRef, Input, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'lib-group-accordion',\n templateUrl: './group-accordion.component.html',\n styleUrls: ['./group-accordion.component.scss'],\n host: { '[class.collapsed]': 'collapsed' },\n imports: [\n NgStyle,\n ]\n})\nexport class GroupAccordionComponent {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('container') private containerElementRef!: ElementRef<HTMLDivElement>;\n\n @Input({ required: true }) label!: string;\n //#endregion\n\n //#region Variables\n private _maxHeight: number = -1;\n private collapsed: boolean = false;\n //#endregion\n\n //#region Properties\n public get maxHeight(): number {\n return this._maxHeight;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onToggle(): void {\n // Before collapsing, we set the max height style for the closing effect.\n if (!this.collapsed) {\n this.setMaxHeight();\n }\n\n setTimeout(() => {\n this.collapsed = !this.collapsed;\n\n // After expanding, we wait the transition to end and remove the max height.\n if (!this.collapsed) {\n this.clearMaxHeight();\n }\n });\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n private clearMaxHeight(): void {\n setTimeout(() => {\n this._maxHeight = -1;\n }, 150);\n }\n private setMaxHeight(): void {\n this._maxHeight = this.containerElementRef?.nativeElement?.offsetHeight ?? 0;\n }\n //#endregion\n}","<div class=\"title\">\n <h6 (click)=\"onToggle()\"><i class=\"fas fa-chevron-down fa-sm\"></i>{{ this.label }}</h6>\n</div>\n\n<div #container class=\"content animate\"\n[ngStyle]=\"maxHeight >= 0 && {\n 'height.px': maxHeight,\n 'max-height.px': maxHeight\n} || null\">\n <div #maxHeighContainer>\n <ng-content></ng-content>\n </div>\n</div>","import { AfterViewInit, Directive, ElementRef, EventEmitter, HostListener, inject, Input, Output } from '@angular/core';\n\n@Directive({\n selector: '[libScrollSpy]'\n})\nexport class ScrollSpyDirective implements AfterViewInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() public spiedTags: Array<string> = [];\n\n @Output() public activeSectionChange: EventEmitter<number> = new EventEmitter<number>();\n //#endregion\n\n //#region Variables\n private _el: ElementRef<HTMLElement> = inject(ElementRef);\n private activeSection: number | null = null;\n private sections: Array<Element> = new Array<Element>();\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngAfterViewInit(): void {\n this.updateSections(Array.from(this._el.nativeElement.children));\n }\n //#endregion\n\n //#region Event handlers\n @HostListener('scroll', ['$event'])\n public onScroll(event: any): void {\n const scrollTop: number = event.target.scrollTop;\n const scrollHeight: number = event.target.scrollHeight;\n const maxScroll: number = Math.round(event.target.scrollHeight - event.target.getBoundingClientRect().height);\n\n const currentScroll: number = Math.round(scrollTop * scrollHeight / maxScroll);\n\n if (currentScroll >= scrollHeight) {\n this.select(this.sections.length - 1);\n return;\n }\n\n const elements: Element[] = this.sections.filter(el => ((el as HTMLElement).offsetTop) <= currentScroll);\n\n this.select(elements.length > 0 ? elements.length - 1 : 0);\n }\n //#endregion\n\n //#region Public methods\n public scrollTo(section: number): void {\n this._el.nativeElement.scrollTop = (this.sections[section] as HTMLElement).offsetTop;\n }\n\n public select(section: number): void {\n if (section !== this.activeSection) {\n this.activeSection = section;\n this.activeSectionChange.emit(section);\n }\n }\n //#endregion\n\n //#region Private methods\n private updateSections(children: Element[]): void {\n children.forEach(el => {\n if (this.spiedTags.some(spiedTag => spiedTag.toUpperCase() === el.tagName.toUpperCase())) {\n this.sections.push(el);\n } else {\n this.updateSections(Array.from(el.children));\n }\n });\n }\n //#endregion\n}\n","import { NgClass, NgIf } from '@angular/common';\nimport { Component, ContentChildren, Input, QueryList, ViewChild } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ScrollSpyDirective } from '../../directives/scroll-spy.directive';\nimport { GroupAccordionComponent } from '../group-accordion/group-accordion.component';\n\n@Component({\n selector: 'lib-group-container',\n templateUrl: './group-container.component.html',\n styleUrls: ['./group-container.component.scss'],\n imports: [\n NgClass,\n NgIf,\n TranslatePipe,\n ]\n})\nexport class GroupContainerComponent {\n @ViewChild(ScrollSpyDirective) scrollSpy!: ScrollSpyDirective;\n @ContentChildren(GroupAccordionComponent, { descendants: true }) sections!: QueryList<GroupAccordionComponent>;\n\n public get titles(): string[] {\n return this.sections?.map(x => x.label) ?? [];\n }\n\n public activeSection: number = 0;\n \n @Input() title?: string;\n\n @Input() icon?: string;\n\n\n activeSectionChanged(index: number): void {\n this.activeSection = index;\n }\n\n scrollTo(section: number) {\n this.scrollSpy.scrollTo(section);\n }\n}","<div class=\"title\">\n <i *ngIf=\"!!title && !!icon\" class=\"fas fa-fw\" [ngClass]=\"icon\"></i>\n\n <h4 *ngIf=\"!!title\">{{ title | translate }}</h4>\n\n <svg *ngIf=\"!title\" [ngClass]=\"''\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n</div>\n\n<div class=\"content-container\">\n <ng-content></ng-content>\n</div>","import { NgFor } from '@angular/common';\nimport { Component, ContentChildren, QueryList, ViewChild } from '@angular/core';\nimport { ScrollSpyDirective } from '../../directives/scroll-spy.directive';\nimport { GroupAccordionComponent } from '../group-accordion/group-accordion.component';\n\n@Component({\n selector: 'lib-group-scroll-spy',\n templateUrl: './group-scroll-spy.component.html',\n styleUrls: ['./group-scroll-spy.component.scss'],\n imports: [\n NgFor,\n ScrollSpyDirective,\n ]\n})\nexport class GroupScrollSpyComponent {\n @ViewChild(ScrollSpyDirective) scrollSpy!: ScrollSpyDirective;\n @ContentChildren(GroupAccordionComponent, { descendants: true }) sections!: QueryList<GroupAccordionComponent>;\n\n public get titles(): string[] {\n return this.sections?.map(x => x.label) ?? [];\n }\n\n public activeSection: number = 0; \n\n\n activeSectionChanged(index: number): void {\n this.activeSection = index;\n }\n\n scrollTo(section: number) {\n this.scrollSpy.scrollTo(section);\n }\n}","<div class=\"scroll-spy\">\n <a *ngFor=\"let title of titles; let i = index\"\n class=\"item\" [class.active]=\"i === activeSection\"\n (click)=\"scrollTo(i)\"\n >{{ title }}</a>\n</div>\n\n<div class=\"content\" libScrollSpy\n[class.no-scroll-spy]=\"titles.length === 0\"\n[spiedTags]=\"['lib-group-accordion']\"\n(activeSectionChange)=\"activeSectionChanged($event)\"\n>\n <ng-content></ng-content>\n</div>","import { NgIf } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, HostListener, inject, Input, Output } from '@angular/core';\nimport { IModal } from '../../models';\nimport { BaseComponent } from '../base.component';\n\n@Component({\n selector: 'lib-modal',\n templateUrl: './modal.component.html',\n styleUrls: ['./modal.component.scss'],\n host: {\n 'title': '', // This is to ensure that the title input does not conflict with the native HTML title attribute.\n '[class.show]': 'isShown',\n },\n imports: [\n NgIf,\n ]\n})\nexport class ModalComponent extends BaseComponent implements IModal {\n //#region ViewChilds, Inputs, Outputs\n @Input() public closeButtonText: string = 'Close';\n @Input() public dialog: boolean = true;\n @Input() public modalProcessing: boolean = false;\n @Input() public position: 'top' | 'left' | 'right' | 'bottom' | 'center' = 'center';\n @Input() public size: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | '7xl' | 'full' | 'auto' = 'auto';\n @Input() public title!: string;\n\n @Output() public closed: EventEmitter<void> = new EventEmitter<void>();\n //#endregion\n\n //#region Variables\n private _show: boolean = false;\n private clickedOutside: boolean = false;\n private elementRef: ElementRef\n //#endregion\n\n //#region Properties\n public get isShown(): boolean {\n return this._show;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.elementRef = inject(ElementRef);\n }\n //#endregion\n\n //#region Event handlers\n protected onCloseClick(): void {\n if (!this.modalProcessing && this.isShown) {\n this.closeModal();\n }\n }\n //#endregion\n\n //#region Public methods\n public closeModal(): void {\n if (this.isShown) {\n this.toggleModal();\n }\n }\n\n public toggleModal(): void {\n const wasShown: boolean = this._show;\n\n const body: HTMLBodyElement | null = document.querySelector('body');\n body?.classList.toggle('modal-active');\n\n this._show = body?.classList.contains('modal-active') ?? false;\n\n if (this.isShown) {\n this.clickedOutside = false;\n\n const autofocus: any = this.elementRef.nativeElement.querySelector('[autofocus]')\n if (autofocus && !!autofocus.focus) {\n autofocus.focus();\n }\n } else if (wasShown) {\n this.closed.emit();\n }\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n\n //#region Host listeners\n @HostListener('body:mousedown', ['$event'])\n private bodyMouseDown(event: MouseEvent): void {\n if (this.dialog && this.isShown) {\n const target: HTMLElement = <HTMLElement>event.target;\n\n this.clickedOutside = (!this.modalProcessing && event.button === 0 && target.closest('lib-modal') && !target.closest('.modal-content')) ?? false;\n }\n }\n\n @HostListener('body:mouseup', ['$event'])\n private bodyMouseUp(event: MouseEvent): void {\n if (this.dialog && this.isShown) { \n if (this.clickedOutside && !this.modalProcessing) {\n this.toggleModal();\n }\n }\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n private documentKeyDown(event: KeyboardEvent): void {\n event = event || window.event;\n\n let isEscape = false;\n if ('key' in event) {\n isEscape = (event.key === 'Escape' || event.key === 'Esc');\n } else {\n isEscape = ((<KeyboardEvent>event).keyCode === 27);\n }\n\n if (!this.modalProcessing && this.isShown && isEscape && document.body.classList.contains('modal-active')) {\n this.toggleModal();\n }\n }\n //#endregion\n}","<div class=\"modal-overlay\"></div>\n\n<div class=\"modal-container size-{{ size }} {{ position }}\">\n <form class=\"modal-content\">\n <div class=\"modal-header\" *ngIf=\"title\">\n <p class=\"text-2xl font-bold\">{{ title }}</p>\n\n <button type=\"button\" class=\"modal-close\" (click)=\"toggleModal()\">\n <svg class=\"fill-current text-black\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n <path d=\"M14.53 4.53l-1.06-1.06L9 7.94 4.53 3.47 3.47 4.53 7.94 9l-4.47 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z\"></path>\n </svg>\n </button>\n </div>\n\n <div class=\"modal-body\">\n <ng-content select=\"[body]\"></ng-content>\n </div>\n\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn gray-300\" [disabled]=\"modalProcessing\" (click)=\"onCloseClick()\">{{ closeButtonText }}</button>\n\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n </form>\n</div>","import { NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, inject, Input, OnInit, ViewChild } from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { take, takeUntil } from 'rxjs';\nimport { FormService } from '../../services';\nimport { DataGridDataset } from '../../services/datasets/data-grid.dataset';\nimport { MultiEditorDataset } from '../../services/datasets/multi-editor.dataset';\nimport { DataGridComponent } from '../data-grid/data-grid.component';\nimport { FormGroupComponent } from '../form-group/form-group.component';\nimport { ModalComponent } from '../modal/modal.component';\n\n@Component({\n selector: 'lib-multi-editor',\n templateUrl: './multi-editor.component.html',\n styleUrls: ['./multi-editor.component.scss'],\n imports: [\n DataGridComponent,\n ModalComponent,\n NgIf,\n FormGroupComponent,\n TranslatePipe,\n ]\n})\nexport class MultiEditorComponent extends ModalComponent implements OnInit { \n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ModalComponent) private modal!: ModalComponent;\n\n @Input() public addButtonLabel: string = 'Add row';\n @Input() public formGroup!: FormGroup<any>;\n @Input() public removeButtonLabel: string = 'Remove row';\n @Input() public showAddButton: boolean = true;\n @Input() public showDeleteButton: boolean = true;\n //#endregion\n\n //#region Variables\n protected gridLoading: boolean = false;\n\n private dataGridDataset: DataGridDataset = inject(DataGridDataset);\n private formService: FormService = inject(FormService);\n private multiEditorDataset: MultiEditorDataset = inject(MultiEditorDataset);\n private selectedKey?: string;\n private selectedValue?: any;\n //#endregion\n\n //#region Properties\n protected get formLoading(): boolean {\n return this.formService.loading;\n }\n\n protected get hasSelectedKey(): boolean {\n return !!this.selectedKey;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n this.dataGridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.multiEditorDataset.clearChangedValues();\n\n this.gridLoading = false;\n this.selectedKey = undefined;\n this.selectedValue = undefined;\n });\n\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n if (this.gridLoading || !this.dataGridDataset.hasLoadedRows || !this.dataGridDataset.hasSelectedRows) {\n return;\n }\n\n if (this.formGroup.disabled) {\n this.formGroup.enable();\n }\n \n const selectedRowKey: string = this.dataGridDataset.selectedRowKeys[0];\n if (!!this.selectedKey && this.formGroup.enabled && !this.formGroup.valid && this.selectedKey !== selectedRowKey) {\n // If the form is invalid, need to stay in the same selected row.\n this.dataGridDataset.selectRow(this.selectedKey);\n this.formGroup.markAllAsTouched();\n\n } else {\n this.selectedKey = selectedRowKey;\n this.selectedValue = this.dataGridDataset.getRowData(selectedRowKey);\n this.formService.model = this.selectedValue;\n\n this.formGroup.reset();\n this.formGroup.patchValue(this.selectedValue);\n }\n });\n\n this.formGroup.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe((_: any) => {\n if (this.selectedKey && this.formGroup.dirty) {\n this.multiEditorDataset.updateValues(this.selectedKey, this.formGroup.getRawValue());\n }\n });\n\n // Start with an empty form and, since there is no selected row, disable the form.\n this.formGroup.disable({ emitEvent: false });\n }\n //#endregion\n\n //#region Event handlers\n protected onDeleteClick(): void {\n if (!this.selectedKey) {\n return;\n }\n\n this.multiEditorDataset.removeValue(this.selectedKey);\n\n this.selectedKey = undefined;\n this.formGroup.reset({ emitEvent: false });\n this.clearAllFormArrays(this.formGroup);\n\n this.formGroup.disable({ emitEvent: false });\n }\n\n protected onNewClick(): void {\n const fakeNewID: number = (Math.floor(Math.random() * (999999 - 100000)) + 100000) * -1;\n const newModel: any = this.multiEditorDataset.newData(fakeNewID);\n\n if (!!newModel) {\n // Read before addNewRow: it stamps the grid's internal key onto the row, so afterwards even a\n // `{}` model reports one own key and the check below would never skip.\n const hasPrefilledValues: boolean = Object.keys(newModel).length > 0;\n\n this.multiEditorDataset.storeFakeIDGenerated(fakeNewID);\n\n this.dataGridDataset.addNewRow(newModel);\n\n const newKey: string = this.dataGridDataset.loadedKeys![this.dataGridDataset.loadedKeys!.length - 1];\n\n // Record whatever `newData` pre-filled. `selectRow` below reaches the form through\n // reset() + patchValue(), which leaves it pristine, and the `valueChanges` handler is gated on\n // `formGroup.dirty` — so a row the user never types into is never recorded. Without this, values\n // returned by `newData` show up in the grid but are dropped from the save batch, and adding\n // several rows while only editing the last silently discards the earlier ones.\n //\n // Skipped for a value-less model (`{}`, the blank-row convention) so implementations that\n // pre-fill nothing keep sending nothing for a row that was added and never touched.\n if (hasPrefilledValues) {\n this.multiEditorDataset.updateValues(newKey, newModel);\n }\n\n this.dataGridDataset.selectRow(newKey);\n }\n }\n\n protected onSaveClick(): void {\n if (this.selectedKey) {\n this.formGroup.markAllAsTouched();\n }\n\n if (!this.selectedKey || this.formGroup.valid) {\n this.modalProcessing = true;\n this.formGroup.disable();\n\n this.multiEditorDataset.saveChanges()\n .pipe(take(1))\n .subscribe({\n next: (_: any) => {\n this.modalProcessing = false;\n this.toggleModal();\n },\n error: (e: HttpErrorResponse) => {\n this.modalProcessing = false;\n this.formGroup.enable();\n\n if (e.status === 400 && e.error.errors) {\n this.dataGridDataset.selectRowID(e.error.entityKey);\n\n this.formService.setValidationErrorsFromHttpResponse(e);\n }\n }\n });\n }\n }\n //#endregion\n\n //#region Public methods\n public override closeModal(): void {\n this.modal.closeModal();\n }\n\n public override toggleModal(): void {\n this.modal.toggleModal();\n\n if (this.modal.isShown) {\n this.gridLoading = true;\n this.dataGridDataset.refresh();\n \n this.selectedKey = undefined;\n this.formGroup.reset({ emitEvent: false });\n this.clearAllFormArrays(this.formGroup);\n this.formGroup.disable({ emitEvent: false });\n }\n }\n //#endregion\n\n //#region Private methods\n private clearAllFormArrays(form: FormGroup): void {\n Object.keys(form.controls).forEach((key: string) => {\n const control: AbstractControl | null = form.get(key);\n if (control instanceof FormArray) {\n control.clear({ emitEvent: false });\n }\n \n // Check for nested FormArrays.\n if (control instanceof FormGroup) {\n this.clearAllFormArrays(control);\n }\n });\n }\n //#endregion\n}","<lib-modal\n[closeButtonText]=\"closeButtonText | translate\"\n[dialog]=\"dialog\"\n[modalProcessing]=\"modalProcessing\"\n[position]=\"position\"\n[size]=\"size\"\n[title]=\"title\">\n <div body class=\"body-content\">\n <div class=\"data-grid\">\n <lib-data-grid [disabled]=\"modalProcessing\" [lazyLoadRows]=\"true\"></lib-data-grid>\n </div>\n\n <div class=\"data\">\n <div class=\"buttons\">\n <a *ngIf=\"showAddButton\"\n class=\"btn gray-500\"\n [class.disabled]=\"modalProcessing || gridLoading || formLoading || formGroup.invalid\"\n (click)=\"onNewClick()\">\n {{ addButtonLabel }}\n </a>\n\n <a *ngIf=\"showDeleteButton && hasSelectedKey\"\n class=\"btn red-500\"\n [class.disabled]=\"modalProcessing || gridLoading || formLoading\"\n (click)=\"onDeleteClick()\">\n {{ removeButtonLabel }}\n </a>\n </div>\n\n <lib-form-group>\n <ng-content></ng-content>\n </lib-form-group>\n </div>\n </div>\n\n <div footer>\n <button\n class=\"btn blue-500\"\n type=\"button\"\n [class.disabled]=\"gridLoading || formLoading\"\n [class.loading]=\"modalProcessing\"\n (click)=\"onSaveClick()\">\n {{ 'Button-Modal-MultiEditor-Confirm' | translate }}\n </button>\n </div>\n</lib-modal>","import { CommonModule, NgFor, NgIf } from '@angular/common';\nimport { Component, inject, Input, OnInit, TemplateRef } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntil } from 'rxjs';\nimport { MultiSelectResultDataset } from '../../../services/datasets/multi-select-result.dataset';\nimport { BaseComponent } from '../../base.component';\nimport { DataGridDataset } from '../../../services';\n\n@Component({\n selector: 'lib-multi-select-result-grid',\n templateUrl: './result-grid.component.html',\n styleUrls: ['./result-grid.component.scss'],\n host: {\n 'class': 'flex-grow'\n },\n imports: [\n CommonModule,\n NgFor,\n NgIf,\n TranslatePipe,\n ]\n})\nexport class MultiSelectResultGridComponent extends BaseComponent implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() isDisabled: boolean = false;\n @Input() template!: TemplateRef<any>;\n //#endregion\n\n //#region Variables\n protected dataGridDataset: DataGridDataset = inject(DataGridDataset);\n protected isLoading: boolean = true;\n protected resultDataset: MultiSelectResultDataset = inject(MultiSelectResultDataset);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n this.resultDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.isLoading = true;\n });\n\n this.resultDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.isLoading = false;\n });\n }\n //#endregion\n\n //#region Event handlers\n public onItemRemoved(rowIndex: number): void {\n const id: any = this.resultDataset.displayedIDs[rowIndex];\n this.dataGridDataset.deselectRowID(id);\n }\n\n protected onScrolled(event: any): void {\n const currentScroll: number = event.target.scrollTop + event.target.clientHeight;\n const scrollHeight: number = event.target.scrollHeight - event.target.clientHeight;\n\n if (currentScroll > scrollHeight && !this.isLoading && !this.resultDataset.loadedLastRow) {\n this.isLoading = true;\n this.resultDataset.loadRows();\n }\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<div\nclass=\"body\"\n(scroll)=\"onScrolled($event)\">\n <div\n class=\"row\"\n *ngFor=\"let row of resultDataset.displayedRows; let i = index\">\n <div class=\"cell\">\n <a\n class=\"remove\"\n [class.disabled]=\"isDisabled\"\n (click)=\"onItemRemoved(i)\">\n <i class=\"fas fa-times\"></i>\n </a>\n </div> \n\n <div class=\"cell\">\n <div>\n <ng-container *ngTemplateOutlet=\"template; context: { rowData: row }\">\n </ng-container>\n </div>\n </div>\n </div>\n\n <div\n class=\"loading\"\n *ngIf=\"isLoading\">\n <svg [ngClass]=\"''\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n\n <span>\n {{ resultDataset.configs.loadingDisplayText ?? '' | translate }} \n </span>\n </div>\n</div>","import { Component, inject, Input, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { take, takeUntil } from 'rxjs';\nimport { IGridColumn } from '../../models';\nimport { DataGridDataset } from '../../services/datasets/data-grid.dataset';\nimport { MultiSelectResultDataset } from '../../services/datasets/multi-select-result.dataset';\nimport { DataGridComponent } from '../data-grid/data-grid.component';\nimport { ModalComponent } from '../modal/modal.component';\nimport { MultiSelectResultGridComponent } from './result-grid/result-grid.component';\n\n@Component({\n selector: 'lib-multi-select',\n templateUrl: './multi-select.component.html',\n styleUrls: ['./multi-select.component.scss'],\n imports: [\n DataGridComponent,\n FormsModule,\n ModalComponent,\n MultiSelectResultGridComponent,\n TranslatePipe,\n ]\n})\nexport class MultiSelectComponent extends ModalComponent implements OnInit { \n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ModalComponent) private modal!: ModalComponent;\n\n @Input() public itemTemplate!: TemplateRef<any>;\n //#endregion\n\n //#region Variables\n protected isResultGridLoading: boolean = false;\n protected isSearchGridLoading: boolean = false;\n protected resultDataset: MultiSelectResultDataset = inject(MultiSelectResultDataset);\n protected searchCriteria: string = '';\n\n private _searchColumn: string = '';\n private dataGridDataset: DataGridDataset = inject(DataGridDataset);\n //#endregion\n\n //#region Properties\n private get searchColumn(): string {\n if (this._searchColumn.length === 0) {\n let columnName = this.dataGridDataset.columns.filter((col: IGridColumn) => col.field !== '')[0]?.field ?? 'Search';\n columnName = columnName.charAt(0).toUpperCase() + columnName.slice(1);\n this._searchColumn = columnName;\n }\n return this._searchColumn;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataGridDataset.configs.multiSelect = true;\n this.closeButtonText = 'Button-Modal-Cancel';\n }\n\n public ngOnInit(): void {\n this.dataGridDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.isSearchGridLoading = true;\n });\n\n this.dataGridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.isSearchGridLoading = false;\n this.updateSelectedItems();\n });\n\n this.resultDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.isResultGridLoading = false;\n this.updateSelectedItems();\n });\n\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe((selectionChanges: { [id:string]: { rowData: any; selected: boolean } }) => {\n if (this.isSearchGridLoading || this.isResultGridLoading) {\n return;\n }\n\n Object.keys(selectionChanges)\n .forEach((key: string) => {\n const selection: { rowData: any; selected: boolean } = selectionChanges[key];\n const id: any = this.dataGridDataset.getRowID(key);\n\n if (selection.selected) {\n this.resultDataset.setIDToAdd(id, selection.rowData);\n } else {\n this.resultDataset.setIDToRemove(id);\n }\n });\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onSave(): void {\n this.modalProcessing = true;\n this.resultDataset.saveChanges()\n .pipe(take(1))\n .subscribe(() => {\n this.modalProcessing = false;\n this.toggleModal();\n });\n }\n\n protected onSearch(): void {\n const filters: { [key: string]: string; } = this.dataGridDataset.filters ?? {};\n\n this.isSearchGridLoading = true;\n if (this.searchCriteria.length > 0) {\n filters[this.searchColumn] = this.searchCriteria;\n this.dataGridDataset.setFilters(filters);\n\n } else if (Object.keys(filters).includes(this.searchColumn)) {\n this.clearSearch();\n }\n }\n //#endregion\n\n //#region Public methods\n public override closeModal(): void {\n this.modal.closeModal();\n }\n\n public override toggleModal(): void {\n this.modal.toggleModal();\n\n if (this.modal.isShown) {\n this.searchCriteria = '';\n this.clearSearch();\n\n this.isResultGridLoading = true;\n this.resultDataset.refresh();\n }\n }\n //#endregion\n\n //#regiosn Private methods\n private clearSearch(): void {\n const filters: { [key: string]: string; } = this.dataGridDataset.filters ?? {};\n if (Object.keys(filters).includes(this.searchColumn)) {\n delete filters[this.searchColumn];\n }\n this.dataGridDataset.setFilters(filters);\n }\n private updateSelectedItems(): void {\n if (this.isSearchGridLoading || this.isResultGridLoading) {\n return;\n }\n\n // Filter by the results that are not marked to be removed.\n const idsFromResult: any[] = (this.resultDataset.loadedKeys ?? [])\n .map((key: string) => this.resultDataset.getRowID(key))\n .filter((id: any) => this.resultDataset.idsToRemove.indexOf(id) < 0);\n\n idsFromResult.push(...this.resultDataset.idsToAdd);\n \n // Get each corresponding key from the data grid.\n const keysToSelect: string[] = (this.dataGridDataset.loadedKeys ?? [])\n .filter((key: string) => idsFromResult.indexOf(this.dataGridDataset.getRowID(key)) >= 0);\n\n this.dataGridDataset.selectRows(keysToSelect);\n }\n //#endregion\n}","<lib-modal\n[closeButtonText]=\"closeButtonText | translate\"\n[dialog]=\"dialog\"\n[modalProcessing]=\"modalProcessing\"\n[position]=\"position\"\n[size]=\"size\"\n[title]=\"title\">\n <div body class=\"body-content\">\n <div class=\"search-grid\">\n <div class=\"search\">\n <input\n class=\"form-input\"\n placeholder=\"Search...\"\n type=\"text\"\n [(ngModel)]=\"searchCriteria\"\n [disabled]=\"modalProcessing || isSearchGridLoading\"\n (keydown.enter)=\"onSearch()\" />\n </div>\n \n <lib-data-grid\n [disabled]=\"modalProcessing || isSearchGridLoading || isResultGridLoading\"\n [lazyLoadRows]=\"true\">\n </lib-data-grid>\n </div>\n\n <lib-multi-select-result-grid\n [isDisabled]=\"modalProcessing || isSearchGridLoading || isResultGridLoading\"\n [template]=\"itemTemplate\">\n </lib-multi-select-result-grid>\n </div>\n\n <div footer>\n <button\n class=\"btn blue-500\"\n type=\"button\"\n [class.loading]=\"modalProcessing\"\n (click)=\"onSave()\">\n {{ 'Button-Modal-MultiSelect-Confirm' | translate }}\n </button>\n </div>\n</lib-modal>","import { NgFor, NgIf, NgStyle } from '@angular/common';\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, inject, Input, OnInit, ViewChild } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { delay, filter, takeUntil } from 'rxjs';\nimport { SIDEBAR_CONFIGS, SidebarConfigs, SidebarMenu, SidebarMenuOpenMode, toSidebarMenuOpenMode } from '../../models';\nimport { SidebarService } from '../../services';\nimport { BaseComponent } from '../base.component';\n\n@Component({\n selector: 'lib-sidebar-item',\n templateUrl: './sidebar-item.component.html',\n styleUrls: ['./sidebar-item.component.scss'],\n imports: [\n NgFor,\n NgIf,\n NgStyle,\n TranslatePipe,\n ],\n host: {\n '[class.active]': 'isActive',\n '[class.expanded]': '!isCollapsed',\n '[class.first-level]': 'level === 0',\n '[class.last-child]': 'isLast',\n '[class.selected]': 'isSelected',\n }\n})\nexport class SidebarItemComponent extends BaseComponent implements OnInit, AfterViewInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('menuContainer') private menuContainer!: ElementRef<HTMLAnchorElement>;\n\n @Input() public isLast: boolean = false;\n @Input() public level: number = 0;\n @Input() public menu!: SidebarMenu;\n //#endregion\n\n //#region Variables\n protected hasFailed: boolean = false;\n protected isLoading: boolean = false;\n protected isSelected: boolean = false;\n\n private _childHeight: number = 0;\n private changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n private sidebarConfigs: SidebarConfigs = inject(SIDEBAR_CONFIGS);\n private sidebarService: SidebarService = inject(SidebarService);\n //#endregion\n\n //#region Properties\n public get childHeight(): number {\n return this._childHeight;\n }\n\n protected get areChildrenLoaded(): boolean {\n return this.isParent && (this.menu.children?.length ?? 0) > 0;\n }\n\n protected get externalLinkText(): string {\n return this.sidebarConfigs.externalLinkText;\n }\n\n protected get isActive(): boolean {\n return this.sidebarService.isActive;\n }\n\n protected get isCollapsed(): boolean {\n return this.sidebarService.isCollapsed;\n }\n\n protected get isParent(): boolean {\n return this.menu.childCount > 0;\n }\n\n protected get opensInNewBrowserTab(): boolean {\n return (this.menu.url?.length ?? 0) > 0\n && toSidebarMenuOpenMode(this.menu.openMode) === SidebarMenuOpenMode.ExternalNewTab;\n }\n\n protected get hasIcon(): boolean {\n return !!this.menu.icon && this.menu.icon.length > 0;\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngAfterViewInit(): void {\n if (!!this.menu && !!this.menu.parent) {\n this.menu.height = this.menuContainer?.nativeElement?.offsetHeight ?? 0;\n this.sidebarService.childrenInitialized.emit(this.menu.parent);\n }\n }\n\n public ngOnInit(): void {\n if (this.isParent) {\n this.sidebarService.childrenFailed\n .pipe(\n takeUntil(this.destroy$),\n filter((menu: SidebarMenu) => menu.id === this.menu.id),\n delay(1000),\n )\n .subscribe((_menu: SidebarMenu) => {\n this.hasFailed = true;\n this.isLoading = false;\n this.isSelected = false;\n this.menu.isSelected = false;\n\n this.changeDetectorRef.detectChanges();\n });\n\n this.sidebarService.childrenLoading\n .pipe(\n takeUntil(this.destroy$),\n filter((menu: SidebarMenu) => menu.id === this.menu.id)\n )\n .subscribe((_menu: SidebarMenu) => {\n this.hasFailed = false;\n this.isLoading = true;\n });\n\n this.sidebarService.childrenInitialized\n .pipe(\n takeUntil(this.destroy$),\n filter((menu: SidebarMenu) => menu.id === this.menu.id && this.menu.children.every((child: SidebarMenu) => (child.height ?? 0) > 0))\n )\n .subscribe((_menu: SidebarMenu) => {\n this.isLoading = false;\n this.hasFailed = false;\n this.updateSubMenuHeight();\n\n if (!!this.menu.parent) {\n this.sidebarService.childrenInitialized.emit(this.menu.parent);\n }\n\n this.changeDetectorRef.detectChanges();\n });\n }\n\n this.sidebarService.selectionChanged\n .pipe(\n takeUntil(this.destroy$),\n filter((menu: SidebarMenu) => menu.id === this.menu.id)\n )\n .subscribe((menu: SidebarMenu) => {\n this.isSelected = menu.isSelected;\n this.updateSubMenuHeight();\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onSelectItem(): void {\n if (this.sidebarService.shouldActivate) {\n this.sidebarService.isActive = true;\n }\n\n this.sidebarService.select(this.menu);\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n protected trackByFn(_index: number, item: SidebarMenu): number {\n return item.id;\n }\n\n private getChildHeight(menu: SidebarMenu): number {\n if (menu.isSelected) {\n return menu.children.reduce((height: number, childMenu: SidebarMenu) => height + (childMenu.height ?? 0) + this.getChildHeight(childMenu), 0);\n }\n return 0;\n }\n\n private updateSubMenuHeight(): void {\n this._childHeight = this.getChildHeight(this.menu);\n }\n //#endregion\n}","<li>\n <div #menuContainer\n [class.external]=\"opensInNewBrowserTab\"\n [class.failed]=\"hasFailed\"\n [class.loading]=\"isLoading\"\n [class.parent]=\"isParent\"\n [class.selected]=\"isSelected\"\n (click)=\"onSelectItem()\">\n <a [attr.title]=\"opensInNewBrowserTab ? externalLinkText : null\">\n <i *ngIf=\"hasIcon && level === 0\" class=\"fa-solid fa-fw {{ menu.icon }}\"></i>\n <span>{{ menu.label | translate }}</span>\n </a>\n\n <div class=\"loading\" *ngIf=\"isParent\">\n <svg class=\"animate-spin text-white\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n </div>\n </div>\n\n <ul *ngIf=\"isParent\"\n [class.open]=\"isSelected\"\n [ngStyle]=\"{\n 'height.px': childHeight,\n 'max-height.px': childHeight\n }\">\n <lib-sidebar-item *ngFor=\"let child of menu.children; trackBy: trackByFn; let last = last\"\n [menu]=\"child\"\n [level]=\"level+1\"\n [isLast]=\"last\">\n </lib-sidebar-item>\n </ul>\n</li>","import { CommonModule, NgFor, NgIf } from '@angular/common';\nimport { AfterViewInit, Component, HostListener, inject, OnInit } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { forkJoin, map, merge, Observable, of, switchMap, take, takeUntil } from 'rxjs';\nimport { SIDEBAR_CONFIGS, SidebarConfigs, SidebarMenu, SidebarRegion } from '../../models';\nimport { SidebarService } from '../../services';\nimport { BaseComponent } from '../base.component';\nimport { SidebarItemComponent } from '../sidebar-item/sidebar-item.component';\n\n@Component({\n selector: 'lib-sidebar',\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss'],\n imports: [\n CommonModule,\n NgFor,\n NgIf,\n SidebarItemComponent,\n TranslatePipe,\n ],\n host: {\n '[class.active]': 'isActive',\n '[class.expanded]': '!isCollapsed',\n }\n})\nexport class SidebarComponent extends BaseComponent implements AfterViewInit, OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Host listeners\n @HostListener('body:mousedown', ['$event'])\n private onBodyMouseDown(event: MouseEvent): void {\n if (this.isActive && event.target) {\n const target: HTMLElement = <HTMLElement>event.target;\n this.wasClickedOutside = (event.button === 0 && !target.closest('lib-sidebar')) ?? false;\n }\n }\n\n @HostListener('body:mouseup', ['$event'])\n private onBodyMouseUp(_event: MouseEvent): void {\n if (this.wasClickedOutside) {\n this.wasClickedOutside = false;\n this.deactivate();\n }\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n private onDocumentKeyDown(event: KeyboardEvent): void {\n event = event || window.event;\n \n let isEscapeKey: boolean = false;\n if ('key' in event) {\n isEscapeKey = (event.key === 'Escape' || event.key === 'Esc')\n } else {\n isEscapeKey = ((<KeyboardEvent>event).keyCode === 27)\n }\n\n if (isEscapeKey) {\n this.deactivate();\n }\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(_event: Event): void {\n this.updateShouldActivate();\n }\n //#endregion\n\n //#region Variables\n private sidebarConfigs: SidebarConfigs = inject(SIDEBAR_CONFIGS);\n\n protected configErrorText: string = this.sidebarConfigs.errorText;\n protected configLoadingText: string = this.sidebarConfigs.loadingText;\n protected hasFailed: boolean = false;\n protected menus: SidebarMenu[] = [];\n protected regions: SidebarRegion[] = [];\n\n private sidebarService: SidebarService = inject(SidebarService);\n private wasClickedOutside: boolean = false;\n //#endregion\n\n //#region Properties\n protected get isActive(): boolean {\n return this.sidebarService.isActive;\n }\n\n protected get isCollapsed(): boolean {\n return this.sidebarService.isCollapsed;\n }\n\n protected get isLoading(): boolean {\n return this.menus.length === 0;\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngAfterViewInit(): void {\n this.updateShouldActivate();\n }\n\n public ngOnInit(): void {\n merge(this.sidebarService.menuUrlSelected, this.sidebarService.menuExternalUrlSelected)\n .pipe(takeUntil(this.destroy$))\n .subscribe((_menu: SidebarMenu) => this.deactivate());\n\n this.sidebarService.loadRoot()\n .pipe(\n take(1),\n switchMap((menus: SidebarMenu[]) => this.loadAreaChildren(menus)),\n )\n .subscribe({\n next: (menus: SidebarMenu[]) => {\n this.menus = menus;\n this.regions = this.groupIntoRegions(menus);\n },\n error: () => this.hasFailed = true\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public collapse(): void {\n this.sidebarService.isCollapsed = !this.sidebarService.isCollapsed;\n this.sidebarService.isActive = false;\n\n if (this.sidebarService.isCollapsed) {\n this.sidebarService.deselectAll();\n }\n\n this.updateShouldActivate();\n }\n //#endregion\n\n //#region Private methods\n protected trackByFn(_index: number, item: SidebarMenu): number {\n return item.id;\n }\n\n protected trackByRegion(_index: number, region: SidebarRegion): string {\n return region.name ?? '';\n }\n\n /** Whether this top-level menu stands for an area rather than a destination of its own. */\n private isArea(menu: SidebarMenu): boolean {\n return menu.childCount > 0 && (menu.url?.length ?? 0) === 0;\n }\n\n // Group top-level menus into regions by their optional `region` label, preserving\n // first-appearance order. Ungrouped menus fall into a single header-less region.\n private groupByRegionLabel(menus: SidebarMenu[]): SidebarRegion[] {\n const regions: SidebarRegion[] = [];\n const byName: Map<string | undefined, SidebarRegion> = new Map<string | undefined, SidebarRegion>();\n\n menus.forEach((menu: SidebarMenu) => {\n let region: SidebarRegion | undefined = byName.get(menu.region);\n if (!region) {\n region = { name: menu.region, items: [] };\n byName.set(menu.region, region);\n regions.push(region);\n }\n region.items.push(menu);\n });\n\n return regions;\n }\n\n // Derive the regions from the tree: an area menu becomes a header and lends the group its own\n // children, so the area carries one translated label and one order instead of a string repeated\n // across every item. Anything that is not an area keeps falling into a header-less region, which\n // is created where the first such item appears so the original ordering still holds.\n private groupByRootMenus(menus: SidebarMenu[]): SidebarRegion[] {\n const regions: SidebarRegion[] = [];\n let ungrouped: SidebarRegion | undefined;\n\n menus.forEach((menu: SidebarMenu) => {\n if (this.isArea(menu)) {\n regions.push({ name: menu.label, items: menu.children });\n return;\n }\n\n if (!ungrouped) {\n ungrouped = { name: undefined, items: [] };\n regions.push(ungrouped);\n }\n\n ungrouped.items.push(menu);\n });\n\n return regions;\n }\n\n private groupIntoRegions(menus: SidebarMenu[]): SidebarRegion[] {\n return this.sidebarConfigs.shouldDeriveAreasFromRootMenus\n ? this.groupByRootMenus(menus)\n : this.groupByRegionLabel(menus);\n }\n\n /**\n * Fetches the children of every area up front, because they are rendered flat rather than\n * behind a click, so the lazy load a collapsible parent relies on would never be triggered.\n */\n private loadAreaChildren(menus: SidebarMenu[]): Observable<SidebarMenu[]> {\n if (!this.sidebarConfigs.shouldDeriveAreasFromRootMenus) {\n return of(menus);\n }\n\n const areas: SidebarMenu[] = menus.filter((menu: SidebarMenu) => this.isArea(menu));\n\n // forkJoin never emits on an empty array, so a menu with no areas has to short-circuit.\n if (areas.length === 0) {\n return of(menus);\n }\n\n return forkJoin(areas.map((area: SidebarMenu) => this.sidebarService.loadChildrenFor(area)))\n .pipe(map(() => menus));\n }\n\n private deactivate(): void {\n if (this.sidebarService.isActive) {\n this.sidebarService.isActive = false;\n this.sidebarService.deselectAll();\n }\n }\n\n private updateShouldActivate(): void {\n this.sidebarService.shouldActivate =\n (window.innerWidth <= 767 && !this.sidebarService.isCollapsed)\n || this.sidebarService.isCollapsed;\n }\n //#endregion\n}","<div class=\"sidebar-toolbar\">\n <button type=\"button\" class=\"sidebar-toggle\" (click)=\"collapse()\" aria-label=\"Toggle navigation\">\n <i class=\"fa-solid fa-angle-left\" [class.is-collapsed]=\"isCollapsed\"></i>\n </button>\n</div>\n\n<nav>\n <ul *ngIf=\"!isLoading; else loading\">\n <ng-container *ngFor=\"let region of regions; trackBy: trackByRegion\">\n <li class=\"sidebar-region-header\" *ngIf=\"region.name\">\n <span>{{ region.name | translate }}</span>\n </li>\n\n <lib-sidebar-item *ngFor=\"let menu of region.items; trackBy: trackByFn\"\n [menu]=\"menu\">\n </lib-sidebar-item>\n </ng-container>\n\n <div class=\"error\" *ngIf=\"hasFailed\">\n <div>\n <i class=\"fa-solid fa-fw fa-triangle-exclamation\"></i>\n <span>{{ configErrorText }}</span>\n </div>\n </div>\n </ul>\n</nav>\n\n<div class=\"sidebar-footer\"><ng-content></ng-content></div>\n\n<ng-template #loading>\n <div class=\"loading\">\n <div>\n <svg class=\"animate-spin text-white\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n <span>{{ configLoadingText }}</span>\n </div>\n </div>\n</ng-template>","import { NgClass, NgFor, NgIf } from '@angular/common';\nimport { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { IRibbonButtonOption } from '../../models/ribbon-button-option';\n\n@Component({\n selector: 'lib-ribbon-button',\n templateUrl: './ribbon-button.component.html',\n host: {\n '[class.dropdown]': 'options.length > 0',\n '[class.show]': 'showDropdown',\n },\n styleUrls: ['./ribbon-button.component.scss'],\n imports: [\n NgClass,\n NgFor,\n NgIf,\n TranslatePipe,\n ]\n})\nexport class RibbonButtonComponent {\n //#region ViewChilds, Inputs, Outputs\n @Input() public color: string = 'text-primary-500';\n @Input() public defaultOption: number = -1;\n @Input() public disabled: boolean = false;\n @Input() public icon?: string;\n @Input() public iconSize: 'small' | 'large' = 'large';\n @Input() public label: string = '';\n @Input() public loading: boolean = false;\n @Input() public options: IRibbonButtonOption[] = [];\n @Input() public tooltip: string = '';\n\n @Output() public action = new EventEmitter<string | undefined>();\n //#endregion\n\n //#region Host listeners\n @HostListener('body:mousedown', ['$event'])\n private bodyMouseDown(event: MouseEvent): void {\n if (this.showDropdown) {\n const target: HTMLElement = <HTMLElement>event.target;\n\n const button: HTMLElement | null | undefined = target.closest('.button-container')?.parentElement;\n\n this.clickedOutside =\n event.button === 0\n && !target.closest('.options-dropdown')\n && (\n !button || (!button?.classList.contains('dropdown') && !button?.classList.contains('open'))\n );\n }\n }\n\n @HostListener('body:mouseup', ['$event'])\n private bodyMouseUp(event: MouseEvent): void {\n if (this.showDropdown && this.clickedOutside) {\n this.showDropdown = false;\n }\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n private documentKeyDown(event: KeyboardEvent): void {\n event = event || window.event;\n \n let isEscape: boolean = false;\n if ('key' in event) {\n isEscape = (event.key === 'Escape' || event.key === 'Esc');\n } else {\n isEscape = ((<KeyboardEvent>event).keyCode === 27);\n }\n\n if (this.showDropdown && isEscape) {\n this.showDropdown = false;\n }\n }\n //#endregion\n\n //#region Variables\n protected showDropdown: boolean = false;\n protected status: null | 'failure' | 'warning' | 'success' = null;\n\n private clickedOutside: boolean = false;\n //#endregion\n\n //#region Properties\n protected get buttonIcon(): string {\n switch (this.status) {\n case 'success':\n return 'fa-check';\n case 'failure':\n return 'fa-times';\n case 'warning':\n return 'fa-exclamation';\n default:\n return this.icon ?? '';\n }\n }\n\n protected get isButtonDisabled(): boolean {\n return this.disabled || this.loading || (this.options.length > 0 && !this.options.some((option: IRibbonButtonOption) => this.isOptionVisible(option)));\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n if (this.options.length > 0) {\n if (this.defaultOption >= 0 && this.defaultOption < this.options.length) {\n this.showDropdown = false;\n this.action.emit(this.options[this.defaultOption].id);\n } else {\n this.onShowHideDropdown();\n }\n } else {\n this.action.emit();\n }\n }\n\n protected onOptionClicked(option: IRibbonButtonOption) {\n this.showDropdown = false;\n this.action.emit(option.id);\n }\n\n protected onShowHideDropdown(): void {\n this.showDropdown = !this.showDropdown;\n }\n //#endregion\n\n //#region Public methods\n public finishLoading(status: 'failure' | 'warning' | 'success'): void {\n this.loading = false;\n this.status = status;\n\n setTimeout(() => {\n this.status = null;\n }, 1000);\n }\n\n public startLoading(): void {\n this.loading = true;\n }\n\n protected isOptionDisabled(option: IRibbonButtonOption): boolean {\n return option.isDisabled || ((option.allowedActions?.length ?? 0) > 0 && option.isAccessAllowed === undefined);\n }\n\n protected isOptionVisible(option: IRibbonButtonOption): boolean {\n return (option.isVisible ?? true) && (option.allowedActions === undefined || option.allowedActions.length === 0 || option.isAccessAllowed === true || (option.isAccessAllowed == undefined && option.allowedActions?.length > 0));\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<div class=\"button-container\"\n[attr.title]=\"tooltip || null\">\n <a class=\"button\"\n [class.disabled]=\"isButtonDisabled\"\n [class.success]=\"status === 'success'\"\n [class.warning]=\"status === 'warning'\"\n [class.failure]=\"status === 'failure'\"\n [class.small]=\"iconSize === 'small'\"\n (click)=\"onButtonClicked()\"\n >\n <span class=\"icon\" [class.loading]=\"loading\">\n <i class=\"fas fa-fw\" [ngClass]=\"[ buttonIcon, color ]\"></i>\n \n <svg [ngClass]=\"[ color ]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n </span>\n \n <span class=\"label\" [class.text-white]=\"status !== null\">\n {{ label | translate }}\n </span>\n </a>\n \n <a class=\"button-dropdown\" *ngIf=\"options.length > 0\"\n [class.disabled]=\"isButtonDisabled\"\n [class.success]=\"status === 'success'\"\n [class.warning]=\"status === 'warning'\"\n [class.failure]=\"status === 'failure'\"\n [class.small]=\"iconSize === 'small'\"\n (click)=\"onShowHideDropdown()\"\n >\n <i class=\"fas fa-chevron-down\" [ngClass]=\"[ color ]\"></i>\n </a>\n</div>\n\n<ul class=\"options-dropdown\" *ngIf=\"options.length > 0\">\n <li *ngFor=\"let option of options; let i = index\"\n [class.default-option]=\"i === defaultOption\"\n [class.disabled]=\"isOptionDisabled(option)\"\n [class.hidden]=\"!isOptionVisible(option)\"\n (click)=\"onOptionClicked(option)\"\n >\n <i class=\"fas fa-fw\" *ngIf=\"!!option.icon\" [ngClass]=\"[ option.icon, color ]\"></i> {{ option.label | translate }}\n </li>\n</ul>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ribbon',\n templateUrl: './ribbon.component.html',\n styleUrls: ['./ribbon.component.scss']\n})\nexport class RibbonComponent {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Host listeners\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<div>\n <ng-content></ng-content>\n</div>\n\n<ng-content select=\"[right]\"></ng-content>","import { Component, ContentChildren, Input, QueryList } from '@angular/core';\n\nimport { RibbonGroupChild } from '../../models/ribbon-group-child';\n\n@Component({\n selector: 'lib-ribbon-group',\n templateUrl: './ribbon-group.component.html',\n styleUrls: ['./ribbon-group.component.scss'],\n host: { '[class.hidden]': '!hasChildren' }\n})\nexport class RibbonGroupComponent {\n //#region ViewChilds, Inputs, Outputs\n @ContentChildren(RibbonGroupChild, { descendants: true }) public children?: QueryList<RibbonGroupChild>;\n\n @Input() public label: string = '';\n //#endregion\n\n //#region Host listeners\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n protected get hasChildren(): boolean {\n return this.children?.some(x => x.visible) ?? false;\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<div class=\"content\">\n <ng-content></ng-content>\n</div>\n\n<div class=\"label\">\n <span>{{ label }}</span>\n</div>","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\n\n@Pipe({\n name: 'enumTranslate'\n})\nexport class EnumTranslatePipe implements PipeTransform {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private translate: TranslateService = inject(TranslateService);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public transform(enumType: any): Array<{value: any, display: Observable<any> }> {\n return Object.keys(enumType)\n .filter(key => isNaN(Number(key)))\n .map(key => ({\n value: enumType[key],\n display: this.translate.get(key),\n }));\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'replaceMany'\n})\nexport class ReplaceManyPipe implements PipeTransform {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public transform(message: string, replaceArgs?: { [id: string]: string | null | undefined }): string {\n if (replaceArgs) {\n for (const [key, value] of Object.entries(replaceArgs)) {\n message = message.replace(key, value ?? '');\n }\n }\n return message;\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'replace'\n})\nexport class ReplacePipe implements PipeTransform {\n \n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public transform(message: string, searchValue: string, replaceValue?: string | null): string {\n return message.replace(searchValue, replaceValue ?? '');\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { NgModule } from '@angular/core';\nimport * as c from './components';\nimport * as d from './directives';\nimport * as p from './pipes';\n\n\n@NgModule({\n declarations: [],\n imports: [\n c.CatalogSelectComponent,\n c.DataGridComponent,\n c.DataGridRowComponent,\n c.FormInputComponent,\n c.FormInputGroupComponent,\n c.FormGroupComponent,\n c.GroupAccordionComponent,\n c.GroupContainerComponent,\n c.GroupScrollSpyComponent,\n c.SidebarComponent,\n c.ModalComponent,\n c.MultiEditorComponent,\n c.MultiSelectComponent,\n c.MultiSelectResultGridComponent,\n c.RibbonComponent,\n c.RibbonButtonComponent,\n c.RibbonGroupComponent,\n\n d.ScrollSpyDirective,\n\n p.EnumTranslatePipe,\n p.ReplacePipe,\n p.ReplaceManyPipe,\n ],\n exports: [\n c.CatalogSelectComponent,\n c.DataGridComponent,\n c.DataGridRowComponent,\n c.FormInputComponent,\n c.FormInputGroupComponent,\n c.FormGroupComponent,\n c.GroupAccordionComponent,\n c.GroupContainerComponent,\n c.GroupScrollSpyComponent,\n c.SidebarComponent,\n c.ModalComponent,\n c.MultiEditorComponent,\n c.MultiSelectComponent,\n c.MultiSelectResultGridComponent,\n c.RibbonComponent,\n c.RibbonButtonComponent,\n c.RibbonGroupComponent,\n\n d.ScrollSpyDirective,\n\n p.EnumTranslatePipe,\n p.ReplacePipe,\n p.ReplaceManyPipe,\n ]\n})\n/**\n * @deprecated Use standalone component imports instead of LibraryModule.\n * Import individual components directly in your component's `imports` array.\n */\nexport class LibraryModule {}","import { Injectable } from '@angular/core';\nimport { DataGridConfigs } from '../../models/configs/data-grid-configs';\nimport { GridConfigsProvider } from './grid-configs.provider';\n\n@Injectable()\nexport class DataGridConfigsProvider extends GridConfigsProvider<DataGridConfigs> {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this._configs =\n {\n ...this._configs,\n multiSelect: false,\n multiSelectSize: 'minmax(1.5rem, min-content)',\n } as DataGridConfigs;\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport class DateValidators {\n //#region Public methods\n public static greaterThanControl(controlName: string) : ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const compareControl: AbstractControl | null | undefined = control.parent?.get(controlName);\n if (!!control.value && !!compareControl?.value && new Date(control.value) <= new Date(compareControl?.value)) {\n return { 'greaterThanControl': true };\n }\n return null;\n }\n }\n\n public static greaterThanOrEqualControl(controlName: string) : ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const compareControl: AbstractControl | null | undefined = control.parent?.get(controlName);\n if (!!control.value && !!compareControl?.value && new Date(control.value) < new Date(compareControl?.value)) {\n return { 'greaterThanOrEqualControl': true };\n }\n return null;\n }\n }\n\n public static greaterThanOrEqualToday(control: AbstractControl): ValidationErrors | null {\n let today: Date = new Date();\n if (!!control.value && new Date(control.value) < today) {\n return { 'greaterThanOrEqualToday': true };\n }\n return null;\n }\n\n public static greaterThanToday(control: AbstractControl): ValidationErrors | null {\n let today: Date = new Date();\n if (!!control.value && new Date(control.value) <= today) {\n return { 'greaterThanToday': true };\n }\n return null;\n }\n\n public static lessThanControl(controlName: string) : ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const compareControl: AbstractControl | null | undefined = control.parent?.get(controlName);\n if (!!control.value && !!compareControl?.value && new Date(control.value) >= new Date(compareControl?.value)) {\n return { 'lessThanControl': true };\n }\n return null;\n }\n }\n\n public static lessThanOrEqualControl(controlName: string) : ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const compareControl: AbstractControl | null | undefined = control.parent?.get(controlName);\n if (!!control.value && !!compareControl?.value && new Date(control.value) > new Date(compareControl?.value)) {\n return { 'lessThanOrEqualControl': true };\n }\n return null;\n }\n }\n\n public static lessThanOrEqualToday(control: AbstractControl): ValidationErrors | null {\n let today: Date = new Date();\n if (!!control.value && new Date(control.value) > today) {\n return { 'lessThanOrEqualToday': true };\n }\n return null;\n }\n\n public static lessThanToday(control: AbstractControl): ValidationErrors | null {\n let today: Date = new Date();\n if (!!control.value && new Date(control.value) >= today) {\n return { 'lessThanToday': true };\n }\n return null;\n }\n\n public static maxDate(maxDate: Date): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!!control.value && new Date(control.value) > maxDate) {\n return { 'maxDate': true };\n }\n return null;\n }\n }\n\n public static minDate(minDate: Date): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!!control.value && new Date(control.value) < minDate) {\n return { 'minDate': true };\n }\n return null;\n }\n }\n //#endregion\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i1.CatalogSelectComponent","i2.DataGridComponent","i3.DataGridRowComponent","i4.FormInputComponent","i5.FormInputGroupComponent","i6.FormGroupComponent","i7.GroupAccordionComponent","i8.GroupContainerComponent","i9.GroupScrollSpyComponent","i10.SidebarComponent","i11.ModalComponent","i12.MultiEditorComponent","i13.MultiSelectComponent","i14.MultiSelectResultGridComponent","i15.RibbonComponent","i16.RibbonButtonComponent","i17.RibbonGroupComponent","i18.ScrollSpyDirective","i19.EnumTranslatePipe","i20.ReplacePipe","i21.ReplaceManyPipe","c.CatalogSelectComponent","c.DataGridComponent","c.DataGridRowComponent","c.FormInputComponent","c.FormInputGroupComponent","c.SidebarComponent","c.MultiEditorComponent","c.MultiSelectComponent","c.MultiSelectResultGridComponent","c.FormGroupComponent","c.GroupAccordionComponent","c.GroupContainerComponent","c.GroupScrollSpyComponent","c.ModalComponent","c.RibbonComponent","c.RibbonButtonComponent","c.RibbonGroupComponent","d.ScrollSpyDirective","p.EnumTranslatePipe","p.ReplacePipe","p.ReplaceManyPipe"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"zambon-dev-library.mjs","sources":["../../../../libs/library/src/lib/components/base.component.ts","../../../../libs/library/src/lib/helpers/date-helpers.ts","../../../../libs/library/src/lib/helpers/display-controls.ts","../../../../libs/library/src/lib/helpers/guid-helper.ts","../../../../libs/library/src/lib/helpers/route-formatter.ts","../../../../libs/library/src/lib/services/catalog.service.ts","../../../../libs/library/src/lib/services/data-providers/data-provider.service.ts","../../../../libs/library/src/lib/services/datasets/base.dataset.ts","../../../../libs/library/src/lib/services/configs-providers/grid-configs.provider.ts","../../../../libs/library/src/lib/services/datasets/grid.dataset.ts","../../../../libs/library/src/lib/services/datasets/data-grid.dataset.ts","../../../../libs/library/src/lib/services/datasets/multi-editor.dataset.ts","../../../../libs/library/src/lib/services/datasets/multi-select-result.dataset.ts","../../../../libs/library/src/lib/services/form-group.service.ts","../../../../libs/library/src/lib/services/form.service.ts","../../../../libs/library/src/lib/models/ribbon-group-child.ts","../../../../libs/library/src/lib/models/sidebar/sidebar-configs.ts","../../../../libs/library/src/lib/models/sidebar/sidebar-menu.ts","../../../../libs/library/src/lib/models/sidebar/sidebar-menu-open-mode.ts","../../../../libs/library/src/lib/services/sidebar.service.ts","../../../../libs/library/src/lib/components/form-input/form-input.component.ts","../../../../libs/library/src/lib/components/form-input/form-input.component.html","../../../../libs/library/src/lib/components/form-input-group/form-input-group.component.ts","../../../../libs/library/src/lib/components/form-input-group/form-input-group.component.html","../../../../libs/library/src/lib/components/catalog-select/catalog-select.component.ts","../../../../libs/library/src/lib/components/catalog-select/catalog-select.component.html","../../../../libs/library/src/lib/components/data-grid-row/data-grid-row.component.ts","../../../../libs/library/src/lib/components/data-grid-row/data-grid-row.component.html","../../../../libs/library/src/lib/components/data-grid/data-grid.component.ts","../../../../libs/library/src/lib/components/data-grid/data-grid.component.html","../../../../libs/library/src/lib/components/form-group/form-group.component.ts","../../../../libs/library/src/lib/components/form-group/form-group.component.html","../../../../libs/library/src/lib/components/group-accordion/group-accordion.component.ts","../../../../libs/library/src/lib/components/group-accordion/group-accordion.component.html","../../../../libs/library/src/lib/directives/scroll-spy.directive.ts","../../../../libs/library/src/lib/components/group-container/group-container.component.ts","../../../../libs/library/src/lib/components/group-container/group-container.component.html","../../../../libs/library/src/lib/components/group-scroll-spy/group-scroll-spy.component.ts","../../../../libs/library/src/lib/components/group-scroll-spy/group-scroll-spy.component.html","../../../../libs/library/src/lib/components/modal/modal.component.ts","../../../../libs/library/src/lib/components/modal/modal.component.html","../../../../libs/library/src/lib/components/multi-editor/multi-editor.component.ts","../../../../libs/library/src/lib/components/multi-editor/multi-editor.component.html","../../../../libs/library/src/lib/components/multi-select/result-grid/result-grid.component.ts","../../../../libs/library/src/lib/components/multi-select/result-grid/result-grid.component.html","../../../../libs/library/src/lib/components/multi-select/multi-select.component.ts","../../../../libs/library/src/lib/components/multi-select/multi-select.component.html","../../../../libs/library/src/lib/components/sidebar-item/sidebar-item.component.ts","../../../../libs/library/src/lib/components/sidebar-item/sidebar-item.component.html","../../../../libs/library/src/lib/components/sidebar/sidebar.component.ts","../../../../libs/library/src/lib/components/sidebar/sidebar.component.html","../../../../libs/library/src/lib/components/ribbon-button/ribbon-button.component.ts","../../../../libs/library/src/lib/components/ribbon-button/ribbon-button.component.html","../../../../libs/library/src/lib/components/ribbon/ribbon.component.ts","../../../../libs/library/src/lib/components/ribbon/ribbon.component.html","../../../../libs/library/src/lib/components/ribbon-group/ribbon-group.component.ts","../../../../libs/library/src/lib/components/ribbon-group/ribbon-group.component.html","../../../../libs/library/src/lib/pipes/enum.ts","../../../../libs/library/src/lib/pipes/replace-many.pipe.ts","../../../../libs/library/src/lib/pipes/replace.pipe.ts","../../../../libs/library/src/lib/library.module.ts","../../../../libs/library/src/lib/services/configs-providers/data-grid-configs.provider.ts","../../../../libs/library/src/lib/validators/date.validators.ts","../../../../libs/library/src/zambon-dev-library.ts"],"sourcesContent":["import { Component, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Component({ template: '' })\nexport abstract class BaseComponent implements OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Host listeners\n //#endregion\n\n //#region Variables\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","export class DateHelpers {\n //#region Public methods\n public static diffDays(initialDate: Date, finalDate: Date): number {\n const initialDateOnly: Date = new Date(initialDate.getFullYear(), initialDate.getMonth(), initialDate.getDate());\n const finalDateOnly: Date = new Date(finalDate.getFullYear(), finalDate.getMonth(), finalDate.getDate());\n\n const diff: number = initialDateOnly.getTime() - finalDateOnly.getTime();\n return Math.floor(diff / (1000 * 60 * 60 * 24));\n }\n //#endregion\n}\n","import { AbstractControl } from '@angular/forms';\n\n/**\n * Tracks the form controls that exist only to show a catalog selection's label.\n *\n * `lib-catalog-select` works in pairs: the control named by `controlName` holds the identifier, and\n * the one named by `displayControlName` holds the text the user reads. The second is created by the\n * component itself when a screen does not declare it, so a form ends up carrying controls nobody\n * wrote down — and a filters form then submits them alongside the real filters.\n *\n * The mark lives in a `WeakSet` keyed by the control instance rather than by its name. That is the\n * only scope that is actually correct: two forms may each have an `employeeName`, and only the one\n * a catalog select drives is a display control. It also keeps nothing alive.\n */\nexport class DisplayControls {\n //#region Variables\n private static readonly marked: WeakSet<AbstractControl> = new WeakSet<AbstractControl>();\n //#endregion\n\n //#region Public methods\n /**\n * Whether the control exists only to display a catalog selection's label.\n *\n * @param control The control, which may be absent.\n * @returns `true` when a catalog select drives it as its display control.\n */\n public static isDisplayControl(control: AbstractControl | null | undefined): boolean {\n return !!control && DisplayControls.marked.has(control);\n }\n\n /**\n * Marks the control as existing only to display a catalog selection's label.\n *\n * @param control The control, which may be absent.\n */\n public static markAsDisplayControl(control: AbstractControl | null | undefined): void {\n if (control) {\n DisplayControls.marked.add(control);\n }\n }\n //#endregion\n}\n","export class GuidHelper {\n public static generateGUID(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c: string) => {\n const r: number = (Math.random() * 16) | 0;\n const v: number = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}","import { ActivatedRouteSnapshot } from '@angular/router';\n\nexport abstract class RouterFormatter {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public static getURL(route: ActivatedRouteSnapshot): string {\n let parentRoute = '';\n if (route.parent) {\n parentRoute = this.getURL(route.parent);\n }\n\n let path = route.routeConfig?.path ?? '';\n route.paramMap.keys\n .forEach(k => {\n path = path.replace(':' + k,\n k === 'view'\n ? ''\n : (route.paramMap.get(k) ?? '')\n );\n });\n\n if (!route.parent || (parentRoute !== '' && parentRoute !== '/' && route.routeConfig?.path && path)) {\n parentRoute += '/';\n }\n\n return parentRoute + path;\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { ICatalogResult } from '../models/catalog-result';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CatalogService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private http: HttpClient = inject(HttpClient);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public search(endpoint: string, maxResults: number, criteria?: string, filters: { [key: string ] : string } | null = null): Observable<ICatalogResult> {\n return this.http.post<ICatalogResult>(`${endpoint}`, { maxResults, criteria, filters });\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { HttpErrorResponse } from '@angular/common/http';\nimport { inject, Injectable, OnDestroy } from '@angular/core';\nimport { ActivatedRoute, ParamMap } from '@angular/router';\nimport { Observable, ReplaySubject, Subject, take } from 'rxjs';\n\n@Injectable()\nexport abstract class DataProviderService<TEntityModel> implements OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected activatedRoute: ActivatedRoute = inject(ActivatedRoute);\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n protected shouldLazyLoad = false;\n\n private _entityID?: number;\n private errorSubject: Subject<HttpErrorResponse> = new Subject<HttpErrorResponse>();\n private isLoading = false;\n private isModelLoaded = false;\n private modelCache: ReplaySubject<TEntityModel | null> = new ReplaySubject<TEntityModel | null>(1);\n //#endregion\n\n //#region Properties\n public get entityID(): number | undefined {\n return this._entityID\n }\n\n public get hasEntityID(): boolean {\n return !!this.entityID;\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n this.activatedRoute.paramMap\n .pipe(take(1))\n .subscribe((paramMap: ParamMap) => {\n const newID = Number(paramMap.get('id'));\n if (newID !== this.entityID) {\n this._entityID = newID;\n \n // Need to wait for the data-provider to be initialized.\n queueMicrotask(() => {\n // When lazy loading, the model should be loaded by the consuming component.\n if (!this.shouldLazyLoad) {\n this.refreshModel();\n }\n });\n }\n });\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public getError$(): Observable<HttpErrorResponse> {\n return this.errorSubject.asObservable();\n }\n\n public abstract getTitle(entity: TEntityModel): string;\n \n public getModel$(): Observable<TEntityModel | null> {\n if (!this.isModelLoaded && !this.shouldLazyLoad) {\n this.refreshModel();\n }\n return this.modelCache.asObservable();\n }\n\n public refreshModel(): void {\n if (this.isLoading) {\n return;\n }\n\n this.isLoading = true;\n\n this.loadModel(this.entityID)\n .pipe(take(1))\n .subscribe({\n next: (model: TEntityModel | null) => {\n this.isLoading = false;\n this.updateModel(model);\n },\n error: (error: HttpErrorResponse) => {\n this.isLoading = false;\n this.isModelLoaded = true;\n this.modelCache.next(null);\n this.errorSubject.next(error);\n },\n });\n }\n\n public resetForNewEntity(): void {\n this._entityID = undefined;\n this.isModelLoaded = false;\n this.modelCache.next(null);\n }\n\n public abstract saveModel(model: any): Observable<TEntityModel>;\n\n public updateModel(model: any): void {\n this.isModelLoaded = true;\n\n // Update entity ID if changed.\n if (model && (model as any).id !== this.entityID) {\n this._entityID = (model as any).id;\n }\n\n this.modelCache.next(model);\n }\n //#endregion\n\n //#region Private methods\n protected abstract loadModel(entityID?: number): Observable<TEntityModel | null>;\n //#endregion\n}","import { inject, Injectable, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { DataProviderService } from '../data-providers';\n\n@Injectable()\nexport abstract class BaseDataset implements OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataProvider: DataProviderService<any> | null;\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n \n // TODO: Remove.\n private _parentEntityId?: any;\n //#endregion\n\n //#region Properties\n // TODO: Remove.\n public get parentEntityId(): any {\n return this._parentEntityId;\n }\n public set parentEntityId(value: any) {\n this._parentEntityId = value;\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n this.dataProvider = inject(DataProviderService, { optional: true });\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","import { Injectable } from '@angular/core';\nimport { GridConfigs } from '../../models/configs/grid-configs';\n\n@Injectable()\nexport class GridConfigsProvider<TGridConfigs extends GridConfigs = GridConfigs> {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected _configs: TGridConfigs;\n //#endregion\n\n //#region Properties\n public get configs(): TGridConfigs {\n return this._configs;\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n this._configs = {\n loadingDisplayText: 'Loading...',\n messageOnEmpty: 'No results',\n recordBlockSize: 100,\n rowHeight: 41.6,\n rowsToDisplay: 6,\n } as TGridConfigs;\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { EventEmitter, inject, Injectable } from '@angular/core';\nimport { Observable, take } from 'rxjs';\nimport { GuidHelper } from '../../helpers';\nimport { GridConfigs } from '../../models/configs/grid-configs';\nimport { GridConfigsProvider } from '../configs-providers/grid-configs.provider';\nimport { BaseDataset } from './base.dataset';\n\nconst KEY_FIELD = '_key';\n\n@Injectable()\nexport abstract class GridDataset extends BaseDataset {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n public configs: GridConfigs;\n public filtersChanged: EventEmitter<{ [key: string]: string }> = new EventEmitter<{ [key: string]: string }>();\n public isLoading = false;\n public loadedLastRow = false;\n public loadFinished: EventEmitter<boolean> = new EventEmitter<boolean>();\n public loadStarted: EventEmitter<void> = new EventEmitter<void>();\n public totalRows?: number;\n\n protected compareProperty = 'id';\n protected configsProvider: GridConfigsProvider;\n protected focusedRow: string | null = null;\n protected recordBlock = 0;\n\n private _hasBeenLoaded = false;\n private _loadedKeys?: string[];\n private _loadedRows?: any[];\n private queryFilters?: { [key: string]: string; };\n //#endregion\n\n //#region Properties\n public get filters(): { [key: string]: string; } | undefined {\n return this.queryFilters;\n }\n\n public get hasBeenLoaded(): boolean {\n return this._hasBeenLoaded;\n }\n\n public get hasLoadedRows(): boolean {\n return !!this._loadedRows && this._loadedRows.length > 0;\n }\n\n public get keyProperty(): string {\n return this.compareProperty;\n }\n\n public get loadedKeys(): string[] | undefined {\n return this._loadedKeys;\n }\n\n public get loadedRows(): any[] | undefined {\n return this._loadedRows;\n }\n\n public override get parentEntityId(): any {\n return super.parentEntityId;\n }\n\n public override set parentEntityId(value: any) {\n super.parentEntityId = value;\n if (this.loadedRows) {\n this.refresh();\n }\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.configsProvider = inject(GridConfigsProvider);\n this.configs = JSON.parse(JSON.stringify(this.configsProvider.configs));\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public addNewRow(row: any): void {\n this.updateLoadedRows([row]);\n }\n\n public clearFocusedRow(): void {\n this.focusedRow = null;\n }\n\n public getRowData(key: string): any | null {\n if (this.hasLoadedRows) {\n const index: number = this._loadedKeys!.indexOf(key);\n return this.loadedRows![index];\n }\n return null;\n }\n\n public getRowID(key: string): any {\n const row: any = this.getRowData(key);\n\n return this.compareProperty.split('.')\n .reduce((row: any, property: string) => row[property], row);\n }\n\n public getRowInternalKey(row: any): string {\n return row[KEY_FIELD];\n }\n\n public hasRowWithID(id: any): boolean {\n if (!this.hasLoadedRows) {\n return false;\n }\n\n const loadedIDs: any[] = this.compareProperty.split('.')\n .reduce((loadedRows: any[], property: string) => loadedRows.map((row: any) => row[property]), this._loadedRows ?? [])\n .map((row: any) =>\n typeof id === 'string' ? `${row}`\n : typeof id === 'number' ? parseInt(`${row}`)\n : row\n );\n\n return loadedIDs.indexOf(id) >= 0;\n }\n\n public isKeyExists(key: string): boolean {\n return this.hasLoadedRows && this._loadedKeys!.some((x: string) => x === key);\n }\n\n public loadRows(): void {\n if (this.isLoading) {\n return;\n }\n\n this.isLoading = true;\n this.loadStarted.emit();\n\n const parameters: any = {\n endRow: this.configsProvider.configs.recordBlockSize,\n filters: this.queryFilters,\n startRow: this.recordBlock,\n };\n\n this.getData(parameters)\n .pipe(take(1))\n .subscribe({\n next: (response: any[] | { items: any[]; totalRows: number }) => {\n let rows: any[];\n if (Array.isArray(response)) {\n rows = response;\n } else {\n rows = response?.items ?? [];\n this.totalRows = response?.totalRows;\n }\n\n this.updateLoadedRows(rows ?? []);\n\n this.isLoading = false;\n this._hasBeenLoaded = true;\n this.loadFinished.emit(true);\n },\n error: (_: any) => {\n this.isLoading = false;\n this.loadFinished.emit(false);\n }\n });\n }\n\n public refresh(): void {\n if (this.focusedRow) {\n this.clearFocusedRow();\n }\n this.clearLoadedRows();\n this.loadRows();\n }\n\n public removeKeys(keys: string[]): void {\n if (!this.hasLoadedRows) {\n return;\n }\n\n keys.forEach((key: string) => {\n if (this.focusedRow === key) {\n this.clearFocusedRow();\n }\n\n const indexToRemove: number = this._loadedKeys!.indexOf(key);\n\n if (indexToRemove >= 0) {\n // Need to set again the array values to trigger the change detection.\n this._loadedKeys = this._loadedKeys!.filter((_, index) => index !== indexToRemove);\n this._loadedRows = this._loadedRows!.filter((_, index) => index !== indexToRemove);\n }\n });\n }\n\n public setFilters(filters?: { [key: string ] : string }): void {\n this.queryFilters = filters;\n this.filtersChanged.emit(filters);\n this.refresh();\n }\n\n public setFocusedRow(key: string): void {\n this.focusedRow = key;\n }\n\n public updateRow(key: string, newRowData: any): void {\n if (!this.hasLoadedRows) {\n return;\n }\n\n const index: number = this._loadedKeys!.indexOf(key);\n if (index >= 0) {\n // Need to set the KEY_FIELD value into the new data, to make sure this information is not lost.\n newRowData[KEY_FIELD] = key;\n\n this._loadedRows![index] = newRowData;\n\n // Need to update loaded rows to force displayed rows to refresh.\n this.updateLoadedRows([]);\n }\n }\n //#endregion\n\n //#region Private methods\n protected clearLoadedRows(): void {\n this._hasBeenLoaded = false;\n this._loadedRows = undefined;\n this._loadedKeys = undefined;\n this.recordBlock = 0;\n this.loadedLastRow = false;\n this.totalRows = undefined;\n }\n\n protected updateLoadedRows(rows: any[]): void {\n // Assign individual key to each row.\n rows.forEach((row: any) => {\n row[KEY_FIELD] = GuidHelper.generateGUID();\n });\n\n this._loadedRows = [ ...this._loadedRows ?? [], ...rows];\n this._loadedKeys = [ ...this._loadedKeys ?? [], ...rows.map((row: any) => row[KEY_FIELD])];\n\n this.recordBlock += rows.length;\n if (rows.length < this.configsProvider.configs.recordBlockSize) {\n this.loadedLastRow = true;\n }\n }\n //#endregion\n\n //#region Abstract methods\n abstract getData(params?: any): Observable<any[] | { items: any[]; totalRows: number }>;\n //#endregion\n}\n","import { HttpResponse } from '@angular/common/http';\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { DataGridConfigs } from '../../models/configs/data-grid-configs';\nimport { IListParameters } from '../../models/data-grid-parameters';\nimport { IGridColumn } from '../../models/grid-column';\nimport { GridDataset } from './grid.dataset';\n\n@Injectable()\nexport abstract class DataGridDataset extends GridDataset {\n //#region ViewChilds, Inputs, Outputs\n public selectedRowsChanged: EventEmitter<{ [id: string]: { rowData: any; selected: boolean }}> = new EventEmitter<{ [id: string]: { rowData: any; selected: boolean }}>();\n //#endregion\n\n //#region Variables\n public columns!: IGridColumn[];\n public override configs: DataGridConfigs;\n public selectedRowKeys: string[] = [];\n //#endregion\n\n //#region Properties\n public get columnsSize(): string {\n const sizes: string[] = [];\n\n if (this.configs.multiSelect) {\n sizes.push(this.configs.multiSelectSize ?? 'minmax(1.5rem,min-content)');\n }\n\n sizes.push(...this.columns.map((col: IGridColumn) => col.size ?? 'minmax(0,1fr)'));\n\n return sizes.join(' ');\n }\n\n public get hasSelectedRows(): boolean {\n return this.selectedRowKeys.length > 0;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.configs = JSON.parse(JSON.stringify(this.configsProvider.configs));\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public clearSelection(): void {\n if (!this.hasLoadedRows || !this.hasSelectedRows) {\n return;\n }\n\n const selectedKeys: string[] = this.selectedRowKeys;\n\n this.selectedRowKeys = [];\n this.clearFocusedRow();\n this.selectedRowsChanged.emit(selectedKeys.reduce((keys: { [id: string]: { rowData: any; selected: boolean } }, key: string) => {\n keys[key] = {\n rowData: this.getRowData(key),\n selected: false\n };\n return keys;\n }, {}));\n }\n\n public export(_format: string, _parameters: IListParameters): Observable<HttpResponse<Blob>> {\n return throwError(() => new Error(`Export is not implemented for ${this.constructor.name}.`));\n }\n\n public deselectRow(key: string): void {\n if (!this.hasLoadedRows || !this.isKeySelected(key)) {\n return;\n }\n\n this.removeSelectedRow(key);\n\n this.selectedRowsChanged.emit({\n [key]: {\n rowData: this.getRowData(key),\n selected: false,\n }\n });\n }\n\n public deselectRowID(id: any): void {\n if (!this.hasLoadedRows) {\n return;\n }\n\n const index: number = this.loadedKeys!.map((key: string) => this.getRowID(key))\n .indexOf(id);\n\n const key: string = this.loadedKeys![index];\n this.deselectRow(key);\n }\n\n public getSelectedRowsData(): any[] {\n if (!this.hasLoadedRows || !this.hasSelectedRows) {\n return [];\n }\n\n return this.selectedRowKeys.map((key: string) => this.loadedKeys!.indexOf(key))\n .filter((index: number) => index >= 0)\n .map((index: number) => this.loadedRows![index]);\n }\n\n public isKeySelected(key: any): boolean {\n return this.selectedRowKeys.indexOf(key) >= 0;\n }\n\n public override refresh(): void {\n if (this.hasSelectedRows) {\n this.clearSelection();\n }\n super.refresh();\n }\n\n public override removeKeys(keys: string[]): void {\n if (!this.hasLoadedRows) {\n return;\n }\n\n if (this.hasSelectedRows) {\n keys.filter((key: string) => this.isKeySelected(key))\n .forEach((key: string) => {\n this.removeSelectedRow(key);\n });\n }\n\n super.removeKeys(keys);\n }\n\n public selectRow(key: string): void {\n if (!this.hasLoadedRows) {\n return;\n }\n\n if (!this.configs.multiSelect){\n if (this.isKeySelected(key)) {\n return;\n }\n // Clear current selected row.\n this.removeSelectedRow(this.selectedRowKeys[0]);\n }\n\n if (!this.isKeySelected(key)) {\n this.selectedRowKeys.push(key);\n this.selectedRowsChanged.emit({\n [key]: {\n rowData: this.getRowData(key),\n selected: true,\n }\n });\n }\n }\n\n public selectRowID(id: any): void {\n if (!this.hasLoadedRows) {\n return;\n }\n\n if (this.hasRowWithID(id)) {\n const rowIndex: number = this.loadedRows!.findIndex((row: any) => row[this.compareProperty] === id);\n \n if (rowIndex < 0) {\n return;\n }\n\n const key: string | undefined = this.loadedKeys![rowIndex];\n if (key) {\n this.selectRow(key);\n }\n }\n }\n\n public selectRows(keys: string[]): void {\n if (!this.hasLoadedRows || !this.configs.multiSelect) {\n return;\n }\n\n // Filter only the keys that are not selected yet.\n const keysNotSelected: string[] = keys.filter((key: string) => !this.isKeySelected(key));\n \n if (keysNotSelected.length > 0) {\n this.selectedRowKeys.push(...keysNotSelected);\n this.selectedRowsChanged.emit(keys.reduce((keys: { [id: string]: { rowData: any; selected: boolean } }, key: string) => {\n keys[key] = {\n rowData: this.getRowData(key),\n selected: true,\n };\n return keys;\n }, {}));\n }\n }\n\n public override setFocusedRow(key: any): void {\n super.setFocusedRow(key);\n\n if (!this.configs.multiSelect) {\n this.selectRow(key);\n } else if (this.configs.selectOnClick ?? true) {\n if (this.isKeySelected(key)) {\n this.deselectRow(key);\n } else {\n this.selectRow(key);\n }\n }\n }\n //#endregion\n\n //#region Private methods\n protected removeSelectedRow(key: string): void {\n const index: number = this.selectedRowKeys.indexOf(key);\n if (index >= 0) {\n this.selectedRowKeys.splice(index, 1);\n }\n }\n //#endregion\n}\n","import { EventEmitter, inject, Injectable } from '@angular/core';\nimport { Observable, tap } from 'rxjs';\nimport { IBatchUpdate } from '../../models/batch-update';\nimport { IMultiEditorChanges } from '../../models/multi-editor-changes';\nimport { BaseDataset } from './base.dataset';\nimport { DataGridDataset } from './data-grid.dataset';\n\n@Injectable()\nexport abstract class MultiEditorDataset extends BaseDataset {\n //#region ViewChilds, Inputs, Outputs\n public savedChanges: EventEmitter<void> = new EventEmitter();\n //#endregion\n\n //#region Variables\n protected readonly dataGridDataset: DataGridDataset;\n\n private fakeIDsGenerated: any[] = [];\n private modifiedValues: IMultiEditorChanges = {\n changed: {},\n removed: [],\n };\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataGridDataset = inject(DataGridDataset);\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public clearChangedValues(): void {\n this.fakeIDsGenerated = [];\n\n this.modifiedValues = {\n changed: {},\n removed: [],\n };\n }\n\n public removeValue(key: string) : void {\n if (this.modifiedValues.changed[key]) {\n delete this.modifiedValues.changed[key]; \n }\n\n const id: any = this.dataGridDataset.getRowID(key);\n this.dataGridDataset.removeKeys([key]);\n\n if (!id) {\n return;\n }\n\n if (this.fakeIDsGenerated.indexOf(id) < 0) {\n this.modifiedValues.removed.push(id);\n } else {\n this.fakeIDsGenerated.splice(this.fakeIDsGenerated.indexOf(id), 1);\n }\n }\n\n public saveChanges(): Observable<any> {\n const batchUpdate: IBatchUpdate<any,any> = {\n entitiesToInsertOrUpdate: Object.entries(this.modifiedValues.changed).map(([_, v]: [string, string]) => v),\n entitiesToDelete: this.modifiedValues.removed,\n };\n\n return this.saveData(batchUpdate)\n .pipe(tap(() => this.savedChanges.emit()));\n }\n\n public storeFakeIDGenerated(id: any): void {\n if (this.fakeIDsGenerated.indexOf(id) >= 0) {\n return;\n }\n\n this.fakeIDsGenerated.push(id);\n }\n\n public updateValues(key: string, newRowData: any): void {\n this.modifiedValues.changed[key] = newRowData;\n\n this.dataGridDataset.updateRow(key, newRowData);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n\n //#region Abstract methods\n public abstract newData(id: any): any;\n\n public abstract saveData(batchUpdate: IBatchUpdate<any,any>): Observable<any>;\n //#endregion\n}","import { EventEmitter, Injectable } from '@angular/core';\nimport { Observable, tap } from 'rxjs';\nimport { IMultiSelectorChanges } from '../../models/multi-selector-changes';\nimport { GridDataset } from './grid.dataset';\n\n@Injectable()\nexport abstract class MultiSelectResultDataset extends GridDataset {\n //#region ViewChilds, Inputs, Outputs\n public savedChanges: EventEmitter<void> = new EventEmitter();\n //#endregion\n\n //#region Variables\n public displayedIDs: any[] = [];\n public displayedRows: any[] = [];\n\n private _idsToAdd: any[] = [];\n private _idsToRemove: any[] = [];\n private addedRowData: any[] = [];\n //#endregion\n \n //#region Properties\n public get idsToAdd(): any[] {\n return this._idsToAdd;\n }\n\n public get idsToRemove(): any[] {\n return this._idsToRemove;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public override refresh(): void {\n this.clearSelection();\n super.refresh();\n }\n\n public saveChanges(): Observable<any> {\n const changes: IMultiSelectorChanges = {\n idsToAdd: this.idsToAdd,\n idsToRemove: this.idsToRemove,\n };\n\n return this.saveData(changes)\n .pipe(\n tap(() => {\n this.savedChanges.emit();\n this.clearSelection();\n this.clearLoadedRows();\n })\n );\n }\n\n public setIDToAdd(idToAdd: any, rowData: any): void {\n const index: number = this._idsToRemove.indexOf(idToAdd);\n if (index >= 0) {\n this._idsToRemove.splice(index, 1);\n } else if (!this.isExistingID(idToAdd)) {\n this._idsToAdd.push(idToAdd);\n this.addedRowData.push(rowData);\n }\n this.updateDisplayedRows();\n }\n\n public setIDToRemove(idToRemove: any): void {\n const index: number = this._idsToAdd.indexOf(idToRemove);\n if (index >= 0) {\n this._idsToAdd.splice(index, 1);\n this.addedRowData.splice(index, 1);\n } else if (this.isExistingID(idToRemove)) {\n this._idsToRemove.push(idToRemove);\n }\n this.updateDisplayedRows();\n }\n\n protected override updateLoadedRows(rows: any[]): void {\n super.updateLoadedRows(rows);\n this.updateDisplayedRows();\n }\n //#endregion\n\n //#region Private methods\n private clearSelection(): void {\n this._idsToAdd = [];\n this._idsToRemove = [];\n this.addedRowData = [];\n\n this.updateDisplayedRows();\n }\n\n private isExistingID(id: any): boolean {\n return (this.loadedKeys ?? [])\n .map((key: string) => this.getRowID(key))\n .indexOf(id) >= 0;\n }\n\n private updateDisplayedRows() {\n const loadedKeys: string[] = (this.loadedKeys ?? [])\n .filter((key: string) => this.idsToRemove.indexOf(this.getRowID(key)) < 0);\n \n this.displayedIDs = loadedKeys.map((key: string) => this.getRowID(key));\n this.displayedIDs.push(...this._idsToAdd);\n\n this.displayedRows = loadedKeys.map((key: string) => this.getRowData(key));\n this.displayedRows.push(...this.addedRowData);\n }\n //#endregion\n\n //#region Abstract methods\n protected abstract saveData(changedIds: IMultiSelectorChanges): Observable<any>;\n //#endregion\n}","import { EventEmitter, Injectable } from '@angular/core';\n\n@Injectable()\nexport class FormGroupService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n //#endregion\n \n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { HttpErrorResponse } from '@angular/common/http';\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable()\nexport class FormService {\n //#region ViewChilds, Inputs, Outputs\n public fieldRefreshed = new EventEmitter<{ fieldName: string; value?: any; loading?: boolean; }>();\n public modelRefreshed = new EventEmitter<any | null>;\n //#endregion\n\n //#region Variables\n private _loading = false;\n private _model: any | null = null;\n private currentMode: 'edit' | 'view' = 'view';\n private editCanceled$: Subject<void> = new Subject<void>();\n private form?: FormGroup;\n private initialValue?: any;\n //#endregion\n\n //#region Properties\n public get editCanceled(): Observable<void> {\n return this.editCanceled$.asObservable();\n }\n\n public get isEditMode(): boolean {\n return this.currentMode === 'edit';\n }\n\n public get isValid(): boolean {\n return this.form?.valid ?? false;\n }\n\n public get loading(): boolean {\n return this._loading;\n }\n\n public set loading(value: boolean) {\n if (this._loading !== value) {\n this._loading = value;\n if (value) {\n this.form?.disable();\n } else if (this.isEditMode) {\n this.form?.enable();\n }\n }\n }\n\n public get model(): any | null {\n return this._model;\n }\n\n public set model(value: any | null) {\n if (this._model !== value) {\n this._model = value;\n this.modelRefreshed.emit(value);\n }\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public beginEdit(): void {\n this.currentMode = 'edit';\n this.form?.enable();\n }\n\n public beginFieldLoading(fieldName: string) {\n this.fieldRefreshed.emit({\n fieldName,\n loading: true\n });\n }\n\n public cancelEdit(): void {\n this.currentMode = 'view';\n this.form?.disable();\n this.resetForm();\n this.editCanceled$.next();\n }\n\n public disableForm(): void {\n this.form?.disable();\n }\n\n public enableForm(): void {\n if (this.isEditMode) {\n this.form?.enable();\n }\n }\n\n public getModelFromForm(): any {\n return this.form?.getRawValue();\n }\n\n public initializeForm(form: FormGroup): void {\n this.form = form;\n this.initialValue = form.getRawValue();\n\n if (this.currentMode === 'view') {\n this.form.disable();\n }\n }\n\n public markAllAsTouched(): void {\n if (!this.form) {\n return;\n }\n\n this.form.markAllAsTouched();\n }\n\n public resetForm(): void {\n if (!this.form) {\n return;\n }\n\n this.form.reset();\n\n if (this.model) {\n this.form.patchValue(this.model);\n } else if (this.initialValue) {\n this.form.patchValue(this.initialValue);\n }\n\n this.form.updateValueAndValidity();\n }\n\n public setFieldValue(fieldName: string, value: any): void {\n this.fieldRefreshed.emit({\n fieldName,\n loading: false,\n value,\n });\n }\n\n public setValidationErrorsFromHttpResponse(errorResponse: HttpErrorResponse): void {\n if (!errorResponse || !this.form) {\n return;\n }\n\n // Error 400 = Validation issues\n if (errorResponse.status === 400 && errorResponse.error && errorResponse.error.errors) {\n const errors: { [id: string]: string[] } = <{ [id: string]: string[] }>errorResponse.error.errors;\n\n Object.keys(errors)\n .map((x: string) => { return { key: x, field: x.substring(0, 1).toLocaleLowerCase() + x.substring(1, x.length) }; })\n .forEach((err: { key: string; field: string }) => {\n setTimeout(() => {\n const field: FormControl = <FormControl>this.form!.get(err.field);\n field?.setErrors({ [errors[err.key][0]]: true });\n field?.markAsTouched();\n });\n });\n }\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","export abstract class RibbonGroupChild {\n abstract visible: boolean;\n}","\nimport { InjectionToken } from '@angular/core';\n\nexport const SIDEBAR_CONFIGS: InjectionToken<SidebarConfigs> = new InjectionToken<SidebarConfigs>('', {\n providedIn: 'root',\n factory: () => new SidebarConfigs(),\n});\n\nexport class SidebarConfigs {\n public errorText = 'Error';\n /** Tooltip for items that open in a new browser tab. Rendered as-is, like {@link errorText}. */\n public externalLinkText = 'Opens in a new browser tab';\n public loadingText = 'Loading';\n /**\n * Derive region headers from the menu tree instead of from {@link SidebarMenu.region}.\n *\n * With this on, a top-level menu that has children and no URL stops being a collapsible node\n * and becomes an area header, with its children rendered flat beneath it as top-level items --\n * icons included. The area is then a real menu row, so it carries its own translated label and\n * its own order, and no `region` label has to be repeated across every item that belongs to it.\n *\n * Off by default: without it a top-level parent stays the collapsible group it has always been.\n */\n public shouldDeriveAreasFromRootMenus = false;\n public logoCollapsedPath?: string;\n public logoExpandedPath?: string;\n\n constructor(options: Partial<SidebarConfigs> = {}) {\n Object.assign(this, options);\n }\n}","import { SidebarMenuOpenMode } from './sidebar-menu-open-mode';\n\nexport class SidebarMenu {\n public childCount = 0;\n public children: SidebarMenu[] = [];\n public height?: number;\n public icon?: string;\n public id = 0;\n public label = '';\n public isSelected = false;\n /**\n * How {@link url} is opened. An absent value means {@link SidebarMenuOpenMode.Internal}.\n *\n * Left optional and without an initializer on purpose: the constructor is an `Object.assign`,\n * which would overwrite a default with the `null` a nullable backend column serializes to.\n * Read it through `toSidebarMenuOpenMode(menu.openMode)` instead of comparing it directly.\n */\n public openMode?: SidebarMenuOpenMode;\n public parent: SidebarMenu | null = null;\n public region?: string;\n public url?: string;\n\n constructor(options: Partial<SidebarMenu> = {}) {\n Object.assign(this, options);\n }\n}\n","/**\n * How a {@link SidebarMenu}'s `url` is opened when the item is clicked.\n *\n * Read the value off a menu through {@link toSidebarMenuOpenMode} rather than comparing the\n * field directly: it crosses HTTP, so it can arrive as a string, as a number, as `null`, or not\n * at all.\n */\nexport enum SidebarMenuOpenMode {\n /** `url` is an internal Angular route and opens an application tab. The default. */\n Internal = 'internal',\n\n /** `url` is an absolute http(s) address and opens in a new browser tab. */\n ExternalNewTab = 'externalNewTab',\n\n /** `url` is an absolute http(s) address and opens embedded in an application tab. */\n ExternalEmbedded = 'externalEmbedded',\n}\n\n/** Ordinals matching the mode column stored by the backend, for a numeric payload. */\nconst ORDINAL_MODES: SidebarMenuOpenMode[] = [\n SidebarMenuOpenMode.Internal,\n SidebarMenuOpenMode.ExternalNewTab,\n SidebarMenuOpenMode.ExternalEmbedded,\n];\n\n/**\n * Parses the wire value of `SidebarMenu.openMode`.\n *\n * Deliberately a parser rather than a `?? Internal` fallback, because the field is deserialized\n * straight from each application's menu endpoint and its shape is not guaranteed:\n *\n * - a **number** is read as the backend's enum ordinal, which is what an ASP.NET Core enum\n * property serializes to unless that backend registers a string converter;\n * - a **string** is matched case-insensitively, so `'externalNewTab'` and `'ExternalNewTab'`\n * both work;\n * - anything else — an omitted field from a backend that predates this feature, `null`, or a\n * mode introduced by a newer one — degrades to {@link SidebarMenuOpenMode.Internal}.\n *\n * Degrading to `Internal` keeps an unrecognized mode behaving the way menus behaved before\n * external destinations existed, instead of producing an item that does nothing when clicked.\n */\nexport function toSidebarMenuOpenMode(value: unknown): SidebarMenuOpenMode {\n if (typeof value === 'number') {\n return ORDINAL_MODES[value] ?? SidebarMenuOpenMode.Internal;\n }\n\n if (typeof value === 'string') {\n const normalized: string = value.toLowerCase();\n\n return ORDINAL_MODES.find((mode: SidebarMenuOpenMode) => mode.toLowerCase() === normalized)\n ?? SidebarMenuOpenMode.Internal;\n }\n\n return SidebarMenuOpenMode.Internal;\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { map, Observable, take, tap } from 'rxjs';\nimport { ISidebarProfile, SidebarMenu, SidebarMenuOpenMode, toSidebarMenuOpenMode } from '../models';\nimport { HttpErrorResponse } from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root'\n})\nexport abstract class SidebarService {\n //#region ViewChilds, Inputs, Outputs\n public childrenFailed: EventEmitter<SidebarMenu> = new EventEmitter<SidebarMenu>();\n public childrenLoading: EventEmitter<SidebarMenu> = new EventEmitter<SidebarMenu>();\n public childrenInitialized: EventEmitter<SidebarMenu> = new EventEmitter<SidebarMenu>();\n public menuExternalUrlSelected: EventEmitter<SidebarMenu> = new EventEmitter<SidebarMenu>();\n public menuUrlSelected: EventEmitter<SidebarMenu> = new EventEmitter<SidebarMenu>();\n public selectionChanged: EventEmitter<SidebarMenu> = new EventEmitter<SidebarMenu>();\n //#endregion\n\n //#region Variables\n public isActive = false;\n public isCollapsed = false;\n public shouldActivate = false;\n\n private menus: SidebarMenu[] = [];\n private selectedMenu: SidebarMenu | null = null;\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Public methods\n public deselectAll(): void {\n this.menus\n .filter((menu: SidebarMenu) => menu.isSelected)\n .forEach((menu: SidebarMenu) => {\n this.deselectMenu(menu);\n });\n }\n\n public loadChildren(parentMenu: SidebarMenu): void {\n this.childrenLoading.emit(parentMenu);\n\n this.loadChildrenFor(parentMenu)\n .subscribe({\n error: (exception: HttpErrorResponse) => {\n this.childrenFailed.emit(parentMenu);\n throw exception;\n }\n });\n }\n\n /**\n * Loads a parent's children and hands them back, for callers that need them before the user\n * clicks -- a sidebar rendering areas flat has to have them up front. {@link loadChildren} is\n * the fire-and-forget variant that also raises the loading and failure events.\n */\n public loadChildrenFor(parentMenu: SidebarMenu): Observable<SidebarMenu[]> {\n return this.loadMenus(parentMenu)\n .pipe(\n take(1),\n map((menus: SidebarMenu[]) => menus.map((menu: SidebarMenu) => new SidebarMenu(menu))),\n tap((childrenMenus: SidebarMenu[]) => {\n parentMenu.children = childrenMenus;\n childrenMenus.forEach((childMenu: SidebarMenu) => childMenu.parent = parentMenu);\n }),\n );\n }\n\n public loadRoot(): Observable<SidebarMenu[]> {\n return this.loadMenus(null)\n .pipe(\n take(1),\n map((menus: SidebarMenu[]) => menus.map((menu: SidebarMenu) => new SidebarMenu(menu))),\n tap((menus: SidebarMenu[]) => this.menus = menus)\n );\n }\n \n public select(menu: SidebarMenu): void {\n if (menu.childCount > 0 && (menu.children?.length ?? 0) === 0) {\n this.loadChildren(menu);\n }\n\n const hasUrl: boolean = (menu.url?.length ?? 0) > 0;\n const openMode: SidebarMenuOpenMode = toSidebarMenuOpenMode(menu.openMode);\n const isExternal: boolean = hasUrl && openMode !== SidebarMenuOpenMode.Internal;\n\n // External destinations are announced on their own emitter, so a consumer that only knows\n // menuUrlSelected never receives an absolute URL it would hand to the Angular router.\n const urlSelected: EventEmitter<SidebarMenu> = isExternal ? this.menuExternalUrlSelected : this.menuUrlSelected;\n\n // Opening a new browser tab is an action, not a destination: the user stays on the view\n // already on screen, so the item must neither take the selection nor clear that view's.\n // Parents still fall through, so a parent that carries a URL keeps expanding instead of\n // becoming impossible to open.\n if (isExternal && openMode === SidebarMenuOpenMode.ExternalNewTab && menu.childCount === 0) {\n urlSelected.emit(menu);\n return;\n }\n\n // In case we're deselecting the menu because a child was selected, we need to keep track of the original selection state.\n const isSelected: boolean = menu.isSelected;\n\n if (!!this.selectedMenu && this.selectedMenu !== menu) {\n this.deselectAll();\n }\n\n if (!isSelected) {\n this.selectedMenu = menu;\n this.selectMenu(menu);\n\n if (hasUrl) {\n urlSelected.emit(menu);\n }\n\n } else if (hasUrl) {\n // Menu with a URL is already selected — navigate again instead of toggling off.\n urlSelected.emit(menu);\n } else {\n this.selectedMenu = null;\n this.deselectMenu(menu);\n }\n }\n //#endregion\n\n //#region Private methods\n private deselectMenu(menu: SidebarMenu, shouldUpdateParents = true): void {\n if (!menu.isSelected) {\n return;\n }\n\n menu.isSelected = false;\n this.selectionChanged.emit(menu);\n\n if ((menu.children?.length ?? 0) > 0) {\n menu.children\n .filter((child: SidebarMenu) => child.isSelected)\n .forEach((child: SidebarMenu) => {\n const shouldUpdateParents = false;\n this.deselectMenu(child, shouldUpdateParents);\n });\n }\n\n if (!!menu.parent && shouldUpdateParents) {\n while (menu.parent) {\n this.selectionChanged.emit(menu.parent);\n menu = menu.parent;\n }\n }\n }\n\n private selectMenu(menu: SidebarMenu): void {\n menu.isSelected = true;\n this.selectionChanged.emit(menu);\n\n if (menu.parent) {\n this.selectMenu(menu.parent);\n }\n }\n //#endregion\n\n //#region Abstract methods\n public abstract getMenuFromUrl(url: string): Observable<SidebarMenu>;\n\n public abstract getUserProfile(): ISidebarProfile | undefined;\n\n protected abstract loadMenus(parentMenuID: SidebarMenu | null): Observable<SidebarMenu[]>;\n //#endregion\n}","import { CommonModule, formatDate, NgIf, NgSwitch, NgSwitchCase } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { ControlContainer, FormControl, FormGroup, FormGroupDirective, FormGroupName, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { takeUntil } from 'rxjs';\nimport { FormService } from '../../services';\nimport { BaseComponent } from '../base.component';\n\n@Component({\n selector: 'lib-form-input',\n templateUrl: './form-input.component.html',\n styleUrls: ['./form-input.component.scss'],\n imports: [\n CommonModule,\n FormsModule,\n NgIf,\n NgSwitch,\n NgSwitchCase,\n ReactiveFormsModule,\n ],\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\n host: {\n '[class.full-height]': 'isFullHeight',\n // Clears a stray `type` attribute for the same reason as FormInputGroupComponent — see the\n // comment there. Applies when a consumer sets `type` on `lib-form-input` directly.\n '[attr.type]': 'null'\n }\n})\nexport class FormInputComponent extends BaseComponent implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() public autofocus = false;\n @Input() public controlName = '';\n @Input() public disabledControlName?: string;\n @Input() public displayReadOnlyAsDisabled = true;\n @Input() public fixedValue?: any;\n @Input() public format?: string;\n @Input() public invalid = false;\n @Input() public isDisabled = true;\n @Input() public isFullHeight = false;\n @Input() public maxLength?: number;\n @Input() public min?: number;\n @Input() public readOnly = false;\n @Input() public rows!: number;\n @Input() public step = 1;\n @Input() public type = 'text';\n\n // Deliberately NOT named blur/change/input/focus. <lib-form-input> is a real DOM\n // element, so an output sharing a native event name fires the consumer's handler\n // twice for the bubbling events and shadows the native one for the rest.\n @Output() public blurred: EventEmitter<void> = new EventEmitter<void>();\n @Output() public changed: EventEmitter<any> = new EventEmitter<any>();\n @Output() public fixedValueChanged: EventEmitter<string> = new EventEmitter<string>();\n @Output() public focused: EventEmitter<void> = new EventEmitter<void>();\n @Output() public inputChanged: EventEmitter<void> = new EventEmitter<void>();\n //#endregion\n\n //#region Host listeners\n //#endregion\n\n //#region Variables\n protected readonly formGroupDirective: FormGroupDirective = inject(FormGroupDirective);\n protected readonly formGroupName: FormGroupName = inject(FormGroupName, { optional: true })!;\n protected readonly formService: FormService = inject(FormService);\n //#endregion\n\n //#region Properties\n protected get formControl(): FormControl<any> | null {\n return this.controlName\n ? <FormControl>this.formGroup.get(this.controlName)\n : null;\n }\n\n protected get formControlName(): string {\n return [\n ...this.parentGroups,\n this.controlName,\n ].join('.');\n }\n\n protected get formGroup(): FormGroup {\n let formGroup: FormGroup = this.formGroupDirective.form;\n for (const group of this.parentGroups) {\n formGroup = <FormGroup>formGroup.get(group);\n }\n return formGroup;\n }\n\n protected get isFormControl(): boolean {\n return !!this.controlName && this.controlName.length > 0;\n }\n\n protected get isFormEditMode(): boolean {\n return this.formService.isEditMode;\n }\n\n protected get parentGroups(): string[] {\n return this.formGroupName?.path ?? [];\n }\n\n protected get stepAttributeValue(): number | null {\n if (this.type === 'number') {\n return this.step;\n }\n return null;\n }\n\n protected get minAttributeValue(): number | null {\n if (this.type === 'number') {\n return this.min ?? null;\n }\n return null;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n switch (this.type) {\n case 'number':\n if (this.formControl) {\n this.formControl.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe((value: any) => {\n if (value !== null && value === '') {\n this.formControl?.setValue(null);\n }\n });\n }\n break;\n\n case 'date':\n if (this.format === undefined) {\n this.format = 'yyyy-MM-dd';\n }\n\n if (this.formControl) {\n this.formControl.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe((value: any) => {\n if (value !== null) {\n try {\n if (value !== formatDate(value, 'yyyy-MM-dd', 'en')) {\n this.formControl?.setValue(formatDate(value, 'yyyy-MM-dd', 'en'), { emitEvent: false });\n }\n }\n catch {\n this.formControl?.setValue(null, { emitEvent: false });\n }\n }\n });\n }\n break;\n }\n }\n //#endregion\n\n //#region Event handlers\n protected onBlur(): void {\n this.blurred.emit();\n }\n\n protected onChange(value: any): void {\n this.changed.emit(value);\n }\n\n protected onFocus(): void {\n this.focused.emit();\n }\n\n protected onInput(): void {\n this.inputChanged.emit();\n }\n\n protected onValueChanged(newText: string): void {\n this.fixedValue = newText;\n this.fixedValueChanged.emit(this.fixedValue);\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<ng-container *ngIf=\"formGroupDirective.form?.enabled || isFormEditMode;else disabledControl\">\n <ng-container [ngSwitch]=\"type\">\n \n <textarea *ngSwitchCase=\"'textarea'\"\n \n [attr.maxLength]=\"maxLength ?? null\"\n [attr.rows]=\"rows\"\n [class.invalid]=\"invalid\"\n [formControlName]=\"controlName\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n (input)=\"onInput()\">\n </textarea>\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <input *ngIf=\"isFormControl; else fixedCheckbox\"\n class=\"switch\"\n type=\"checkbox\"\n \n [class.invalid]=\"invalid\"\n [formControlName]=\"controlName\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n (input)=\"onInput()\" />\n\n <ng-template #fixedCheckbox>\n <input\n class=\"switch\"\n type=\"checkbox\"\n [(ngModel)]=\"fixedValue\"\n [attr.readonly]=\"true\"\n [class.invalid]=\"invalid\"\n [class.readonly-as-disabled]=\"displayReadOnlyAsDisabled\"\n [disabled]=\"isDisabled\"\n [ngModelOptions]=\"{ standalone: true }\"\n (blur)=\"onBlur()\"\n (change)=\"onChange($event)\"\n (focus)=\"onFocus()\"\n (input)=\"onInput()\"\n (ngModelChange)=\"onValueChanged($event)\" />\n </ng-template>\n </ng-container>\n\n\n <ng-container *ngSwitchDefault>\n <input *ngIf=\"isFormControl; else fixedTextBox\"\n \n [attr.maxLength]=\"maxLength ?? null\"\n [attr.min]=\"minAttributeValue\"\n [attr.readonly]=\"readOnly ? true : null\"\n [attr.step]=\"stepAttributeValue\"\n [class.invalid]=\"invalid\"\n [class.readonly-as-disabled]=\"displayReadOnlyAsDisabled\"\n [formControlName]=\"controlName\"\n [type]=\"type\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n (input)=\"onInput()\" />\n\n <ng-template #fixedTextBox>\n <input\n type=\"text\"\n [attr.maxLength]=\"maxLength ?? null\"\n [attr.min]=\"minAttributeValue\"\n [attr.readonly]=\"true\"\n [attr.step]=\"stepAttributeValue\"\n [class.invalid]=\"invalid\"\n [class.readonly-as-disabled]=\"displayReadOnlyAsDisabled\"\n [disabled]=\"isDisabled\"\n [ngModel]=\"type === 'date' || type === 'datetime-local' ? (fixedValue | date: format) : ( type === 'number' ? (fixedValue | number) : fixedValue )\" \n [ngModelOptions]=\"{ standalone: true }\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n (input)=\"onInput()\"\n (ngModelChange)=\"onValueChanged($event)\" />\n </ng-template>\n </ng-container>\n\n </ng-container>\n</ng-container>\n\n<ng-template #disabledControl>\n <ng-container [ngSwitch]=\"type\">\n <span class=\"value\" *ngSwitchCase=\"'checkbox'\">\n <i [ngClass]=\"fixedValue ?? formGroupDirective.form.get(disabledControlName ?? controlName)?.value ? 'fa-solid fa-square-check' : 'fa-regular fa-square'\"></i>\n </span>\n\n <span class=\"value\" *ngSwitchCase=\"'date'\">\n {{ fixedValue ?? formGroupDirective.form.get(disabledControlName ?? controlName)?.value | date: format }}\n </span>\n\n <span class=\"value\" *ngSwitchCase=\"'datetime-local'\">\n {{ fixedValue ?? formGroupDirective.form.get(disabledControlName ?? controlName)?.value | date: format }}\n </span>\n\n <span class=\"value\" *ngSwitchCase=\"'number'\">\n {{ fixedValue ?? formGroupDirective.form.get(disabledControlName ?? controlName)?.value | number: format }}\n </span>\n\n <span class=\"value text\" *ngSwitchDefault>{{ fixedValue ?? formGroupDirective.form.get(disabledControlName ?? controlName)?.value }}</span>\n </ng-container>\n</ng-template>\n\n<ng-template #fixedTextbox let-fixedValue=\"fixedValue\">\n \n</ng-template>\n","import { KeyValuePipe, NgFor, NgIf, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { Component, inject, Input, OnInit, TemplateRef } from '@angular/core';\nimport { FormControl, FormGroup, FormGroupDirective, FormGroupName } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { filter, takeUntil } from 'rxjs';\nimport { FormService } from '../../services';\nimport { BaseComponent } from '../base.component';\nimport { FormInputComponent } from '../form-input/form-input.component';\n\n@Component({\n selector: 'lib-form-input-group',\n templateUrl: './form-input-group.component.html',\n styleUrls: ['./form-input-group.component.scss'],\n imports: [\n FormInputComponent,\n KeyValuePipe,\n NgFor,\n NgIf,\n NgStyle,\n NgTemplateOutlet,\n TranslatePipe,\n],\n host: {\n '[class.full-height]': 'isFullHeight',\n // Angular keeps static attributes in the DOM even when a directive consumes them as an\n // @Input(), so `type=\"checkbox\"` would linger on this host element — where\n // @tailwindcss/forms' tag-agnostic `[type=\"checkbox\"]` base rules style the host itself as\n // a checkbox (1px border, white fill, height:1rem). Clearing the attribute removes the\n // stray box for every type while leaving the `type` @Input() untouched.\n '[attr.type]': 'null'\n }\n})\nexport class FormInputGroupComponent extends BaseComponent implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() public autofocus = false;\n @Input() public alignContent: 'center' | 'end' | 'start' = 'center';\n @Input() public controlName!: string;\n @Input() public fixedValue?: any;\n @Input() public format?: string;\n @Input() public label!: string;\n @Input() public isDisabled = true;\n @Input() public isFullHeight = false;\n @Input() public maxLength?: number;\n @Input() public min?: number;\n @Input() public notes = '';\n @Input() public readOnly = false;\n @Input() public rows!: number;\n @Input() public showLabel = true;\n @Input() public step = 1;\n @Input() public template!: TemplateRef<any>;\n @Input() public type = 'text';\n @Input() public validations: { [id: string]: string; } = {};\n //#endregion\n\n //#region Host listeners\n //#endregion\n\n //#region Variables\n protected readonly formGroupDirective: FormGroupDirective = inject(FormGroupDirective);\n protected readonly formGroupName: FormGroupName = inject(FormGroupName, { optional: true })!;\n protected formService: FormService = inject(FormService);\n protected loadingField = false;\n //#endregion\n\n //#region Properties\n protected get formControl(): FormControl<any> | null {\n return this.controlName\n ? <FormControl>this.formGroup.get(this.controlName)\n : null;\n }\n\n protected get formGroup(): FormGroup {\n let formGroup: FormGroup = this.formGroupDirective.form;\n for (const group of this.parentGroups) {\n formGroup = <FormGroup>formGroup.get(group);\n }\n return formGroup;\n }\n\n protected get hasNotes(): boolean {\n return !!this.notes && this.notes.length > 0;\n }\n\n protected get parentGroups(): string[] {\n return this.formGroupName?.path ?? [];\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n this.formControl?.statusChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loadingField = false;\n });\n\n this.formControl?.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loadingField = false;\n });\n\n this.formService.fieldRefreshed\n .pipe(\n takeUntil(this.destroy$),\n filter((field: { fieldName?: string, value?: any, loading?: boolean }) => field.fieldName === this.controlName),\n )\n .subscribe((field: { fieldName?: string, value?: any, loading?: boolean }) => {\n this.loadingField = field.loading ?? false;\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n protected hasValidation(errorKey: string): boolean {\n return Object.keys(this.validations).indexOf(errorKey) >= 0;\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<label *ngIf=\"showLabel\"\n[attr.for]=\"controlName\">\n {{ label | translate }}:\n</label>\n\n<div class=\"field\"\n[class.col-span-2]=\"!showLabel\"\n[ngStyle]=\"{ 'align-content': alignContent }\" >\n <div class=\"loading\" *ngIf=\"(loadingField || (formService.loading && formService.model === null)); else content\">\n <div></div>\n </div>\n\n <ng-template #content>\n <ng-container *ngTemplateOutlet=\"template ? template : defaultTemplate\">\n </ng-container>\n \n <div class=\"validations\" [class.show]=\"formControl?.invalid\" *ngIf=\"formControl?.touched\">\n <ng-container *ngFor=\"let error of formControl?.errors | keyvalue\">\n <span *ngIf=\"hasValidation(error.key)\">{{ validations[error.key] | translate }}</span>\n <ng-template #defaultValidationError>{{ error.key }}</ng-template>\n </ng-container>\n </div>\n \n <ng-template #defaultTemplate>\n <lib-form-input #formInput\n [autofocus]=\"autofocus\"\n [controlName]=\"controlName\"\n [fixedValue]=\"fixedValue\"\n [format]=\"format\"\n [isDisabled]=\"isDisabled\"\n [isFullHeight]=\"isFullHeight\"\n [min]=\"min\"\n [maxLength]=\"maxLength\"\n [readOnly]=\"readOnly\"\n [rows]=\"rows\"\n [step]=\"step\"\n [type]=\"type\">\n </lib-form-input>\n </ng-template>\n \n <span class=\"text-sm italic\" *ngIf=\"hasNotes\">\n *{{ notes | translate }}\n </span>\n </ng-template>\n\n</div>\n","import { FlexibleConnectedPositionStrategy, Overlay, OverlayPositionBuilder, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { NgFor, NgIf } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, HostListener, inject, Input, KeyValueChanges, KeyValueDiffer, KeyValueDiffers, OnInit, TemplateRef, ViewChild, ViewContainerRef, OnDestroy } from '@angular/core';\nimport { FormControl, FormGroup, FormGroupDirective, FormGroupName } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { debounceTime, forkJoin, Observable, of, pairwise, startWith, Subject, switchMap, take, takeUntil, tap } from 'rxjs';\nimport { DisplayControls } from '../../helpers';\nimport { ICatalogEntry, ICatalogResult } from '../../models';\nimport { CatalogService, DataGridDataset } from '../../services';\nimport { BaseComponent } from '../base.component';\nimport { FormInputGroupComponent } from '../form-input-group/form-input-group.component';\nimport { FormInputComponent } from '../form-input/form-input.component';\n\n@Component({\n selector: 'lib-catalog-select',\n templateUrl: './catalog-select.component.html',\n styleUrls: ['./catalog-select.component.scss'],\n imports: [\n FormInputComponent,\n FormInputGroupComponent,\n NgFor,\n NgIf,\n TranslatePipe,\n ]\n})\nexport class CatalogSelectComponent extends BaseComponent implements OnInit, AfterViewInit, OnDestroy {\n //#region HostListeners\n @HostListener('body:mousedown', ['$event'])\n private bodyMouseDown(event: MouseEvent): void {\n const target: HTMLElement = <HTMLElement>event.target;\n if (this.isDropDownShown && !target.closest('.catalog-container.show')) {\n this.wasClickedOutside = (event.button === 0 && !target.closest('.dropdown-container')) ?? false;\n }\n }\n\n @HostListener('body:mouseup', ['$event'])\n private bodyMouseUp(event: MouseEvent): void {\n if (this.isDropDownShown && this.wasClickedOutside) {\n this.closeDropdownOverlay();\n this.wasClickedOutside = false;\n }\n }\n //#endregion\n\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('dropdownTemplate', { read: TemplateRef }) private dropdownTemplate!: TemplateRef<any>;\n @ViewChild('input', { read: ElementRef }) private inputElement!: ElementRef<HTMLDivElement>;\n \n @Input() public autofocus = false;\n @Input() public controlName!: string;\n @Input() public displayControlName!: string;\n @Input() public displayProperty = 'display';\n @Input() public set entriesList(value: any[] | { key: number; value: Observable<any> | string }[] | null | undefined) {\n if (this._entriesList !== value) {\n this._entriesList = value;\n if (this.isSubscriptionInitialized) {\n this.entriesDataSource = [];\n this.initializeEntriesDataSource();\n this.refreshSearch();\n }\n }\n }\n @Input() public set filters(value: { [id: string]: any; }) {\n if (this._filters !== value) {\n this._filters = value;\n this.updateFilters();\n }\n }\n @Input() public label!: string;\n @Input() public maxEntries = 100;\n @Input() public minimumLengthSearch = 3;\n @Input() public notes = '';\n @Input() public readOnly = false;\n @Input() public searchEndpoint?: string;\n @Input() public validations: { [id: string]: string; } = {};\n @Input() public valueProperty = 'value';\n //#endregion\n \n //#region Variables\n protected displayedEntries: ICatalogEntry[] = [];\n protected focusedIndex = -1;\n protected isDropDownShown = false;\n protected isFocused = false;\n protected isLoading = false;\n protected selectedValue: any;\n protected shouldUseCriteria = false;\n protected showFailureMessage = false;\n protected showMinimumCharactersMessage = false;\n protected showNoResultsMessage = false;\n\n private static instanceCounter = 0;\n private _entriesList?: any[] | { key: number; value: Observable<any> | string }[] | null;\n private _filters: { [id: string]: any; } = {};\n private catalogService: CatalogService = inject(CatalogService);\n private dataGridDataset: DataGridDataset = inject(DataGridDataset, { optional: true })!;\n private entriesDataSource: ICatalogEntry[] = [];\n private filterDiffer?: KeyValueDiffer<string, any>;\n private readonly formGroup: FormGroupDirective = inject(FormGroupDirective);\n private readonly formGroupName: FormGroupName = inject(FormGroupName, { optional: true })!;\n private instanceId: number;\n private isDataInitialized = false;\n private isSubscriptionInitialized = false;\n private keyValueDiffers: KeyValueDiffers = inject(KeyValueDiffers);\n private lastCriteriaUsed: string | null = null;\n private overlay: Overlay = inject(Overlay);\n private overlayRef?: OverlayRef;\n private positionBuilder: OverlayPositionBuilder = inject(OverlayPositionBuilder);\n private searchSubject: Subject<string | null> = new Subject<string | null>();\n private viewContainerRef: ViewContainerRef = inject(ViewContainerRef);\n private wasClickedOutside = false;\n //#endregion\n\n //#region Properties\n public get entriesList(): any[] | { key: number; value: Observable<any> | string }[] | null | undefined {\n return this._entriesList;\n }\n\n public get filters(): { [id: string]: any; } | undefined {\n return this._filters;\n }\n\n protected get activeDescendantId(): string | null {\n if (this.focusedIndex >= 0 && this.focusedIndex < this.displayedEntries.length) {\n return `catalog-select-${this.instanceId}-option-${this.focusedIndex}`;\n }\n return null;\n }\n\n protected get displayControl(): FormControl {\n return <FormControl>this.formGroup.form.get(this.formDisplayControlName);\n }\n\n protected get formControl(): FormControl {\n return <FormControl>this.formGroup.form.get(this.formControlName);\n }\n\n protected get formControlName(): string {\n return [\n ...this.formGroupName?.path ?? [],\n this.controlName\n ].join('.');\n }\n\n protected get formDisplayControlName(): string {\n return [\n ...this.formGroupName?.path ?? [],\n this.displayControlName\n ].join('.');\n }\n\n protected get isInvalid(): boolean {\n return this.formControl.invalid;\n }\n\n protected get isTouched(): boolean {\n return this.formControl.touched;\n }\n\n protected get listboxId(): string {\n return `catalog-select-${this.instanceId}-listbox`;\n }\n\n protected get showClearButton(): boolean {\n return this.selectedValue != null && !this.readOnly && (this.formControl?.enabled ?? false);\n }\n\n private get hasSearchEndpoint(): boolean {\n return !!this.searchEndpoint && this.searchEndpoint.length > 0;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n this.instanceId = CatalogSelectComponent.instanceCounter++;\n }\n\n public ngAfterViewInit(): void {\n this.setInputAriaAttributes();\n }\n\n public override ngOnDestroy(): void {\n this.closeDropdownOverlay();\n super.ngOnDestroy();\n }\n\n public ngOnInit(): void {\n // Check and add the display control, if it does not exist.\n const wasFormDisabled: boolean = this.formGroup.form.disabled;\n this.checkAndAddDisplayControl();\n if (wasFormDisabled) {\n this.formGroup.form.disable();\n }\n\n // Initialize the entries data source from the entries list, if provided.\n this.initializeEntriesDataSource();\n\n // Initialize the search functionality.\n this.initializeSearch();\n\n // Subscribe to changes in the display control to apply search criteria.\n this.displayControl?.valueChanges\n .pipe(\n takeUntil(this.destroy$),\n tap(() => {\n if (!this.isFocused) {\n return;\n }\n this.isLoading = true;\n this.resetMessages();\n }),\n debounceTime(500),\n startWith(null),\n pairwise(),\n )\n .subscribe(([ previous, current ]: string[]) => {\n if (!this.isFocused || previous === current) {\n this.isLoading = false;\n return;\n }\n this.applySearchCriteria(current);\n });\n\n this.filterDiffer = this.keyValueDiffers.find(this._filters).create();\n\n // Subscribe to changes in the form control to update the selected value and display control states.\n this.syncFormControlsEnabledDisabled();\n\n this.formControl?.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe((value: any) => {\n this.syncFormControlsEnabledDisabled();\n\n if (!this.shouldRefreshDisplay(value)) {\n return;\n }\n\n this.selectedValue = value;\n if (this.hasSearchEndpoint) {\n if (!value) {\n this.displayControl?.reset(null, { emitEvent: false });\n }\n } else {\n this.displayControl?.setValue(this.resolveDisplay(value), { emitEvent: false });\n }\n });\n\n // Initial sync: if the form control already has a value (e.g., the model was loaded\n // before this component initialized), sync the display control immediately.\n this.syncDisplayFromCurrentValue();\n }\n //#endregion\n\n //#region Event handlers\n protected onContainerBlur(): void {\n this.isFocused = false;\n }\n\n protected onContainerClick(): void {\n if ((!this.isDropDownShown || this.readOnly)\n && (this.formGroup.form?.enabled ?? false)\n && (this.formGroup.form?.get(this.formControlName)?.enabled ?? false)\n ) {\n this.openDropdownOverlay();\n }\n }\n\n protected onContainerFocus(): void {\n this.isFocused = true;\n if (!this.isDropDownShown && !this.readOnly\n && (this.formGroup.form?.enabled ?? false)\n && (this.formGroup.form?.get(this.formControlName)?.enabled ?? false)\n ) {\n this.openDropdownOverlay();\n }\n }\n\n protected onClearClick(event: MouseEvent): void {\n event.stopPropagation();\n\n if (this.formControl) {\n this.formControl.setValue(null);\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n }\n\n if (this.displayControl) {\n this.displayControl.setValue('', { emitEvent: false });\n this.displayControl.markAsDirty();\n this.displayControl.markAsTouched();\n }\n\n this.selectedValue = null;\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isDropDownShown) {\n this.openDropdownOverlay();\n }\n if (this.displayedEntries.length > 0) {\n this.focusedIndex = Math.min(this.focusedIndex + 1, this.displayedEntries.length - 1);\n this.scrollFocusedItemIntoView();\n }\n this.updateInputAriaActiveDescendant();\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (this.isDropDownShown && this.displayedEntries.length > 0) {\n this.focusedIndex = Math.max(this.focusedIndex - 1, 0);\n this.scrollFocusedItemIntoView();\n }\n this.updateInputAriaActiveDescendant();\n break;\n\n case 'Enter':\n event.preventDefault();\n if (this.isDropDownShown && this.focusedIndex >= 0 && this.focusedIndex < this.displayedEntries.length) {\n this.onDropDownItemClick(this.displayedEntries[this.focusedIndex]);\n }\n break;\n\n case 'Escape':\n if (this.isDropDownShown) {\n event.preventDefault();\n this.closeDropdownOverlay();\n }\n break;\n\n case 'Tab':\n if (this.isDropDownShown) {\n this.closeDropdownOverlay();\n }\n break;\n }\n }\n\n protected onDropDownErrorClick(): void {\n this.refreshSearch();\n }\n\n protected onDropDownItemClick(entry: ICatalogEntry): void {\n if (this.displayControl) {\n this.displayControl.markAsDirty();\n this.displayControl.markAllAsTouched();\n this.displayControl.setValue(entry.display, { emitEvent: false });\n }\n\n if (this.formControl) {\n this.formControl.markAsDirty();\n this.formControl.markAsTouched();\n this.formControl.setValue(entry.value);\n }\n\n this.closeDropdownOverlay();\n }\n\n //#endregion\n\n //#region Public methods\n protected getOptionId(index: number): string {\n return `catalog-select-${this.instanceId}-option-${index}`;\n }\n //#endregion\n\n //#region Private methods\n private applySearchCriteria(criteria: string | null): void {\n this.isLoading = true;\n this.resetMessages();\n\n this.searchSubject.next(criteria);\n }\n\n private checkAndAddDisplayControl(): void {\n let parent: FormGroup = this.formGroup.form;\n const controlNames: string[] = this.formDisplayControlName.split('.');\n\n controlNames.forEach((name, index) => {\n if (index < controlNames.length - 1) {\n parent = <FormGroup>parent.get(name);\n } else {\n if (!parent.get(name)) {\n parent.addControl(name, new FormControl(''));\n }\n\n // Marked whether this component created it or the screen declared it: what makes a control\n // a display control is being driven as one, not who wrote it down. A filters form reads the\n // mark to keep it out of what it submits.\n DisplayControls.markAsDisplayControl(parent.get(name));\n }\n });\n }\n\n private closeDropdownOverlay(): void {\n this.isDropDownShown = false;\n this.focusedIndex = -1;\n this.updateInputAriaActiveDescendant();\n if (this.overlayRef) {\n this.overlayRef.detach();\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n }\n }\n\n private initializeEntriesDataSource(): void {\n if (this.hasSearchEndpoint || !this._entriesList || this._entriesList.length === 0) {\n return;\n }\n\n const observables: Observable<string>[] = [];\n\n this._entriesList.forEach((entry: any | { key: number, value: Observable<any> }) => {\n const value: number = entry[this.valueProperty];\n const display: string | Observable<any> = entry[this.displayProperty];\n\n if (display instanceof Observable) {\n this.entriesDataSource.push({ value: value, display: 'Loading...' });\n \n observables.push(display\n .pipe(\n take(1),\n tap(v => {\n this.entriesDataSource.filter(x => x.value === value)[0].display = v;\n if (this.selectedValue === value) {\n this.displayControl.setValue(v);\n }\n })\n )\n );\n } else {\n this.entriesDataSource.push({ value, display });\n }\n });\n\n // Subscribed only to run the requests; the emitted values are not needed here.\n forkJoin(observables)\n .pipe(take(1))\n .subscribe();\n }\n\n private initializeSearch(): void {\n this.searchSubject\n .pipe(\n takeUntil(this.destroy$),\n switchMap((criteria: string | null) => {\n this.lastCriteriaUsed = criteria;\n\n if (!this.hasSearchEndpoint) {\n if (this.entriesDataSource.length === 0) {\n return of(null).pipe(take(1));\n }\n return of(this.entriesDataSource.filter((entry: ICatalogEntry) => entry.display.toLowerCase().indexOf(criteria?.toLowerCase() ?? '') > -1)).pipe(take(1));\n }\n\n this.updateMinimumCharactersMessageVisibility(criteria ?? '');\n if (this.showMinimumCharactersMessage) {\n return of(null).pipe(take(1));\n }\n\n return this.catalogService.search(this.searchEndpoint!, this.maxEntries, criteria ?? '', this.filters)\n .pipe(take(1));\n }),\n ).subscribe({\n next: (result: ICatalogResult | any[] | null | undefined) => {\n this.isLoading = false;\n this.displayedEntries = [];\n\n if (Array.isArray(result) && result.length > 0) {\n this.displayedEntries = result;\n\n } else if (result?.entries && Array.isArray(result.entries)) {\n const catalogResult: ICatalogResult = result as ICatalogResult;\n if (!catalogResult) {\n return;\n }\n\n this.displayedEntries = catalogResult.entries;\n\n if (!this.isDataInitialized) {\n // The shouldUseCriteria is only set from the initialization.\n this.isDataInitialized = true;\n this.shouldUseCriteria = catalogResult.shouldUseCriteria ?? false;\n this.showMinimumCharactersMessage = this.displayedEntries.length === 0;\n }\n }\n\n // Try to filter out already loaded rows from the data grid dataset.\n if (this.displayedEntries.length > 0 && this.dataGridDataset) {\n this.displayedEntries = this.tryFilterFromDataset(this.displayedEntries);\n }\n \n if (!this.showMinimumCharactersMessage && this.displayedEntries.length === 0) {\n this.showNoResultsMessage = true;\n }\n },\n error: (_: any) => {\n this.isLoading = false;\n this.displayedEntries = [];\n this.showFailureMessage = true;\n\n // Set a new subscription to allow retrying the search later.\n this.initializeSearch();\n }\n });\n\n if (!this.isSubscriptionInitialized) {\n this.isSubscriptionInitialized = true;\n this.applySearchCriteria(null);\n }\n }\n\n private openDropdownOverlay(): void {\n // Defensive cleanup of any stale overlay before creating a new one.\n if (this.overlayRef) {\n this.overlayRef.detach();\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n }\n\n const positionStrategy: FlexibleConnectedPositionStrategy = this.positionBuilder\n .flexibleConnectedTo(this.inputElement)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n }\n ]);\n \n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: false,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n });\n\n // Set overlay width to match input field\n const inputRect: DOMRect = this.inputElement.nativeElement.getBoundingClientRect();\n this.overlayRef.updateSize({ width: inputRect.width });\n\n const portal: TemplatePortal = new TemplatePortal(this.dropdownTemplate, this.viewContainerRef);\n this.overlayRef.attach(portal);\n this.isDropDownShown = true;\n this.focusedIndex = this.selectedValue != null\n ? this.displayedEntries.findIndex((entry: ICatalogEntry) => entry.value === this.selectedValue)\n : -1;\n this.updateInputAriaActiveDescendant();\n\n // Re-evaluate minimum characters message visibility when opening the dropdown,\n // in case it was incorrectly reset by a programmatic value change.\n if (this.shouldUseCriteria && !this.isLoading) {\n this.updateMinimumCharactersMessageVisibility(this.displayControl?.value ?? '');\n }\n\n // Scroll the selected item into view after the overlay renders.\n if (this.focusedIndex >= 0) {\n requestAnimationFrame(() => this.scrollFocusedItemIntoView());\n }\n }\n\n private refreshSearch(reInitialize = false): void {\n if (reInitialize) {\n this.isDataInitialized = false;\n }\n\n this.applySearchCriteria(this.lastCriteriaUsed);\n }\n\n private resetMessages(): void {\n this.showFailureMessage = false;\n this.showNoResultsMessage = false;\n this.showMinimumCharactersMessage = false;\n }\n\n private resolveDisplay(value: any): string {\n return this.entriesDataSource.filter((entry: ICatalogEntry) => entry.value === value)[0]?.display ?? '';\n }\n\n private syncDisplayFromCurrentValue(): void {\n const currentValue: any = this.formControl?.value;\n if (currentValue == null || !this.shouldRefreshDisplay(currentValue)) {\n return;\n }\n\n this.selectedValue = currentValue;\n if (!this.hasSearchEndpoint) {\n this.displayControl?.setValue(this.resolveDisplay(currentValue), { emitEvent: false });\n }\n }\n\n /**\n * Decides whether the display control has to be written again.\n *\n * The value on its own is not enough. Resetting a form clears the display control and then\n * patches the same value back, so an unchanged value can still leave the display empty. That\n * only happens when the stored value equals the control's initial value, which is why it used\n * to show up on the default entry alone.\n */\n private shouldRefreshDisplay(value: any): boolean {\n if (this.selectedValue !== value) {\n return true;\n }\n\n if (this.hasSearchEndpoint) {\n return false;\n }\n\n const display: string = this.resolveDisplay(value);\n return display.length > 0 && this.displayControl?.value !== display;\n }\n\n private syncFormControlsEnabledDisabled(): void {\n if (this.formControl.enabled !== this.displayControl.enabled) {\n if (this.formControl.disabled) {\n this.displayControl.disable({ emitEvent: false });\n } else {\n this.displayControl.enable({ emitEvent: false });\n }\n }\n }\n\n private tryFilterFromDataset(results: ICatalogEntry[]): ICatalogEntry[] {\n if (this.dataGridDataset\n && this.controlName === this.dataGridDataset?.keyProperty\n && this.dataGridDataset.hasLoadedRows\n ) {\n // If the control name is matching the ID property of the data grid dataset, filter out the loaded rows to remove duplicated IDs.\n const loadedIDs: any[] = this.dataGridDataset.loadedKeys!.map((key: string) => this.dataGridDataset.getRowID(key));\n return results.filter((result: ICatalogEntry) => loadedIDs.indexOf(result.value) < 0);\n }\n return results;\n }\n\n private updateFilters(): void {\n if (!this.filterDiffer || !this.filters) {\n return;\n }\n\n const changes: KeyValueChanges<string ,any> | null = this.filterDiffer.diff(this.filters);\n if (changes) {\n const reInitialize = true;\n this.refreshSearch(reInitialize);\n }\n }\n\n private updateMinimumCharactersMessageVisibility(criteria: string): void {\n this.showMinimumCharactersMessage =\n this.shouldUseCriteria\n && this.minimumLengthSearch > 0\n && (criteria?.length ?? 0) < this.minimumLengthSearch;\n }\n\n private getNativeInput(): HTMLInputElement | null {\n return this.inputElement?.nativeElement?.querySelector('input') ?? null;\n }\n\n private scrollFocusedItemIntoView(): void {\n if (!this.overlayRef || this.focusedIndex < 0) {\n return;\n }\n const optionId: string = this.getOptionId(this.focusedIndex);\n const element: HTMLElement | null = this.overlayRef.overlayElement.querySelector('#' + optionId);\n if (element) {\n element.scrollIntoView({ block: 'nearest' });\n }\n }\n\n private setInputAriaAttributes(): void {\n const input: HTMLInputElement | null = this.getNativeInput();\n if (!input) {\n return;\n }\n input.setAttribute('role', 'combobox');\n input.setAttribute('aria-autocomplete', 'list');\n input.setAttribute('aria-expanded', String(this.isDropDownShown));\n input.setAttribute('aria-haspopup', 'listbox');\n input.setAttribute('aria-owns', this.listboxId);\n }\n\n private updateInputAriaActiveDescendant(): void {\n const input: HTMLInputElement | null = this.getNativeInput();\n if (!input) {\n return;\n }\n input.setAttribute('aria-expanded', String(this.isDropDownShown));\n const descendantId: string | null = this.activeDescendantId;\n if (descendantId) {\n input.setAttribute('aria-activedescendant', descendantId);\n } else {\n input.removeAttribute('aria-activedescendant');\n }\n }\n //#endregion\n}\n","<lib-form-input-group\n[controlName]=\"controlName\"\n[label]=\"label\"\n[notes]=\"notes\"\n[template]=\"template\"\n[validations]=\"validations\">\n</lib-form-input-group>\n\n<ng-template #template>\n <div class=\"catalog-container\"\n [class.show]=\"isDropDownShown\">\n <lib-form-input #input\n [class.fixed-content]=\"readOnly && !shouldUseCriteria\"\n [autofocus]=\"autofocus\"\n [controlName]=\"displayControlName\"\n [invalid]=\"isInvalid && isTouched\"\n [readOnly]=\"readOnly\"\n (blurred)=\"onContainerBlur()\"\n (click)=\"onContainerClick()\"\n (focused)=\"onContainerFocus()\"\n (keydown)=\"onKeyDown($event)\">\n </lib-form-input>\n <button *ngIf=\"showClearButton\"\n class=\"clear-button\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"onClearClick($event)\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n</ng-template>\n\n<ng-template #dropdownTemplate>\n <div class=\"dropdown-container\">\n <ul class=\"dropdown\"\n role=\"listbox\"\n [attr.id]=\"listboxId\">\n <!-- Status rows are not options: role=\"presentation\" keeps them out of the\n listbox's option set, and they carry no click handler. The dropdown already\n closes on Escape, on blur and on an outside click. -->\n <li *ngIf=\"isLoading\"\n role=\"presentation\"\n aria-live=\"polite\">\n {{ 'CatalogSelect-Loading' | translate }}\n </li>\n\n <li *ngIf=\"shouldUseCriteria && showMinimumCharactersMessage\"\n role=\"presentation\"\n aria-live=\"polite\"\n title=\"{{ 'CatalogSelect-MinimumLengthSearch' | translate: { minimumLengthSearch: minimumLengthSearch } }}\">\n {{ 'CatalogSelect-MinimumLengthSearch' | translate: { minimumLengthSearch: minimumLengthSearch } }}\n </li>\n\n <li *ngIf=\"showNoResultsMessage\"\n role=\"presentation\"\n aria-live=\"polite\"\n title=\"{{ 'CatalogSelect-NoResultsFound' | translate }}\">\n {{ 'CatalogSelect-NoResultsFound' | translate }}\n </li>\n\n <!-- Retrying is a real action, so it is a real button and reachable by keyboard. -->\n <li *ngIf=\"showFailureMessage\"\n class=\"error\"\n role=\"presentation\">\n <button class=\"retry\"\n type=\"button\"\n title=\"{{ 'CatalogSelect-FailureMessage' | translate }}\"\n (click)=\"onDropDownErrorClick()\">\n {{ 'CatalogSelect-FailureMessage' | translate }}\n </button>\n </li>\n\n <!-- eslint-disable @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus --\n Options in a combobox listbox are deliberately not focusable. Keyboard\n interaction lives on the input, which owns ArrowUp/ArrowDown/Enter/Escape and\n points at the active option through aria-activedescendant. Giving each option\n its own tabindex and key handlers would break that pattern. -->\n <li class=\"dropdown-item\" *ngFor=\"let entry of displayedEntries; let i = index\"\n role=\"option\"\n [attr.id]=\"getOptionId(i)\"\n [attr.aria-selected]=\"selectedValue === entry.value\"\n [class.focused]=\"focusedIndex === i\"\n [class.selected]=\"selectedValue === entry.value\"\n (click)=\"onDropDownItemClick(entry)\">\n {{ entry.display }}\n </li>\n <!-- eslint-enable @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n </ul>\n </div>\n</ng-template>","import { NgClass, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, inject, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgxResizeObserverModule } from 'ngx-resize-observer';\nimport { takeUntil } from 'rxjs';\nimport { IGridColumn } from '../../models';\nimport { DataGridDataset } from '../../services/datasets/data-grid.dataset';\nimport { BaseComponent } from '../base.component';\n\n@Component({\n selector: 'lib-data-grid-row',\n templateUrl: './data-grid-row.component.html',\n host: {\n '[class.focused]': 'dataGridDataset.focusedRow === rowData',\n '[class.selected]': 'dataGridDataset.isKeySelected(rowKey)',\n },\n styleUrls: ['./data-grid-row.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n NgClass,\n NgIf,\n NgFor,\n NgTemplateOutlet,\n NgxResizeObserverModule,\n ]\n})\nexport class DataGridRowComponent extends BaseComponent implements OnInit { \n //#region ViewChilds, Inputs, Outputs\n @Input() public disabled = false;\n @Input() public isFirstRow = false;\n @Input() public set rowData(value: any) {\n this._rowData = value;\n this.refreshSelection();\n }\n\n @Output() public selectionResized: EventEmitter<number> = new EventEmitter<number>();\n //#endregion\n\n //#region Host listeners\n @HostListener('click')\n public setFocus(): void {\n if (!this.disabled) {\n this.dataGridDataset.setFocusedRow(this.rowKey);\n \n if (this.dataGridDataset.configs.multiSelect && (this.dataGridDataset.configs.selectOnClick ?? true)) {\n this.selected = this.isRowDataSelected;\n }\n }\n }\n //#endregion\n\n //#region Variables\n protected changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n protected dataGridDataset: DataGridDataset = inject(DataGridDataset);\n protected selected = false;\n\n private _rowData!: any;\n private elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n //#endregion\n\n //#region Properties\n public get rowData(): any {\n return this._rowData;\n }\n\n protected get columns(): IGridColumn[] {\n return this.dataGridDataset.columns;\n }\n\n private get isLaidOut(): boolean {\n return (this.elementRef.nativeElement?.getBoundingClientRect().width ?? 0) > 0;\n }\n\n private get isRowDataSelected(): boolean {\n return this.dataGridDataset.isKeySelected(this.rowKey)\n }\n\n private get rowKey(): string {\n return this.dataGridDataset.getRowInternalKey(this.rowData);\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n this.selected = this.isRowDataSelected;\n\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe((selectionChanges: { [id:string]: { rowData: any; selected: boolean } }) => {\n if (this.rowKey in selectionChanges) {\n this.selected = selectionChanges[this.rowKey].selected;\n this.changeDetectorRef.detectChanges();\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onResize(colIndex: number, event: ResizeObserverEntry): void {\n const width: number = event.contentRect.width;\n\n // A zero means one of two very different things. Before the grid is laid out every column\n // reports zero, and taking that at face value would pin every heading at zero. Once the row\n // itself has a width the layout is live, and a zero is then the real thing: a 1fr column\n // collapsed for want of room, whose heading has to collapse with it or every column to its\n // right sits under the wrong one. Asking the row -- rather than remembering whether this\n // column once measured something -- also covers a column that is born collapsed and never\n // measures anything else.\n if (width <= 0 && !this.isLaidOut) {\n return;\n }\n\n // Reported on every change, not just the first. The body lays the columns out as a CSS grid of\n // minmax(x, min-content), so a column is only as wide as the content currently rendered --\n // which virtual scrolling keeps changing. Measuring once and latching left the header copying\n // a width the body no longer had, and with many columns that drift accumulated into cells\n // sitting under the wrong heading.\n if (this.columns[colIndex].realSize !== width) {\n this.columns[colIndex].realSize = width;\n }\n }\n\n protected onResizeSelection(event: ResizeObserverEntry): void {\n const width: number = event.contentRect.width;\n this.selectionResized.emit(width);\n }\n\n protected onToggleSelection(): void {\n if (this.disabled || (this.dataGridDataset.configs.multiSelect && (this.dataGridDataset.configs.selectOnClick ?? true))) {\n return;\n }\n \n this.selected = !this.selected;\n\n if (this.selected) {\n this.dataGridDataset.selectRow(this.rowKey);\n } else {\n this.dataGridDataset.deselectRow(this.rowKey);\n }\n }\n //#endregion\n\n //#region Public methods\n protected getValue(field: string): any {\n return field.split('.').reduce((value: any, field: string) => value[field], this.rowData);\n }\n //#endregion\n\n //#region Private methods\n private refreshSelection(): void {\n this.selected = this.isRowDataSelected;\n }\n //#endregion\n}\n","<!-- A <label> rather than a clickable <div>: clicking anywhere in the cell still\n reaches the checkbox, natively. The click handler is a mouse-only convenience;\n the keyboard path is the nested checkbox, which is focusable and toggles with\n Space on its own. -->\n<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n<label *ngIf=\"dataGridDataset.configs.multiSelect\"\nclass=\"cell selection\"\n(click)=\"onToggleSelection()\"\n(onResize)=\"onResizeSelection($event)\">\n <input class=\"form-input\"\n type=\"checkbox\"\n [attr.disabled]=\"disabled\"\n [(ngModel)]=\"selected\" />\n</label>\n\n<div #cell\n*ngFor=\"let column of columns; index as i\"\nclass=\"cell\"\n[class.disabled]=\"disabled\"\n[ngClass]=\"column.customClass\">\n <div *ngIf=\"isFirstRow\"\n class=\"spacer\"\n (onResize)=\"onResize(i, $event)\"></div>\n\n <ng-container *ngTemplateOutlet=\"column.template ? column.template : simpleTemplate; context: { rowData: rowData, column: column }\">\n </ng-container>\n</div>\n\n<ng-template #simpleTemplate let-rowData=\"rowData\" let-column=\"column\">\n <span>{{ getValue(column.field) }}</span>\n</ng-template>","import { ListRange } from '@angular/cdk/collections';\nimport { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, inject, Input, NgZone, OnInit, ViewChild, OnDestroy } from '@angular/core';\nimport { NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { debounceTime, filter, fromEvent, Subject, takeUntil } from 'rxjs';\nimport { IGridColumn } from '../../models';\nimport { DataGridConfigs } from '../../models/configs';\nimport { DataGridDataset } from '../../services';\nimport { BaseComponent } from '../base.component';\nimport { DataGridRowComponent } from '../data-grid-row/data-grid-row.component';\n\n@Component({\n selector: 'lib-data-grid',\n templateUrl: './data-grid.component.html',\n styleUrls: ['./data-grid.component.scss'],\n host: {\n '[class.no-borders]': 'showButtons',\n },\n imports: [\n DataGridRowComponent,\n NgFor,\n NgIf,\n NgStyle,\n ScrollingModule,\n TranslatePipe,\n ]\n})\nexport class DataGridComponent extends BaseComponent implements OnInit, AfterViewInit, OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('body') private bodyElement!: ElementRef<HTMLDivElement>;\n @ViewChild(CdkVirtualScrollViewport) private viewport?: CdkVirtualScrollViewport;\n\n @Input() public disabled = false;\n @Input() public lazyLoadRows = false;\n @Input() public showButtons = false;\n //#endregion\n\n //#region Variables\n protected changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n protected dataGridDataset: DataGridDataset = inject(DataGridDataset);\n protected hasFailed = false;\n protected headerRightMargin = 0;\n protected headerScrollLeft = 0;\n protected loading = false;\n\n private bodyResized$: Subject<void> = new Subject<void>();\n private bodyResizeObserver?: ResizeObserver;\n private gridRoute = '';\n private isGridCurrentUrl = false;\n private lastPosition = 0;\n private ngZone: NgZone = inject(NgZone);\n private router: Router = inject(Router);\n private selectionColRealSize?: number;\n //#endregion\n\n //#region Properties\n protected get bodyMinHeight(): number {\n let rowsToDisplay: number = this.configs.rowsToDisplay ?? 3;\n\n let rowsCount: number = this.dataGridDataset.loadedRows?.length ?? 0;\n if (rowsCount === 0) {\n rowsCount = 1;\n }\n\n if (rowsCount < rowsToDisplay) {\n rowsToDisplay = rowsCount;\n }\n\n return rowsToDisplay * this.configs.rowHeight;\n }\n\n protected get columns(): IGridColumn[] {\n return this.dataGridDataset.columns;\n }\n\n protected get configs(): DataGridConfigs {\n return this.dataGridDataset.configs;\n }\n\n protected get gridColumns(): string {\n return this.dataGridDataset.columnsSize;\n }\n\n protected get hasBeenLoaded(): boolean {\n return this.dataGridDataset.hasBeenLoaded;\n }\n\n protected get hasLoadedRows(): boolean {\n return (this.dataGridDataset.loadedRows?.length ?? 0) > 0;\n }\n\n protected get hasMessageToDisplayWhenEmpty(): boolean {\n return this.messageToDisplayWhenEmpty.length > 0;\n }\n\n protected get isHideColumns(): boolean {\n return this.dataGridDataset.configs.hideColumnHeaders ?? false;\n }\n\n protected get isShowMultiSelect(): boolean {\n return this.dataGridDataset.configs.multiSelect ?? false;\n }\n\n protected get messageToDisplayWhenEmpty(): string {\n return this.dataGridDataset?.configs?.messageOnEmpty ?? '';\n }\n\n protected get messageToDisplayWhenLazyLoad(): string {\n return this.dataGridDataset?.configs?.messageOnLazyLoad ?? '';\n }\n\n protected get messageToDisplayWhenFailed(): string {\n return this.dataGridDataset?.configs?.messageOnFailed ?? '';\n }\n\n protected get selectionColWidth(): string {\n return this.selectionColRealSize\n ? `${this.selectionColRealSize}px`\n : this.configs.multiSelectSize ?? 'minmax(1.5rem,min-content)';\n }\n\n protected get shouldDisplayMessageWhenEmpty(): boolean {\n return this.dataGridDataset?.configs?.showMessageOnEmpty ?? true;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n this.gridRoute = this.router.url;\n this.isGridCurrentUrl = true;\n\n this.router.events\n .pipe(\n takeUntil(this.destroy$),\n filter((events: any) => events instanceof NavigationStart || events instanceof NavigationEnd)\n )\n .subscribe((event: NavigationStart | NavigationEnd) => {\n if (event instanceof NavigationStart && this.isGridCurrentUrl) {\n this.lastPosition = this.viewport?.measureScrollOffset() ?? 0;\n this.isGridCurrentUrl = false;\n\n } else if (event instanceof NavigationEnd && event.url === this.gridRoute) {\n this.viewport?.scrollTo({ top: this.lastPosition });\n this.viewport?.checkViewportSize();\n this.isGridCurrentUrl = true;\n }\n });\n\n this.dataGridDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = true;\n });\n\n this.dataGridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe((isSuccess: boolean) => {\n this.loading = false;\n this.hasFailed = !isSuccess;\n\n setTimeout(() => {\n const viewportWidth: number = this.viewport?.measureViewportSize('horizontal') ?? 0;\n if (viewportWidth > 0) {\n this.headerRightMargin = this.bodyElement.nativeElement.clientWidth - viewportWidth;\n }\n }, 100);\n\n this.changeDetectorRef.detectChanges();\n\n setTimeout(() => {\n this.viewport?.checkViewportSize();\n });\n });\n\n\n if (!this.lazyLoadRows) {\n if (!this.dataGridDataset.loadedRows) {\n this.loading = true;\n }\n this.dataGridDataset.loadRows();\n } else if (this.dataGridDataset.isLoading) {\n this.loading = true;\n }\n }\n\n public ngAfterViewInit(): void {\n // The rows scroll sideways inside the CDK viewport while the header sits outside it, so the\n // header has to be moved by hand or the headings stay behind as the cells travel. Read outside\n // Angular and written back inside it, because this fires for every frame of a scroll.\n const viewportElement: HTMLElement | undefined = this.viewport?.elementRef?.nativeElement;\n\n if (viewportElement) {\n this.ngZone.runOutsideAngular(() => {\n fromEvent(viewportElement, 'scroll')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n const scrollLeft: number = viewportElement.scrollLeft;\n if (this.headerScrollLeft === scrollLeft) {\n return;\n }\n\n this.ngZone.run(() => {\n this.headerScrollLeft = scrollLeft;\n this.changeDetectorRef.detectChanges();\n });\n });\n });\n }\n\n this.viewport?.renderedRangeStream\n .pipe(takeUntil(this.destroy$))\n .subscribe((listRange: ListRange) => {\n const loadedRows: number = this.dataGridDataset.loadedRows?.length ?? 0;\n if (this.hasLoadedRows && !this.loading && listRange.end >= loadedRows && !this.dataGridDataset.loadedLastRow) {\n this.loading = true;\n this.dataGridDataset.loadRows();\n }\n });\n\n this.bodyResized$\n .pipe(\n debounceTime(150),\n takeUntil(this.destroy$)\n )\n .subscribe(() => {\n const viewportWidth: number = this.viewport?.measureViewportSize('horizontal') ?? 0;\n if (viewportWidth > 0) {\n this.headerRightMargin = this.bodyElement.nativeElement.clientWidth - viewportWidth;\n }\n this.viewport?.checkViewportSize();\n this.syncHeaderScroll();\n this.changeDetectorRef.detectChanges();\n });\n\n this.ngZone.runOutsideAngular(() => {\n this.bodyResizeObserver = new ResizeObserver(() => {\n this.bodyResized$.next();\n });\n this.bodyResizeObserver.observe(this.bodyElement.nativeElement);\n });\n }\n\n public override ngOnDestroy(): void {\n this.bodyResizeObserver?.disconnect();\n super.ngOnDestroy();\n }\n //#endregion\n\n //#region Event handlers\n protected onSelectionResized(newSize: number): void {\n if (this.selectionColRealSize != newSize) {\n this.selectionColRealSize = newSize;\n }\n }\n //#endregion\n\n //#region Public methods\n protected isFirstVisibleRow(rowIndex: number): boolean {\n const renderedRange: ListRange | undefined = this.viewport?.getRenderedRange();\n if (renderedRange) {\n return rowIndex === renderedRange.start;\n }\n return false;\n }\n //#endregion\n\n //#region Private methods\n private syncHeaderScroll(): void {\n // Re-inserting the viewport into the DOM -- which is what re-activating a detached tab does --\n // puts its scroll position back to zero without firing a scroll event, so nothing tells the\n // header to come back with it and the headings sit at an offset the body no longer has.\n const scrollLeft: number = this.viewport?.elementRef?.nativeElement?.scrollLeft ?? 0;\n\n if (this.headerScrollLeft !== scrollLeft) {\n this.headerScrollLeft = scrollLeft;\n }\n }\n\n protected trackByFn(index: number, item: any): number {\n return item.key;\n }\n //#endregion\n}\n","<div class=\"buttons\"\n*ngIf=\"showButtons\">\n <ng-content select=\"[buttons]\"></ng-content>\n</div>\n\n<div class=\"header\"\n[class.hide]=\"isHideColumns\"\n[style.padding-right.px]=\"headerRightMargin\">\n <!-- Translated by however far the body is scrolled sideways. The rows scroll inside the CDK\n viewport and the header sits outside it, so without this the headings simply stay put\n while the cells move away from them. -->\n <div class=\"header-row\"\n [style.transform]=\"headerScrollLeft ? 'translateX(-' + headerScrollLeft + 'px)' : null\">\n <div *ngIf=\"isShowMultiSelect\"\n class=\"header-cell selection\"\n [ngStyle]=\"{\n 'width': selectionColWidth ? selectionColWidth : null\n }\">\n \n </div>\n \n <!-- A measured zero is a width, not the absence of one: it is a 1fr column that collapsed,\n and its heading has to collapse too. The old test read `realSize ?? 0 > 0`, which binds\n as `realSize ?? (0 > 0)` and so turned zero into no width at all.\n\n Such a heading is removed rather than merely made zero wide, because a flex item still\n takes a gap on each side while the body grid allows the collapsed track only one, and\n that spare gap pushed every heading to its right out by 16px. -->\n <div *ngFor=\"let column of columns\"\n class=\"header-cell\"\n [ngStyle]=\"{\n 'display': column.realSize === 0 ? 'none' : null,\n 'width.px': column.realSize ?? null\n }\">\n <span>{{ column.headerName | translate }}</span>\n </div>\n </div>\n</div>\n\n<div #body\nclass=\"body\"\n[style.min-height.px]=\"bodyMinHeight\">\n <cdk-virtual-scroll-viewport\n [itemSize]=\"configs.rowHeight\"\n [style.grid-template-columns]=\"gridColumns\">\n <lib-data-grid-row #row\n *cdkVirtualFor=\"let row of dataGridDataset.loadedRows; index as i; trackBy: trackByFn\"\n [disabled]=\"disabled\"\n [isFirstRow]=\"isFirstVisibleRow(i)\"\n [rowData]=\"row\"\n [style.height.px]=\"configs.rowHeight\"\n (selectionResized)=\"onSelectionResized($event)\">\n </lib-data-grid-row>\n\n <div *ngIf=\"loading\"\n class=\"loading\"\n [style.height.px]=\"configs.rowHeight\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n \n <span>\n {{ dataGridDataset.configs.loadingDisplayText ?? '' | translate }} \n </span>\n </div>\n \n <div *ngIf=\"!loading && !hasBeenLoaded && lazyLoadRows\"\n class=\"message\"\n [style.height.px]=\"configs.rowHeight\">\n <span>\n {{ messageToDisplayWhenLazyLoad | translate }}\n </span>\n </div>\n\n <ng-container *ngIf=\"!loading && hasBeenLoaded && (!hasLoadedRows || hasFailed)\">\n <div *ngIf=\"!hasFailed && !hasLoadedRows && hasMessageToDisplayWhenEmpty && shouldDisplayMessageWhenEmpty\"\n class=\"message\"\n [style.height.px]=\"configs.rowHeight\">\n <span>\n {{ messageToDisplayWhenEmpty | translate }}\n </span>\n </div>\n\n <div *ngIf=\"hasFailed\"\n class=\"message\"\n [style.height.px]=\"configs.rowHeight\">\n <span>\n <i class=\"fas fa-exclamation-triangle mr-2 text-yellow-600\"></i>{{ messageToDisplayWhenFailed | translate }}\n </span>\n </div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n</div>","import { NgIf } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n selector: 'lib-form-group',\n templateUrl: './form-group.component.html',\n styleUrls: ['./form-group.component.scss'],\n imports: [\n NgIf,\n TranslatePipe,\n ],\n host: {\n '[class.expand]': 'shouldExpand'\n }\n})\nexport class FormGroupComponent {\n //#region ViewChilds, Inputs, Outputs\n @Input() public shouldExpand = false;\n @Input() public label!: string;\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n protected get hasTitle(): boolean {\n return !!this.label;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<h3 *ngIf=\"hasTitle\"\nclass=\"title\" >\n {{ label | translate }}\n</h3>\n\n<div class=\"content\"\n[class.has-title]=\"hasTitle\">\n <ng-content></ng-content>\n</div>","import { NgStyle } from '@angular/common';\nimport { Component, ElementRef, Input, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'lib-group-accordion',\n templateUrl: './group-accordion.component.html',\n styleUrls: ['./group-accordion.component.scss'],\n host: { '[class.collapsed]': 'collapsed' },\n imports: [\n NgStyle,\n ]\n})\nexport class GroupAccordionComponent {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('container') private containerElementRef!: ElementRef<HTMLDivElement>;\n\n @Input({ required: true }) label!: string;\n //#endregion\n\n //#region Variables\n private _maxHeight = -1;\n protected collapsed = false;\n //#endregion\n\n //#region Properties\n public get maxHeight(): number {\n return this._maxHeight;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onToggle(): void {\n // Before collapsing, we set the max height style for the closing effect.\n if (!this.collapsed) {\n this.setMaxHeight();\n }\n\n setTimeout(() => {\n this.collapsed = !this.collapsed;\n\n // After expanding, we wait the transition to end and remove the max height.\n if (!this.collapsed) {\n this.clearMaxHeight();\n }\n });\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n private clearMaxHeight(): void {\n setTimeout(() => {\n this._maxHeight = -1;\n }, 150);\n }\n private setMaxHeight(): void {\n this._maxHeight = this.containerElementRef?.nativeElement?.offsetHeight ?? 0;\n }\n //#endregion\n}","<div class=\"title\">\n <h6 role=\"button\"\n tabindex=\"0\"\n [attr.aria-expanded]=\"!collapsed\"\n (click)=\"onToggle()\"\n (keydown.enter)=\"onToggle()\"\n (keydown.space)=\"onToggle(); $event.preventDefault()\"><i class=\"fas fa-chevron-down fa-sm\"></i>{{ this.label }}</h6>\n</div>\n\n<div #container class=\"content animate\"\n[ngStyle]=\"maxHeight >= 0 && {\n 'height.px': maxHeight,\n 'max-height.px': maxHeight\n} || null\">\n <div #maxHeighContainer>\n <ng-content></ng-content>\n </div>\n</div>","import { AfterViewInit, Directive, ElementRef, EventEmitter, HostListener, inject, Input, Output } from '@angular/core';\n\n@Directive({\n selector: '[libScrollSpy]'\n})\nexport class ScrollSpyDirective implements AfterViewInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() public spiedTags: Array<string> = [];\n\n @Output() public activeSectionChange: EventEmitter<number> = new EventEmitter<number>();\n //#endregion\n\n //#region Variables\n private _el: ElementRef<HTMLElement> = inject(ElementRef);\n private activeSection: number | null = null;\n private sections: Array<Element> = new Array<Element>();\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngAfterViewInit(): void {\n this.updateSections(Array.from(this._el.nativeElement.children));\n }\n //#endregion\n\n //#region Event handlers\n @HostListener('scroll', ['$event'])\n public onScroll(event: any): void {\n const scrollTop: number = event.target.scrollTop;\n const scrollHeight: number = event.target.scrollHeight;\n const maxScroll: number = Math.round(event.target.scrollHeight - event.target.getBoundingClientRect().height);\n\n const currentScroll: number = Math.round(scrollTop * scrollHeight / maxScroll);\n\n if (currentScroll >= scrollHeight) {\n this.select(this.sections.length - 1);\n return;\n }\n\n const elements: Element[] = this.sections.filter(el => ((el as HTMLElement).offsetTop) <= currentScroll);\n\n this.select(elements.length > 0 ? elements.length - 1 : 0);\n }\n //#endregion\n\n //#region Public methods\n public scrollTo(section: number): void {\n this._el.nativeElement.scrollTop = (this.sections[section] as HTMLElement).offsetTop;\n }\n\n public select(section: number): void {\n if (section !== this.activeSection) {\n this.activeSection = section;\n this.activeSectionChange.emit(section);\n }\n }\n //#endregion\n\n //#region Private methods\n private updateSections(children: Element[]): void {\n children.forEach(el => {\n if (this.spiedTags.some(spiedTag => spiedTag.toUpperCase() === el.tagName.toUpperCase())) {\n this.sections.push(el);\n } else {\n this.updateSections(Array.from(el.children));\n }\n });\n }\n //#endregion\n}\n","import { NgClass, NgIf } from '@angular/common';\nimport { Component, ContentChildren, Input, QueryList, ViewChild } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ScrollSpyDirective } from '../../directives/scroll-spy.directive';\nimport { GroupAccordionComponent } from '../group-accordion/group-accordion.component';\n\n@Component({\n selector: 'lib-group-container',\n templateUrl: './group-container.component.html',\n styleUrls: ['./group-container.component.scss'],\n imports: [\n NgClass,\n NgIf,\n TranslatePipe,\n ]\n})\nexport class GroupContainerComponent {\n @ViewChild(ScrollSpyDirective) scrollSpy!: ScrollSpyDirective;\n @ContentChildren(GroupAccordionComponent, { descendants: true }) sections!: QueryList<GroupAccordionComponent>;\n\n public get titles(): string[] {\n return this.sections?.map(x => x.label) ?? [];\n }\n\n public activeSection = 0;\n \n @Input() title?: string;\n\n @Input() icon?: string;\n\n\n activeSectionChanged(index: number): void {\n this.activeSection = index;\n }\n\n scrollTo(section: number) {\n this.scrollSpy.scrollTo(section);\n }\n}","<div class=\"title\">\n <i *ngIf=\"!!title && !!icon\" class=\"fas fa-fw\" [ngClass]=\"icon\"></i>\n\n <h4 *ngIf=\"!!title\">{{ title | translate }}</h4>\n\n <svg *ngIf=\"!title\" [ngClass]=\"''\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n</div>\n\n<div class=\"content-container\">\n <ng-content></ng-content>\n</div>","import { NgFor } from '@angular/common';\nimport { Component, ContentChildren, QueryList, ViewChild } from '@angular/core';\nimport { ScrollSpyDirective } from '../../directives/scroll-spy.directive';\nimport { GroupAccordionComponent } from '../group-accordion/group-accordion.component';\n\n@Component({\n selector: 'lib-group-scroll-spy',\n templateUrl: './group-scroll-spy.component.html',\n styleUrls: ['./group-scroll-spy.component.scss'],\n imports: [\n NgFor,\n ScrollSpyDirective,\n ]\n})\nexport class GroupScrollSpyComponent {\n @ViewChild(ScrollSpyDirective) scrollSpy!: ScrollSpyDirective;\n @ContentChildren(GroupAccordionComponent, { descendants: true }) sections!: QueryList<GroupAccordionComponent>;\n\n public get titles(): string[] {\n return this.sections?.map(x => x.label) ?? [];\n }\n\n public activeSection = 0; \n\n\n activeSectionChanged(index: number): void {\n this.activeSection = index;\n }\n\n scrollTo(section: number) {\n this.scrollSpy.scrollTo(section);\n }\n}","<div class=\"scroll-spy\">\n <a *ngFor=\"let title of titles; let i = index\"\n class=\"item\" [class.active]=\"i === activeSection\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-current]=\"i === activeSection\"\n (click)=\"scrollTo(i)\"\n (keydown.enter)=\"scrollTo(i)\"\n (keydown.space)=\"scrollTo(i); $event.preventDefault()\"\n >{{ title }}</a>\n</div>\n\n<div class=\"content\" libScrollSpy\n[class.no-scroll-spy]=\"titles.length === 0\"\n[spiedTags]=\"['lib-group-accordion']\"\n(activeSectionChange)=\"activeSectionChanged($event)\"\n>\n <ng-content></ng-content>\n</div>","import { NgIf } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, HostListener, inject, Input, Output } from '@angular/core';\nimport { IModal } from '../../models';\nimport { BaseComponent } from '../base.component';\n\n@Component({\n selector: 'lib-modal',\n templateUrl: './modal.component.html',\n styleUrls: ['./modal.component.scss'],\n host: {\n 'title': '', // This is to ensure that the title input does not conflict with the native HTML title attribute.\n '[class.show]': 'isShown',\n },\n imports: [\n NgIf,\n ]\n})\nexport class ModalComponent extends BaseComponent implements IModal {\n //#region ViewChilds, Inputs, Outputs\n @Input() public closeButtonText = 'Close';\n @Input() public dialog = true;\n @Input() public modalProcessing = false;\n @Input() public position: 'top' | 'left' | 'right' | 'bottom' | 'center' = 'center';\n @Input() public size: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | '7xl' | 'full' | 'auto' = 'auto';\n @Input() public title!: string;\n\n @Output() public closed: EventEmitter<void> = new EventEmitter<void>();\n //#endregion\n\n //#region Variables\n private _show = false;\n private clickedOutside = false;\n private elementRef: ElementRef\n //#endregion\n\n //#region Properties\n public get isShown(): boolean {\n return this._show;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.elementRef = inject(ElementRef);\n }\n //#endregion\n\n //#region Event handlers\n protected onCloseClick(): void {\n if (!this.modalProcessing && this.isShown) {\n this.closeModal();\n }\n }\n //#endregion\n\n //#region Public methods\n public closeModal(): void {\n if (this.isShown) {\n this.toggleModal();\n }\n }\n\n public toggleModal(): void {\n const wasShown: boolean = this._show;\n\n const body: HTMLBodyElement | null = document.querySelector('body');\n body?.classList.toggle('modal-active');\n\n this._show = body?.classList.contains('modal-active') ?? false;\n\n if (this.isShown) {\n this.clickedOutside = false;\n\n const autofocus: any = this.elementRef.nativeElement.querySelector('[autofocus]')\n if (autofocus && !!autofocus.focus) {\n autofocus.focus();\n }\n } else if (wasShown) {\n this.closed.emit();\n }\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n\n //#region Host listeners\n @HostListener('body:mousedown', ['$event'])\n private bodyMouseDown(event: MouseEvent): void {\n if (this.dialog && this.isShown) {\n const target: HTMLElement = <HTMLElement>event.target;\n\n this.clickedOutside = (!this.modalProcessing && event.button === 0 && target.closest('lib-modal') && !target.closest('.modal-content')) ?? false;\n }\n }\n\n @HostListener('body:mouseup', ['$event'])\n private bodyMouseUp(event: MouseEvent): void {\n if (this.dialog && this.isShown) { \n if (this.clickedOutside && !this.modalProcessing) {\n this.toggleModal();\n }\n }\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n private documentKeyDown(event: KeyboardEvent): void {\n event = event || window.event;\n\n let isEscape = false;\n if ('key' in event) {\n isEscape = (event.key === 'Escape' || event.key === 'Esc');\n } else {\n isEscape = ((<KeyboardEvent>event).keyCode === 27);\n }\n\n if (!this.modalProcessing && this.isShown && isEscape && document.body.classList.contains('modal-active')) {\n this.toggleModal();\n }\n }\n //#endregion\n}","<div class=\"modal-overlay\"></div>\n\n<div class=\"modal-container size-{{ size }} {{ position }}\">\n <form class=\"modal-content\">\n <div class=\"modal-header\" *ngIf=\"title\">\n <p class=\"text-2xl font-bold\">{{ title }}</p>\n\n <button type=\"button\" class=\"modal-close\" (click)=\"toggleModal()\">\n <svg class=\"fill-current text-black\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n <path d=\"M14.53 4.53l-1.06-1.06L9 7.94 4.53 3.47 3.47 4.53 7.94 9l-4.47 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z\"></path>\n </svg>\n </button>\n </div>\n\n <div class=\"modal-body\">\n <ng-content select=\"[body]\"></ng-content>\n </div>\n\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn gray-300\" [disabled]=\"modalProcessing\" (click)=\"onCloseClick()\">{{ closeButtonText }}</button>\n\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n </form>\n</div>","import { NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, inject, Input, OnInit, ViewChild } from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { take, takeUntil } from 'rxjs';\nimport { FormService } from '../../services';\nimport { DataGridDataset } from '../../services/datasets/data-grid.dataset';\nimport { MultiEditorDataset } from '../../services/datasets/multi-editor.dataset';\nimport { DataGridComponent } from '../data-grid/data-grid.component';\nimport { FormGroupComponent } from '../form-group/form-group.component';\nimport { ModalComponent } from '../modal/modal.component';\n\n@Component({\n selector: 'lib-multi-editor',\n templateUrl: './multi-editor.component.html',\n styleUrls: ['./multi-editor.component.scss'],\n imports: [\n DataGridComponent,\n ModalComponent,\n NgIf,\n FormGroupComponent,\n TranslatePipe,\n ]\n})\nexport class MultiEditorComponent extends ModalComponent implements OnInit { \n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ModalComponent) private modal!: ModalComponent;\n\n @Input() public addButtonLabel = 'Add row';\n @Input() public formGroup!: FormGroup<any>;\n @Input() public removeButtonLabel = 'Remove row';\n @Input() public showAddButton = true;\n @Input() public showDeleteButton = true;\n //#endregion\n\n //#region Variables\n protected gridLoading = false;\n\n private dataGridDataset: DataGridDataset = inject(DataGridDataset);\n private formService: FormService = inject(FormService);\n private multiEditorDataset: MultiEditorDataset = inject(MultiEditorDataset);\n private selectedKey?: string;\n private selectedValue?: any;\n //#endregion\n\n //#region Properties\n protected get formLoading(): boolean {\n return this.formService.loading;\n }\n\n protected get hasSelectedKey(): boolean {\n return !!this.selectedKey;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n this.dataGridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.multiEditorDataset.clearChangedValues();\n\n this.gridLoading = false;\n this.selectedKey = undefined;\n this.selectedValue = undefined;\n });\n\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n if (this.gridLoading || !this.dataGridDataset.hasLoadedRows || !this.dataGridDataset.hasSelectedRows) {\n return;\n }\n\n if (this.formGroup.disabled) {\n this.formGroup.enable();\n }\n \n const selectedRowKey: string = this.dataGridDataset.selectedRowKeys[0];\n if (!!this.selectedKey && this.formGroup.enabled && !this.formGroup.valid && this.selectedKey !== selectedRowKey) {\n // If the form is invalid, need to stay in the same selected row.\n this.dataGridDataset.selectRow(this.selectedKey);\n this.formGroup.markAllAsTouched();\n\n } else {\n this.selectedKey = selectedRowKey;\n this.selectedValue = this.dataGridDataset.getRowData(selectedRowKey);\n this.formService.model = this.selectedValue;\n\n this.formGroup.reset();\n this.formGroup.patchValue(this.selectedValue);\n }\n });\n\n this.formGroup.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe((_: any) => {\n if (this.selectedKey && this.formGroup.dirty) {\n this.multiEditorDataset.updateValues(this.selectedKey, this.formGroup.getRawValue());\n }\n });\n\n // Start with an empty form and, since there is no selected row, disable the form.\n this.formGroup.disable({ emitEvent: false });\n }\n //#endregion\n\n //#region Event handlers\n protected onDeleteClick(): void {\n if (!this.selectedKey) {\n return;\n }\n\n this.multiEditorDataset.removeValue(this.selectedKey);\n\n this.selectedKey = undefined;\n this.formGroup.reset({ emitEvent: false });\n this.clearAllFormArrays(this.formGroup);\n\n this.formGroup.disable({ emitEvent: false });\n }\n\n protected onNewClick(): void {\n const fakeNewID: number = (Math.floor(Math.random() * (999999 - 100000)) + 100000) * -1;\n const newModel: any = this.multiEditorDataset.newData(fakeNewID);\n\n if (newModel) {\n // Read before addNewRow: it stamps the grid's internal key onto the row, so afterwards even a\n // `{}` model reports one own key and the check below would never skip.\n const hasPrefilledValues: boolean = Object.keys(newModel).length > 0;\n\n this.multiEditorDataset.storeFakeIDGenerated(fakeNewID);\n\n this.dataGridDataset.addNewRow(newModel);\n\n const newKey: string = this.dataGridDataset.loadedKeys![this.dataGridDataset.loadedKeys!.length - 1];\n\n // Record whatever `newData` pre-filled. `selectRow` below reaches the form through\n // reset() + patchValue(), which leaves it pristine, and the `valueChanges` handler is gated on\n // `formGroup.dirty` — so a row the user never types into is never recorded. Without this, values\n // returned by `newData` show up in the grid but are dropped from the save batch, and adding\n // several rows while only editing the last silently discards the earlier ones.\n //\n // Skipped for a value-less model (`{}`, the blank-row convention) so implementations that\n // pre-fill nothing keep sending nothing for a row that was added and never touched.\n if (hasPrefilledValues) {\n this.multiEditorDataset.updateValues(newKey, newModel);\n }\n\n this.dataGridDataset.selectRow(newKey);\n }\n }\n\n protected onSaveClick(): void {\n if (this.selectedKey) {\n this.formGroup.markAllAsTouched();\n }\n\n if (!this.selectedKey || this.formGroup.valid) {\n this.modalProcessing = true;\n this.formGroup.disable();\n\n this.multiEditorDataset.saveChanges()\n .pipe(take(1))\n .subscribe({\n next: (_: any) => {\n this.modalProcessing = false;\n this.toggleModal();\n },\n error: (e: HttpErrorResponse) => {\n this.modalProcessing = false;\n this.formGroup.enable();\n\n if (e.status === 400 && e.error.errors) {\n this.dataGridDataset.selectRowID(e.error.entityKey);\n\n this.formService.setValidationErrorsFromHttpResponse(e);\n }\n }\n });\n }\n }\n //#endregion\n\n //#region Public methods\n public override closeModal(): void {\n this.modal.closeModal();\n }\n\n public override toggleModal(): void {\n this.modal.toggleModal();\n\n if (this.modal.isShown) {\n this.gridLoading = true;\n this.dataGridDataset.refresh();\n \n this.selectedKey = undefined;\n this.formGroup.reset({ emitEvent: false });\n this.clearAllFormArrays(this.formGroup);\n this.formGroup.disable({ emitEvent: false });\n }\n }\n //#endregion\n\n //#region Private methods\n private clearAllFormArrays(form: FormGroup): void {\n Object.keys(form.controls).forEach((key: string) => {\n const control: AbstractControl | null = form.get(key);\n if (control instanceof FormArray) {\n control.clear({ emitEvent: false });\n }\n \n // Check for nested FormArrays.\n if (control instanceof FormGroup) {\n this.clearAllFormArrays(control);\n }\n });\n }\n //#endregion\n}","<lib-modal\n[closeButtonText]=\"closeButtonText | translate\"\n[dialog]=\"dialog\"\n[modalProcessing]=\"modalProcessing\"\n[position]=\"position\"\n[size]=\"size\"\n[title]=\"title\">\n <div body class=\"body-content\">\n <div class=\"data-grid\">\n <lib-data-grid [disabled]=\"modalProcessing\" [lazyLoadRows]=\"true\"></lib-data-grid>\n </div>\n\n <div class=\"data\">\n <div class=\"buttons\">\n <button *ngIf=\"showAddButton\"\n class=\"btn gray-500\"\n type=\"button\"\n [class.disabled]=\"modalProcessing || gridLoading || formLoading || formGroup.invalid\"\n [disabled]=\"modalProcessing || gridLoading || formLoading || formGroup.invalid\"\n (click)=\"onNewClick()\">\n {{ addButtonLabel }}\n </button>\n\n <button *ngIf=\"showDeleteButton && hasSelectedKey\"\n class=\"btn red-500\"\n type=\"button\"\n [class.disabled]=\"modalProcessing || gridLoading || formLoading\"\n [disabled]=\"modalProcessing || gridLoading || formLoading\"\n (click)=\"onDeleteClick()\">\n {{ removeButtonLabel }}\n </button>\n </div>\n\n <lib-form-group>\n <ng-content></ng-content>\n </lib-form-group>\n </div>\n </div>\n\n <div footer>\n <button\n class=\"btn blue-500\"\n type=\"button\"\n [class.disabled]=\"gridLoading || formLoading\"\n [class.loading]=\"modalProcessing\"\n (click)=\"onSaveClick()\">\n {{ 'Button-Modal-MultiEditor-Confirm' | translate }}\n </button>\n </div>\n</lib-modal>","import { CommonModule, NgFor, NgIf } from '@angular/common';\nimport { Component, inject, Input, OnInit, TemplateRef } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntil } from 'rxjs';\nimport { MultiSelectResultDataset } from '../../../services/datasets/multi-select-result.dataset';\nimport { BaseComponent } from '../../base.component';\nimport { DataGridDataset } from '../../../services';\n\n@Component({\n selector: 'lib-multi-select-result-grid',\n templateUrl: './result-grid.component.html',\n styleUrls: ['./result-grid.component.scss'],\n host: {\n 'class': 'flex-grow'\n },\n imports: [\n CommonModule,\n NgFor,\n NgIf,\n TranslatePipe,\n ]\n})\nexport class MultiSelectResultGridComponent extends BaseComponent implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() isDisabled = false;\n @Input() template!: TemplateRef<any>;\n //#endregion\n\n //#region Variables\n protected dataGridDataset: DataGridDataset = inject(DataGridDataset);\n protected isLoading = true;\n protected resultDataset: MultiSelectResultDataset = inject(MultiSelectResultDataset);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngOnInit(): void {\n this.resultDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.isLoading = true;\n });\n\n this.resultDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.isLoading = false;\n });\n }\n //#endregion\n\n //#region Event handlers\n public onItemRemoved(rowIndex: number): void {\n const id: any = this.resultDataset.displayedIDs[rowIndex];\n this.dataGridDataset.deselectRowID(id);\n }\n\n protected onScrolled(event: any): void {\n const currentScroll: number = event.target.scrollTop + event.target.clientHeight;\n const scrollHeight: number = event.target.scrollHeight - event.target.clientHeight;\n\n if (currentScroll > scrollHeight && !this.isLoading && !this.resultDataset.loadedLastRow) {\n this.isLoading = true;\n this.resultDataset.loadRows();\n }\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<div\nclass=\"body\"\n(scroll)=\"onScrolled($event)\">\n <div\n class=\"row\"\n *ngFor=\"let row of resultDataset.displayedRows; let i = index\">\n <div class=\"cell\">\n <button\n class=\"remove\"\n type=\"button\"\n [class.disabled]=\"isDisabled\"\n [disabled]=\"isDisabled\"\n (click)=\"onItemRemoved(i)\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div> \n\n <div class=\"cell\">\n <div>\n <ng-container *ngTemplateOutlet=\"template; context: { rowData: row }\">\n </ng-container>\n </div>\n </div>\n </div>\n\n <div\n class=\"loading\"\n *ngIf=\"isLoading\">\n <svg [ngClass]=\"''\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n\n <span>\n {{ resultDataset.configs.loadingDisplayText ?? '' | translate }} \n </span>\n </div>\n</div>","import { Component, inject, Input, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { take, takeUntil } from 'rxjs';\nimport { IGridColumn } from '../../models';\nimport { DataGridDataset } from '../../services/datasets/data-grid.dataset';\nimport { MultiSelectResultDataset } from '../../services/datasets/multi-select-result.dataset';\nimport { DataGridComponent } from '../data-grid/data-grid.component';\nimport { ModalComponent } from '../modal/modal.component';\nimport { MultiSelectResultGridComponent } from './result-grid/result-grid.component';\n\n@Component({\n selector: 'lib-multi-select',\n templateUrl: './multi-select.component.html',\n styleUrls: ['./multi-select.component.scss'],\n imports: [\n DataGridComponent,\n FormsModule,\n ModalComponent,\n MultiSelectResultGridComponent,\n TranslatePipe,\n ]\n})\nexport class MultiSelectComponent extends ModalComponent implements OnInit { \n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ModalComponent) private modal!: ModalComponent;\n\n @Input() public itemTemplate!: TemplateRef<any>;\n //#endregion\n\n //#region Variables\n protected isResultGridLoading = false;\n protected isSearchGridLoading = false;\n protected resultDataset: MultiSelectResultDataset = inject(MultiSelectResultDataset);\n protected searchCriteria = '';\n\n private _searchColumn = '';\n private dataGridDataset: DataGridDataset = inject(DataGridDataset);\n //#endregion\n\n //#region Properties\n private get searchColumn(): string {\n if (this._searchColumn.length === 0) {\n let columnName = this.dataGridDataset.columns.filter((col: IGridColumn) => col.field !== '')[0]?.field ?? 'Search';\n columnName = columnName.charAt(0).toUpperCase() + columnName.slice(1);\n this._searchColumn = columnName;\n }\n return this._searchColumn;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataGridDataset.configs.multiSelect = true;\n this.closeButtonText = 'Button-Modal-Cancel';\n }\n\n public ngOnInit(): void {\n this.dataGridDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.isSearchGridLoading = true;\n });\n\n this.dataGridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.isSearchGridLoading = false;\n this.updateSelectedItems();\n });\n\n this.resultDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.isResultGridLoading = false;\n this.updateSelectedItems();\n });\n\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe((selectionChanges: { [id:string]: { rowData: any; selected: boolean } }) => {\n if (this.isSearchGridLoading || this.isResultGridLoading) {\n return;\n }\n\n Object.keys(selectionChanges)\n .forEach((key: string) => {\n const selection: { rowData: any; selected: boolean } = selectionChanges[key];\n const id: any = this.dataGridDataset.getRowID(key);\n\n if (selection.selected) {\n this.resultDataset.setIDToAdd(id, selection.rowData);\n } else {\n this.resultDataset.setIDToRemove(id);\n }\n });\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onSave(): void {\n this.modalProcessing = true;\n this.resultDataset.saveChanges()\n .pipe(take(1))\n .subscribe(() => {\n this.modalProcessing = false;\n this.toggleModal();\n });\n }\n\n protected onSearch(): void {\n const filters: { [key: string]: string; } = this.dataGridDataset.filters ?? {};\n\n this.isSearchGridLoading = true;\n if (this.searchCriteria.length > 0) {\n filters[this.searchColumn] = this.searchCriteria;\n this.dataGridDataset.setFilters(filters);\n\n } else if (Object.keys(filters).includes(this.searchColumn)) {\n this.clearSearch();\n }\n }\n //#endregion\n\n //#region Public methods\n public override closeModal(): void {\n this.modal.closeModal();\n }\n\n public override toggleModal(): void {\n this.modal.toggleModal();\n\n if (this.modal.isShown) {\n this.searchCriteria = '';\n this.clearSearch();\n\n this.isResultGridLoading = true;\n this.resultDataset.refresh();\n }\n }\n //#endregion\n\n //#regiosn Private methods\n private clearSearch(): void {\n const filters: { [key: string]: string; } = this.dataGridDataset.filters ?? {};\n if (Object.keys(filters).includes(this.searchColumn)) {\n delete filters[this.searchColumn];\n }\n this.dataGridDataset.setFilters(filters);\n }\n private updateSelectedItems(): void {\n if (this.isSearchGridLoading || this.isResultGridLoading) {\n return;\n }\n\n // Filter by the results that are not marked to be removed.\n const idsFromResult: any[] = (this.resultDataset.loadedKeys ?? [])\n .map((key: string) => this.resultDataset.getRowID(key))\n .filter((id: any) => this.resultDataset.idsToRemove.indexOf(id) < 0);\n\n idsFromResult.push(...this.resultDataset.idsToAdd);\n \n // Get each corresponding key from the data grid.\n const keysToSelect: string[] = (this.dataGridDataset.loadedKeys ?? [])\n .filter((key: string) => idsFromResult.indexOf(this.dataGridDataset.getRowID(key)) >= 0);\n\n this.dataGridDataset.selectRows(keysToSelect);\n }\n //#endregion\n}","<lib-modal\n[closeButtonText]=\"closeButtonText | translate\"\n[dialog]=\"dialog\"\n[modalProcessing]=\"modalProcessing\"\n[position]=\"position\"\n[size]=\"size\"\n[title]=\"title\">\n <div body class=\"body-content\">\n <div class=\"search-grid\">\n <div class=\"search\">\n <input\n class=\"form-input\"\n placeholder=\"Search...\"\n type=\"text\"\n [(ngModel)]=\"searchCriteria\"\n [disabled]=\"modalProcessing || isSearchGridLoading\"\n (keydown.enter)=\"onSearch()\" />\n </div>\n \n <lib-data-grid\n [disabled]=\"modalProcessing || isSearchGridLoading || isResultGridLoading\"\n [lazyLoadRows]=\"true\">\n </lib-data-grid>\n </div>\n\n <lib-multi-select-result-grid\n [isDisabled]=\"modalProcessing || isSearchGridLoading || isResultGridLoading\"\n [template]=\"itemTemplate\">\n </lib-multi-select-result-grid>\n </div>\n\n <div footer>\n <button\n class=\"btn blue-500\"\n type=\"button\"\n [class.loading]=\"modalProcessing\"\n (click)=\"onSave()\">\n {{ 'Button-Modal-MultiSelect-Confirm' | translate }}\n </button>\n </div>\n</lib-modal>","import { NgFor, NgIf, NgStyle } from '@angular/common';\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, inject, Input, OnInit, ViewChild } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { delay, filter, takeUntil } from 'rxjs';\nimport { SIDEBAR_CONFIGS, SidebarConfigs, SidebarMenu, SidebarMenuOpenMode, toSidebarMenuOpenMode } from '../../models';\nimport { SidebarService } from '../../services';\nimport { BaseComponent } from '../base.component';\n\n@Component({\n selector: 'lib-sidebar-item',\n templateUrl: './sidebar-item.component.html',\n styleUrls: ['./sidebar-item.component.scss'],\n imports: [\n NgFor,\n NgIf,\n NgStyle,\n TranslatePipe,\n ],\n host: {\n '[class.active]': 'isActive',\n '[class.expanded]': '!isCollapsed',\n '[class.first-level]': 'level === 0',\n '[class.last-child]': 'isLast',\n '[class.selected]': 'isSelected',\n }\n})\nexport class SidebarItemComponent extends BaseComponent implements OnInit, AfterViewInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('menuContainer') private menuContainer!: ElementRef<HTMLAnchorElement>;\n\n @Input() public isLast = false;\n @Input() public level = 0;\n @Input() public menu!: SidebarMenu;\n //#endregion\n\n //#region Variables\n protected hasFailed = false;\n protected isLoading = false;\n protected isSelected = false;\n\n private _childHeight = 0;\n private changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n private sidebarConfigs: SidebarConfigs = inject(SIDEBAR_CONFIGS);\n private sidebarService: SidebarService = inject(SidebarService);\n //#endregion\n\n //#region Properties\n public get childHeight(): number {\n return this._childHeight;\n }\n\n protected get areChildrenLoaded(): boolean {\n return this.isParent && (this.menu.children?.length ?? 0) > 0;\n }\n\n protected get externalLinkText(): string {\n return this.sidebarConfigs.externalLinkText;\n }\n\n protected get isActive(): boolean {\n return this.sidebarService.isActive;\n }\n\n protected get isCollapsed(): boolean {\n return this.sidebarService.isCollapsed;\n }\n\n protected get isParent(): boolean {\n return this.menu.childCount > 0;\n }\n\n protected get opensInNewBrowserTab(): boolean {\n return (this.menu.url?.length ?? 0) > 0\n && toSidebarMenuOpenMode(this.menu.openMode) === SidebarMenuOpenMode.ExternalNewTab;\n }\n\n protected get hasIcon(): boolean {\n return !!this.menu.icon && this.menu.icon.length > 0;\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngAfterViewInit(): void {\n if (!!this.menu && !!this.menu.parent) {\n this.menu.height = this.menuContainer?.nativeElement?.offsetHeight ?? 0;\n this.sidebarService.childrenInitialized.emit(this.menu.parent);\n }\n }\n\n public ngOnInit(): void {\n if (this.isParent) {\n this.sidebarService.childrenFailed\n .pipe(\n takeUntil(this.destroy$),\n filter((menu: SidebarMenu) => menu.id === this.menu.id),\n delay(1000),\n )\n .subscribe((_menu: SidebarMenu) => {\n this.hasFailed = true;\n this.isLoading = false;\n this.isSelected = false;\n this.menu.isSelected = false;\n\n this.changeDetectorRef.detectChanges();\n });\n\n this.sidebarService.childrenLoading\n .pipe(\n takeUntil(this.destroy$),\n filter((menu: SidebarMenu) => menu.id === this.menu.id)\n )\n .subscribe((_menu: SidebarMenu) => {\n this.hasFailed = false;\n this.isLoading = true;\n });\n\n this.sidebarService.childrenInitialized\n .pipe(\n takeUntil(this.destroy$),\n filter((menu: SidebarMenu) => menu.id === this.menu.id && this.menu.children.every((child: SidebarMenu) => (child.height ?? 0) > 0))\n )\n .subscribe((_menu: SidebarMenu) => {\n this.isLoading = false;\n this.hasFailed = false;\n this.updateSubMenuHeight();\n\n if (this.menu.parent) {\n this.sidebarService.childrenInitialized.emit(this.menu.parent);\n }\n\n this.changeDetectorRef.detectChanges();\n });\n }\n\n this.sidebarService.selectionChanged\n .pipe(\n takeUntil(this.destroy$),\n filter((menu: SidebarMenu) => menu.id === this.menu.id)\n )\n .subscribe((menu: SidebarMenu) => {\n this.isSelected = menu.isSelected;\n this.updateSubMenuHeight();\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onSelectItem(): void {\n if (this.sidebarService.shouldActivate) {\n this.sidebarService.isActive = true;\n }\n\n this.sidebarService.select(this.menu);\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n protected trackByFn(_index: number, item: SidebarMenu): number {\n return item.id;\n }\n\n private getChildHeight(menu: SidebarMenu): number {\n if (menu.isSelected) {\n return menu.children.reduce((height: number, childMenu: SidebarMenu) => height + (childMenu.height ?? 0) + this.getChildHeight(childMenu), 0);\n }\n return 0;\n }\n\n private updateSubMenuHeight(): void {\n this._childHeight = this.getChildHeight(this.menu);\n }\n //#endregion\n}","<li>\n <div #menuContainer\n [class.external]=\"opensInNewBrowserTab\"\n [class.failed]=\"hasFailed\"\n [class.loading]=\"isLoading\"\n [class.parent]=\"isParent\"\n [class.selected]=\"isSelected\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-current]=\"isSelected\"\n (click)=\"onSelectItem()\"\n (keydown.enter)=\"onSelectItem()\"\n (keydown.space)=\"onSelectItem(); $event.preventDefault()\">\n <a [attr.title]=\"opensInNewBrowserTab ? externalLinkText : null\">\n <i *ngIf=\"hasIcon && level === 0\" class=\"fa-solid fa-fw {{ menu.icon }}\"></i>\n <span>{{ menu.label | translate }}</span>\n </a>\n\n <div class=\"loading\" *ngIf=\"isParent\">\n <svg class=\"animate-spin text-white\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n </div>\n </div>\n\n <ul *ngIf=\"isParent\"\n [class.open]=\"isSelected\"\n [ngStyle]=\"{\n 'height.px': childHeight,\n 'max-height.px': childHeight\n }\">\n <lib-sidebar-item *ngFor=\"let child of menu.children; trackBy: trackByFn; let last = last\"\n [menu]=\"child\"\n [level]=\"level+1\"\n [isLast]=\"last\">\n </lib-sidebar-item>\n </ul>\n</li>","import { CommonModule, NgFor, NgIf } from '@angular/common';\nimport { AfterViewInit, Component, HostListener, inject, OnInit } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { forkJoin, map, merge, Observable, of, switchMap, take, takeUntil } from 'rxjs';\nimport { SIDEBAR_CONFIGS, SidebarConfigs, SidebarMenu, SidebarRegion } from '../../models';\nimport { SidebarService } from '../../services';\nimport { BaseComponent } from '../base.component';\nimport { SidebarItemComponent } from '../sidebar-item/sidebar-item.component';\n\n@Component({\n selector: 'lib-sidebar',\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss'],\n imports: [\n CommonModule,\n NgFor,\n NgIf,\n SidebarItemComponent,\n TranslatePipe,\n ],\n host: {\n '[class.active]': 'isActive',\n '[class.expanded]': '!isCollapsed',\n }\n})\nexport class SidebarComponent extends BaseComponent implements AfterViewInit, OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Host listeners\n @HostListener('body:mousedown', ['$event'])\n private onBodyMouseDown(event: MouseEvent): void {\n if (this.isActive && event.target) {\n const target: HTMLElement = <HTMLElement>event.target;\n this.wasClickedOutside = (event.button === 0 && !target.closest('lib-sidebar')) ?? false;\n }\n }\n\n @HostListener('body:mouseup', ['$event'])\n private onBodyMouseUp(_event: MouseEvent): void {\n if (this.wasClickedOutside) {\n this.wasClickedOutside = false;\n this.deactivate();\n }\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n private onDocumentKeyDown(event: KeyboardEvent): void {\n event = event || window.event;\n \n let isEscapeKey = false;\n if ('key' in event) {\n isEscapeKey = (event.key === 'Escape' || event.key === 'Esc')\n } else {\n isEscapeKey = ((<KeyboardEvent>event).keyCode === 27)\n }\n\n if (isEscapeKey) {\n this.deactivate();\n }\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(_event: Event): void {\n this.updateShouldActivate();\n }\n //#endregion\n\n //#region Variables\n private sidebarConfigs: SidebarConfigs = inject(SIDEBAR_CONFIGS);\n\n protected configErrorText: string = this.sidebarConfigs.errorText;\n protected configLoadingText: string = this.sidebarConfigs.loadingText;\n protected hasFailed = false;\n protected menus: SidebarMenu[] = [];\n protected regions: SidebarRegion[] = [];\n\n private sidebarService: SidebarService = inject(SidebarService);\n private wasClickedOutside = false;\n //#endregion\n\n //#region Properties\n protected get isActive(): boolean {\n return this.sidebarService.isActive;\n }\n\n protected get isCollapsed(): boolean {\n return this.sidebarService.isCollapsed;\n }\n\n protected get isLoading(): boolean {\n return this.menus.length === 0;\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n }\n\n public ngAfterViewInit(): void {\n this.updateShouldActivate();\n }\n\n public ngOnInit(): void {\n merge(this.sidebarService.menuUrlSelected, this.sidebarService.menuExternalUrlSelected)\n .pipe(takeUntil(this.destroy$))\n .subscribe((_menu: SidebarMenu) => this.deactivate());\n\n this.sidebarService.loadRoot()\n .pipe(\n take(1),\n switchMap((menus: SidebarMenu[]) => this.loadAreaChildren(menus)),\n )\n .subscribe({\n next: (menus: SidebarMenu[]) => {\n this.menus = menus;\n this.regions = this.groupIntoRegions(menus);\n },\n error: () => this.hasFailed = true\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public collapse(): void {\n this.sidebarService.isCollapsed = !this.sidebarService.isCollapsed;\n this.sidebarService.isActive = false;\n\n if (this.sidebarService.isCollapsed) {\n this.sidebarService.deselectAll();\n }\n\n this.updateShouldActivate();\n }\n //#endregion\n\n //#region Private methods\n protected trackByFn(_index: number, item: SidebarMenu): number {\n return item.id;\n }\n\n protected trackByRegion(_index: number, region: SidebarRegion): string {\n return region.name ?? '';\n }\n\n /** Whether this top-level menu stands for an area rather than a destination of its own. */\n private isArea(menu: SidebarMenu): boolean {\n return menu.childCount > 0 && (menu.url?.length ?? 0) === 0;\n }\n\n // Group top-level menus into regions by their optional `region` label, preserving\n // first-appearance order. Ungrouped menus fall into a single header-less region.\n private groupByRegionLabel(menus: SidebarMenu[]): SidebarRegion[] {\n const regions: SidebarRegion[] = [];\n const byName: Map<string | undefined, SidebarRegion> = new Map<string | undefined, SidebarRegion>();\n\n menus.forEach((menu: SidebarMenu) => {\n let region: SidebarRegion | undefined = byName.get(menu.region);\n if (!region) {\n region = { name: menu.region, items: [] };\n byName.set(menu.region, region);\n regions.push(region);\n }\n region.items.push(menu);\n });\n\n return regions;\n }\n\n // Derive the regions from the tree: an area menu becomes a header and lends the group its own\n // children, so the area carries one translated label and one order instead of a string repeated\n // across every item. Anything that is not an area keeps falling into a header-less region, which\n // is created where the first such item appears so the original ordering still holds.\n private groupByRootMenus(menus: SidebarMenu[]): SidebarRegion[] {\n const regions: SidebarRegion[] = [];\n let ungrouped: SidebarRegion | undefined;\n\n menus.forEach((menu: SidebarMenu) => {\n if (this.isArea(menu)) {\n regions.push({ name: menu.label, items: menu.children });\n return;\n }\n\n if (!ungrouped) {\n ungrouped = { name: undefined, items: [] };\n regions.push(ungrouped);\n }\n\n ungrouped.items.push(menu);\n });\n\n return regions;\n }\n\n private groupIntoRegions(menus: SidebarMenu[]): SidebarRegion[] {\n return this.sidebarConfigs.shouldDeriveAreasFromRootMenus\n ? this.groupByRootMenus(menus)\n : this.groupByRegionLabel(menus);\n }\n\n /**\n * Fetches the children of every area up front, because they are rendered flat rather than\n * behind a click, so the lazy load a collapsible parent relies on would never be triggered.\n */\n private loadAreaChildren(menus: SidebarMenu[]): Observable<SidebarMenu[]> {\n if (!this.sidebarConfigs.shouldDeriveAreasFromRootMenus) {\n return of(menus);\n }\n\n const areas: SidebarMenu[] = menus.filter((menu: SidebarMenu) => this.isArea(menu));\n\n // forkJoin never emits on an empty array, so a menu with no areas has to short-circuit.\n if (areas.length === 0) {\n return of(menus);\n }\n\n return forkJoin(areas.map((area: SidebarMenu) => this.sidebarService.loadChildrenFor(area)))\n .pipe(map(() => menus));\n }\n\n private deactivate(): void {\n if (this.sidebarService.isActive) {\n this.sidebarService.isActive = false;\n this.sidebarService.deselectAll();\n }\n }\n\n private updateShouldActivate(): void {\n this.sidebarService.shouldActivate =\n (window.innerWidth <= 767 && !this.sidebarService.isCollapsed)\n || this.sidebarService.isCollapsed;\n }\n //#endregion\n}","<div class=\"sidebar-toolbar\">\n <button type=\"button\" class=\"sidebar-toggle\" (click)=\"collapse()\" aria-label=\"Toggle navigation\">\n <i class=\"fa-solid fa-angle-left\" [class.is-collapsed]=\"isCollapsed\"></i>\n </button>\n</div>\n\n<nav>\n <ul *ngIf=\"!isLoading; else loading\">\n <ng-container *ngFor=\"let region of regions; trackBy: trackByRegion\">\n <li class=\"sidebar-region-header\" *ngIf=\"region.name\">\n <span>{{ region.name | translate }}</span>\n </li>\n\n <lib-sidebar-item *ngFor=\"let menu of region.items; trackBy: trackByFn\"\n [menu]=\"menu\">\n </lib-sidebar-item>\n </ng-container>\n\n <div class=\"error\" *ngIf=\"hasFailed\">\n <div>\n <i class=\"fa-solid fa-fw fa-triangle-exclamation\"></i>\n <span>{{ configErrorText }}</span>\n </div>\n </div>\n </ul>\n</nav>\n\n<div class=\"sidebar-footer\"><ng-content></ng-content></div>\n\n<ng-template #loading>\n <div class=\"loading\">\n <div>\n <svg class=\"animate-spin text-white\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n <span>{{ configLoadingText }}</span>\n </div>\n </div>\n</ng-template>","import { NgClass, NgFor, NgIf } from '@angular/common';\nimport { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { IRibbonButtonOption } from '../../models/ribbon-button-option';\n\n@Component({\n selector: 'lib-ribbon-button',\n templateUrl: './ribbon-button.component.html',\n host: {\n '[class.dropdown]': 'options.length > 0',\n '[class.show]': 'showDropdown',\n },\n styleUrls: ['./ribbon-button.component.scss'],\n imports: [\n NgClass,\n NgFor,\n NgIf,\n TranslatePipe,\n ]\n})\nexport class RibbonButtonComponent {\n //#region ViewChilds, Inputs, Outputs\n @Input() public color = 'text-primary-500';\n @Input() public defaultOption = -1;\n @Input() public disabled = false;\n @Input() public icon?: string;\n @Input() public iconSize: 'small' | 'large' = 'large';\n @Input() public label = '';\n @Input() public loading = false;\n @Input() public options: IRibbonButtonOption[] = [];\n @Input() public tooltip = '';\n\n @Output() public action = new EventEmitter<string | undefined>();\n //#endregion\n\n //#region Host listeners\n @HostListener('body:mousedown', ['$event'])\n private bodyMouseDown(event: MouseEvent): void {\n if (this.showDropdown) {\n const target: HTMLElement = <HTMLElement>event.target;\n\n const button: HTMLElement | null | undefined = target.closest('.button-container')?.parentElement;\n\n this.clickedOutside =\n event.button === 0\n && !target.closest('.options-dropdown')\n && (\n !button || (!button?.classList.contains('dropdown') && !button?.classList.contains('open'))\n );\n }\n }\n\n @HostListener('body:mouseup', ['$event'])\n private bodyMouseUp(event: MouseEvent): void {\n if (this.showDropdown && this.clickedOutside) {\n this.showDropdown = false;\n }\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n private documentKeyDown(event: KeyboardEvent): void {\n event = event || window.event;\n \n let isEscape = false;\n if ('key' in event) {\n isEscape = (event.key === 'Escape' || event.key === 'Esc');\n } else {\n isEscape = ((<KeyboardEvent>event).keyCode === 27);\n }\n\n if (this.showDropdown && isEscape) {\n this.showDropdown = false;\n }\n }\n //#endregion\n\n //#region Variables\n protected showDropdown = false;\n protected status: null | 'failure' | 'warning' | 'success' = null;\n\n private clickedOutside = false;\n //#endregion\n\n //#region Properties\n protected get buttonIcon(): string {\n switch (this.status) {\n case 'success':\n return 'fa-check';\n case 'failure':\n return 'fa-times';\n case 'warning':\n return 'fa-exclamation';\n default:\n return this.icon ?? '';\n }\n }\n\n protected get isButtonDisabled(): boolean {\n return this.disabled || this.loading || (this.options.length > 0 && !this.options.some((option: IRibbonButtonOption) => this.isOptionVisible(option)));\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n if (this.options.length > 0) {\n if (this.defaultOption >= 0 && this.defaultOption < this.options.length) {\n this.showDropdown = false;\n this.action.emit(this.options[this.defaultOption].id);\n } else {\n this.onShowHideDropdown();\n }\n } else {\n this.action.emit();\n }\n }\n\n protected onOptionClicked(option: IRibbonButtonOption) {\n this.showDropdown = false;\n this.action.emit(option.id);\n }\n\n protected onShowHideDropdown(): void {\n this.showDropdown = !this.showDropdown;\n }\n //#endregion\n\n //#region Public methods\n public finishLoading(status: 'failure' | 'warning' | 'success'): void {\n this.loading = false;\n this.status = status;\n\n setTimeout(() => {\n this.status = null;\n }, 1000);\n }\n\n public startLoading(): void {\n this.loading = true;\n }\n\n protected isOptionDisabled(option: IRibbonButtonOption): boolean {\n return option.isDisabled || ((option.allowedActions?.length ?? 0) > 0 && option.isAccessAllowed === undefined);\n }\n\n protected isOptionVisible(option: IRibbonButtonOption): boolean {\n return (option.isVisible ?? true) && (option.allowedActions === undefined || option.allowedActions.length === 0 || option.isAccessAllowed === true || (option.isAccessAllowed == undefined && option.allowedActions?.length > 0));\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<div class=\"button-container\"\n[attr.title]=\"tooltip || null\">\n <a class=\"button\"\n role=\"button\"\n [attr.tabindex]=\"isButtonDisabled ? -1 : 0\"\n [attr.aria-disabled]=\"isButtonDisabled\"\n [class.disabled]=\"isButtonDisabled\"\n [class.success]=\"status === 'success'\"\n [class.warning]=\"status === 'warning'\"\n [class.failure]=\"status === 'failure'\"\n [class.small]=\"iconSize === 'small'\"\n (click)=\"onButtonClicked()\"\n (keydown.enter)=\"onButtonClicked()\"\n (keydown.space)=\"onButtonClicked(); $event.preventDefault()\"\n >\n <span class=\"icon\" [class.loading]=\"loading\">\n <i class=\"fas fa-fw\" [ngClass]=\"[ buttonIcon, color ]\"></i>\n \n <svg [ngClass]=\"[ color ]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n </span>\n \n <span class=\"label\" [class.text-white]=\"status !== null\">\n {{ label | translate }}\n </span>\n </a>\n \n <a class=\"button-dropdown\" *ngIf=\"options.length > 0\"\n role=\"button\"\n [attr.tabindex]=\"isButtonDisabled ? -1 : 0\"\n [attr.aria-disabled]=\"isButtonDisabled\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"showDropdown\"\n [class.disabled]=\"isButtonDisabled\"\n [class.success]=\"status === 'success'\"\n [class.warning]=\"status === 'warning'\"\n [class.failure]=\"status === 'failure'\"\n [class.small]=\"iconSize === 'small'\"\n (click)=\"onShowHideDropdown()\"\n (keydown.enter)=\"onShowHideDropdown()\"\n (keydown.space)=\"onShowHideDropdown(); $event.preventDefault()\"\n >\n <i class=\"fas fa-chevron-down\" [ngClass]=\"[ color ]\"></i>\n </a>\n</div>\n\n<ul class=\"options-dropdown\" *ngIf=\"options.length > 0\" role=\"menu\">\n <li *ngFor=\"let option of options; let i = index\"\n role=\"menuitem\"\n [attr.tabindex]=\"isOptionDisabled(option) || !isOptionVisible(option) ? -1 : 0\"\n [attr.aria-disabled]=\"isOptionDisabled(option)\"\n [class.default-option]=\"i === defaultOption\"\n [class.disabled]=\"isOptionDisabled(option)\"\n [class.hidden]=\"!isOptionVisible(option)\"\n (click)=\"onOptionClicked(option)\"\n (keydown.enter)=\"onOptionClicked(option)\"\n (keydown.space)=\"onOptionClicked(option); $event.preventDefault()\"\n >\n <i class=\"fas fa-fw\" *ngIf=\"!!option.icon\" [ngClass]=\"[ option.icon, color ]\"></i> {{ option.label | translate }}\n </li>\n</ul>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ribbon',\n templateUrl: './ribbon.component.html',\n styleUrls: ['./ribbon.component.scss']\n})\nexport class RibbonComponent {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Host listeners\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<div>\n <ng-content></ng-content>\n</div>\n\n<ng-content select=\"[right]\"></ng-content>","import { Component, ContentChildren, Input, QueryList } from '@angular/core';\n\nimport { RibbonGroupChild } from '../../models/ribbon-group-child';\n\n@Component({\n selector: 'lib-ribbon-group',\n templateUrl: './ribbon-group.component.html',\n styleUrls: ['./ribbon-group.component.scss'],\n host: { '[class.hidden]': '!hasChildren' }\n})\nexport class RibbonGroupComponent {\n //#region ViewChilds, Inputs, Outputs\n @ContentChildren(RibbonGroupChild, { descendants: true }) public children?: QueryList<RibbonGroupChild>;\n\n @Input() public label = '';\n //#endregion\n\n //#region Host listeners\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n protected get hasChildren(): boolean {\n return this.children?.some(x => x.visible) ?? false;\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<div class=\"content\">\n <ng-content></ng-content>\n</div>\n\n<div class=\"label\">\n <span>{{ label }}</span>\n</div>","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\n\n@Pipe({\n name: 'enumTranslate'\n})\nexport class EnumTranslatePipe implements PipeTransform {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private translate: TranslateService = inject(TranslateService);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public transform(enumType: any): Array<{value: any, display: Observable<any> }> {\n return Object.keys(enumType)\n .filter(key => isNaN(Number(key)))\n .map(key => ({\n value: enumType[key],\n display: this.translate.get(key),\n }));\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'replaceMany'\n})\nexport class ReplaceManyPipe implements PipeTransform {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public transform(message: string, replaceArgs?: { [id: string]: string | null | undefined }): string {\n if (replaceArgs) {\n for (const [key, value] of Object.entries(replaceArgs)) {\n message = message.replace(key, value ?? '');\n }\n }\n return message;\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'replace'\n})\nexport class ReplacePipe implements PipeTransform {\n \n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public transform(message: string, searchValue: string, replaceValue?: string | null): string {\n return message.replace(searchValue, replaceValue ?? '');\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { NgModule } from '@angular/core';\nimport * as c from './components';\nimport * as d from './directives';\nimport * as p from './pipes';\n\n\n@NgModule({\n declarations: [],\n imports: [\n c.CatalogSelectComponent,\n c.DataGridComponent,\n c.DataGridRowComponent,\n c.FormInputComponent,\n c.FormInputGroupComponent,\n c.FormGroupComponent,\n c.GroupAccordionComponent,\n c.GroupContainerComponent,\n c.GroupScrollSpyComponent,\n c.SidebarComponent,\n c.ModalComponent,\n c.MultiEditorComponent,\n c.MultiSelectComponent,\n c.MultiSelectResultGridComponent,\n c.RibbonComponent,\n c.RibbonButtonComponent,\n c.RibbonGroupComponent,\n\n d.ScrollSpyDirective,\n\n p.EnumTranslatePipe,\n p.ReplacePipe,\n p.ReplaceManyPipe,\n ],\n exports: [\n c.CatalogSelectComponent,\n c.DataGridComponent,\n c.DataGridRowComponent,\n c.FormInputComponent,\n c.FormInputGroupComponent,\n c.FormGroupComponent,\n c.GroupAccordionComponent,\n c.GroupContainerComponent,\n c.GroupScrollSpyComponent,\n c.SidebarComponent,\n c.ModalComponent,\n c.MultiEditorComponent,\n c.MultiSelectComponent,\n c.MultiSelectResultGridComponent,\n c.RibbonComponent,\n c.RibbonButtonComponent,\n c.RibbonGroupComponent,\n\n d.ScrollSpyDirective,\n\n p.EnumTranslatePipe,\n p.ReplacePipe,\n p.ReplaceManyPipe,\n ]\n})\n/**\n * @deprecated Use standalone component imports instead of LibraryModule.\n * Import individual components directly in your component's `imports` array.\n */\nexport class LibraryModule {}","import { Injectable } from '@angular/core';\nimport { DataGridConfigs } from '../../models/configs/data-grid-configs';\nimport { GridConfigsProvider } from './grid-configs.provider';\n\n@Injectable()\nexport class DataGridConfigsProvider extends GridConfigsProvider<DataGridConfigs> {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this._configs =\n {\n ...this._configs,\n multiSelect: false,\n multiSelectSize: 'minmax(1.5rem, min-content)',\n } as DataGridConfigs;\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport class DateValidators {\n //#region Public methods\n public static greaterThanControl(controlName: string) : ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const compareControl: AbstractControl | null | undefined = control.parent?.get(controlName);\n if (!!control.value && !!compareControl?.value && new Date(control.value) <= new Date(compareControl?.value)) {\n return { 'greaterThanControl': true };\n }\n return null;\n }\n }\n\n public static greaterThanOrEqualControl(controlName: string) : ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const compareControl: AbstractControl | null | undefined = control.parent?.get(controlName);\n if (!!control.value && !!compareControl?.value && new Date(control.value) < new Date(compareControl?.value)) {\n return { 'greaterThanOrEqualControl': true };\n }\n return null;\n }\n }\n\n public static greaterThanOrEqualToday(control: AbstractControl): ValidationErrors | null {\n const today: Date = new Date();\n if (!!control.value && new Date(control.value) < today) {\n return { 'greaterThanOrEqualToday': true };\n }\n return null;\n }\n\n public static greaterThanToday(control: AbstractControl): ValidationErrors | null {\n const today: Date = new Date();\n if (!!control.value && new Date(control.value) <= today) {\n return { 'greaterThanToday': true };\n }\n return null;\n }\n\n public static lessThanControl(controlName: string) : ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const compareControl: AbstractControl | null | undefined = control.parent?.get(controlName);\n if (!!control.value && !!compareControl?.value && new Date(control.value) >= new Date(compareControl?.value)) {\n return { 'lessThanControl': true };\n }\n return null;\n }\n }\n\n public static lessThanOrEqualControl(controlName: string) : ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const compareControl: AbstractControl | null | undefined = control.parent?.get(controlName);\n if (!!control.value && !!compareControl?.value && new Date(control.value) > new Date(compareControl?.value)) {\n return { 'lessThanOrEqualControl': true };\n }\n return null;\n }\n }\n\n public static lessThanOrEqualToday(control: AbstractControl): ValidationErrors | null {\n const today: Date = new Date();\n if (!!control.value && new Date(control.value) > today) {\n return { 'lessThanOrEqualToday': true };\n }\n return null;\n }\n\n public static lessThanToday(control: AbstractControl): ValidationErrors | null {\n const today: Date = new Date();\n if (!!control.value && new Date(control.value) >= today) {\n return { 'lessThanToday': true };\n }\n return null;\n }\n\n public static maxDate(maxDate: Date): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!!control.value && new Date(control.value) > maxDate) {\n return { 'maxDate': true };\n }\n return null;\n }\n }\n\n public static minDate(minDate: Date): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!!control.value && new Date(control.value) < minDate) {\n return { 'minDate': true };\n }\n return null;\n }\n }\n //#endregion\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i1.CatalogSelectComponent","i2.DataGridComponent","i3.DataGridRowComponent","i4.FormInputComponent","i5.FormInputGroupComponent","i6.FormGroupComponent","i7.GroupAccordionComponent","i8.GroupContainerComponent","i9.GroupScrollSpyComponent","i10.SidebarComponent","i11.ModalComponent","i12.MultiEditorComponent","i13.MultiSelectComponent","i14.MultiSelectResultGridComponent","i15.RibbonComponent","i16.RibbonButtonComponent","i17.RibbonGroupComponent","i18.ScrollSpyDirective","i19.EnumTranslatePipe","i20.ReplacePipe","i21.ReplaceManyPipe","c.CatalogSelectComponent","c.DataGridComponent","c.DataGridRowComponent","c.FormInputComponent","c.FormInputGroupComponent","c.SidebarComponent","c.MultiEditorComponent","c.MultiSelectComponent","c.MultiSelectResultGridComponent","c.FormGroupComponent","c.GroupAccordionComponent","c.GroupContainerComponent","c.GroupScrollSpyComponent","c.ModalComponent","c.RibbonComponent","c.RibbonButtonComponent","c.RibbonGroupComponent","d.ScrollSpyDirective","p.EnumTranslatePipe","p.ReplacePipe","p.ReplaceManyPipe"],"mappings":"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"}
|