{"version":3,"file":"deja-js-component-data-grid.mjs","sources":["../../../../projects/deja-js/component/data-grid/data-grid-column/data-grid-column-layout-infos.ts","../../../../projects/deja-js/component/data-grid/data-grid-header/data-grid-header.component.ts","../../../../projects/deja-js/component/data-grid/data-grid-header/data-grid-header.component.html","../../../../projects/deja-js/component/data-grid/data-grid-grouparea/data-grid-grouparea.component.ts","../../../../projects/deja-js/component/data-grid/data-grid-grouparea/data-grid-grouparea.component.html","../../../../projects/deja-js/component/data-grid/data-grid-parent-row/data-grid-parent-row.component.ts","../../../../projects/deja-js/component/data-grid/data-grid-parent-row/data-grid-parent-row.component.html","../../../../projects/deja-js/component/data-grid/data-grid-row/data-grid-row.component.ts","../../../../projects/deja-js/component/data-grid/data-grid-row/data-grid-row.component.html","../../../../projects/deja-js/component/data-grid/data-grid.component.ts","../../../../projects/deja-js/component/data-grid/data-grid.component.html","../../../../projects/deja-js/component/data-grid/data-grid-column/data-grid-column.ts","../../../../projects/deja-js/component/data-grid/data-grid-column/data-grid-column-layout.ts","../../../../projects/deja-js/component/data-grid/data-grid-row/data-grid-row-event.ts","../../../../projects/deja-js/component/data-grid/data-grid-row/data-grid-rows-event.ts","../../../../projects/deja-js/component/data-grid/data-grid-row/data-grid-row.ts","../../../../projects/deja-js/component/data-grid/data-grid-parent-row/data-grid-parent-row.ts","../../../../projects/deja-js/component/data-grid/data-grid-grouparea/data-grid-group.ts","../../../../projects/deja-js/component/data-grid/index.ts","../../../../projects/deja-js/component/data-grid/deja-js-component-data-grid.ts"],"sourcesContent":["/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { UnitValue } from '@deja-js/component/core/graphics';\n\nimport { IDejaGridColumn } from './data-grid-column';\n\nexport class DejaGridColumnsLayoutInfos {\n    public percentColumns: IDejaGridColumn[];\n    public fixedColumns: IDejaGridColumn[];\n    public responsiveColumns: IDejaGridColumn[];\n    public totalFixedWidth: number;\n    public totalPercentWidth: number;\n    public columnsWidth: {\n        [name: string]: UnitValue;\n    };\n\n    public constructor(columns: IDejaGridColumn[]) {\n        this.columnsWidth = {};\n        this.percentColumns = [];\n        this.fixedColumns = [];\n        this.responsiveColumns = [];\n        this.totalFixedWidth = 0;\n        this.totalPercentWidth = 0;\n\n        columns.forEach(column => {\n            let width = new UnitValue(column.width);\n            if (width.value === undefined) {\n                width = new UnitValue(10, '%');\n            }\n\n            if (width.isInvalid()) {\n                throw new Error('Invalid column width unit can be for example: 11px or 23%');\n            }\n\n            if (width.unit && width.unit !== 'px' && width.unit !== '%') {\n                throw new Error('Column width unit can be only px or %');\n            }\n\n            if (width.unit === '%') {\n                this.percentColumns.push(column);\n                this.totalPercentWidth += width.value;\n            } else {\n                this.fixedColumns.push(column);\n                this.totalFixedWidth += width.value;\n            }\n\n            if (typeof column.responsive === 'number' || column.responsive) {\n                this.responsiveColumns.push(column);\n            }\n\n            this.columnsWidth[column.name] = width;\n        });\n\n        this.responsiveColumns.sort((c1, c2) => {\n            if (c1.responsive === true) {\n                return 1;\n            } else if (c2.responsive === true) {\n                return -1;\n            } else {\n                return +c1.responsive - +c2.responsive;\n            }\n        });\n    }\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, Input, Optional, Output, TemplateRef } from '@angular/core';\nimport { DejaClipboardService, Destroy } from '@deja-js/component/core';\nimport { ISortInfos } from '@deja-js/component/core/item-list';\nimport { IDejaDragContext, IDejaDragEvent, IDejaDropContext, IDejaDropEvent } from '@deja-js/component/dragdrop';\nimport { catchError, filter, fromEvent, mergeWith, of, Subject, switchMap, take, takeUntil, tap, timeout } from 'rxjs';\n\nimport { IDejaGridColumn, IDejaGridColumnEvent, IDejaGridColumnLayoutEvent, IDejaGridColumnSizeEvent } from '../data-grid-column/data-grid-column';\nimport { IDejaGridColumnLayout } from '../data-grid-column/data-grid-column-layout';\n\n\n@Component({\n    selector: 'deja-grid-header',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    styleUrls: ['./data-grid-header.component.scss'],\n    templateUrl: './data-grid-header.component.html'\n})\nexport class DejaGridHeaderComponent extends Destroy {\n    /** Template d'entête de colonne si définit extérieurement à la grille */\n    @Input() public columnHeaderTemplateExternal: TemplateRef<unknown>;\n\n    /** Infos de tri à afficher dans les entêtes */\n    @Input() public sortInfos: ISortInfos;\n\n    /** Cet évenement est levé lorsque la taille d'une colonne est modifiée */\n    @Output() public readonly columnSizeChanged = new EventEmitter<IDejaGridColumnSizeEvent>();\n\n    /** Cet évenement est levé lorsque la position des colonnes est modifiée */\n    @Output() public readonly columnLayoutChanged = new EventEmitter<IDejaGridColumnLayoutEvent>();\n\n    /** Cet évenement est levé lorsqu'une entête de colonne est cliquée */\n    @Output() public readonly columnHeaderClicked = new EventEmitter<IDejaGridColumnEvent>();\n\n    /** Cet évenement est levé lorsqu'une colonne est drag and dropée */\n    @Output() public readonly columnDragEnd = new EventEmitter();\n\n    /** Template d'entête de colonne par defaut définit dans le HTML de la grille */\n    @ContentChild('columnHeaderTemplate') public columnHeaderTemplateInternal: TemplateRef<unknown>;\n\n    public _sizedColumn: IDejaGridColumn;\n    private _columnsDraggable = false;\n    private _columnsSortable = false;\n    private _columnsSizable = false;\n    private _columnLayout = {} as IDejaGridColumnLayout;\n    private backupColumnOrder = [] as IDejaGridColumn[];\n    private columnGroupKey = 'deja-grid-column';\n\n    /** Définit si toutes les colonnes peuvent être draggable vers un autre composant.\n     * Si une valeur spécifique à une colonne est spécifiée dans le modèle de la colonne, cette dernière sera prioritaire.\n     */\n    @Input()\n    public set columnsDraggable(value: BooleanInput) {\n        this._columnsDraggable = coerceBooleanProperty(value);\n    }\n\n    /** Retourne si toutes les colonnes peuvent être draggable vers un autre composant.\n     * Si une valeur spécifique à une colonne est spécifiée dans le modèle de la colonne, cette dernière sera prioritaire.\n     */\n    public get columnsDraggable(): BooleanInput {\n        return this._columnsDraggable;\n    }\n\n    /** Définit si toutes les colonnes peuvent être déplacées parmis les autres colonnes.\n     * Si une valeur spécifique à une colonne est spécifiée dans le modèle de la colonne, cette dernière sera prioritaire.\n     */\n    @Input()\n    public set columnsSortable(value: BooleanInput) {\n        this._columnsSortable = coerceBooleanProperty(value);\n    }\n\n    /** Retourne si toutes les colonnes peuvent être déplacées parmis les autres colonnes.\n     * Si une valeur spécifique à une colonne est spécifiée dans le modèle de la colonne, cette dernière sera prioritaire.\n     */\n    public get columnsSortable(): BooleanInput {\n        return this._columnsSortable;\n    }\n\n    public get sizedColumn(): IDejaGridColumn {\n        return this._sizedColumn;\n    }\n\n    /** Définit si toutes les colonnes peuvent être redimensionées\n     * Si une valeur spécifique à une colonne est spécifiée dans le modèle de la colonne, cette dernière sera prioritaire.\n     */\n    @Input()\n    public set columnsSizable(value: BooleanInput) {\n        this._columnsSizable = coerceBooleanProperty(value);\n    }\n\n    /** Retourne si toutes les colonnes peuvent être redimensionées\n     * Si une valeur spécifique à une colonne est spécifiée dans le modèle de la colonne, cette dernière sera prioritaire.\n     */\n    public get columnsSizable(): BooleanInput {\n        return this._columnsSizable;\n    }\n\n    @Input()\n    /** Définit la structire de colonnes associée aux entêtes */\n    public set columnLayout(layout: IDejaGridColumnLayout) {\n        this._columnLayout = layout || {\n            columns: [],\n            scrollLeft: 0,\n            vpAfterWidth: 0,\n            vpBeforeWidth: 0,\n            refresh$: new Subject<void>()\n        };\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** Retourne la structire de colonnes associée aux entêtes */\n    public get columnLayout(): IDejaGridColumnLayout {\n        return this._columnLayout;\n    }\n\n    public get columnHeaderTemplate(): TemplateRef<unknown> {\n        return this.columnHeaderTemplateExternal || this.columnHeaderTemplateInternal;\n    }\n\n    public constructor(elementRef: ElementRef, private changeDetectorRef: ChangeDetectorRef, @Optional() private clipboardService: DejaClipboardService) {\n        super();\n\n        const element = elementRef.nativeElement as HTMLElement;\n\n        const mouseDownEvent$ = fromEvent<MouseEvent>(element, 'mousedown');\n        mouseDownEvent$.pipe(\n            filter(downEvent => downEvent.buttons === 1),\n            switchMap(downEvent => {\n                const target = downEvent.target as HTMLElement;\n                const column = this.getColumnFromHtmlElement(downEvent.target as HTMLElement);\n                const mouseUpEvent$ = fromEvent<MouseEvent>(element.ownerDocument, 'mouseup');\n\n                if (target.hasAttribute('separator')) {\n                    if (this.columnsSizable && column.sizeable) {\n                        // Size clicked column\n                        this._sizedColumn = column;\n                        const sizedOrigin = downEvent.screenX;\n\n                        const kill$ = new Subject<void>();\n\n                        const mouseUp$ = mouseUpEvent$.pipe(\n                            take(1),\n                            tap(() => {\n                                const e = {\n                                    column: null\n                                } as IDejaGridColumnSizeEvent;\n                                this.columnSizeChanged.emit(e);\n                                this.changeDetectorRef.markForCheck();\n                                this._sizedColumn = undefined;\n                            })\n                        );\n\n                        const mouseMoveEvent$ = fromEvent<MouseEvent>(element.ownerDocument, 'mousemove');\n                        const mouseMove$ = mouseMoveEvent$.pipe(\n                            // eslint-disable-next-line rxjs/no-unsafe-takeuntil\n                            takeUntil(mouseUpEvent$),\n                            // eslint-disable-next-line rxjs/no-unsafe-takeuntil\n                            takeUntil(kill$),\n                            tap(moveEvent => {\n                                if (moveEvent.buttons === 1) {\n                                    const e = {\n                                        column: this._sizedColumn,\n                                        offsetWidth: moveEvent.screenX - sizedOrigin,\n                                        originalEvent: moveEvent\n                                    } as IDejaGridColumnSizeEvent;\n                                    this.columnSizeChanged.emit(e);\n                                    this.changeDetectorRef.markForCheck();\n                                } else {\n                                    // Mouse up\n                                    kill$.next();\n                                }\n                            })\n                        );\n\n                        downEvent.stopPropagation();\n                        return mouseUp$.pipe(\n                            mergeWith(mouseMove$)\n                        );\n                    }\n                } else {\n                    const clickedColumn = column;\n\n                    return mouseUpEvent$.pipe(\n                        take(1),\n                        timeout(1000),\n                        tap(upEvent => {\n                            const columnElement = this.getColumnElementFromHtmlElement(upEvent.target as HTMLElement);\n                            if ((columnElement?.getAttribute('colname')) === clickedColumn.name) {\n                                const index = +columnElement.getAttribute('index');\n                                const e = {\n                                    column: clickedColumn,\n                                    originalEvent: upEvent,\n                                    index: index\n                                } as IDejaGridColumnEvent;\n                                this.columnHeaderClicked.emit(e);\n                                this.changeDetectorRef.markForCheck();\n                            }\n                        }),\n                        catchError(_error => of(null as MouseEvent))\n                    );\n                }\n\n                return of(null as MouseEvent);\n            }),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n\n    public refresh(): void {\n        this.changeDetectorRef.markForCheck();\n    }\n\n    public getDragContext(column: IDejaGridColumn): IDejaDragContext {\n        if (!this.clipboardService || (!this.columnsDraggable && !this.columnsSortable) || !(column.draggable ?? true)) {\n            return null as IDejaDragContext;\n        }\n\n        // console.log(`getDragContext ` + column.name + ' ' + Date.now());\n        return {\n            dragendcallback: (event: IDejaDragEvent) => {\n                // eslint-disable-next-line no-prototype-builtins\n                if (!event.dragInfo.hasOwnProperty(this.columnGroupKey)) {\n                    return;\n                }\n                column.dragged = false;\n                this.backupColumnOrder = [];\n                this.columnDragEnd.emit();\n                this.changeDetectorRef.markForCheck();\n            },\n            dragstartcallback: (event: IDejaDragEvent) => {\n                if (!this._sizedColumn) {\n                    event.dragInfo[this.columnGroupKey] = column;\n                    column.dragged = true;\n\n                    // Backup column layout\n                    this.backupColumnOrder = this._columnLayout.columns.map(col => col);\n                } else {\n                    event.preventDefault();\n                }\n            }\n        } as IDejaDragContext;\n    }\n\n    public getDropContext(): IDejaDropContext {\n        if (!this.clipboardService) {\n            return null as IDejaDropContext;\n        }\n\n        const dragCallback = (event: IDejaDropEvent): void => {\n            // eslint-disable-next-line no-prototype-builtins\n            if (!this.columnsSortable || !event.dragInfo.hasOwnProperty(this.columnGroupKey)) {\n                return;\n            }\n\n            const targetElement = this.getColumnElementFromHtmlElement(event.target as HTMLElement);\n            const targetBounds = targetElement?.getBoundingClientRect();\n            const targetIndex = targetElement && +targetElement.getAttribute('index');\n            if (targetIndex === undefined) {\n                return;\n            }\n\n            const sourceColumn = event.dragInfo[this.columnGroupKey] as IDejaGridColumn;\n            const sourceIndex = this._columnLayout.columns.findIndex(og => og === sourceColumn);\n\n            // Dead zones\n            if (sourceIndex === targetIndex) {\n                event.preventDefault();\n                return;\n            } else if (targetIndex === sourceIndex + 1) {\n                if (event.x <= targetBounds.left + targetBounds.width / 2) {\n                    event.preventDefault();\n                    return;\n                }\n            } else if (targetIndex === sourceIndex - 1) {\n                if (event.x >= targetBounds.left + targetBounds.width / 2) {\n                    event.preventDefault();\n                    return;\n                }\n            }\n\n            const e = {\n                column: sourceColumn,\n                index: sourceIndex,\n                originalEvent: event,\n                target: this._columnLayout.columns[targetIndex],\n                targetIndex: targetIndex\n            } as IDejaGridColumnLayoutEvent;\n\n            this.columnLayoutChanged.emit(e);\n            event.preventDefault();\n        };\n\n        return {\n            dragleavecallback: () => {\n                if (this.backupColumnOrder.length) {\n                    // Restore original column layout\n                    this._columnLayout.columns = this.backupColumnOrder.map(col => col);\n                }\n            },\n            dragentercallback: dragCallback,\n            dragovercallback: dragCallback,\n            dropcallback: dragCallback\n        } as IDejaDropContext;\n    }\n\n    private getColumnElementFromHtmlElement(element: HTMLElement): HTMLElement {\n        let parentElement = element;\n\n        // eslint-disable-next-line no-loops/no-loops\n        while (parentElement && !parentElement.hasAttribute('colname')) {\n            element = parentElement;\n            parentElement = parentElement.parentElement;\n        }\n\n        if (!parentElement) {\n            return undefined;\n        }\n\n        return parentElement;\n    }\n\n    private getColumnFromHtmlElement(element: HTMLElement): IDejaGridColumn {\n        const columnElement = this.getColumnElementFromHtmlElement(element);\n        const colName = columnElement?.getAttribute('colname');\n        return colName && this._columnLayout.columns.find(column => column.name === colName);\n    }\n}\n","<div #headerElement id=\"deja-grid-header\" [style.left.px]=\"columnLayout.scrollLeft\" [class.onsizer]=\"(sizedColumn && true) || null\" [deja-droppable]=\"getDropContext()\" continous-dragover [attr.sizable]=\"columnsSizable || null\">\n\t<div *ngIf=\"columnLayout.vpBeforeWidth\" [style.flex-basis.px]=\"columnLayout.vpBeforeWidth\"></div>\n\t<div *ngFor=\"let column of columnLayout.columns; let index=index\" [deja-draggable]=\"getDragContext(column)\" [attr.index]=\"index\" [attr.colname]=\"column.name\" [attr.sizeable]=\"column.sizeable === false ? false : null\" [class.dragged]=\"column.dragged\" class=\"column-header-wrapper\" [style.flex-basis.px]=\"column.w\">\n\t\t<div *ngIf=\"!columnHeaderTemplate\" [attr.sorting]=\"column.sorting || null\" class=\"column-header\">{{ column.label }}</div>\n\t\t<ng-template [ngTemplateOutlet]=\"columnHeaderTemplate\" *ngIf=\"columnHeaderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: column }\"></ng-template>\n\t\t<deja-sort-indicator *ngIf=\"sortInfos && sortInfos.name === column.name\" [sort-infos]=\"sortInfos\"></deja-sort-indicator>\n\t\t<div separator></div>\n\t\t<div class=\"sort-waiter\" *ngIf=\"column.sorting\">\n\t\t\t<mat-icon fontSet=\"deja-icons\" fontIcon=\"cached\"></mat-icon>\n\t\t</div>\n\t</div>\n\t<div *ngIf=\"columnLayout.vpAfterWidth\" [style.flex-basis.px]=\"columnLayout.vpAfterWidth\"></div>\n</div>","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Optional, Output } from '@angular/core';\nimport { IDejaChipsComponentCloseEvent } from '@deja-js/component/chips';\nimport { DejaClipboardService } from '@deja-js/component/core';\nimport { IDejaDragContext, IDejaDragEvent, IDejaDropContext, IDejaDropEvent } from '@deja-js/component/dragdrop';\n\nimport { IDejaGridColumn } from '../data-grid-column/data-grid-column';\nimport { IDejaGridGroupsEvent } from './data-grid-group';\n\n/** Zone de regroupement des colonnes dans laquelle les colonnes peuvent être drag and droppée */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'deja-grid-grouparea',\n    styleUrls: ['./data-grid-grouparea.component.scss'],\n    templateUrl: './data-grid-grouparea.component.html'\n})\nexport class DejaGridGroupAreaComponent {\n    /** Cet évenement est levé lorsque le model de groupe est modifié */\n    @Output() public readonly groupsChanged = new EventEmitter<IDejaGridGroupsEvent>();\n    /** Cet évenement est levé lorsqu'un group est supprimé du model */\n    @Output() public readonly groupRemoved = new EventEmitter<IDejaChipsComponentCloseEvent>();\n    private _groups = [] as IDejaGridColumn[];\n    private columnGroupKey = 'deja-grid-column';\n    private groupGroupKey = 'deja-grid-group';\n\n    /** Revoie le modèle de groupe qui représente l'ensemble des colonnes déposées dans le composant */\n    public get groups(): IDejaGridColumn[] {\n        return this._groups;\n    }\n\n    @Input()\n    /** Définit le modèle de groupe qui représente l'ensemble des colonnes déposées dans le composant */\n    public set groups(columns: IDejaGridColumn[]) {\n        this._groups = columns || [];\n    }\n\n    public constructor(private changeDetectorRef: ChangeDetectorRef, @Optional() private clipboardService: DejaClipboardService) { }\n\n    public getDragContext(group: IDejaGridColumn): IDejaDragContext {\n        if (!this.clipboardService) {\n            return null;\n        }\n\n        // console.log(`getDragContext ` + group.name + ' ' + Date.now());\n        return {\n            dragendcallback: (event: IDejaDragEvent) => {\n                // eslint-disable-next-line no-prototype-builtins\n                if (!event.dragInfo.hasOwnProperty(this.columnGroupKey)) {\n                    return;\n                }\n            },\n            dragstartcallback: (event: IDejaDragEvent) => {\n                event.dragInfo[this.groupGroupKey] = group;\n            }\n        } as IDejaDragContext;\n    }\n\n    public getDropContext(): IDejaDropContext {\n        if (!this.clipboardService) {\n            return null;\n        }\n\n        const raiseEvent = (evt: Event, group: IDejaGridColumn): void => {\n            const e = {\n                column: group,\n                columns: this.groups,\n                originalEvent: evt\n            } as IDejaGridGroupsEvent;\n\n            this.groupsChanged.emit(e);\n            evt.preventDefault();\n        };\n\n        const dragcallback = (event: IDejaDropEvent): void => {\n            // eslint-disable-next-line no-prototype-builtins\n            if (event.dragInfo.hasOwnProperty(this.columnGroupKey)) {\n                const sourceColumn = event.dragInfo[this.columnGroupKey] as IDejaGridColumn;\n                if (!this.groups.find(column => column === sourceColumn)) {\n                    event.preventDefault();\n                }\n\n            // eslint-disable-next-line no-prototype-builtins\n            } else if (event.dragInfo.hasOwnProperty(this.groupGroupKey)) {\n                const targetElement = this.getGroupElementFromHtmlElement(event.target as HTMLElement);\n                const attrIndex = (targetElement?.getAttribute('index')) || null;\n                const targetIndex = attrIndex !== null ? +attrIndex : null;\n                if (targetIndex === null) {\n                    return;\n                }\n\n                const sourceColumn = event.dragInfo[this.groupGroupKey] as IDejaGridColumn;\n                const sourceIndex = this.groups.findIndex(column => column === sourceColumn);\n\n                // Dead zones\n                if (sourceIndex === targetIndex) {\n                    event.preventDefault();\n                    return;\n                }\n\n                this.groups.splice(sourceIndex, 1);\n                this.groups.splice(targetIndex, 0, sourceColumn);\n\n                raiseEvent(event, sourceColumn);\n\n                this.changeDetectorRef.markForCheck();\n\n                event.preventDefault();\n\n            } else {\n                return;\n            }\n        };\n\n        return {\n            dragentercallback: dragcallback,\n            dragovercallback: dragcallback,\n            dropcallback: (event: IDejaDropEvent) => {\n                // eslint-disable-next-line no-prototype-builtins\n                if (event.dragInfo.hasOwnProperty(this.columnGroupKey)) {\n                    const sourceColumn = event.dragInfo[this.columnGroupKey] as IDejaGridColumn;\n\n                    const targetElement = this.getGroupElementFromHtmlElement(event.target as HTMLElement);\n                    const attrIndex = (targetElement?.getAttribute('index')) || null;\n                    const targetIndex = attrIndex !== null ? +attrIndex : null;\n\n                    if (targetIndex !== null) {\n                        const targetBounds = targetElement.getBoundingClientRect();\n                        if (event.x <= targetBounds.left + targetBounds.width / 2) {\n                            this.groups.splice(targetIndex, 0, sourceColumn);\n                        } else if (targetIndex < this.groups.length - 1) {\n                            this.groups.splice(targetIndex + 1, 0, sourceColumn);\n                        } else {\n                            this.groups.push(sourceColumn);\n                        }\n                    } else {\n                        this.groups.push(sourceColumn);\n                    }\n\n                    raiseEvent(event, sourceColumn);\n\n                // eslint-disable-next-line no-prototype-builtins\n                } else if (event.dragInfo.hasOwnProperty(this.groupGroupKey)) {\n                    const sourceColumn = event.dragInfo[this.groupGroupKey] as IDejaGridColumn;\n                    raiseEvent(event, sourceColumn);\n                }\n\n                this.changeDetectorRef.markForCheck();\n            }\n        } as IDejaDropContext;\n    }\n\n    public removeGroup(event: IDejaChipsComponentCloseEvent): boolean {\n        this.groupRemoved.emit(event);\n        event.stopPropagation();\n        return false;\n    }\n\n    private getGroupElementFromHtmlElement(element: HTMLElement): HTMLElement {\n        let parentElement = element;\n\n        // eslint-disable-next-line no-loops/no-loops\n        while (parentElement && !parentElement.hasAttribute('groupname')) {\n            element = parentElement;\n            parentElement = parentElement.parentElement;\n        }\n\n        if (!parentElement) {\n            return undefined;\n        }\n\n        return parentElement;\n    }\n}\n","<div #groupAreaElement id=\"deja-grid-grouparea\" [deja-droppable]=\"getDropContext()\">\n\t<label id=\"placeholder\" *ngIf=\"groups.length === 0\">Drag one column here to group by this column</label>\n\t<deja-chips [items]=\"groups\" (close)=\"removeGroup($event)\">\n\t\t<ng-template #itemTemplate let-item let-index=\"index\"><span class=\"label\" [attr.groupname]=\"item.name\" [attr.index]=\"index\" [deja-draggable]=\"getDragContext(item)\">{{ item.label }}</span></ng-template>\n\t</deja-chips>\n</div>","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, Input, TemplateRef } from '@angular/core';\nimport { ItemListService } from '@deja-js/component/core/item-list';\n\nimport { IDejaGridColumn } from '../data-grid-column/data-grid-column';\nimport { IDejaGridRow } from '../data-grid-row/data-grid-row';\nimport { IDejaGridParentRow } from './data-grid-parent-row';\n\n/** Composant représentant une ligne parente d'une structure de ligne hierarchique */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'deja-grid-parent-row',\n    styleUrls: ['./data-grid-parent-row.component.scss'],\n    templateUrl: './data-grid-parent-row.component.html'\n})\nexport class DejaGridParentRowComponent {\n    /** Définit la structure de la ligne associée à ce composant */\n    @Input() public row: IDejaGridParentRow<unknown>;\n\n    /** Template de cellule si définit extérieurement à la grille */\n    @Input() public cellTemplateExternal: TemplateRef<unknown>;\n\n    /** Template de titre si définit extérieurement à la grille */\n    @Input() public parentTitleTemplateExternal: TemplateRef<unknown>;\n\n    /** Index de la ligne sur la liste plate de ItemListService */\n    @Input() public flatIndex: number;\n\n    /** Template de titre par defaut définit dans le HTML de la grille */\n    @ContentChild('parentTitleTemplate') public parentTitleTemplateInternal: TemplateRef<unknown>;\n\n    /** Template de cellule par defaut  définit dans le HTML de la grille */\n    @ContentChild('cellTemplate') public cellTemplateInternal: TemplateRef<unknown>;\n\n    private _columnLayout = {} as IDejaGridParentRowColumnLayout;\n\n    public get columnLayoutOfColumn0(): number {\n        return this._columnLayout.column0;\n    }\n\n    public get columnLayoutOfColumns(): { column: IDejaGridColumn; left: number }[] {\n        return this._columnLayout.columns;\n    }\n\n    /** Définit la structure de colonnes a appliquer sur cette ligne */\n    @Input()\n    public set columns(columns: IDejaGridColumn[]) {\n        let left = 0;\n        this._columnLayout.columns = [];\n        columns.forEach(column => {\n            if (this.getCellText(this.row, column.name)) {\n                if (this._columnLayout.column0 === 0) {\n                    this._columnLayout.column0 = left;\n                }\n                this._columnLayout.columns.push({\n                    column: column,\n                    left: left\n                });\n            }\n            left += column.w;\n        });\n        this._columnLayout.column0 = left;\n        this.changeDetectorRef.markForCheck();\n    }\n\n    public get cellTemplate(): TemplateRef<unknown> {\n        return this.cellTemplateExternal || this.cellTemplateInternal;\n    }\n\n    public get parentTitleTemplate(): TemplateRef<unknown> {\n        return this.parentTitleTemplateExternal || this.parentTitleTemplateInternal;\n    }\n\n    public constructor(private changeDetectorRef: ChangeDetectorRef) { }\n\n    public getCellText(row: IDejaGridRow<unknown>, textField: string): string {\n        return ItemListService.getItemText(row, textField);\n    }\n}\n\nexport interface IDejaGridParentRowColumnLayout {\n    column0: number;\n    columns: {\n        column: IDejaGridColumn;\n        left: number;\n    }[];\n}\n","<div *ngIf=\"columnLayoutOfColumn0\" [style.width.px]=\"columnLayoutOfColumn0\" id=\"parent-title\" class=\"cell-wrapper\">\n    <div *ngIf=\"!parentTitleTemplate\" class=\"cell\">{{ $any(row).toString() }}</div>\n    <ng-template [ngTemplateOutlet]=\"parentTitleTemplate\" *ngIf=\"parentTitleTemplate\" [ngTemplateOutletContext]=\"{ $implicit: row }\"></ng-template>\n</div>\n<span *ngFor=\"let colinfo of columnLayoutOfColumns; let index=index\" class=\"cell-wrapper\" [attr.colindex]=\"index\" [attr.colname]=\"colinfo.column.name\" [class.dragged]=\"colinfo.column.dragged\" [style.left.px]=\"colinfo.left\" [style.width.px]=\"colinfo.column.w\">\n\t<div *ngIf=\"!cellTemplate || !colinfo.column.useCellTemplate\" class=\"cell\">{{ getCellText(row, colinfo.column.name) }}</div>\n\t<ng-template [ngTemplateOutlet]=\"cellTemplate\" *ngIf=\"cellTemplate && colinfo.column.useCellTemplate\" [ngTemplateOutletContext]=\"{ $implicit: row, flatIndex: flatIndex, column: colinfo.column }\"></ng-template>\n</span>\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, Input, TemplateRef } from '@angular/core';\nimport { Destroy } from '@deja-js/component/core';\nimport { ItemListService } from '@deja-js/component/core/item-list';\nimport { Subscription, takeUntil } from 'rxjs';\n\nimport { IDejaGridColumnLayout } from '../data-grid-column/data-grid-column-layout';\nimport { IDejaGridRow } from './data-grid-row';\n\n\n/** Composant représentant une ligne de la grille */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'deja-grid-row',\n    styleUrls: ['./data-grid-row.component.scss'],\n    templateUrl: './data-grid-row.component.html'\n})\nexport class DejaGridRowComponent extends Destroy {\n    /** Définit la structure de la ligne associée à ce composant */\n    @Input() public row: IDejaGridRow<unknown>;\n\n    /** Template de cellule si définit extérieurement à la grille */\n    @Input() public cellTemplateExternal: TemplateRef<unknown>;\n\n    /** Index de la ligne sur la liste plate de ItemListService */\n    @Input() public flatIndex: number;\n\n    /** Template de cellule par defaut  définit dans le HTML de la grille */\n    @ContentChild('cellTemplate') public cellTemplateInternal: TemplateRef<unknown>;\n\n    private _columnLayout = {} as IDejaGridColumnLayout;\n    private refresh$sub: Subscription;\n\n    @Input()\n    public set columnLayout(layout: IDejaGridColumnLayout) {\n        if (this.refresh$sub) {\n            this.refresh$sub.unsubscribe();\n            this.refresh$sub = undefined;\n        }\n\n        this._columnLayout = layout || {\n            columns: [],\n            scrollLeft: 0,\n            vpAfterWidth: 0,\n            vpBeforeWidth: 0,\n            refresh$: undefined\n        };\n\n        if (this._columnLayout.refresh$) {\n            this.refresh$sub = this._columnLayout.refresh$.pipe(\n                takeUntil(this.destroyed$)\n            ).subscribe(() => this.changeDetectorRef.markForCheck());\n        }\n    }\n\n    public get columnLayout(): IDejaGridColumnLayout {\n        return this._columnLayout;\n    }\n\n    public get cellTemplate(): TemplateRef<unknown> {\n        return this.cellTemplateExternal || this.cellTemplateInternal;\n    }\n\n    public constructor(private changeDetectorRef: ChangeDetectorRef) {\n        super();\n    }\n\n    public getCellText(row: IDejaGridRow<unknown>, textField: string): string {\n        return ItemListService.getItemText(row, textField);\n    }\n}\n","<div *ngIf=\"columnLayout.vpBeforeWidth\" [style.flex-basis.px]=\"columnLayout.vpBeforeWidth\"></div>\n<div *ngFor=\"let column of columnLayout.columns; let index=index\" [attr.colindex]=\"index\" [attr.colname]=\"column.name\" [class.dragged]=\"column.dragged\" [attr.current]=\"column.isCurrent || null\" class=\"cell-wrapper\" [style.flex-basis.px]=\"column.w\">\n\t<span *ngIf=\"!cellTemplate || !column.useCellTemplate\" class=\"cell\">{{ getCellText(row, column.name) }}</span>\n\t<ng-template [ngTemplateOutlet]=\"cellTemplate\" *ngIf=\"cellTemplate && column.useCellTemplate\" [ngTemplateOutletContext]=\"{ $implicit: row, flatIndex: flatIndex, column: column }\"></ng-template>\n</div>\n<div *ngIf=\"columnLayout.vpAfterWidth\" [style.flex-basis.px]=\"columnLayout.vpAfterWidth\"></div>","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, Input, Optional, Output, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { IDejaChipsComponentCloseEvent } from '@deja-js/component/chips';\nimport { DejaClipboardService, Destroy, KeyCodes } from '@deja-js/component/core';\nimport { GroupingService, IGroupInfo, IItemBase, IItemTree, ISortInfos, ItemListService, IViewListResult, IViewPort, SortingService, ViewPortService } from '@deja-js/component/core/item-list';\nimport { IDejaDragEvent } from '@deja-js/component/dragdrop';\nimport { DejaTreeListComponent, DejaTreeListScrollEvent } from '@deja-js/component/tree-list';\nimport { combineLatestWith, debounceTime, filter, fromEvent, map, Observable, ReplaySubject, Subject, switchMap, take, takeUntil, tap, timer } from 'rxjs';\n\nimport { IDejaGridColumn, IDejaGridColumnEvent, IDejaGridColumnLayoutEvent, IDejaGridColumnSizeEvent } from './data-grid-column/data-grid-column';\nimport { IDejaGridColumnLayout } from './data-grid-column/data-grid-column-layout';\nimport { DejaGridColumnsLayoutInfos } from './data-grid-column/data-grid-column-layout-infos';\nimport { IDejaGridGroupsEvent } from './data-grid-grouparea/data-grid-group';\nimport { DejaGridHeaderComponent } from './data-grid-header/data-grid-header.component';\nimport { IDejaGridRow } from './data-grid-row/data-grid-row';\nimport { DejaGridRowEvent } from './data-grid-row/data-grid-row-event';\nimport { DejaGridRowsEvent } from './data-grid-row/data-grid-rows-event';\n\n/** @deprecated use ag-grid instead */\n@Component({\n    selector: 'deja-grid',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: [\n        './data-grid.component.scss'\n    ],\n    templateUrl: './data-grid.component.html'\n})\nexport class DejaGridComponent extends Destroy {\n    @Input() public placeholder: string;\n    /** Texte à afficher par default dans la zone de recherche */\n    /** Texte affiché si aucune donnée n'est présente dans le tableau */\n    @Input() public nodataholder: string;\n    /** Correspond au ngModel du champ de filtrage ou recherche */\n    @Input() public query = '';\n    /** Définit un texte de conseil en cas d'erreur de validation ou autre */\n    @Input() public hintLabel: string;\n    /** Les trois valeurs acceptés en paramètre se trouvent dans l'enum ViewportMode (disabled, fixed, variable ou auto)\n     * Attention, une désactivation du viewport dégrade considérablement les performances de la liste et ne doit pas être activée si la liste\n     * est suceptible de contenir beaucoup d'éléments.\n     */\n    @Input() public viewportMode = 'fixed';\n    /** Champ utilisé pour la liste des enfants d'un parent */\n    @Input() public childrenField: string;\n    /** Définit le champ à utiliser comme valeur d'affichage. */\n    @Input() public textField: string;\n    /** Définit le champ à utiliser comme valeur de comparaison. */\n    @Input() public valueField: string;\n    /** Définit le champ à utiliser comme champ de recherche.\n     * Ce champ peut indiquer, un champ contenant une valeur, un texte indexé, ou une fonction.\n     */\n    @Input() public searchField: string;\n    /** Ligne courant ou ligne active */\n    @Input() public currentRow: unknown;\n    /** Liste des éléments sélectionnés en mode multiselect */\n    @Input() public selectedItems: unknown[];\n    /** Elément selectioné en mode single select */\n    @Input() public selectedItem: unknown;\n    /** Liste des models selectionés en mode multiselect */\n    @Input() public selectedModels: unknown[];\n    /** Model selectioné en mode single select */\n    @Input() public selectedModel: unknown;\n    /** Definit le service de tri utilisé par ce composant. */\n    @Input() public sortingService: SortingService;\n    /** Definit le service de regroupement utilisé par ce composant. */\n    @Input() public groupingService: GroupingService;\n    /** Définit la largeur minimum que peut prendre une colonne en cas de redimensionement. */\n    @Input() public columnsMinWidth = 15;\n    /** Permet de définir un template de ligne par binding */\n    @Input() public rowTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template de ligne parente par binding. */\n    @Input() public parentRowTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template d'entête par binding. */\n    @Input() public headerTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template d'entête de colonnes par binding. */\n    @Input() public columnHeaderTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template comme prefixe de la zone de recherche par binding. */\n    @Input() public searchPrefixTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template comme suffixe de la zone de recherche par binding. */\n    @Input() public searchSuffixTemplateExternal: TemplateRef<unknown>;\n    /** Set a observable called before the rows will be displayed */\n    @Input() public loadingRows: (query: string | RegExp, selectedRows: IDejaGridRow<unknown>[]) => Observable<unknown[]>;\n    /** Set a promise called before a row selection */\n    @Input() public selectingRow: (row: IDejaGridRow<unknown>) => Promise<IDejaGridRow<unknown>> | Observable<IDejaGridRow<unknown>>;\n    /** Set a promise called before a row deselection */\n    @Input() public unselectingRow: (row: IDejaGridRow<unknown>) => Promise<IDejaGridRow<unknown>> | Observable<IDejaGridRow<unknown>>;\n    /** Set a promise called before a row expand */\n    @Input() public expandingRow: (row: IDejaGridRow<unknown>) => Promise<IDejaGridRow<unknown>> | Observable<IDejaGridRow<unknown>>;\n    /** Set a promise called before a row collapse */\n    @Input() public collapsingRow: (row: IDejaGridRow<unknown>) => Promise<IDejaGridRow<unknown>> | Observable<IDejaGridRow<unknown>>;\n    /** Exécuté lorsque le déplacement d'une ligne est terminée. */\n    @Output() public readonly itemDragEnd = new EventEmitter<IDejaDragEvent>();\n    /** Exécuté lorsque le déplacement d'une ligne commence. */\n    @Output() public readonly itemDragStart = new EventEmitter<IDejaDragEvent>();\n    /** Exécuté lorsque l'utilisateur sélectionne ou désélectionne une ligne. */\n    @Output() public readonly selectedChange = new EventEmitter<DejaGridRowEvent<unknown> | DejaGridRowsEvent<unknown>>();\n    /** Cet évenement est levé lorsque la position des colonnes est modifiée */\n    @Output() public readonly columnLayoutChanged = new EventEmitter<IDejaGridColumnLayoutEvent>();\n    /** Cet évenement est levé lorsque la taille d'une colonne est modifiée */\n    @Output() public readonly columnSizeChanged = new EventEmitter<IDejaGridColumnSizeEvent>();\n    /** Exécuté lorsque le calcul du viewPort est executé. */\n    @Output() public readonly viewPortChanged = new EventEmitter<IViewPort>();\n    /** Exécuté lorsque le sorting à changé. */\n    @Output() public readonly sortChanged = new EventEmitter<ISortInfos>();\n    /** Exécuté lorsque le grouping à changé. */\n    @Output() public readonly groupChanged = new EventEmitter<IGroupInfo[]>();\n\n    @ContentChild('rowTemplate')\n    private rowTemplateInternal: TemplateRef<unknown>;\n\n    @ContentChild('parentRowTemplate')\n    private parentRowTemplateInternal: TemplateRef<unknown>;\n\n    @ContentChild('cellTemplate')\n    private _cellTemplate: TemplateRef<unknown>;\n\n    @ContentChild('parentTitleTemplate')\n    private _parentTitleTemplate: TemplateRef<unknown>;\n\n    @ContentChild('columnHeaderTemplate')\n    private _columnHeaderTemplate: TemplateRef<unknown>;\n\n    @ContentChild('headerTemplate')\n    private headerTemplateInternal: TemplateRef<unknown>;\n\n    @ContentChild('searchPrefixTemplate')\n    private searchPrefixTemplateInternal: TemplateRef<unknown>;\n\n    @ContentChild('searchSuffixTemplate')\n    private searchSuffixTemplateInternal: TemplateRef<unknown>;\n\n    @ViewChild(DejaGridHeaderComponent) private header: DejaGridHeaderComponent;\n    @ViewChild(DejaTreeListComponent, { static: true }) private treeListComponent: DejaTreeListComponent;\n\n    /** retourne la largeur calculée des lignes */\n    public rowsWidth: number = null;\n\n    // eslint-disable-next-line rxjs/finnish\n    private _rows: unknown[] | Promise<unknown[]> | Observable<unknown[]>;\n    private _columns: IDejaGridColumn[];\n    private _columnLayout = {\n        scrollLeft: 0,\n        vpBeforeWidth: 0,\n        vpAfterWidth: 0,\n        columns: [],\n        refresh$: new Subject<void>()\n    } as IDejaGridColumnLayout;\n\n    private lastScrollLeft = 0;\n\n    private printColumnLayout$ = new Subject<void>();\n    private disableUserSelection$ = new Subject<void>();\n\n    private _noHorizontalScroll = false;\n    private _itemListService: ItemListService<unknown>;\n    private sizingLayoutInfos: DejaGridColumnsLayoutInfos;\n    private columnsLayoutInfos: DejaGridColumnsLayoutInfos;\n    private hasPercentageColumns = false;\n    private _sortable = false;\n    private _searchArea = false;\n    private _groupArea = false;\n    private _rowsDraggable = false;\n    private _rowsSortable = false;\n    private _columnsDraggable = false;\n    private _columnsSortable = false;\n    private _columnsSizable = false;\n    private _multiSelect = false;\n    private _minSearchLength = 0;\n    private _maxHeight = 0;\n    private _pageSize = 0;\n    private _viewPortRowHeight = ViewPortService.itemDefaultSize;\n    // private noColumnsSpecified = false;\n\n    private columnGroups$ = new Subject<IDejaGridColumn[] | string>();\n    private columns$ = new ReplaySubject<IDejaGridColumn[]>(1);\n    private _columnGroups = [] as IDejaGridColumn[];\n    private _waiter: boolean;\n\n    /** Définit la hauteur d'une ligne pour le calcul du viewport en pixels */\n    @Input()\n    public set viewPortRowHeight(value: NumberInput) {\n        this._viewPortRowHeight = coerceNumberProperty(value);\n    }\n\n    public get viewPortRowHeight(): NumberInput {\n        return this._viewPortRowHeight;\n    }\n\n    /** Permet de définir la longueur minimale de caractères dans le champ de recherche avant que la recherche ou le filtrage soient effectués */\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    @Input()\n    public set minSearchLength(value: NumberInput) {\n        this._minSearchLength = coerceNumberProperty(value);\n    }\n\n    public get minSearchLength(): NumberInput {\n        return this._minSearchLength;\n    }\n\n    /** Hauteur maximum avant que le composant affiche une scrollbar\n     * spécifier une grande valeur pour ne jamais afficher de scrollbar\n     * Spécifier 0 pour que le composant determine sa hauteur à partir du container\n     */\n    @Input()\n    public set maxHeight(value: NumberInput) {\n        this._maxHeight = coerceNumberProperty(value);\n    }\n\n    public get maxHeight(): NumberInput {\n        return this._maxHeight;\n    }\n\n    /** Définit le nombre de lignes à sauter en cas de pression sur les touches PageUp ou PageDown */\n    @Input()\n    public set pageSize(value: NumberInput) {\n        this._pageSize = coerceNumberProperty(value);\n    }\n\n    public get pageSize(): NumberInput {\n        return this._pageSize;\n    }\n\n    /** Définit si le waiter doit être affiché dans la grille. */\n    @Input()\n    public set waiter(value: BooleanInput) {\n        this._waiter = coerceBooleanProperty(value);\n    }\n\n    public get waiter(): BooleanInput {\n        return this._waiter;\n    }\n\n    /** Permet de trier le tableau au clic sur l'entête de la colonne */\n    @Input()\n    public set sortable(value: BooleanInput) {\n        this._sortable = coerceBooleanProperty(value);\n    }\n\n    public get sortable(): BooleanInput {\n        return this._sortable;\n    }\n\n    /** Définit les options de regroupement utilisateur de la grille. Plusieurs champs peuvent etre spécifiés dans le HTML en utilisant la , comme séparateur (Ex: columnGroups=\"color, name\") */\n    @Input()\n    public set columnGroups(value: IDejaGridColumn[]) {\n        this.columnGroups$.next(value);\n    }\n\n    public get columnGroups(): IDejaGridColumn[] {\n        return this._columnGroups;\n    }\n\n    public get noHorizontalScroll(): boolean {\n        return this._noHorizontalScroll;\n    }\n\n    /** Affiche un barre de recherche au dessus du tableau. */\n    @Input()\n    public set searchArea(value: BooleanInput) {\n        this._searchArea = coerceBooleanProperty(value);\n    }\n\n    public get searchArea(): BooleanInput {\n        return this._searchArea;\n    }\n\n    /** Affiche une zone de regroupement des colonnes par drag and drop. */\n    @Input()\n    public set groupArea(value: BooleanInput) {\n        this._groupArea = coerceBooleanProperty(value);\n        if (this._columnsSortable && !this.clipboardService) {\n            throw new Error('To use the DejaGrid.groupArea feature, please import and provide the DejaClipboardService in your application.');\n        }\n    }\n\n    public get groupArea(): BooleanInput {\n        return this._groupArea;\n    }\n\n    /** Rend les lignes du tableau draggable vers un autre composant (ne pas confondre avec la propriété `sortable`) */\n    @Input()\n    public set rowsDraggable(value: BooleanInput) {\n        this._rowsDraggable = coerceBooleanProperty(value);\n    }\n\n    public get rowsDraggable(): BooleanInput {\n        return this._rowsDraggable;\n    }\n\n    /** Rend les lignes du tableau triables par drag-and-drop */\n    @Input()\n    public set rowsSortable(value: BooleanInput) {\n        this._rowsSortable = coerceBooleanProperty(value);\n    }\n\n    public get rowsSortable(): BooleanInput {\n        return this._rowsSortable;\n    }\n\n    /** Définit si toutes les colonnes peuvent être draggable vers un autre composant. */\n    @Input()\n    public set columnsDraggable(value: BooleanInput) {\n        this._columnsDraggable = coerceBooleanProperty(value);\n    }\n\n    public get columnsDraggable(): BooleanInput {\n        return this._columnsDraggable;\n    }\n\n    /** Définit si toutes les colonnes peuvent être déplacées parmis les autres colonnes. */\n    @Input()\n    public set columnsSortable(value: BooleanInput) {\n        this._columnsSortable = coerceBooleanProperty(value);\n        if (this._columnsSortable && !this.clipboardService) {\n            throw new Error('To use the DejaGrid.columnsSortable feature, please import and provide the DejaClipboardService in your application.');\n        }\n    }\n\n    public get columnsSortable(): BooleanInput {\n        return this._columnsSortable;\n    }\n\n    /** Permet de redimensionner manuellement les colonnes du tableau. */\n    @Input()\n    public set columnsSizable(value: BooleanInput) {\n        this._columnsSizable = coerceBooleanProperty(value);\n    }\n\n    public get columnsSizable(): BooleanInput {\n        return this._columnsSizable;\n    }\n\n    /** Permet la sélection multiple des ligne de la grille (avec la touche shift ou ctrl) */\n    @Input()\n    public set multiSelect(value: BooleanInput) {\n        this._multiSelect = coerceBooleanProperty(value);\n    }\n\n    public get multiSelect(): BooleanInput {\n        return this._multiSelect;\n    }\n\n    /** Définit la structure des colonnes de la grille. */\n    @Input()\n    public set columns(columns: IDejaGridColumn[]) {\n        this.columns$.next(columns);\n    }\n\n    /** Retourne la structure des colonnes de la grille. */\n    public get columns(): IDejaGridColumn[] {\n        return this._columns;\n    }\n\n    /** Définit le modèle affiché dans les lignes de la grille. */\n    @Input()\n    // eslint-disable-next-line rxjs/finnish\n    public set rows(rows: unknown[] | Promise<unknown[]> | Observable<unknown[]>) {\n        this._rows = rows;\n        if (this._rows && !this._columns) {\n            if (this._rows instanceof Array) {\n                this.calcColumnsLayout(this._rows);\n            } else {\n                this.viewPortChanged.pipe(\n                    filter(vp => vp?.items?.length > 0),\n                    take(1),\n                    map(vp => vp.items),\n                    takeUntil(this.destroyed$)\n                ).subscribe(items => this.calcColumnsLayout(items));\n            }\n        }\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** Retourne le modèle affiché dans les lignes de la grille. */\n    // eslint-disable-next-line rxjs/finnish\n    public get rows(): unknown[] | Promise<unknown[]> | Observable<unknown[]> {\n        return this._rows;\n    }\n\n    /** Définit la colonne en surbrillance. */\n    @Input()\n    public set currentColumn(column: IDejaGridColumn) {\n        this.columns.forEach(c => c.isCurrent = false);\n        if (column) {\n            column.isCurrent = true;\n            this.ensureColumnVisible(column);\n        }\n        if (this._columnLayout) {\n            this._columnLayout.refresh$.next();\n        }\n    }\n\n    /** Retourne la colonne en surbrillance. */\n    public get currentColumn(): IDejaGridColumn {\n        return this.columns.find(c => c.isCurrent);\n    }\n\n    /** Definit le service de liste utilisé par ce composant. Ce srevice permet de controller dynamiquement la liste, ou de faire du lazyloading. */\n    @Input()\n    public set itemListService(value: ItemListService<unknown>) {\n        this._itemListService = value;\n    }\n\n    /** Retourne le service de liste utilisé par ce composant. */\n    public get itemListService(): ItemListService<unknown> {\n        return this._itemListService || this.treeListComponent.itemListService;\n    }\n\n    /** Retourne une valeur indiquant le nombre de niveau hierarchiques affichés par la grille. */\n    public get depthMax(): number {\n        return this.treeListComponent.depthMax;\n    }\n\n    /** Retourne le service de viewport utilisé pour la grille */\n    public get viewPort(): ViewPortService {\n        return this.treeListComponent.viewPort;\n    }\n\n    public get searchPrefixTemplate(): TemplateRef<unknown> {\n        return this.searchPrefixTemplateExternal || this.searchPrefixTemplateInternal;\n    }\n\n    public get searchSuffixTemplate(): TemplateRef<unknown> {\n        return this.searchSuffixTemplateExternal || this.searchSuffixTemplateInternal;\n    }\n\n    public get rowTemplate(): TemplateRef<unknown> {\n        return this.rowTemplateExternal || this.rowTemplateInternal;\n    }\n\n    public get parentRowTemplate(): TemplateRef<unknown> {\n        return this.parentRowTemplateExternal || this.parentRowTemplateInternal;\n    }\n\n    public get cellTemplate(): TemplateRef<unknown> {\n        return this._cellTemplate;\n    }\n\n    public get parentTitleTemplate(): TemplateRef<unknown> {\n        return this._parentTitleTemplate;\n    }\n\n    public get columnsHeaderTemplate(): TemplateRef<unknown> {\n        return this.headerTemplateExternal || this.headerTemplateInternal;\n    }\n\n    public get columnHeaderTemplate(): TemplateRef<unknown> {\n        return this.columnHeaderTemplateExternal || this._columnHeaderTemplate;\n    }\n\n    public get columnLayout(): IDejaGridColumnLayout {\n        return this._columnLayout;\n    }\n\n    public constructor(private changeDetectorRef: ChangeDetectorRef, private elementRef: ElementRef, @Optional() private clipboardService: DejaClipboardService) {\n        super();\n\n        const element = this.elementRef.nativeElement as HTMLElement;\n\n        this.clearColumnLayout();\n\n        const group$ = (groupInfos: IGroupInfo[]): Observable<IGroupInfo[]> => this.treeListComponent.group$(groupInfos).pipe(\n            map(() => groupInfos)\n        );\n\n        this.columns$.pipe(\n            combineLatestWith(this.columnGroups$),\n            map(([columns, columnGroups]) => {\n                if (typeof columnGroups === 'string') {\n                    const groups = columnGroups.split(',').map(v => v.trim());\n                    return this._columnGroups = groups.map(group => columns.find(column => column.name === group));\n                } else {\n                    return this._columnGroups = columnGroups;\n                }\n            }),\n            map(columnGroups => {\n                const groupInfos = [] as IGroupInfo[];\n                const sortInfos = this.treeListComponent.sortInfos;\n                columnGroups.forEach(column => {\n                    const groupInfo = {} as IGroupInfo;\n                    if (sortInfos && sortInfos.name === column.name) {\n                        groupInfo.sortInfos = sortInfos;\n                    }\n                    groupInfo.groupByField = column.groupByField || column.name;\n                    groupInfo.groupTextField = column.groupTextField || column.name;\n                    groupInfos.push(groupInfo);\n                });\n                return groupInfos;\n            }),\n            switchMap(group$),\n            takeUntil(this.destroyed$)\n        ).subscribe(groupInfos => {\n            this.groupChanged.emit(groupInfos);\n            this.changeDetectorRef.markForCheck();\n        });\n\n        this.columns$.pipe(\n            tap(columns => this._columns = columns),\n            debounceTime(1),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => this.calcColumnsLayout());\n\n        this.printColumnLayout$.pipe(\n            debounceTime(1000),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            console.log('');\n            console.log('Auto columns layout:');\n            console.log(JSON.stringify(this._columns, null, 4));\n            console.log('');\n        });\n\n        this.disableUserSelection$.pipe(\n            tap(() => element.setAttribute('disableselection', '')),\n            debounceTime(1000),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => element.removeAttribute('disableselection'));\n\n        fromEvent<Event>(window, 'resize').pipe(\n            filter(() => this.hasPercentageColumns),\n            debounceTime(5),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => this.calcColumnsLayout());\n\n        const keyDown$ = fromEvent<KeyboardEvent>(element, 'keydown');\n        keyDown$.pipe(\n            takeUntil(this.destroyed$)\n        ).subscribe(event => {\n            const find = (index: number, backward: boolean): IDejaGridColumn => {\n                if (backward) {\n                    if (index === -1) {\n                        index = this.columns.length;\n                    }\n                    // eslint-disable-next-line no-loops/no-loops\n                    while (--index >= 0) {\n                        const column = this.columns[index];\n                        if (column.w > 0) {\n                            return column;\n                        }\n                    }\n                } else {\n                    // eslint-disable-next-line no-loops/no-loops\n                    while (++index < this.columns.length) {\n                        const column = this.columns[index];\n                        if (column.w > 0) {\n                            return column;\n                        }\n                    }\n                }\n                return this.currentColumn;\n            };\n\n            switch (event.code) {\n                case KeyCodes.LeftArrow:\n                case KeyCodes.RightArrow:\n                    this.currentColumn = this.columns && find(this.columns.findIndex(c => c.isCurrent), event.code === KeyCodes.LeftArrow);\n                    event.preventDefault();\n                    return false;\n\n                default:\n                    return true;\n            }\n        });\n\n        const mouseDownEvent$ = fromEvent<MouseEvent>(element, 'mousedown');\n        mouseDownEvent$.pipe(\n            filter(downEvent => downEvent.buttons === 1),\n            switchMap(downEvent => {\n                const clickedColumn = this.getColumnFromHtmlElement(downEvent.target as HTMLElement);\n                const mouseUpEvent$ = fromEvent<MouseEvent>(element, 'mouseup');\n                return mouseUpEvent$.pipe(\n                    take(1),\n                    filter(() => !!clickedColumn),\n                    tap(upEvent => {\n                        const columnElement = this.getColumnElementFromHtmlElement(upEvent.target as HTMLElement);\n                        if ((columnElement?.getAttribute('colname')) === clickedColumn.name) {\n                            this.currentColumn = clickedColumn;\n                        }\n                    })\n                );\n            }),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n\n    // get accessor\n    public get value(): unknown {\n        return this.rows;\n    }\n\n    // set accessor including call the onchange callback\n    public set value(value: unknown) {\n        this.rows = value as unknown[] | Promise<unknown[]> | Observable<unknown[]>;\n    }\n\n    /** Nettoye les caches et réaffiche le viewport. */\n    public refresh(): void {\n        if (this.treeListComponent) {\n            this.treeListComponent.refresh();\n        }\n        if (this.columnLayout) {\n            if (this.hasPercentageColumns) {\n                this.calcColumnsLayout();\n            } else {\n                this.columnLayout.refresh$.next();\n            }\n        }\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** Recalcule le viewport. */\n    public refreshViewPort(item?: IItemBase<unknown>): void {\n        this.treeListComponent.refreshViewPort(item);\n    }\n\n    /** Efface la hauteur calculée des lignes en mode automatique */\n    public clearRowsHeight(): void {\n        if (this.treeListComponent) {\n            this.treeListComponent.clearRowsHeight();\n        }\n    }\n\n    /** Efface le viewport */\n    public clearViewPort(): void {\n        if (this.treeListComponent) {\n            this.treeListComponent.clearViewPort();\n        }\n    }\n\n    /** Calcul la position de la scrollbar horizontale pour que la colonne spéfiée soit dans la zone visible. */\n    public ensureColumnVisible(column: IDejaGridColumn): boolean {\n        if (column === undefined || !this.columns || this.columns.length === 0 || this._noHorizontalScroll) {\n            return;\n        }\n\n        const listElement = this.treeListComponent.listElement;\n        const scrollPos = listElement.scrollLeft;\n        let prevWidth = 0;\n\n        this.columns.find(c => {\n            if (column === c) {\n                return true;\n            }\n            prevWidth += c.w;\n            return false;\n        });\n\n        if (prevWidth < scrollPos) {\n            listElement.scrollLeft = prevWidth;\n        } else if (scrollPos < prevWidth + column.w - listElement.clientWidth) {\n            listElement.scrollLeft = prevWidth + column.w - listElement.clientWidth;\n        }\n    }\n\n    public scroll(event: DejaTreeListScrollEvent): void {\n        if (this.lastScrollLeft !== event.scrollLeft) {\n            this.lastScrollLeft = event.scrollLeft;\n            this.calcColumnsLayout();\n        }\n    }\n\n    /** Trie la liste par le champs spécifié. */\n    public sort(name?: string): void {\n        this.treeListComponent.sort(name);\n    }\n\n    /** Trie la liste par le champs spécifié. */\n    public sort$(name?: string): Observable<IViewListResult<unknown>> {\n        return this.treeListComponent.sort$(name);\n    }\n\n    /** Groupe les éléments en fonction du modèle de groupe spécifié\n     * @param groupInfos Modèle de groupe à appliquer.\n     * @return Observable résolu par la fonction.\n     */\n    public group$(groups: IGroupInfo[]): Observable<IViewListResult<unknown>> {\n        return this.treeListComponent.group$(groups);\n    }\n\n    /** Retire les groupe correspondants au modèle de groupe spécifié\n     * @param groupInfos Modèle de groupe à retirer.\n     * @return Observable résolu par la fonction.\n     */\n    public ungroup$(groupInfo: IGroupInfo): Observable<IViewListResult<unknown>> {\n        return this.treeListComponent.ungroup$(groupInfo);\n    }\n\n    public onColumnHeaderClicked(event: IDejaGridColumnEvent): void {\n        if (this.treeListComponent && !this.sortable || !(event.column.sortable ?? true)) {\n            return;\n        }\n\n        const hideSpinner = (): void => {\n            event.column.sorting = false;\n            this.changeDetectorRef.markForCheck();\n            this.header.refresh();\n        };\n\n        event.column.sorting = true;\n        this.changeDetectorRef.markForCheck();\n\n        timer(1).pipe(\n            take(1),\n            switchMap(() => this.sort$(event.column.name)),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            hideSpinner();\n            this.sortChanged.emit(this.treeListComponent.sortInfos);\n        }, (error: string) => {\n            hideSpinner();\n            throw error.toString();\n        });\n    }\n\n    public onColumnDragEnd(): void {\n        this.columnLayout.refresh$.next();\n    }\n\n    public onColumnLayoutChanged(e: IDejaGridColumnLayoutEvent): void {\n        this.columns.splice(e.index, 1);\n\n        if (e.target) {\n            this.columns.splice(e.targetIndex, 0, e.column);\n        } else {\n            this.columns.push(e.column);\n        }\n\n        this.calcColumnsLayout();\n        this.ensureColumnVisible(e.column);\n\n        this.columnLayoutChanged.emit(e);\n\n        this.changeDetectorRef.markForCheck();\n    }\n\n    public onColumnSizeChanged(e: IDejaGridColumnSizeEvent): void {\n\n        if (!this.columnsLayoutInfos) {\n            return;\n        }\n\n        if (!this.sizingLayoutInfos) {\n            this.sizingLayoutInfos = this.columnsLayoutInfos;\n        }\n\n        if (!e.column) {\n            // End of sizing process\n            delete this.sizingLayoutInfos;\n            return;\n        }\n\n        const originalWidth = this.sizingLayoutInfos.columnsWidth[e.column.name];\n        const minimumWidth = e.column.minWidth || this.columnsMinWidth;\n        if (originalWidth.unit === '%') {\n            const listElement = this.treeListComponent.listElement;\n            const containerWidth = listElement.clientWidth;\n\n            // Calcul de la place restante pour les colonnes en pourcent\n            const availableWidth = containerWidth - this.sizingLayoutInfos.totalFixedWidth;\n\n            // Calcul de l'offset en %\n            const percentOffsetWidth = e.offsetWidth * this.sizingLayoutInfos.totalPercentWidth / availableWidth;\n\n            const percentMinWidth = minimumWidth * 100 / containerWidth;\n\n            e.column.width = `${Math.max(percentMinWidth, originalWidth.value + percentOffsetWidth * 2)}%`;\n        } else {\n            e.column.width = `${Math.max(minimumWidth, originalWidth.value + e.offsetWidth)}px`;\n        }\n\n        this.calcColumnsLayout();\n\n        // Disable text selection during drag and drop\n        this.disableUserSelection$.next();\n\n        this.ensureSizingVisible(e.column);\n\n        this.columnSizeChanged.emit(e);\n    }\n\n    public onGroupRemoved(event: IDejaChipsComponentCloseEvent): void {\n        const column = event.item as IDejaGridColumn;\n\n        const groupInfo = {\n            groupByField: column.groupByField || column.name,\n            groupTextField: column.groupTextField || column.name\n        } as IGroupInfo;\n\n        this.treeListComponent.ungroup$(groupInfo).pipe(\n            take(1),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n\n    public onGroupsChanged(e: IDejaGridGroupsEvent): void {\n        this.columnGroups$.next(e.columns);\n    }\n\n    public calcColumnsLayout(rows?: unknown[]): void {\n        // this.noColumnsSpecified = false;\n\n        if (!this._columns || !this._columns.length) {\n            if (rows?.length) {\n                const searchFirstLastLevelRow = (items: IItemTree<unknown>[]): IItemTree<unknown> => items.find(row => {\n                    if (row.$items) {\n                        const srow: IItemTree<unknown> = searchFirstLastLevelRow(row.$items);\n                        if (srow) {\n                            return true;\n                        }\n                    } else {\n                        return !!row;\n                    }\n                    return false;\n                });\n\n                const treeRow = searchFirstLastLevelRow(rows);\n                if (treeRow) {\n                    // this.noColumnsSpecified = true;\n                    this._columns = Object.keys(treeRow).map(key => ({\n                        label: key,\n                        name: key,\n                        width: '130px'\n                    } as IDejaGridColumn));\n                }\n            }\n        }\n\n        // if (this.noColumnsSpecified) {\n        //     this.printColumnLayout$.next();\n        // }\n\n        this.clearColumnLayout();\n\n        if (!this._columns || !this._columns.length) {\n            if (this.header) {\n                this.header.refresh();\n            }\n            this._columnLayout.refresh$.next();\n            return;\n        }\n\n        const listElement = this.treeListComponent?.listElement;\n        if (!listElement) {\n            return;\n        }\n\n        this._columnLayout.scrollLeft = -this.lastScrollLeft;\n        let viewLeft = -this.lastScrollLeft;\n        const containerWidth = listElement.clientWidth;\n\n        // Calc total fixed width\n        this.columnsLayoutInfos = new DejaGridColumnsLayoutInfos(this._columns);\n\n        // Reset width\n        this._columns.forEach(column => delete column.w);\n\n        const calcColumnsWidth = (): number => {\n            // Taille totale des colonnes visibles en pixel\n            let totalFixedWidth = 0;\n\n            // Attribution des colonnes en pixels\n            this.columnsLayoutInfos.fixedColumns.filter(column => column.w !== 0).forEach(column => {\n                const width = this.columnsLayoutInfos.columnsWidth[column.name];\n                const minimumWidth = column.minWidth || this.columnsMinWidth;\n                column.w = Math.max(minimumWidth, width.value);\n                totalFixedWidth += column.w;\n            });\n\n            // Calcul de la place restante pour les colonnes en pourcent\n            this.columnsLayoutInfos.totalFixedWidth = totalFixedWidth;\n\n            // Filtrer les colonnes visibles en pourcent\n            const percentColumns = this.columnsLayoutInfos.percentColumns.filter(column => column.w !== 0);\n\n            // Calcul de la taille retsante pour l'attribution des pourcents une fois les tailles minimum enlevées\n            let availableWidthForPercent = containerWidth - totalFixedWidth;\n            percentColumns.forEach(column => availableWidthForPercent -= (column.minWidth || this.columnsMinWidth));\n            let availableWidth = availableWidthForPercent;\n\n            // Attribution des colonnes en pourcent\n            percentColumns.forEach(column => {\n                const width = this.columnsLayoutInfos.columnsWidth[column.name];\n                const minimumWidth = column.minWidth || this.columnsMinWidth;\n                let pixelWidth = minimumWidth;\n                if (availableWidthForPercent > 0) {\n                    const aditionalWidth = Math.floor(availableWidthForPercent * width.value / this.columnsLayoutInfos.totalPercentWidth);\n                    availableWidth -= aditionalWidth;\n                    pixelWidth += aditionalWidth;\n                }\n                column.w = pixelWidth;\n            });\n\n            return availableWidth;\n        };\n\n        let rest = calcColumnsWidth();\n        if (rest < 0 && this.columnsLayoutInfos.responsiveColumns.length) {\n            // Remove responsive columns\n            this.columnsLayoutInfos.responsiveColumns.find(column => {\n                rest += column.w;\n                column.w = 0; // Hide column\n                return rest >= 0;\n            });\n            rest = calcColumnsWidth();\n        }\n\n        this._noHorizontalScroll = rest >= 0;\n\n        // Register to page resize only if percentage columns are defined\n        this.hasPercentageColumns = this.columnsLayoutInfos && this.columnsLayoutInfos.percentColumns.length > 0;\n\n        this._columnLayout.vpBeforeWidth = 0;\n        this._columnLayout.vpAfterWidth = 0;\n        let totalWidth = 0;\n        this._columns.filter(column => column.w > 0).forEach(column => {\n            totalWidth += column.w;\n            if (viewLeft > containerWidth) {\n                this._columnLayout.vpAfterWidth += column.w;\n                viewLeft += column.w;\n            } else {\n                viewLeft += column.w;\n                if (viewLeft < 0) {\n                    this._columnLayout.vpBeforeWidth += column.w;\n                } else {\n                    this._columnLayout.columns.push(column);\n                }\n            }\n        });\n\n        this.rowsWidth = totalWidth > containerWidth ? totalWidth : containerWidth;\n\n        if (this.header) {\n            this.header.refresh();\n        }\n\n        this._columnLayout.refresh$.next();\n    }\n\n    private ensureSizingVisible(column: IDejaGridColumn): void {\n        if (column === undefined || !this.columns || this.columns.length === 0 || this._noHorizontalScroll) {\n            return;\n        }\n\n        const listElement = this.treeListComponent.listElement;\n        const scrollPos = listElement.scrollLeft;\n        let prevWidth = 0;\n\n        this.columns.find(c => {\n            if (column === c) {\n                return true;\n            }\n            prevWidth += c.w;\n            return false;\n        });\n\n        if (prevWidth + column.w < scrollPos) {\n            listElement.scrollLeft = prevWidth + column.w;\n        } else if (scrollPos < prevWidth + column.w - listElement.clientWidth) {\n            listElement.scrollLeft = prevWidth + column.w - listElement.clientWidth;\n        }\n    }\n\n    private clearColumnLayout(): void {\n        this._columnLayout.scrollLeft = 0;\n        this._columnLayout.vpAfterWidth = 0;\n        this._columnLayout.vpBeforeWidth = 0;\n        this._columnLayout.columns = [];\n    }\n\n    private getColumnElementFromHtmlElement(element: HTMLElement): HTMLElement {\n        let parentElement = element;\n\n        // eslint-disable-next-line no-loops/no-loops\n        while (parentElement && !parentElement.hasAttribute('colname')) {\n            parentElement = parentElement.parentElement;\n        }\n\n        if (!parentElement) {\n            return undefined;\n        }\n\n        return parentElement;\n    }\n\n    private getColumnFromHtmlElement(element: HTMLElement): IDejaGridColumn {\n        const columnElement = this.getColumnElementFromHtmlElement(element);\n        const colname = columnElement?.getAttribute('colname');\n        return colname && this._columnLayout.columns.find(column => column.name === colname);\n    }\n}\n","<deja-grid-grouparea *ngIf=\"groupArea\" [groups]=\"columnGroups\" (groupsChanged)=\"onGroupsChanged($event)\" (groupRemoved)=\"onGroupRemoved($event)\"></deja-grid-grouparea>\n<deja-tree-list id=\"treelist\" #treelist [selectedItems]=\"selectedItems\" [selectedItem]=\"selectedItem\" [selectedModels]=\"selectedModels\" [selectedModel]=\"selectedModel\" [itemsWidth]=\"rowsWidth\" [textField]=\"textField\" [waiter]=\"waiter\" [valueField]=\"valueField\" [itemsDraggable]=\"rowsDraggable\" [sortable]=\"rowsSortable\" [min-search-length]=\"minSearchLength\" [searchArea]=\"searchArea\" [query]=\"query\" [maxHeight]=\"maxHeight\" [pageSize]=\"pageSize\" [hintLabel]=\"hintLabel\" [multiSelect]=\"multiSelect\" [itemListService]=\"itemListService\" [sortingService]=\"sortingService\" [groupingService]=\"groupingService\" [nodataholder]=\"nodataholder\" [placeholder]=\"placeholder\" [viewPortRowHeight]=\"viewPortRowHeight\" [viewportMode]=\"viewportMode\" [currentItem]=\"currentRow\" [childrenField]=\"childrenField\" [searchField]=\"searchField\" [items]=\"rows\" (itemDragEnd)=\"itemDragEnd.emit($event)\" [parentItemTemplateExternal]=\"parentRowTemplate\" [itemTemplateExternal]=\"rowTemplate\" [headerTemplateExternal]=\"columnsHeaderTemplate\" [searchPrefixTemplateExternal]=\"searchPrefixTemplate\" [searchSuffixTemplateExternal]=\"searchSuffixTemplate\" (itemDragStart)=\"itemDragStart.emit($event)\" (selectedChange)=\"selectedChange.emit($event)\" (viewPortChanged)=\"viewPortChanged.emit($event)\" (scroll)=\"scroll($event)\" [attr.nohscroll]=\"noHorizontalScroll || null\" [loadingItems]=\"loadingRows\" [selectingItem]=\"selectingRow\" [unselectingItem]=\"unselectingRow\" [expandingItem]=\"expandingRow\" [collapsingItem]=\"collapsingRow\">\n    <ng-template #parentItemTemplate let-item let-flatindex=\"flatindex \" let-query=\"query\">\n        <deja-grid-parent-row *ngIf=\"!parentRowTemplate\" [row]=\"item\" [flatIndex]=\"flatindex\" [columns]=\"columns\" [parentTitleTemplateExternal]=\"parentTitleTemplate\" [cellTemplateExternal]=\"cellTemplate\" [style.width.px]=\"rowsWidth\"></deja-grid-parent-row>\n    </ng-template>\n    <ng-template #itemTemplate let-item let-flatindex=\"flatindex \" let-query=\"query\">\n        <deja-grid-row *ngIf=\"!rowTemplate\" [row]=\"item\" [flatIndex]=\"flatindex\" [columnLayout]=\"columnLayout\" [cellTemplateExternal]=\"cellTemplate\" [style.width.px]=\"rowsWidth\"></deja-grid-row>\n    </ng-template>\n    <ng-template #headerTemplate>\n        <deja-grid-header *ngIf=\"!columnsHeaderTemplate && columnLayout && columnLayout.columns && columnLayout.columns.length\" #gridHeaderElement [sortInfos]=\"treelist.sortInfos\" (columnDragEnd)=\"onColumnDragEnd()\" [columnLayout]=\"columnLayout\" [columnsDraggable]=\"columnsDraggable || groupArea\" [columnsSortable]=\"columnsSortable\" [columnsSizable]=\"columnsSizable\" [columnHeaderTemplateExternal]=\"columnHeaderTemplate\" (columnLayoutChanged)=\"onColumnLayoutChanged($event)\" (columnSizeChanged)=\"onColumnSizeChanged($event)\" (columnHeaderClicked)=\"onColumnHeaderClicked($event)\"></deja-grid-header>\n    </ng-template>\n</deja-tree-list>\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\n/** Interface qui représente une colonne de grille */\nexport interface IDejaGridColumn {\n    /** Titre de la colonne */\n    label?: string;\n    /** Nom unique identifiant de la colonne */\n    name: string;\n    /** Internal usage */\n    w?: number;\n    /** Largeur et unité de la colonne. L'unité peut être en % ou en px (Exemple: 100px, 10%) */\n    width?: string;\n    /** largeur minimum en pixels à laquelle la colonne peut réduire sa taille */\n    minWidth?: number;\n    /** Indique si les cellules de la colonnes utilisent un template de cellule */\n    useCellTemplate?: boolean;\n    /** Indique si la colonne peut-être déplacée vers un autre composant */\n    draggable?: boolean;\n    /** Indique si la colonne est en déplacement (Usage Interne) */\n    dragged?: boolean;\n    /** Indique si la colonne peut-être redimensionée */\n    sizeable?: boolean;\n    /** Indique si la colonne est déplacable parmis les autres colonnes */\n    sortable?: boolean;\n    /** Indique si la colonne est en déplacement (Usage Interne) */\n    sorting?: boolean;\n    /** Indique si la colonne est masquée si la place necessaire n'est plus suffisante.\n     * Cette valeur peut-être true, false ou un nombre\n     * Si true, la colonne est masquée\n     * Si un nonbre est spécifiée, les colonnes avec un nombre inférieur seront masquées avant.\n     */\n    responsive?: boolean | number;\n    /** Indique si la colonne est groupable */\n    groupable?: boolean;\n    /** Indique le champ utilisé pour le regroupement de la colonne */\n    groupByField?: ((model: unknown) => string) | string;\n    /** Indique le champ utilisé pour le titre des groupes ajoutés lors du regroupement */\n    groupTextField?: ((model: unknown) => string) | string;\n    /** Indique si la colonne est la colonne courante */\n    isCurrent?: boolean;\n}\n\nexport interface IDejaGridColumnEvent {\n    column: IDejaGridColumn;\n    index: number;\n    originalEvent: MouseEvent;\n}\n\nexport interface IDejaGridColumnSizeEvent {\n    column: IDejaGridColumn;\n    offsetWidth: number;\n    originalEvent: MouseEvent;\n}\n\nexport interface IDejaGridColumnLayoutEvent extends IDejaGridColumnEvent {\n    target?: IDejaGridColumn;\n    targetIndex?: number;\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { Subject } from 'rxjs';\n\nimport { IDejaGridColumn } from './data-grid-column';\n\nexport class IDejaGridColumnLayout {\n    public scrollLeft: number;\n    public vpBeforeWidth: number;\n    public vpAfterWidth: number;\n    public columns: IDejaGridColumn[];\n    public refresh$: Subject<void>;\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { DejaItemEvent } from '@deja-js/component/core/item-list';\n\nexport class DejaGridRowEvent<T> extends DejaItemEvent<T> {\n\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { DejaItemsEvent } from '@deja-js/component/core/item-list';\n\nexport class DejaGridRowsEvent<T> extends DejaItemsEvent<T> {\n\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { IItemTree } from '@deja-js/component/core/item-list';\n\n// tslint:disable-next-line:no-empty-interface\nexport type IDejaGridRow<T> = IItemTree<T>;\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { IGroupParent, IItemTree } from '@deja-js/component/core/item-list';\n\nexport class IDejaGridParentRow<T> implements IItemTree<T>, IGroupParent {\n\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { IDejaGridColumn } from '../data-grid-column/data-grid-column';\n\nexport interface IDejaGridGroupsEvent {\n    originalEvent: Event;\n    column: IDejaGridColumn;\n    columns: IDejaGridColumn[];\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DejaChipsModule } from '@deja-js/component/chips';\nimport { DejaSortingModule } from '@deja-js/component/core/item-list';\nimport { DejaDragDropModule } from '@deja-js/component/dragdrop';\nimport { DejaTreeListModule } from '@deja-js/component/tree-list';\n\nimport { DejaGridComponent } from './data-grid.component';\nimport { DejaGridGroupAreaComponent } from './data-grid-grouparea/data-grid-grouparea.component';\nimport { DejaGridHeaderComponent } from './data-grid-header/data-grid-header.component';\nimport { DejaGridParentRowComponent } from './data-grid-parent-row/data-grid-parent-row.component';\nimport { DejaGridRowComponent } from './data-grid-row/data-grid-row.component';\n\n@NgModule({\n    declarations: [\n        DejaGridComponent,\n        DejaGridGroupAreaComponent,\n        DejaGridHeaderComponent,\n        DejaGridParentRowComponent,\n        DejaGridRowComponent\n    ],\n    exports: [\n        DejaGridComponent,\n        DejaGridGroupAreaComponent,\n        DejaGridHeaderComponent,\n        DejaGridParentRowComponent,\n        DejaGridRowComponent\n    ],\n    imports: [\n        CommonModule,\n        DejaChipsModule,\n        DejaDragDropModule,\n        DejaSortingModule,\n        DejaTreeListModule,\n        FormsModule,\n        MatIconModule\n    ]\n})\nexport class DejaGridModule {}\n\nexport * from './data-grid-column/data-grid-column';\nexport * from './data-grid-column/data-grid-column-layout';\nexport * from './data-grid-column/data-grid-column-layout-infos';\nexport * from './data-grid-row/data-grid-row-event';\nexport * from './data-grid-row/data-grid-rows-event';\nexport * from './data-grid-row/data-grid-row';\nexport * from './data-grid-parent-row/data-grid-parent-row';\nexport * from './data-grid-grouparea/data-grid-group';\nexport * from './data-grid-grouparea/data-grid-grouparea.component';\nexport * from './data-grid-header/data-grid-header.component';\nexport * from './data-grid-parent-row/data-grid-parent-row.component';\nexport * from './data-grid-row/data-grid-row.component';\nexport * from './data-grid.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3","i4","i1","i4.DejaGridGroupAreaComponent","i5.DejaGridHeaderComponent","i6.DejaGridParentRowComponent","i7.DejaGridRowComponent"],"mappings":"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"}