{"version":3,"file":"deja-js-component-core-item-list.mjs","sources":["../../../../projects/deja-js/component/core/item-list/item.component.ts","../../../../projects/deja-js/component/core/item-list/viewport.service.ts","../../../../projects/deja-js/component/core/item-list/item-base.ts","../../../../projects/deja-js/component/core/item-list/item-tree.ts","../../../../projects/deja-js/component/core/item-list/sorting/sorting.service.ts","../../../../projects/deja-js/component/core/item-list/grouping/grouping.service.ts","../../../../projects/deja-js/component/core/item-list/item-list.service.ts","../../../../projects/deja-js/component/core/item-list/item-list-base.ts","../../../../projects/deja-js/component/core/item-list/item-event.ts","../../../../projects/deja-js/component/core/item-list/items-event.ts","../../../../projects/deja-js/component/core/item-list/sorting/sort-indicator.component.ts","../../../../projects/deja-js/component/core/item-list/sorting/sort-infos.model.ts","../../../../projects/deja-js/component/core/item-list/sorting/index.ts","../../../../projects/deja-js/component/core/item-list/grouping/group-infos.ts","../../../../projects/deja-js/component/core/item-list/grouping/group-parent.ts","../../../../projects/deja-js/component/core/item-list/grouping/index.ts","../../../../projects/deja-js/component/core/item-list/index.ts","../../../../projects/deja-js/component/core/item-list/deja-js-component-core-item-list.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 { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n    selector: 'deja-item',\n    template: ''\n})\nexport class DejaItemComponent {\n    @Input() public value: string;\n    @Input() public text: string;\n\n    @Input()\n    public set selected(value: BooleanInput) {\n        this._selected = coerceBooleanProperty(value);\n    }\n\n    public get selected(): BooleanInput {\n        return this._selected;\n    }\n\n    private _selected: boolean;\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\n/* eslint-disable @typescript-eslint/naming-convention */\nimport { NumberInput } from '@angular/cdk/coercion';\nimport { Injectable } from '@angular/core';\nimport { Destroy } from '@deja-js/component/core';\nimport { BehaviorSubject, combineLatestWith, debounceTime, distinctUntilChanged, filter, map, Observable, of, ReplaySubject, switchMap, takeUntil, tap, timer } from 'rxjs';\n\n/** Service de gestion du viewport d'une liste.\n * Ce service permet la gestion du viewport verticalement ou horizontalement.\n */\n@Injectable()\nexport class ViewPortService extends Destroy {\n    public static itemDefaultSize = 40;\n\n    public viewPort$: Observable<IViewPort>;\n\n    public emptyViewPort = {\n        beforeSize: 0,\n        afterSize: 0,\n        viewPortSize: 0,\n        listSize: 0,\n        visibleItems: [],\n        startIndex: 0,\n        endIndex: 0,\n        scrollPos: 0,\n        items: []\n    } as IViewPort;\n\n    public mode$ = new BehaviorSubject<string>('fixed');\n    public items$ = new BehaviorSubject<IViewPortItem[]>([]);\n    public maxSize$ = new BehaviorSubject<NumberInput>(0);\n    public ensureItem$ = new BehaviorSubject<IViewPortItem | number>(null);\n    public scrollPosition$ = new BehaviorSubject<number>(0);\n    public element$ = new ReplaySubject<HTMLElement>(1);\n    public itemsSize$ = new BehaviorSubject<number>(0);\n    public direction$ = new BehaviorSubject<string>('vertical');\n    public ensureParams$: Observable<IEnsureParams>;\n    public viewPortResult$ = new BehaviorSubject<IViewPort>(this.emptyViewPort);\n\n    private refresh$ = new BehaviorSubject<IViewPortRefreshParams>(null);\n    private deleteSizeCache$ = new BehaviorSubject<boolean>(true);\n    private lastCalculatedSize: number;\n\n    private measureViewPort = {\n        beforeSize: 0,\n        afterSize: 200000,\n        viewPortSize: 0,\n        listSize: 0,\n        visibleItems: [],\n        startIndex: 0,\n        endIndex: 0,\n        scrollPos: undefined, // Do not change the scroll pos in case of refresh is called when the list is scrolling (I.E. dynamic content loading)\n        items: []\n    } as IViewPort;\n\n    private _mode = 'fixed';\n    private _itemsSize = ViewPortService.itemDefaultSize;\n    private _direction = 'vertical';\n    private _scrollPosition = 0;\n    private viewPort: IViewPort;\n    private ignoreScrollCount = 0;\n\n    public get mode(): string {\n        return this._mode;\n    }\n\n    public get itemsSize(): number {\n        return this._itemsSize;\n    }\n\n    public get direction(): string {\n        return this._direction;\n    }\n\n    public constructor() {\n        super();\n\n        this.viewPort$ = this.viewPortResult$;\n\n        // const consoleLog = (_message: string) => {\n        //     // console.log(_message);\n        // };\n\n        const innerSize = (): number => this._direction === 'horizontal' ? window.innerWidth : window.innerHeight;\n\n        const clientSize = (element: HTMLElement): number => Math.ceil(this._direction === 'horizontal' ? element.clientWidth : element.clientHeight);\n\n        const calcFixedSizeViewPort$ = (items: IViewPortItem[], containerSize: number, scrollPos: number, itemDefaultSize: number, ensureParams: IEnsureParams): Observable<IViewPort> => {\n            // consoleLog(`calcFixedSizeViewPort`);\n            const maxCount = Math.ceil(containerSize / itemDefaultSize) + 1;\n            const startRow = Math.floor(scrollPos / itemDefaultSize);\n\n            const rowsCount = Math.min(items.length - startRow, maxCount);\n            let startIndex: number;\n            let endIndex: number;\n            let newScrollPos: number;\n            if (!ensureParams || ensureParams.index === undefined || !ensureParams.atEnd) {\n                if (rowsCount < 0) {\n                    endIndex = items.length - 1;\n                    startIndex = endIndex + 1 - Math.min(items.length, maxCount);\n                } else if (ensureParams.index !== undefined) {\n                    startIndex = ensureParams.index;\n                    endIndex = startIndex + rowsCount - 1;\n                    newScrollPos = startIndex * itemDefaultSize;\n                } else {\n                    startIndex = startRow;\n                    endIndex = startIndex + rowsCount - 1;\n                }\n            } else {\n                // Ensure visible from the end\n                startIndex = Math.max(0, ensureParams.index + 1 - Math.min(items.length, maxCount));\n                endIndex = Math.max(ensureParams.index, rowsCount - 1);\n                newScrollPos = (endIndex + 1) * itemDefaultSize - containerSize;\n            }\n\n            const visibleItems = items.slice(startIndex, endIndex + 1);\n\n            return of({\n                beforeSize: startIndex * itemDefaultSize,\n                afterSize: (items.length - endIndex - 1) * itemDefaultSize,\n                listSize: containerSize,\n                viewPortSize: visibleItems.length * itemDefaultSize,\n                visibleItems: visibleItems,\n                startIndex: startIndex,\n                endIndex: endIndex,\n                scrollPos: newScrollPos,\n                items: items\n            } as IViewPort);\n        };\n\n        const calcVariableSizeViewPort$ = (items: IViewPortItem[], containerSize: number, scrollPos: number, itemDefaultSize: number, ensureParams: IEnsureParams): Observable<IViewPort> => {\n            // consoleLog(`calcVariableSizeViewPort`);\n            const visibleList = [] as IViewPortItem[];\n            let startIndex: number;\n            let endIndex: number;\n            let beforeSize = 0;\n            let viewPortSize = 0;\n            let afterSize = 0;\n            let newScrollPos: number;\n\n            if (!ensureParams || ensureParams.index === undefined || !ensureParams.atEnd) {\n                items.forEach((item: IViewPortItem, index: number) => {\n                    const itemSize = item.size || itemDefaultSize;\n\n                    if (ensureParams && ensureParams.index === index) {\n                        startIndex = index;\n                        newScrollPos = beforeSize;\n                    }\n\n                    if (startIndex === undefined) {\n                        if (beforeSize + itemSize >= scrollPos) {\n                            startIndex = index;\n                        } else {\n                            beforeSize += itemSize;\n                        }\n                    }\n\n                    if (startIndex !== undefined && endIndex === undefined) {\n                        viewPortSize += itemSize;\n                        visibleList.push(item);\n                    }\n\n                    if (endIndex === undefined) {\n                        if ((beforeSize + viewPortSize > (newScrollPos || scrollPos) + containerSize) || index === items.length - 1) {\n                            endIndex = index;\n                        }\n                    } else {\n                        afterSize += itemSize;\n                    }\n                });\n            } else {\n                // Ensure visible from the end\n                let index = items.length;\n                // eslint-disable-next-line no-loops/no-loops\n                while (--index >= 0) {\n                    const item = items[index];\n                    const itemSize = item.size || itemDefaultSize;\n\n                    if (ensureParams.index === index) {\n                        endIndex = index;\n                    }\n\n                    if (endIndex !== undefined) {\n                        if (startIndex === undefined) {\n                            viewPortSize += itemSize;\n                            visibleList.unshift(item);\n\n                            if (viewPortSize > containerSize || index === 0) {\n                                startIndex = index;\n                                newScrollPos = viewPortSize - containerSize;\n                            }\n                        } else {\n                            newScrollPos += itemSize;\n                            beforeSize += itemSize;\n                        }\n                    } else {\n                        afterSize += itemSize;\n                    }\n                }\n            }\n\n            if (ensureParams?.index !== undefined && viewPortSize < containerSize && visibleList.length < items.length) {\n                if (ensureParams.atEnd) {\n                    return calcVariableSizeViewPort$(items, containerSize, scrollPos, itemDefaultSize, {\n                        index: 0,\n                        atEnd: false\n                    } as IEnsureParams);\n                } else {\n                    return calcVariableSizeViewPort$(items, containerSize, scrollPos, itemDefaultSize, {\n                        index: items.length - 1,\n                        atEnd: true\n                    } as IEnsureParams);\n                }\n            }\n\n            return of({\n                beforeSize: beforeSize,\n                afterSize: afterSize,\n                listSize: containerSize,\n                viewPortSize: viewPortSize,\n                visibleItems: visibleList,\n                startIndex: startIndex || 0,\n                endIndex: endIndex,\n                scrollPos: newScrollPos,\n                items: items\n            } as IViewPort);\n        };\n\n        const calcAutoSizeViewPort$ = (items: IViewPortItem[], containerSize: number, scrollPos: number, element: HTMLElement, itemDefaultSize: number, ensureParams: IEnsureParams, isCalculation?: boolean): Observable<IViewPort> =>\n            // consoleLog(`calcAutoSizeViewPort`);\n            calcVariableSizeViewPort$(items, containerSize, scrollPos, itemDefaultSize, ensureParams).pipe(\n                switchMap((viewPort: IViewPort) => {\n                    const calculationRequired = !isCalculation && viewPort.visibleItems.find(item => !item.size);\n\n                    if (!calculationRequired) {\n                        return of(viewPort);\n                    } else {\n                        // Measure items size\n                        this.viewPortResult$.next(viewPort);\n                        return timer(1).pipe(\n                            tap(() => {\n                                const elements = element.getElementsByClassName('listitem');\n                                // eslint-disable-next-line @typescript-eslint/prefer-for-of, no-loops/no-loops\n                                for (let i = 0; i < elements.length; i++) {\n                                    const itemElement = elements[i] as HTMLElement;\n                                    const index = +itemElement.getAttribute('flat');\n                                    const item = viewPort.visibleItems[index - viewPort.startIndex];\n                                    if (item) {\n                                        item.size = clientSize(itemElement);\n                                    }\n                                }\n                                // Recalc Viewport size\n                                viewPort.viewPortSize = viewPort.visibleItems.reduce((size, item) => size += item.size || itemDefaultSize, 0);\n                            }),\n                            switchMap(() => calcVariableSizeViewPort$(items, containerSize, viewPort.scrollPos || scrollPos, itemDefaultSize, ensureParams)));\n                    }\n                }));\n        const calcDisabledViewPort$ = (items: IViewPortItem[], containerSize: number, scrollPos: number, element: HTMLElement, ensureParams: IEnsureParams, bindIfAny: boolean): Observable<IViewPort> => {\n            let viewPortSize = 0;\n            let startIndex: number;\n            let endIndex: number;\n            let newScrollPos: number;\n            const elements = element.getElementsByClassName('listitem');\n\n            let viewPort = {\n                beforeSize: 0,\n                afterSize: 0,\n                listSize: containerSize,\n                viewPortSize: 0,\n                visibleItems: [],\n                startIndex: 0,\n                endIndex: 0,\n                scrollPos: 0,\n                items: items\n            } as IViewPort;\n\n            if (elements.length !== items.length && (bindIfAny ?? true)) {\n                this.viewPortResult$.next(viewPort);\n                return timer(1).pipe(\n                    switchMap(() => calcDisabledViewPort$(items, containerSize, scrollPos, element, ensureParams, false)));\n            }\n\n            if (!ensureParams || ensureParams.index === undefined || !ensureParams.atEnd) {\n                // eslint-disable-next-line no-loops/no-loops\n                for (let i = 0; i < elements.length; i++) {\n                    const itemElement = elements[i] as HTMLElement;\n                    const itemSize = items[i].size = clientSize(itemElement);\n\n                    if (ensureParams && ensureParams.index === i) {\n                        startIndex = i;\n                        newScrollPos = viewPortSize;\n                    }\n\n                    viewPortSize += itemSize;\n\n                    if (startIndex === undefined && viewPortSize > scrollPos) {\n                        startIndex = i;\n                    }\n\n                    if (endIndex === undefined && viewPortSize > (newScrollPos || scrollPos) + containerSize) {\n                        endIndex = i;\n                    }\n                }\n            } else {\n                // Ensure visible from the end\n                newScrollPos = 0;\n                let listSize = 0;\n                let i = elements.length;\n                // eslint-disable-next-line no-loops/no-loops\n                while (--i >= 0) {\n                    const itemElement = elements[i] as HTMLElement;\n                    const itemSize = items[i].size = clientSize(itemElement);\n\n                    if (ensureParams.index === i) {\n                        endIndex = i;\n                    }\n\n                    if (endIndex !== undefined) {\n                        if (startIndex === undefined) {\n                            listSize += itemSize;\n                            if (listSize > containerSize) {\n                                startIndex = i;\n                                newScrollPos = listSize - containerSize;\n                            }\n                        } else {\n                            newScrollPos += itemSize;\n                        }\n                    }\n\n                    viewPortSize += itemSize;\n                }\n            }\n\n            startIndex = startIndex || 0;\n            endIndex = endIndex || 0;\n            // consoleLog(`viewPortSize ${viewPortSize}`);\n            viewPort = {\n                beforeSize: 0,\n                afterSize: 0,\n                listSize: containerSize,\n                viewPortSize: viewPortSize,\n                visibleItems: items.slice(startIndex, 1 + endIndex),\n                startIndex: startIndex,\n                endIndex: endIndex,\n                scrollPos: newScrollPos,\n                items: items\n            } as IViewPort;\n\n            return of(viewPort);\n        };\n\n        const calcViewPort$ = (items: IViewPortItem[], maxSize: number, scrollPos: number, element: HTMLElement, itemDefaultSize: number, ensureParams: IEnsureParams, fromMeasure?: boolean): Observable<IViewPort> => {\n            // consoleLog(`calcViewPort`);\n            if (!items?.length) {\n                return of(this.emptyViewPort);\n            }\n\n            let listSize = maxSize || clientSize(element);\n            if (listSize <= ViewPortService.itemDefaultSize) {\n                listSize = innerSize();\n            }\n\n            if (ensureParams.index !== undefined) {\n                this.ignoreScrollCount++;\n            } else {\n                this.ignoreScrollCount = 0;\n            }\n\n            let viewPort$: Observable<IViewPort>;\n            switch (this.mode) {\n                case 'disabled':\n                    viewPort$ = calcDisabledViewPort$(items, listSize, scrollPos, element, ensureParams, true);\n                    break;\n                case 'variable':\n                    viewPort$ = calcVariableSizeViewPort$(items, listSize, scrollPos, itemDefaultSize, ensureParams);\n                    break;\n                case 'auto':\n                    viewPort$ = calcAutoSizeViewPort$(items, listSize, scrollPos, element, itemDefaultSize, ensureParams);\n                    break;\n                case 'fixed':\n                    viewPort$ = calcFixedSizeViewPort$(items, listSize, scrollPos, itemDefaultSize, ensureParams);\n                    break;\n                default:\n                    throw new Error('ViewPortService, invalide mode. The value can be disabled, variable, auto and fixed.');\n            }\n\n            return viewPort$.pipe(\n                switchMap(viewPort => {\n                    if (!fromMeasure) {\n                        const endScrollPos = viewPort.beforeSize + viewPort.viewPortSize + viewPort.afterSize - viewPort.listSize;\n                        if (this.mode !== 'disabled' && listSize < 2 * ViewPortService.itemDefaultSize) {\n                            // Measure again container and recalc viewport\n                            this.viewPortResult$.next(this.measureViewPort);\n                            return timer(1).pipe(switchMap(() => calcViewPort$(items, maxSize, scrollPos, element, itemDefaultSize, ensureParams, true)));\n                        } else if (endScrollPos < 0 || (items.length && endScrollPos > 0 && (viewPort.scrollPos || scrollPos) > endScrollPos)) {\n                            // Scroll position is over the last item\n                            // Ensure last item visible and recalc viewport\n                            return calcViewPort$(items, maxSize, 0, element, itemDefaultSize, {\n                                index: items.length - 1,\n                                atEnd: true\n                            } as IEnsureParams, true);\n                        } else if (this.mode === 'auto' && viewPort.viewPortSize < listSize) {\n                            // Rendered viewport is to small, render again to complete\n                            return calcViewPort$(items, maxSize, 0, element, itemDefaultSize, {\n                                index: items.length - 1,\n                                atEnd: true\n                            } as IEnsureParams, true);\n                        }\n                    }\n\n                    // Return calculated viewport\n                    return of(viewPort);\n                }),\n                tap(() => {\n                    // consoleLog(`clear ensureParams ${ensureParams?.index}`);\n                    ensureParams.index = undefined;\n                })\n            );\n        };\n\n        const items$ = this.items$;\n        // .do(() => consoleLog('items'));\n\n        // Ensure item visible by index or instance\n        this.ensureParams$ = this.ensureItem$.pipe(\n            combineLatestWith(items$),\n            map(([ensureItem, items]) => {\n                this.ignoreScrollCount = 0;\n                const ensureParams = {} as IEnsureParams;\n                if (ensureItem !== undefined && ensureItem !== null && items?.length) {\n                    let ensureIndex = ensureItem as number;\n                    if (isNaN(ensureIndex)) {\n                        ensureIndex = items.findIndex(itm => ensureItem === itm);\n                    }\n\n                    if (ensureIndex >= 0) {\n                        if (this.viewPort && ensureIndex <= this.viewPort.startIndex) {\n                            ensureParams.index = ensureIndex;\n                            ensureParams.atEnd = false;\n                        } else if (!this.viewPort || ensureIndex >= this.viewPort.endIndex) {\n                            ensureParams.index = ensureIndex;\n                            ensureParams.atEnd = true;\n                        }\n                    }\n                }\n\n                return ensureParams;\n            }));\n        // .do((ensureParams) => consoleLog(`ensureParams index:${ensureParams && ensureParams.index} atEnd:${ensureParams && ensureParams.atEnd}`));\n\n        const maxSize$ = this.maxSize$.pipe(\n            distinctUntilChanged()\n        );\n        // .do((value) => consoleLog(`maxSize ${value}`));\n\n        const refresh$ = this.refresh$.pipe(\n            switchMap((params: IViewPortRefreshParams) => {\n                this.ignoreScrollCount = 0;\n                if (params) {\n                    if (params.clearMeasuredSize) {\n                        return this.items$.pipe(\n                            tap(items => {\n                                this.lastCalculatedSize = undefined;\n                                items.forEach(item => item.size = undefined);\n                            }),\n                            map(() => params));\n                    }\n\n                    if (params.items) {\n                        params.items.forEach(item => item.size = undefined);\n                    }\n                }\n                return of(params);\n            }));\n        // .do(() => consoleLog('refresh'));\n\n        const scrollPos$ = this.scrollPosition$.pipe(\n            map(scrollPos => this._scrollPosition = scrollPos || 0),\n            map(scrollPos => Math.max(scrollPos, 0)),\n            filter(() => {\n                if (this.ignoreScrollCount > 0) {\n                    this.ignoreScrollCount--;\n                    // consoleLog(`ignoreScrollCount ${this.ignoreScrollCount}`);\n                    return false;\n                } else {\n                    return true;\n                }\n            }),\n            distinctUntilChanged());\n        // .do((value) => consoleLog(`scrollPos ${value}`));\n\n        const mode$ = this.mode$.pipe(\n            map(mode => this._mode = mode),\n            distinctUntilChanged());\n        // .do((value) => consoleLog(`mode ${value}`));\n\n        const direction$ = this.direction$.pipe(\n            map(direction => this._direction = direction),\n            distinctUntilChanged());\n        // .do((value) => consoleLog(`direction ${value}`));\n\n        const itemsSize$ = this.itemsSize$.pipe(\n            distinctUntilChanged(),\n            tap(value => this._itemsSize = value));\n        // .do((value) => consoleLog(`itemsSize ${value}`));\n\n        const element$ = this.element$.pipe(\n            tap(element => {\n                if (!element) {\n                    this.viewPort = undefined;\n                    this.ignoreScrollCount = 0;\n                    this.lastCalculatedSize = undefined;\n                }\n            }));\n        // .do(() => consoleLog(`element`));\n\n        // Reset items size when direction change in auto mode\n        direction$.pipe(\n            combineLatestWith(items$, mode$, this.deleteSizeCache$),\n            filter(([_direction, items, mode]) => items?.length && mode === 'auto'),\n            switchMap(([_direction, items]) => items),\n            takeUntil(this.destroyed$)\n        ).subscribe(item => item.size = undefined);\n\n        // Calc view port observable\n        element$.pipe(\n            combineLatestWith(items$, refresh$, this.ensureParams$, direction$, mode$, itemsSize$, maxSize$),\n            debounceTime(1),\n            combineLatestWith(scrollPos$),\n            filter(([[element]]) => !!element),\n            switchMap(([[element, items, _refresh, ensureParams, _direction, _mode, itemDefaultSize, maxSize], _scrollPos]) => {\n                if (!itemDefaultSize) {\n                    itemDefaultSize = ViewPortService.itemDefaultSize;\n                }\n                const listSize = this.lastCalculatedSize || maxSize || clientSize(element);\n                const scrollPos = this._scrollPosition;\n                let maxSizeValue = maxSize === 'auto' ? 0 : +maxSize;\n                if (items?.length && (listSize === 'auto' || listSize < 2 * ViewPortService.itemDefaultSize)) {\n                    // Set the viewlist to the maximum height to measure the real max-height defined in the css\n                    // Use a blank div to do that\n                    // consoleLog(`viewPortResult for measure ${JSON.stringify(this.measureViewPort)}`);\n                    this.viewPortResult$.next(this.measureViewPort);\n                    // Wait next life cycle for the result\n                    return timer(1).pipe(\n                        map(() => {\n                            // Get mx size from container\n                            maxSizeValue = this.lastCalculatedSize = clientSize(element);\n                            // Ensure that max size is not more than the items size\n                            if (this.mode === 'fixed') {\n                                if (items.length * itemDefaultSize < maxSizeValue) {\n                                    maxSizeValue = items.length * itemDefaultSize;\n                                }\n                            } else if (this.mode === 'variable') {\n                                let maxItemsSize = 0;\n                                items.find(item => {\n                                    maxItemsSize += item.size || itemDefaultSize;\n                                    return maxItemsSize > maxSizeValue;\n                                });\n                                if (maxItemsSize < maxSizeValue) {\n                                    maxSizeValue = maxItemsSize;\n                                }\n                            }\n\n                            return { element, scrollPos, items, maxSizeValue, itemDefaultSize, ensureParams };\n                        }));\n                } else {\n                    maxSizeValue = maxSizeValue || this.lastCalculatedSize;\n                    return of({ element, scrollPos, items, maxSizeValue, itemDefaultSize, ensureParams });\n                }\n            }),\n            switchMap(({ element, scrollPos, items, maxSizeValue, itemDefaultSize, ensureParams }) =>\n                // consoleLog(`calcViewPort ${ensureParams && ensureParams.index}`);\n                calcViewPort$(items, maxSizeValue, scrollPos, element, itemDefaultSize, ensureParams)\n            ),\n            takeUntil(this.destroyed$)\n        ).subscribe(viewPort => {\n            // consoleLog(`viewPortResult final ${JSON.stringify(viewPort)}`);\n            this.viewPortResult$.next(viewPort);\n        }, (error => console.error(error)));\n\n        // Cache last calculated viewport\n        this.viewPortResult$.pipe(\n            takeUntil(this.destroyed$)\n        ).subscribe(viewPort => this.viewPort = viewPort);\n    }\n\n    public deleteSizeCache(): void {\n        this.deleteSizeCache$.next(true);\n    }\n\n    public clear(): void {\n        this.viewPortResult$.next(this.emptyViewPort);\n    }\n\n    public refresh(params?: IViewPortRefreshParams): void {\n        this.refresh$.next(params || null);\n    }\n}\n\nexport interface IEnsureParams {\n    index: number;\n    atEnd: boolean;\n}\n\nexport interface IViewPort {\n    beforeSize: number;\n    afterSize: number;\n    visibleItems: IViewPortItem[];\n    startIndex: number;\n    endIndex: number;\n    viewPortSize: number;\n    listSize: number;\n    scrollPos: number;\n    items: IViewPortItem[];\n}\n\nexport interface IViewPortItem {\n    size?: number;\n}\n\nexport interface IViewPortRefreshParams {\n    items: IViewPortItem[];\n    clearMeasuredSize: boolean;\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 { IViewPortItem } from './viewport.service';\n\nexport interface IItemBase<T> extends IViewPortItem {\n    id?: string;\n    selectable?: boolean;\n    selected?: boolean;\n    dragged?: boolean;\n    displayName?: (() => string) | string;\n    visible?: boolean;\n    odd?: boolean; // For style only\n    className?: string;\n    /** Immutable model */\n    model?: T;\n    toString?: () => string;\n    equals?: (item: IItemBase<T>) => boolean;\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 { IItemBase } from './item-base';\n\n/** Interface représentant un model de liste hierarchique. */\nexport interface IItemTree<T> extends IItemBase<T> {\n    /** Indique si l'élément peut être réduit. */\n    collapsible?: boolean;\n    /** Indique si l'élément est réduit. */\n    collapsed?: boolean;\n    /** Usage interne. */\n    expanding?: boolean;\n    /** Usage interne. */\n    collapsing?: boolean;\n    /** Retourne la profondeur de l'élément dans la hierarchie. */\n    depth?: number;\n    /** Usage interne. */\n    $items?: IItemTree<T>[];\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\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { Injectable } from '@angular/core';\nimport { sortBy } from 'lodash-es';\nimport { map, Observable, of, reduce, switchMap } from 'rxjs';\n\nimport { ISortInfos } from './sort-infos.model';\n\nexport type SortOrder = 'ascending' | 'descending';\n\n/** Classe de tri d'une liste plate ou hierarchique */\n@Injectable({\n    providedIn: 'root'\n})\nexport class SortingService {\n    public constructor() {\n        console.warn('@deja-js/component/core/SortingService is deprecated, and will be removed in a further version. Please use @deja-js/component/v2/tem-list/SortingService instead.');\n    }\n\n    /** Trie les éléments de la liste plate spécifiée en fonction du modèle de tri spécifié. Peut être surchargé pour implémenter un tri asynchrone\n     * @param list Liste à trier.\n     * @param sortInfos Modèle de tri à appliquer.\n     * @return Observable résolu par la fonction.\n     */\n    public sort$(list: any[], sortInfos: ISortInfos | ISortInfos[]): Observable<any[]> {\n        return of(this.sort(list, sortInfos));\n    }\n\n    /** Trie les éléments de la liste plate spécifiée en fonction du modèle de tri spécifié\n     * @param list Liste à trier.\n     * @param sortInfos Modèle de tri à appliquer.\n     * @return Liste triée.\n     */\n    public sort(list: any[], sortInfos: ISortInfos | ISortInfos[]): unknown[] {\n        if (list?.length) {\n            const sis = sortInfos instanceof Array ? sortInfos : [sortInfos];\n            let i = sis.length;\n            // eslint-disable-next-line no-loops/no-loops\n            while (--i >= 0) {\n                const si = sis[i];\n                list = sortBy(list, si.name);\n                if (si.order === 'descending') {\n                    list = list.reverse();\n                }\n            }\n        }\n        return list;\n    }\n\n    /** Trie les éléments de la liste hierarchique spécifiée en fonction du modèle de tri spécifié.  Peut être surchargé pour implémenter un tri asynchrone\n     * @param tree Liste à trier.\n     * @param sortInfos Modèle de tri à appliquer.\n     * @param childrenField Champ à utiliser pour la recherche dans les enfants d'un parent.\n     * @return Observable résolue par la fonction.\n     */\n    public sortTree$(tree: any[], sortInfos: ISortInfos | ISortInfos[], childrenField?: string): Observable<any[]> {\n        childrenField = childrenField || 'items';\n        return this.sort$(tree, sortInfos).pipe(\n            switchMap(child => child),\n            switchMap(child => {\n                if (!child || !child[childrenField]) {\n                    return of(child);\n                }\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                return this.sortTree$(child[childrenField], sortInfos, childrenField).pipe(\n                    map(sortedList => {\n                        child[childrenField] = sortedList;\n                        return child;\n                    }));\n            }),\n            reduce((acc: any[], cur: any) => [...acc, cur], []));\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 */\nimport { Injectable } from '@angular/core';\nimport { from, map, Observable, of, reduce, switchMap, tap } from 'rxjs';\n\nimport { IItemTree } from '../item-tree';\nimport { SortingService } from '../sorting/sorting.service';\nimport { IGroupInfo } from './group-infos';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n\n/** Service de regroupement d'un tableau de modèles */\n@Injectable({\n    providedIn: 'root'\n})\nexport class GroupingService {\n    /** Groupe les éléments de la liste hierarchique spécifiée à partir du niveau spécifié, et en fonction du modèle de groupe spécifié\n     * @param tree Liste à trier.\n     * @param groupInfos Modèle de groupe à appliquer.\n     * @param childrenField Champs à utiliser comme collection des enfants d'un parent.\n     * @param depth Niveau à partir duquel le modèle de regroupement doit être appliqué.\n     * @return Observable résolu par la fonction.\n     */\n    public group$(tree: any[], groupInfos: IGroupInfo[] | IGroupInfo, childrenField = 'items'): Observable<any[]> {\n        if (!tree || tree.length === 0 || !groupInfos) {\n            return of(tree);\n        }\n\n        if (groupInfos instanceof Array) {\n            // Create a observable stream with a sequence for each groupinfos.\n            let result$ = of(tree);\n            groupInfos.forEach(groupInfo => result$ = result$.pipe(switchMap(t => this.group$(t, groupInfo, childrenField))));\n            return result$;\n        } else {\n            // Group the tree with the current groupInfo\n            const groupInfo = groupInfos;\n            if (!tree[0][childrenField]) {\n                // No children, group the tree\n                return this.groupChildren$(tree, groupInfo, 0, childrenField);\n            }\n\n            const groupTree$: any = (t: any[], curDepth: number) => from(t).pipe(\n                switchMap(treeItem => {\n                    const children = treeItem[childrenField];\n                    if (children[0]?.[childrenField]) {\n                        return groupTree$(children, curDepth + 1).map(() => treeItem);\n                    } else {\n                        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                        return this.groupChildren$(children, groupInfo, curDepth, childrenField).pipe(map(groupedChildren => {\n                            treeItem[childrenField] = groupedChildren;\n                            return treeItem;\n                        }));\n                    }\n                }),\n                reduce((acc: any[], cur: any) => [...acc, cur], []));\n\n            // If the tree has chidren, group only the last level items\n            return groupTree$(tree, 1);\n        }\n    }\n\n    protected groupChildren$(list: any[], groupInfo: IGroupInfo, _depth: number, childrenField: string): Observable<any[]> {\n        return from(list).pipe(\n            reduce((groups: { [groupby: string]: IItemTree<unknown> }, item) => {\n                let groupedBy = typeof groupInfo.groupByField === 'function' ? groupInfo.groupByField(item) : item[groupInfo.groupByField];\n\n                if (typeof item[groupedBy] === 'function') {\n                    groupedBy = item[groupedBy]();\n                }\n\n                if (!groupedBy) {\n                    groupedBy = this.getTextValue(item);\n                }\n\n                let parent = groups[groupedBy];\n\n                if (!parent) {\n                    const groupLabel = (groupInfo.groupTextField && (typeof groupInfo.groupTextField === 'function' ? groupInfo.groupTextField(item) : item[groupInfo.groupTextField])) || groupedBy;\n                    parent = groups[groupedBy] = {\n                        depth: _depth,\n                        toString: () => groupLabel,\n                        $text: groupLabel\n                    } as IItemTree<unknown>;\n                    (<any>parent)[childrenField] = [];\n                }\n\n                (<any>parent)[childrenField].push(item);\n                return groups;\n            }, {}),\n            map((grps: { [groupby: string]: any }) => Object.keys(grps).map(key => grps[key])),\n            tap(groupedChildren => groupedChildren.forEach(parent => parent.sortField = (groupInfo.sortInfos?.name) || 'toString')),\n            switchMap(groupedChildren => {\n                if (groupInfo.sortInfos) {\n                    const sortingService = new SortingService();\n                    return sortingService.sort$(groupedChildren, groupInfo.sortInfos);\n                } else {\n                    return of(groupedChildren);\n                }\n            }));\n    }\n\n    private getTextValue(value: any): string {\n        if (!value) {\n            return '';\n        } else if (value.displayName) {\n            return typeof value.displayName === 'string' ? value.displayName : value.displayName();\n        } else if (typeof value.toString === 'function') {\n            return value.toString();\n        } else {\n            return '';\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\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DiacriticService } from '@deja-js/component/core';\nimport { BehaviorSubject, concat, filter, from, iif, map, Observable, of, reduce, Subscriber, switchMap, tap } from 'rxjs';\n\nimport { IGroupInfo } from './grouping/group-infos';\nimport { GroupingService } from './grouping/grouping.service';\nimport { IItemBase } from './item-base';\nimport { IItemTree } from './item-tree';\nimport { ISortInfos } from './sorting/sort-infos.model';\nimport { SortingService } from './sorting/sorting.service';\n\n\n/** Service de gestion des listes (deja-treelist, deja-select et deja-grid).\n * Ce service permet la gestion du viewport et la gestion des caches des listes.\n * Il peut-être surchargé pour faire du lazy loading ou du paging.\n */\nexport class ItemListService<T> {\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    public static defaultChildrenField = 'items';\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    public static defaultTextField = 'displayName';\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    public static defaultValueField = 'value';\n\n    // Waiter\n    private _waiter$ = new BehaviorSubject<boolean>(false);\n\n    // Working item array (can be recursive)\n    private _items: IItemBase<T>[];\n\n    // Cache for lists (flat lists only, not recursive)\n    private _cache = {} as {\n        rowsCount?: number;\n        depthMax?: number;\n        groupedList?: IItemTree<T>[];\n        flatList?: IItemBase<T>[];\n        visibleList?: IItemBase<T>[];\n    };\n\n    // Selected items cache\n    private selectedList: IItemBase<T>[];\n    private _hideSelected: boolean;\n\n    // Cache for last query. Flat list will be regenerated only if the query change\n    private _lastQuery: RegExp | string;\n    private internalQuery: RegExp;\n\n    // Sorting\n    private _sortingService: SortingService;\n\n    // grouping\n    private _groupInfos: IGroupInfo[];\n    private _groupingService: GroupingService;\n\n    // Cache for drag and drop (flat list modified by the current drag).\n    private _ddList: IItemBase<T>[];\n    private _ddCurrentIndex: number;\n    private _ddChildCount: number;\n\n    private _childrenField = ItemListService.defaultChildrenField;\n\n    // Cnacelable pre events\n    private loadingItems$: (query: string | RegExp, selectedItems: IItemBase<T>[]) => Observable<IItemBase<T>[]>;\n    private selectingItem$: (item: IItemBase<T>) => Promise<IItemBase<T>> | Observable<IItemBase<T>>;\n    private unselectingItem$: (item: IItemBase<T>) => Promise<IItemBase<T>> | Observable<IItemBase<T>>;\n    private expandingItem$: (item: IItemTree<T>) => Promise<IItemTree<T>> | Observable<IItemTree<T>>;\n    private collapsingItem$: (item: IItemTree<T>) => Promise<IItemTree<T>> | Observable<IItemTree<T>>;\n\n    // champs à utiliser comme valeur de comparaison\n    private _valueField: string;\n\n    /** Evalue la valeur à comparer pour l'élément spécifié.\n     * @param value  Model à évaluer.\n     * @param valueField (optional) Champs à traiter comme valeur.\n     * @return Valeur à comparer pour le modèle spécifié.\n     */\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    public static getItemValue(item: any, valueField?: string): unknown {\n        // eslint-disable-next-line eqeqeq\n        const isDefined = (value: any): boolean => value != undefined;\n\n        if (valueField) {\n            const fields = valueField.split('.');\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n            let model = item.model?.[fields[0]] !== undefined ? item.model : item;\n            fields.forEach(fieldName => {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                model = model?.[fieldName];\n            });\n            if (isDefined(model)) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n                return typeof model === 'function' ? model() : model;\n            }\n        }\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        return isDefined(item.value) ? item.value : (isDefined(item.model) && item.model) || item;\n    }\n\n    /** Evalue le texte à afficher pour l'élément spécifié.\n     * @param value  Model à évaluer.\n     * @param textField (optional) Champs à traiter comme source du texte.\n     * @return Texte à afficher pour le modèle spécifié.\n     */\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    public static getItemText(value: any, textField?: string): string {\n        if (value) {\n            if (textField) {\n                const fields = textField.split('.');\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                let model = value.model?.[fields[0]] !== undefined ? value.model : value;\n                fields.forEach(fieldName => {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                    model = model?.[fieldName];\n                });\n                if (model !== undefined) {\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n                    return typeof model === 'function' ? model() : model;\n                }\n                return '';\n            }\n\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (value.displayName) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n                return typeof value.displayName === 'string' ? value.displayName : value.displayName();\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            } else if (typeof value.toString === 'function') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n                return value.toString();\n            }\n        }\n        return '';\n    }\n\n    public get lastQuery(): RegExp | string {\n        return this._lastQuery;\n    }\n\n    /**\n     * Set a observable called before the list will be displayed\n     */\n    public setLoadingItems(fn: (query: string | RegExp, selectedItems: IItemBase<T>[]) => Observable<IItemBase<T>[]>): void {\n        this.loadingItems$ = fn;\n    }\n\n    /**\n     * Set a promise or an observable called before an item selection\n     */\n    public setSelectingItem(fn: (item: IItemBase<T>) => Promise<IItemBase<T>> | Observable<IItemBase<T>>): void {\n        this.selectingItem$ = fn;\n    }\n\n    /**\n     * Set a promise or an observable called before an item deselection\n     */\n    public setUnselectingItem(fn: (item: IItemBase<T>) => Promise<IItemBase<T>> | Observable<IItemBase<T>>): void {\n        this.unselectingItem$ = fn;\n    }\n\n    /**\n     * Set a promise or an observable called before an item expand\n     */\n    public setExpandingItem(fn: (item: IItemTree<T>) => Promise<IItemTree<T>> | Observable<IItemTree<T>>): void {\n        this.expandingItem$ = fn;\n    }\n\n    /**\n     * Set a promise or an observable called before an item collapse\n     */\n    public setCollapsingItem(fn: (item: IItemTree<T>) => Promise<IItemTree<T>> | Observable<IItemTree<T>>): void {\n        this.collapsingItem$ = fn;\n    }\n\n    /**\n     * Permet de controler l'affichage du waiter\n     * @return un sujet contenant la valeur du waiter\n     */\n    public get waiter$(): BehaviorSubject<boolean> {\n        return this._waiter$;\n    }\n\n    /** Définit le champs utilisé comme collection pour les enfants d'un parent.\n     * @param value Nom du champ à utiliser comme collection d'enfants\n     */\n    public set childrenField(value: string) {\n        this._childrenField = value || ItemListService.defaultChildrenField;\n        this.invalidateCache();\n    }\n\n    /** Renvoie le champs utilisé comme collection pour les enfants d'un parent\n     * @return value Nom du champ à utilisé comme collection d'enfants.\n     */\n    public get childrenField(): string {\n        return this._childrenField;\n    }\n\n    /** Définit une valeur indiquant si les éléments selectionés doivent être masqué. Ce flag est principalement utilisé dans le cas d'un multi-select\n     * @param value True si les éléments selectionés doivent être masqués\n     */\n    public set hideSelected(value: boolean) {\n        this._hideSelected = value;\n    }\n\n    /** Renvoie une valeur indiquant si les éléments selectionés doivent être masqué.\n     * @return value True si les éléments selectionés sont masqués\n     */\n    public get hideSelected(): boolean {\n        return this._hideSelected;\n    }\n\n    /** Définit le champs à utiliser comme valeur de comparaison */\n    public set valueField(valueField: string) {\n        this._valueField = valueField;\n    }\n\n    /** Renvoie le champs à utiliser comme valeur de comparaison */\n    public get valueField(): string {\n        return this._valueField;\n    }\n\n    public get hasCache(): boolean {\n        return this._cache && !!this._cache.visibleList;\n    }\n\n    private set items(items: IItemBase<T>[]) {\n        this._items = items;\n        this.invalidateCache();\n    }\n\n    private get items(): IItemBase<T>[] {\n        return this._items;\n    }\n\n    /** Définit le modèle utilisé par la liste. Ce model peut ètre hierarchique sans limitation de la profondeur ou une chargé en asynchrone par une promise ou un observable.\n     * @param items Provider de la liste des éléments de la liste.\n     */\n    // eslint-disable-next-line rxjs/finnish\n    public setItems$(items: IItemBase<T>[] | Promise<IItemBase<T>[]> | Observable<IItemBase<T>[]>): Observable<unknown> {\n        if (!items) {\n            this.items = undefined;\n            return of(null);\n        } else if (items instanceof Array) {\n            this.ensureChildrenProperties(items);\n            this.ensureSelectedItems(items);\n            this.items = items;\n            this._waiter$.next(false);\n            return of(items);\n        } else {\n            this.items = undefined;\n            this._waiter$.next(true);\n            let observable$ = items as Observable<IItemBase<T>[]>;\n            if (observable$.subscribe === undefined) {\n                const promise = items as Promise<IItemBase<T>[]>;\n                observable$ = from(promise);\n            }\n\n            return observable$.pipe(\n                map(its => {\n                    if (its) {\n                        this.ensureChildrenProperties(its);\n                        // TODO La déselection ne fonctionne pas pendant le chargement\n                        this.ensureSelectedItems(its);\n                        this.items = [...this.items || [], ...its];\n                        this._waiter$.next(false);\n                        return its;\n                    } else {\n                        this.items = [];\n                        this._waiter$.next(false);\n                        return [];\n                    }\n                })\n            );\n        }\n    }\n\n    // eslint-disable-next-line rxjs/finnish\n    public setModels$(items: any[] | Promise<any[]> | Observable<any[]>): Observable<unknown> {\n        return this.setItems$(items);\n    }\n\n    /** Renvoie le modèle de grouping ajouté à la liste de base par le service. Ce modèle ne modifie pas la donée, mais est jsute ajouté à l'affichage\n     * @return value Modèle de grouping d'affichage de la liste.\n     */\n    public get groupInfos(): IGroupInfo[] {\n        return this._groupInfos;\n    }\n\n    // Ne pas utiliser, cette fonction retourne la liste des éléments pour l'implémentation de ngModel.\n    public getItems(): IItemBase<T>[] {\n        return this.items;\n    }\n\n    /** Retourne l'élément corresondant à l'index spéficié dans la liste des éléments visibles.\n     * @param index Index de l'élément à chercher sur la liste des éléments visibles.\n     * @return Element correspondant à l'index recherché.\n     */\n    public getItemFromIndex(index: number): IItemBase<T> {\n        return this._cache.visibleList ? this._cache.visibleList[index] : null;\n    }\n\n    /** Retourne l'index correspondant à l'élément spéficié dans la liste des éléments visibles\n     * @param item Element à chercher sur la liste des éléments visibles.\n     * @return Index correspondant à l'élément recherché.\n     */\n    public getItemIndex(item: IItemBase<T>): number {\n        return this._cache.visibleList ? this._cache.visibleList.findIndex(itm => this.compareItems(item, itm)) : -1;\n    }\n\n    /** Renvoie le service utilisé pour le tri de la liste\n     * @return Service utilisé pour le tri.\n     */\n    public getSortingService(): SortingService {\n        if (!this._sortingService) {\n            this._sortingService = new SortingService();\n        }\n        return this._sortingService;\n    }\n\n    /** Définit le service utilisé pour le tri de la liste\n     * @param value  Service à utiliser pour le tri.\n     */\n    public setSortingService(value: SortingService): void {\n        this._sortingService = value;\n    }\n\n    /** Renvoie le service utilisé pour le regroupement de la liste\n     * @return Service utilisé pour le regroupement.\n     */\n    public getGroupingService(): GroupingService {\n        if (!this._groupingService) {\n            this._groupingService = new GroupingService();\n        }\n        return this._groupingService;\n    }\n\n    /** Définit le service utilisé pour le regroupement de la liste\n     * @param value Service à utiliser pour le regroupement.\n     */\n    public setGroupingService(value: GroupingService): void {\n        this._groupingService = value;\n    }\n\n    /** Evalue le texte à afficher pour l'élément spécifié.\n     * @param value  Model à évaluer.\n     * @param textField (optional) Champs à traiter comme source du texte.\n     * @return Texte à afficher pour le modèle spécifié.\n     */\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    public getTextValue(value: any, textField?: string): string {\n        return ItemListService.getItemText(value, textField);\n    }\n\n    /** Evalue la valeur à comparer pour l'élément spécifié.\n     * @param value  Model à évaluer.\n     * @param valueField (optional) Champs à traiter comme valeur.\n     * @return Valeur à comparer pour le modèle spécifié.\n     */\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    public getValue(item: any, valueField?: string): unknown {\n        return ItemListService.getItemValue(item, valueField);\n    }\n\n    /** Usage interne. Termine le drag and drop en cours. */\n    public drop$(): Observable<boolean> {\n        return new Observable<boolean>((subscriber: Subscriber<boolean>) => {\n            if (!this._ddList || !this.items) {\n                subscriber.next(false);\n                return undefined;\n            }\n\n            const listIndex = this._ddCurrentIndex;\n            const item = this._ddList[listIndex] as IItemTree<T>;\n            if (!item) {\n                throw new Error('invalid drag infos stored in cache.');\n            }\n\n            // La drag and drop liste est incomplète, en cas de filtrage, retrouver l'élément juste en dessus dans la liste complète\n            const targetItem = this._ddList[listIndex - 1];\n            let targetParent: IItemTree<T>;\n\n            // Find target in the flat list to calculate the correct index\n            let flatListIndex = this._cache.flatList.findIndex(itm => itm === targetItem);\n            let targetIndex = 0;\n            // eslint-disable-next-line no-loops/no-loops\n            while (flatListIndex >= 0) {\n                const parentItem = this._cache.flatList[flatListIndex] as IItemTree<T>;\n                if (parentItem.depth === undefined) {\n                    // Flat list\n                    targetIndex = flatListIndex;\n                    break;\n                } else if (parentItem.depth === item.depth - 1) {\n                    targetParent = parentItem;\n                    break;\n                } else if (parentItem.depth === item.depth) {\n                    ++targetIndex;\n                }\n                --flatListIndex;\n            }\n\n            const findItem = (itemToFind: IItemTree<T>, treeList: IItemTree<T>[]): IFindItemsResult<T> => {\n                // eslint-disable-next-line no-loops/no-loops\n                for (let i = 0; i < treeList.length; i++) {\n                    const itm = treeList[i];\n                    if (itm === itemToFind) {\n                        return {\n                            index: i,\n                            list: treeList\n                        };\n                    } else if (itm.$items !== undefined) {\n                        const result = findItem(itemToFind, itm.$items);\n                        if (result) {\n                            return result;\n                        }\n                    }\n                }\n\n                return undefined;\n            };\n\n            const originResult = findItem(item, this.items);\n\n            // Remove item from the origin\n            originResult.list.splice(originResult.index, 1);\n\n            // Add in the new location\n            const targetList = targetParent ? targetParent.$items : this.items;\n\n            if (targetIndex > originResult.index && originResult.list === targetList) {\n                --targetIndex;\n            }\n\n            targetList.splice(targetIndex, 0, item);\n\n            // Invalidate view cache\n            this.invalidateCache();\n            subscriber.next(true);\n            return undefined;\n        });\n    }\n\n    /** Usage interne. Calcul l'élément cible d'un drag and drop en fonction de l'index spécifié. */\n    public calcDragTargetIndex$(index: number, targetIndex: number): Observable<number> {\n        return new Observable<number>((subscriber: Subscriber<number>) => {\n            const currentList = this._ddList || this._cache.visibleList;\n\n            if (!currentList) {\n                throw new Error('Empty cache on calcDragTargetIndex');\n            }\n\n            const startIndex = this._ddCurrentIndex !== undefined ? this._ddCurrentIndex : index;\n            if (startIndex >= currentList.length) {\n                subscriber.next(currentList.length - 1);\n                return;\n            }\n\n            const item = currentList[startIndex] as IItemTree<T>;\n            const dragDropIndex = startIndex;\n\n            if (item.depth !== undefined && targetIndex !== startIndex) {\n                if (targetIndex < startIndex) {\n                    // Remonte jusqu'au premier élément avec une profondeur plus grande\n                    let beforeIndex = 0;\n                    // eslint-disable-next-line no-loops/no-loops\n                    for (let b = startIndex - 1; b >= 0; b--) {\n                        const targetItem = currentList[b] as IItemTree<T>;\n                        if (targetItem.depth <= item.depth) {\n                            beforeIndex = b;\n                            break;\n                        }\n                    }\n                    if (targetIndex <= beforeIndex) {\n                        // Descend jusqu'au premier élément avec la même profondeur\n                        // eslint-disable-next-line no-loops/no-loops\n                        for (let a = targetIndex; a <= beforeIndex; a++) {\n                            const targetItem = currentList[a] as IItemTree<T>;\n                            if (targetItem.depth === item.depth) {\n                                subscriber.next(a);\n                                return;\n                            } else if (targetItem.depth === item.depth - 1) {\n                                subscriber.next(a + 1);\n                                return;\n                            }\n                        }\n                    }\n                }\n\n                if (targetIndex > startIndex) {\n                    // Descend jusqu'au premier élément avec une profondeur plus grande ou égale\n                    let afterIndex = currentList.length - 1;\n                    // eslint-disable-next-line no-loops/no-loops\n                    for (let a = startIndex + 1; a < currentList.length; a++) {\n                        const targetItem = currentList[a] as IItemTree<T>;\n                        if (targetItem.depth <= item.depth) {\n                            afterIndex = a;\n                            break;\n                        }\n                    }\n                    if (targetIndex >= afterIndex) {\n                        // Descend jusqu'au premier élément avec la même profondeur\n                        // eslint-disable-next-line no-loops/no-loops\n                        for (let a = targetIndex + 1; a < currentList.length; a++) {\n                            const itm = currentList[a] as IItemTree<T>;\n                            if (itm.depth === item.depth) {\n                                subscriber.next(a);\n                                return;\n                            } else if (itm.depth === item.depth - 1) {\n                                subscriber.next(a - 1);\n                                return;\n                            }\n                        }\n                        // Not found\n                        const targetItem = currentList[afterIndex] as IItemTree<T>;\n                        if (targetItem.depth === item.depth) {\n                            subscriber.next(afterIndex);\n                            return;\n                        }\n                    }\n                }\n            }\n\n            subscriber.next(dragDropIndex);\n        });\n    }\n\n    /** Change l'état d'expansion de tous les éléments.\n     * @param collapsed True si les éléments doivent être réduits.\n     * @return Observable résolu par la fonction.\n     */\n    public toggleAll$(collapsed: boolean): Observable<IItemTree<T>[]> {\n        return of(this._cache.flatList).pipe(\n            map((items: IItemTree<T>[]) => items.filter(item => item.$items && (item.collapsible ?? true))),\n            tap(() => delete this._cache.visibleList), // Invalidate view cache\n            switchMap(items => collapsed ? this.collapseItems$(items) : this.expandItems$(items)));\n    }\n\n    /** Change l'état d'expansion de l'élément spécifié par son index sur la liste des éléments visibles.\n     * @param index Index sur la liste des éléments visibles de l'élément à changer.\n     * @param collapse Etat de l'élément. True pour réduire l'élément.\n     * @return Observable résolu par la fonction.\n     */\n    public toggleCollapse$(index: number, collapse?: boolean): Observable<IItemTree<T>> {\n        const visibleList = this._cache.visibleList;\n        if (!visibleList || !visibleList.length) {\n            throw new Error('Empty cache on toggleCollapse');\n        }\n\n        const item = visibleList[index] as IItemTree<T>;\n        if (!item || !(item.collapsible ?? true)) {\n            return of([]);\n        }\n\n        const collapsed = collapse !== undefined ? collapse : !item.collapsed;\n        return collapsed ? this.collapseItem$(item) : this.expandItem$(item);\n    }\n\n    /** Etends les éléments spécifiés.\n     * @param items Liste des éléments à étendre.\n     * @return Observable résolu par la fonction.\n     */\n    public expandItems$(items: IItemBase<T>[]): Observable<IItemBase<T>[]> {\n        return from(items || []).pipe(\n            switchMap(item => this.expandItem$(item)),\n            reduce((acc, cur) => [...acc, cur], [] as IItemBase<T>[]));\n    }\n\n    /** Reduits les éléments spécifiés.\n     * @param items Liste des éléments à réduire.\n     * @return Observable résolu par la fonction.\n     */\n    public collapseItems$(items: IItemBase<T>[]): Observable<IItemBase<T>[]> {\n        return from(items || []).pipe(\n            switchMap(item => this.collapseItem$(item)),\n            reduce((acc, cur) => [...acc, cur], [] as IItemBase<T>[]));\n    }\n\n    /** Etends l'élément spécifié.\n     * @param items Eléments à étendre.\n     * @return Observable résolu par la fonction.\n     */\n    public expandItem$(item: IItemTree<T>): Observable<IItemTree<T>> {\n        return of(item).pipe(\n            filter(itm => !!itm),\n            switchMap(itm => this.expandingItem$ ? this.expandingItem$(itm) : of(itm)),\n            filter(itm => !!itm),\n            tap(itm => {\n                itm.collapsed = false;\n                // Invalidate view cache\n                delete this._cache.visibleList;\n            }));\n    }\n\n    /** Réduit l'élément spécifié.\n     * @param items Eléments à réduire.\n     * @return Observable résolu par la fonction.\n     */\n    public collapseItem$(item: IItemTree<T>): Observable<IItemTree<T>> {\n        return of(item).pipe(\n            filter(itm => !!itm),\n            switchMap(itm => this.collapsingItem$ ? this.collapsingItem$(itm) : of(itm)),\n            filter(itm => !!itm),\n            tap(itm => {\n                itm.collapsed = true;\n                // Invalidate view cache\n                delete this._cache.visibleList;\n            }));\n    }\n\n    /** Retourne la liste des éléments sélectionés.\n     * @return Liste des éléments selectionés.\n     */\n    public getSelectedItems(): IItemBase<T>[] {\n        return this.selectedList || [];\n    }\n\n    /** Définit la liste des éléments sélectionés.\n     * @param items Liste des éléments a selectioner.\n     */\n    public setSelectedItems(items: IItemBase<T>[]): void {\n        if (this.selectedList) {\n            this.selectedList.forEach(item => {\n                item.selected = false;\n            });\n        }\n        this.selectedList = items;\n        if (this.hideSelected) {\n            delete this._cache.visibleList;\n        }\n\n        this.ensureSelectedItems(this.items);\n    }\n\n    /** Déselectionne tous les éléments sélectionés.\n     * @return Observable résolu par la fonction.\n     */\n    public unselectAll$(): Observable<IItemBase<T>[]> {\n        if (this.hideSelected) {\n            delete this._cache.visibleList;\n        }\n\n        const selectedList = this.selectedList;\n        this.selectedList = [];\n\n        return this.unSelectItems$(selectedList);\n    }\n\n    /** Sélectionne une plage d'éléments en fonction de l'index de début et l'index de fin sur la liste des éléments visibles.\n     * @param indexFrom index sur la liste des éléments visibles du premier élément à sélectioner.\n     * @param indexTo index sur la liste des éléments visibles du dernier élément à sélectioner.\n     * @return Observable résolu par la fonction.\n     */\n    public selectRange$(indexFrom: number, indexTo?: number): Observable<number> {\n        if (indexTo === undefined) {\n            indexTo = indexFrom;\n        }\n\n        // Backup current visible list in case of unselectAll clear the cache\n        const visibleList = this._cache.visibleList;\n        if (!visibleList || !visibleList.length) {\n            throw new Error('Empty cache on selection');\n        }\n\n        return this.unselectAll$().pipe(\n            map(() => visibleList.slice(Math.min(indexFrom, indexTo), 1 + Math.max(indexFrom, indexTo))),\n            map(items => items.filter(itm => itm.selectable ?? true)),\n            tap(() => {\n                if (this.hideSelected) {\n                    delete this._cache.visibleList;\n                }\n            }),\n            switchMap(items => this.selectItems$(items).pipe(map(selected => selected.length))));\n    }\n\n    /** Change l'état de selection de l'élément spécifié.\n     * @param items Liste des éléments à modifier.\n     * @param selected True si les éléments divent être sélectionés, False si ils doivent être déselectionés.\n     * @return Observable résolu par la fonction.\n     */\n    public toggleSelect$(items: IItemBase<T>[], selected: boolean): Observable<IItemBase<T>[]> {\n        items = items || [];\n        return iif(() => selected, this.selectItems$(items), this.unSelectItems$(items)).pipe(\n            map(() => {\n                if (this.hideSelected) {\n                    delete this._cache.visibleList;\n                }\n                return this.selectedList;\n            }));\n    }\n\n    /** Sélectionne les éléments spécifiés\n     * @param items Liste des éléments à sélectioner.\n     * @return Observable résolu par la fonction.\n     */\n    public selectItems$(items: IItemBase<T>[]): Observable<IItemBase<T>[]> {\n        return from(items || []).pipe(\n            switchMap(item => this.selectItem$(item)),\n            reduce((acc: IItemBase<T>[], cur: IItemBase<T>) => [...acc, cur], []));\n    }\n\n    /** Déselectionne les éléments spécifiés\n     * @param items Liste des éléments à déselectioner.\n     * @return Observable résolu par la fonction.\n     */\n    public unSelectItems$(items: IItemBase<T>[]): Observable<IItemBase<T>[]> {\n        return from(items || []).pipe(\n            filter(item => item.selected),\n            switchMap(item => this.unSelectItem$(item)),\n            reduce((acc: IItemBase<T>[], cur: IItemBase<T>) => [...acc, cur], []));\n    }\n\n    /** Sélectionne l'élément spécifié\n     * @param item Elément à sélectioner.\n     * @return Observable résolu par la fonction.\n     */\n    public selectItem$(item: IItemBase<T>): Observable<IItemBase<T>> {\n        return of(item).pipe(\n            filter(itm => !!itm),\n            switchMap(itm => this.selectingItem$ ? this.selectingItem$(itm) : of(itm)),\n            filter(itm => !!itm),\n            tap(itm => {\n                if (!this.selectedList) {\n                    this.selectedList = [];\n                }\n\n                itm.selected = true;\n                this.selectedList.push(itm);\n            }));\n    }\n\n    /** Déselectionne l'élément spécifié\n     * @param item Elément à déselectioner.\n     * @return Observable résolu par la fonction.\n     */\n    public unSelectItem$(item: IItemBase<T>): Observable<IItemBase<T>> {\n        return of(item).pipe(\n            filter(itm => !!itm),\n            switchMap(itm => this.unselectingItem$ ? this.unselectingItem$(itm) : of(itm)),\n            filter(itm => !!itm),\n            tap(itm => {\n                itm.selected = false;\n                if (this.selectedList?.length) {\n                    const index = this.selectedList.findIndex(i => this.compareItems(i, itm));\n                    if (index >= 0) {\n                        this.selectedList.splice(index, 1);\n                    }\n                }\n            }));\n    }\n\n    /** Trouve l'élément suivant répondant à la fonction de comparaison spécifiée.\n     * @param compare Function de comparaison pour la recherche de l'élément.\n     * @param startIndex Index de départ sur la liste des éléments visibles.\n     * @return Observable résolu par la fonction.\n     */\n    public findNextMatch$(compare?: (item: IItemBase<T>, index: number) => boolean, startIndex?: number): Observable<IFindItemResult<T>> {\n        let result = { index: -1 } as IFindItemResult<T>;\n\n        const list = this._cache.visibleList;\n        if (!list || !list.length) {\n            throw new Error('Empty cache on findNextMatch');\n        }\n\n        if (list.length) {\n            if (startIndex < 0 || startIndex >= list.length) {\n                startIndex = -1;\n            }\n            let idx = startIndex + 1;\n            // eslint-disable-next-line no-loops/no-loops\n            while (idx !== startIndex) {\n                const itm = list[idx];\n                if (compare(itm, idx)) {\n                    result = {\n                        index: idx,\n                        item: itm\n                    } as IFindItemResult<T>;\n                    break;\n                }\n                idx++;\n                if (idx >= list.length) {\n                    if (startIndex === -1) {\n                        break;\n                    }\n                    idx = 0;\n                }\n            }\n        }\n        return of(result);\n    }\n\n    /** Trie les éléments en fonction du modèle de tri spécifié\n     * @param sortInfos Modèle de tri à appliquer.\n     * @return Observable résolu par la fonction.\n     */\n    public sort$(sortInfos: ISortInfos): Observable<IItemTree<T>[]> {\n        if (!this.items) {\n            throw new Error('No Items');\n        }\n\n        const sortTree$ = this.getSortingService()\n            .sortTree$(this._cache.groupedList, sortInfos, '$items').pipe(\n                tap((sortedList: IItemTree<T>[]) => {\n                    this._cache.groupedList = sortedList;\n                    this.invalidateViewCache();\n                }));\n\n        if (!this._cache.groupedList || this._cache.groupedList.length === 0) {\n            return this.getGroupedList$(this.items).pipe(\n                tap(groupedList => this._cache.groupedList = groupedList),\n                switchMap(() => sortTree$));\n        } else {\n            return sortTree$;\n        }\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$(groupInfos: IGroupInfo[]): Observable<IGroupInfo[]> {\n        this._groupInfos = groupInfos;\n        this.invalidateCache();\n        this.ensureChildrenProperties(this.items);\n        return of(groupInfos);\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<IGroupInfo> {\n        const groupIndex = this._groupInfos ? this._groupInfos.findIndex(gi => gi.groupByField === groupInfo.groupByField) : -1;\n        if (groupIndex >= 0) {\n            this._groupInfos.splice(groupIndex, 1);\n        }\n\n        this.invalidateCache();\n        this.ensureChildrenProperties(this.items);\n        return of(groupInfo);\n    }\n\n    /** Retrouve les informations du parent de l'élément spécifié\n     * @param item Element enfant du parent à retrouver.\n     * @return Observable résolu par la fonction, qui retourne les informations sur le parent de l'élément spécifié\n     */\n    public getParentListInfos$(item: IItemTree<T>, multiSelect: boolean): Observable<IParentListInfoResult<T>> {\n        const search$ = (flatList: IItemBase<T>[]): Observable<IParentListInfoResult<T>> => {\n            let flatIndex = flatList.findIndex(itm => itm === item);\n            if (flatIndex < 0) {\n                throw new Error('Item not found.');\n            }\n\n            let result: IParentListInfoResult<T>;\n            if (!item.depth) {\n                const rootIndex = this.items.findIndex(itm => itm === item);\n                result = {\n                    index: rootIndex\n                } as IParentListInfoResult<T>;\n            } else {\n                // Search parent and treeindex\n                let idx = 0;\n                // eslint-disable-next-line no-loops/no-loops\n                while (--flatIndex >= 0) {\n                    const parentItem = flatList[flatIndex] as IItemTree<T>;\n                    if (parentItem.depth < item.depth) {\n                        result = {\n                            index: idx,\n                            parent: parentItem\n                        } as IParentListInfoResult<T>;\n                    }\n                    idx++;\n                }\n            }\n\n            return of(result);\n        };\n\n        return this.ensureFlatListCache$(true, multiSelect).pipe(\n            switchMap(search$));\n    }\n\n    /** Supprime tous les caches internes. Ils seront recréés à la première demande de la portion de la liste à afficher. */\n    public invalidateCache(): void {\n        this._cache = {};\n        this.ensureChildrenProperties(this.items);\n    }\n\n    /** Efface la hauteur calculée des lignes en mode automatique */\n    public invalidateRowsHeightCache(): void {\n        if (this._items) {\n            this._items.forEach(item => item.size = undefined);\n        }\n    }\n\n    /** Usage interne. Retourne la portion de la liste à afficher en fonction des paramètres spécifiés. */\n    public getViewList$(searchField: string, query?: RegExp | string, ignoreCache?: boolean, ddStartIndex?: number, ddTargetIndex?: number, multiSelect?: boolean): Observable<IViewListResult<T>> {\n        const result = {} as IViewListResult<T>;\n\n        const queryChanged = (query?.toString()) !== (this._lastQuery?.toString());\n        ignoreCache = ignoreCache || queryChanged || !this.items || !this.items.length;\n        this._lastQuery = query;\n\n        const escapeChars = (text: string): string => {\n            const specialChars = ['\\\\', '/', '|', '&', ';', '$', '%', '@', '\"', '<', '>', '(', ')', '+'];\n            specialChars.forEach(c => text = text.replace(c, `\\\\${c}`));\n            return text;\n        };\n\n        // Check regexp validity\n        // regExp.test(this.getTextValue(item));\n        let regExp: RegExp;\n        if (query) {\n            if (typeof query === 'string') {\n                try {\n                    query = (new DiacriticService).remove(query);\n                    const escapedQuery = escapeChars(query);\n                    regExp = new RegExp(escapedQuery, 'i');\n                } catch (exc) {\n                    console.log('Invalid search parameters');\n                }\n            } else {\n                regExp = query;\n                if (regExp.test === undefined) {\n                    regExp = undefined;\n                }\n            }\n        }\n\n        const loadViewList = (): IViewListResult<T> => {\n            let viewList: IItemBase<T>[];\n            if (ddStartIndex !== undefined && ddTargetIndex !== undefined && ddStartIndex !== ddTargetIndex) {\n                if (!this._ddList) {\n                    // Generate a modified flat list for drag and drop Only\n                    this._ddList = [...this._cache.visibleList];\n\n                    // Calc child count to be dragged\n                    const draggedItem = this._ddList[ddStartIndex] as IItemTree<T>;\n                    const parentDepth = draggedItem.depth;\n                    let lastIndex = ddStartIndex;\n                    if (parentDepth !== undefined) {\n                        // eslint-disable-next-line no-loops/no-loops\n                        for (let i = ddStartIndex + 1; i < this._ddList.length; i++) {\n                            const curItem = this._ddList[i] as IItemTree<T>;\n                            if (curItem.depth <= parentDepth) {\n                                break;\n                            }\n                            lastIndex = i;\n                        }\n                    }\n                    this._ddChildCount = lastIndex - ddStartIndex + 1;\n                    this._ddCurrentIndex = ddStartIndex;\n                }\n\n                const removed = this._ddList.splice(this._ddCurrentIndex, this._ddChildCount);\n                if (ddTargetIndex > this._ddCurrentIndex) {\n                    ddTargetIndex -= this._ddChildCount;\n                    ++ddTargetIndex;\n                }\n                this._ddCurrentIndex = ddTargetIndex;\n                removed.forEach(itm => this._ddList.splice(ddTargetIndex++, 0, itm));\n                viewList = this._ddList;\n\n            } else {\n                delete this._ddList;\n                delete this._ddCurrentIndex;\n                delete this._ddChildCount;\n                viewList = this._cache.visibleList || [];\n            }\n\n            result.depthMax = this._cache.depthMax;\n            result.visibleList = viewList;\n\n            return result;\n        };\n\n        if (ignoreCache) {\n            // console.log('getItemList ' + Date.now());\n            this.waiter$.next(true);\n\n            if (queryChanged || !this.items || !this.items.length) {\n                this.internalQuery = regExp;\n            }\n\n            return this.getItemList$(query, this.selectedList).pipe(\n                tap(items => {\n                    if (!this.items || !this.items.length) {\n                        this.ensureSelectedItems(items);\n                    }\n\n                    if (items !== this.items) {\n                        // New item list, invalidate view cache\n                        this.items = items;\n                        // Be cause a new array was returned by getItemList, the list is considered as already filtered (Lazy loading)\n                        this.internalQuery = undefined;\n                        this.ensureChildrenProperties(items);\n                    }\n\n                    delete this._cache.visibleList;\n                    this.waiter$.next(this.items === undefined);\n                }),\n                switchMap(() => this.ensureVisibleListCache$(searchField, this.internalQuery, queryChanged, multiSelect)),\n                map(loadViewList));\n        } else {\n            return this.ensureVisibleListCache$(searchField, this.internalQuery, queryChanged, multiSelect).pipe(\n                map(loadViewList));\n        }\n    }\n\n    public ensureSelection(): IItemBase<T> {\n        return this.ensureSelectedItems(this.items);\n    }\n\n    /** Retourne la liste à utilise pour la création des caches. Surcharger cetee méthode pour fournir une liste de façon lazy.\n     * En cas de surcharge, retourner une nouvelle instance de la liste originale pour que le service regénère ses caches.\n     * @param query Texte ou regular expression par laquelle la liste doit être filtrée.\n     * @param selectedItems Liste des éléments selectionés.\n     * @return Observable résolu par la fonction, qui retourne la liste à utiliser.\n     */\n    protected getItemList$(query?: RegExp | string, selectedItems?: IItemBase<T>[]): Observable<IItemBase<T>[]> {\n        return this.loadingItems$ ? this.loadingItems$(query, selectedItems) : of(this.items);\n    }\n\n    /** Retourne une valeur indiquant si l'élément spécifié correspond aux critères de recherche spécifiés\n     * @param item Elément à analyser.\n     * @param searchField Nom du champ à utiliser pour la recherche. Le champ représenté peut-être une valeur ou une function.\n     * @param regExp Expression de test sur le champs spécifié.\n     * @return True si l'élément correspond aux critères de recherche.\n     */\n    protected itemMatch(item: IItemBase<T>, searchField: string, regExp: RegExp): boolean {\n        const itmTree = item as IItemTree<T>;\n        if (itmTree.$items) {\n            return true;\n        }\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n        const field = (<any>item)[searchField];\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n        const value = typeof field === 'function' ? field() : field || this.getTextValue(item, searchField);\n        return value && regExp.test((new DiacriticService).remove(value as string));\n    }\n\n    /** Retourne une liste groupée si un modèle de groupe interne est spécifié.\n     * En cas de surcharge, retourner une nouvelle instance de la liste originale pour que le service regénère ses caches.\n     * @param items Liste des éléments à grouper.\n     * @return Observable résolu par la fonction, qui retourne la liste groupés.\n     */\n    protected getGroupedList$(items: IItemBase<T>[]): Observable<IItemTree<T>[]> {\n        return items ? this.getGroupingService().group$(this.items, this.groupInfos, '$items') : of([]);\n    }\n\n    /** Retourne la liste des éléments visibles. Si la liste des éléments est hièrarchique, cette fonction retourne une liste plate. Cette liste est utilisé pour calculer la portion de la liste à afficher.\n     * En cas de surcharge, retourner une nouvelle instance de la liste originale pour que le service regénère ses caches.\n     * @param items Liste des éléments à traiter.\n     * @param searchField Nom du champ à utiliser pour la recherche. Le champ représenté peut-être une valeur ou une function.\n     * @param regExp Expression de test à appliquer sur le champ de recherche.\n     * @param Auto expand parents on search query.\n     * @return Observable résolu par la fonction, qui retourne la liste visibles.\n     */\n    protected getVisibleList$(items: IItemBase<T>[], searchField: string, regExp: RegExp, expandTree: boolean, multiSelect: boolean): Observable<IItemBase<T>[]> {\n        if (!items) {\n            return of([]);\n        }\n\n        let visibleList = [] as IItemTree<T>[];\n        const selectedList = [] as IItemBase<T>[];\n        let odd = false;\n\n        if (regExp) {\n            // Recalc visible list and select list from the filter\n            const getFilteredList = (treeList: IItemBase<T>[], depth: number, hidden: boolean): IItemTree<T>[] => {\n                let filteredItems: IItemBase<T>[];\n                if (treeList) {\n                    treeList.forEach(itm => {\n                        const itmTree = itm as IItemTree<T>;\n                        if (itmTree.$items) {\n                            if (this.isVisible(itmTree) && this.itemMatch(itmTree, searchField, regExp)) {\n                                odd = false;\n                                const filteredChildren = getFilteredList(itmTree.$items, depth + 1, hidden);\n                                if (filteredChildren) {\n                                    if (itmTree.collapsed && expandTree) {\n                                        itmTree.collapsed = false;\n                                    }\n                                    filteredItems = !filteredItems ? ((itmTree.collapsed && [itmTree]) || [itmTree, ...filteredChildren]) : ((itmTree.collapsed && [...filteredItems, itmTree]) || [...filteredItems, itmTree, ...filteredChildren]);\n                                    if (itmTree.selected) {\n                                        selectedList.push(itmTree);\n                                    }\n                                }\n                            }\n\n                            // compare fn can be something like re.test(this.getTextValue(itm)\n                        } else if (this.itemMatch(itm, searchField, regExp)) {\n                            itmTree.depth = depth;\n                            if (!filteredItems) {\n                                filteredItems = [];\n                            }\n                            if (!hidden && this.isVisible(itm) && !(itm.selected && this.hideSelected)) {\n                                // For style\n                                itmTree.odd = odd;\n                                odd = !odd;\n\n                                filteredItems.push(itmTree);\n                            }\n                            if (itmTree.selected) {\n                                selectedList.push(itmTree);\n                            }\n                        } else if (itmTree.selected) {\n                            selectedList.push(itmTree);\n                        }\n                    });\n                }\n\n                return filteredItems;\n            };\n\n            visibleList = getFilteredList(items || [], 0, false) || [];\n\n        } else {\n            // Get visible items list without filter\n            const getVisibleListInternal = (treeList: IItemTree<T>[], depth: number, hidden: boolean): void => {\n                if (treeList) {\n                    treeList.forEach(item => {\n                        if (!hidden && this.isVisible(item) && !(item.selected && this.hideSelected)) {\n                            // For style\n                            item.odd = odd;\n                            odd = !odd;\n\n                            // Add to visible list only the visible items (uncollapsed)\n                            visibleList.push(item);\n                        }\n\n                        // Add to selected list only the visible items (uncollapsed) and selected\n                        if (item.selected) {\n                            selectedList.push(item);\n                        }\n\n                        // Recursive call\n                        if (item.$items) {\n                            odd = false;\n                            getVisibleListInternal(item.$items, depth + 1, hidden || item.collapsed || !this.isVisible(item));\n                        }\n                    });\n                }\n            };\n\n            getVisibleListInternal(items, 0, false);\n        }\n\n        return of(visibleList).pipe(\n            tap(() => {\n                if (!multiSelect) {\n                    this.selectedList = selectedList;\n                }\n            }));\n    }\n\n    /** Retourne une liste plate depuis la liste originale sans hierarchie.\n     * En cas de surcharge, retourner une nouvelle instance de la liste originale pour que le service regénère ses caches.\n     * @param items Liste des éléments hierarchique.\n     * @return Observable résolu par la fonction, qui retourne la liste hierarchique mise à plat.\n     */\n    protected getFlatList$(items: IItemBase<T>[], isFiltered: boolean, multiSelect: boolean): Observable<IItemBase<T>[]> {\n        if (!items) {\n            return of([]);\n        }\n\n        const visibleList = [] as IItemBase<T>[];\n        const selectedList = [] as IItemBase<T>[];\n        let depthMax = 0;\n        let isTree = false;\n        let odd = false;\n\n        const flatList$ = (itms: IItemTree<T>[], depth: number, hidden: boolean): Observable<IItemBase<T>> => from(itms || []).pipe(\n            tap(item => {\n                if (depth > depthMax) {\n                    depthMax = depth;\n                }\n\n                // Fill system properties\n                item.depth = depth;\n\n                if (!hidden && this.isVisible(item) && !(item.selected && this.hideSelected)) {\n                    // For style\n                    item.odd = odd;\n                    odd = !odd;\n\n                    // Add to visible list only the visible items (uncollapsed)\n                    visibleList.push(item);\n                }\n\n                // Add to selected list only the visible items (uncollapsed) and selected\n                if (item.selected) {\n                    selectedList.push(item);\n                }\n            }),\n            switchMap(item => {\n                if (item.$items) {\n                    isTree = true;\n                    odd = false;\n                    return concat(of(item), flatList$(item.$items, depth + 1, hidden || item.collapsed));\n                } else {\n                    return of(item);\n                }\n            }));\n\n        return flatList$(items, 0, false).pipe(\n            tap(() => {\n                if (!multiSelect) {\n                    this.selectedList = selectedList;\n                }\n\n                if (!isFiltered) {\n                    this._cache.visibleList = visibleList;\n                }\n                this._cache.depthMax = isTree ? depthMax : 0;\n            }),\n            reduce((acc: any[], cur: IItemBase<T>) => {\n                acc.push(cur);\n                return acc;\n            }, []));\n    }\n\n    /** Efface une partie des caches  */\n    protected invalidateViewCache(): void {\n        delete this._cache.flatList;\n        delete this._cache.visibleList;\n        delete this._cache.depthMax;\n        this._cache.rowsCount = 0;\n    }\n\n    private ensureSelectedItems(items: IItemBase<T>[]): IItemBase<T>[] {\n        if (this.selectedList && this.selectedList.length > 0) {\n            // Ensure selected flag\n            this.selectedList.forEach(item => item.selected = true);\n\n            if (!items) {\n                return this.selectedList;\n            }\n\n            const newSelectedList = [] as IItemBase<T>[];\n            const ensureSelectedChildren = (children: IItemTree<T>[]): void => {\n                children.forEach(item => {\n                    const selectedItem = this.selectedList.find(selected => this.compareItems(selected, item));\n                    if (selectedItem) {\n                        selectedItem.selected = false;\n                        newSelectedList.push(item);\n                    }\n                    if (item.$items) {\n                        ensureSelectedChildren(item.$items);\n                    }\n                });\n            };\n\n            ensureSelectedChildren(items);\n\n            // Add not found selected items\n            this.selectedList.filter(item => item.selected).forEach(item => newSelectedList.push(item));\n\n            this.selectedList = newSelectedList;\n\n            // Ensure selected flag for the new items\n            this.selectedList.forEach(item => item.selected = true);\n\n        } else {\n            this.selectedList = [];\n\n            if (!items) {\n                return this.selectedList;\n            }\n\n            const ensureSelectedChildren = (children: IItemTree<T>[]): void => {\n                children.forEach(item => {\n                    if (item.selected) {\n                        this.selectedList.push(item);\n                    }\n                    if (item.$items) {\n                        ensureSelectedChildren(item.$items);\n                    }\n                });\n            };\n\n            ensureSelectedChildren(items);\n        }\n\n        return this.selectedList;\n    }\n\n    private compareItems = (item1: IItemBase<T>, item2: IItemBase<T>): boolean => {\n        // eslint-disable-next-line eqeqeq\n        const isDefined = (value: IItemBase<T>): boolean => value != undefined;\n\n        if (!isDefined(item1) || !isDefined(item2)) {\n            return false;\n        } else if (item1.equals) {\n            return item1.equals(item2);\n        } else if (item2.equals) {\n            return item2.equals(item1);\n        } else {\n            const model1 = item1.model as IItemBase<unknown>;\n            const model2 = item1.model as IItemBase<unknown>;\n            if (model1?.equals) {\n                return model1.equals(item2.model);\n            } else if (model2?.equals) {\n                return model2.equals(item1.model);\n            } else {\n                return this.getValue(item1, this._valueField) === this.getValue(item2, this._valueField);\n            }\n        }\n    };\n\n    private ensureVisibleListCache$(searchField: string, regExp: RegExp, expandTree: boolean, multiSelect: boolean): Observable<IItemBase<T>[]> {\n        if (this._cache.visibleList?.length) {\n            return of(this._cache.visibleList);\n        } else {\n            return this.ensureFlatListCache$(!!regExp, multiSelect).pipe(\n                switchMap(() => this.getVisibleList$(this._cache.groupedList, searchField, regExp, expandTree, multiSelect)),\n                tap(visibleList => {\n                    /* if (this._cache.visibleList && this._cache.visibleList.length && this._cache.visibleList !== visibleList) {\n                     // New visible list\n                     // Nothing to do yet\n                     }*/\n\n                    this._cache.visibleList = visibleList;\n                    this._cache.rowsCount = visibleList.length;\n                }));\n        }\n    }\n\n    private ensureFlatListCache$(isFiltered: boolean, multiSelect: boolean): Observable<IItemBase<T>[]> {\n        if (this._cache.flatList?.length) {\n            return of(this._cache.flatList);\n        } else {\n            return this.ensureGroupedListCache$().pipe(\n                switchMap(() => this.getFlatList$(this._cache.groupedList, isFiltered, multiSelect)),\n                tap(flatList => {\n                    if (this._cache.flatList?.length && this._cache.flatList !== flatList) {\n                        // New flat list\n                        delete this._cache.visibleList;\n                        this._cache.rowsCount = 0;\n\n                        // Ensure depth max\n                        this._cache.depthMax = 0;\n                        if (flatList) {\n                            flatList.forEach((item: IItemTree<T>) => {\n                                if (item.depth && item.depth > this._cache.depthMax) {\n                                    this._cache.depthMax = item.depth;\n                                }\n                            });\n                        }\n                    }\n                    this._cache.flatList = flatList;\n                }));\n        }\n    }\n\n    private ensureGroupedListCache$(): Observable<IItemBase<T>[]> {\n        if (this._cache.groupedList?.length) {\n            return of(this._cache.groupedList);\n        } else if (!this.groupInfos || this.groupInfos.length === 0) {\n            return of(this.items).pipe(\n                tap(items => this._cache.groupedList = items));\n        } else if (this.items) {\n            return this.getGroupedList$(this.items).pipe(\n                tap(groupedList => {\n                    if (this._cache.groupedList?.length && this._cache.groupedList !== groupedList) {\n                        // New grouped list\n                        this.invalidateViewCache();\n                    }\n                    this._cache.groupedList = groupedList;\n                }));\n        } else {\n            return of([] as IItemBase<T>[]);\n        }\n    }\n\n    private ensureChildrenProperties(items: IItemTree<T>[]): void {\n        if (!items) {\n            return;\n        }\n\n        items.forEach(item => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n            const field = (<any>item)[this.childrenField];\n            if (field) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n                item.$items = field;\n                this.ensureChildrenProperties(item.$items);\n            }\n        });\n    }\n\n    private isVisible(item: IItemBase<T>): boolean {\n        return item.visible ?? true;\n    }\n}\n\n/** Structure de retour de getViewList. */\nexport interface IViewListResult<T> {\n    depthMax?: number;\n    visibleList?: IItemBase<T>[];\n}\n\n/** Structure de retour de findNextMatch. */\nexport interface IFindItemResult<T> {\n    /** Elément trouvé. */\n    item: IItemBase<T>;\n    /** Index de l'élément dans la liste des éléments visibles. */\n    index: number;\n}\n\n/** Structure de retour de getParentListInfos. */\nexport interface IParentListInfoResult<T> {\n    /** Elément parent. */\n    parent?: IItemTree<T>;\n    /** Index de l'élément enfant dans la liste des enfants du parent. */\n    index: number;\n}\n\ninterface IFindItemsResult<T> {\n    list: IItemBase<T>[];\n    index: 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 { coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { ChangeDetectorRef, EventEmitter } from '@angular/core';\nimport { Destroy } from '@deja-js/component/core';\nimport { filter, from, map, Observable, of, reduce, Subscription, switchMap, take, takeUntil, tap, timer } from 'rxjs';\n\nimport { IGroupInfo } from './grouping/group-infos';\nimport { GroupingService } from './grouping/grouping.service';\nimport { IItemBase } from './item-base';\nimport { IFindItemResult, IParentListInfoResult, ItemListService, IViewListResult } from './item-list.service';\nimport { IItemTree } from './item-tree';\nimport { ISortInfos } from './sorting/sort-infos.model';\nimport { SortingService } from './sorting/sorting.service';\nimport { IViewPort, IViewPortRefreshParams, ViewPortService } from './viewport.service';\n\n/** Classe de base pour tous les composants à listes (deja-treelist, deja-select, deja-grid) */\nexport abstract class ItemListBase<T> extends Destroy {\n    protected _waiter = true;\n\n    protected _itemList: IItemBase<T>[] = []; // Viewport list\n    protected _multiSelect = false;\n    protected _searchField: string;\n    protected _maxHeight: number;\n    protected _currentItemIndex = -1;\n    protected _currentItem: IItemBase<T>;\n    protected _hintLabel: string;\n    protected _nodataLabel: string;\n    protected _hideSelected: boolean;\n    protected _childrenField: string;\n    protected _minSearchLength = 0;\n    protected _listElementId: string;\n\n    // Viewport\n    protected _vpBeforeHeight = 0;\n    protected _vpAfterHeight = 0;\n    protected _vpStartRow = 0;\n    protected _vpEndRow = 0;\n    protected _pageSize = 0;\n    protected _depthMax = 0;\n    protected rowsCount = 0;\n\n    // Sorting\n    protected _sortInfos: ISortInfos;\n\n    protected _viewPortChanged: EventEmitter<IViewPort>;\n\n    // Drag drop\n    protected _ddStartIndex: number;\n    protected _ddTargetIndex: number;\n\n    private _textField: string;\n    private _valueField: string;\n\n    private waiter$sub: Subscription;\n\n    private _itemListService: ItemListService<T>;\n    private allCollapsed = false;\n    private _viewPortRowHeight = ViewPortService.itemDefaultSize;\n\n    private _listElement: HTMLElement;\n\n    public constructor(protected changeDetectorRef: ChangeDetectorRef, protected viewPort: ViewPortService) {\n        super();\n\n        this._listElementId = `listcontainer_${(1000000000 * Math.random()).toString().substr(10)}`;\n\n        viewPort.viewPort$.pipe(\n            switchMap((viewPortResult: IViewPort) => {\n                let next$: Observable<number> = of<number>(null);\n\n                delete this._hintLabel;\n                if (viewPort.mode === 'disabled') {\n                    this._itemList = viewPortResult.items;\n                    this._vpStartRow = 0;\n                    this._vpEndRow = 0;\n                    this._vpBeforeHeight = 0;\n                    this._vpAfterHeight = 0;\n                } else {\n                    this._itemList = viewPortResult.visibleItems;\n                    this._vpStartRow = viewPortResult.startIndex;\n                    this._vpEndRow = viewPortResult.endIndex;\n                    this._vpBeforeHeight = viewPortResult.beforeSize;\n                    this._vpAfterHeight = viewPortResult.afterSize;\n                }\n\n                if (viewPortResult.scrollPos !== undefined) {\n                    if (this.listElement) {\n                        const listItems = this.listElement.getElementsByClassName('listitem');\n                        const rebind = listItems.length !== viewPortResult.visibleItems.length;\n                        if (!rebind) {\n                            this.listElement.scrollTop = viewPortResult.scrollPos;\n                        } else {\n                            next$ = timer(1).pipe(\n                                filter(() => !!this.listElement),\n                                tap(() => this.listElement.scrollTop = viewPortResult.scrollPos)\n                            );\n                        }\n                    }\n                }\n\n                this.changeDetectorRef.markForCheck();\n                // console.log(viewPortResult);\n\n                this._viewPortChanged?.next(viewPortResult);\n\n                return next$;\n            }),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n\n    public get isMultiSelect(): boolean {\n        return this._multiSelect;\n    }\n\n    public get itemList(): IItemBase<T>[] {\n        return this._itemList;\n    }\n\n    public get treeItemList(): IItemTree<T>[] {\n        return this._itemList as IItemTree<T>[];\n    }\n\n    public get ddStartIndex(): number {\n        return this._ddStartIndex;\n    }\n\n    public get vpBeforeHeight(): number {\n        return this._vpBeforeHeight;\n    }\n\n    public get vpAfterHeight(): number {\n        return this._vpAfterHeight;\n    }\n\n    public get vpStartRow(): number {\n        return this._vpStartRow;\n    }\n\n    public get vpEndRow(): number {\n        return this._vpEndRow;\n    }\n\n    /** Renvoie le modèle de tri appliqué à la liste.\n     * @param sortInfos Modèle de tri appliqué.\n     */\n    public get sortInfos(): ISortInfos {\n        return this._sortInfos;\n    }\n\n    /** Renvoie le modèle de regroupement appliqué à la liste.\n     * @param sortInfos Modèle de regroupement appliqué.\n     */\n    public get groupInfos(): IGroupInfo[] {\n        return this._itemListService.groupInfos;\n    }\n\n    /** Définit une valeur indiquant si les éléments selectionés doivent être masqué. Ce flag est principalement utilisé dans le cas d'un multi-select\n     * @param value True si les éléments selectionés doivent être masqués\n     */\n    public setHideSelected(value: boolean): void {\n        this._hideSelected = value;\n        if (this._itemListService) {\n            this._itemListService.hideSelected = value;\n        }\n    }\n\n    /** Définit le champs utilisé comme collection pour les enfants d'un parent.\n     * @param value Nom du champ à utiliser comme collection d'enfants\n     */\n    public setChildrenField(value: string): void {\n        this._childrenField = value;\n        if (this._itemListService) {\n            this._itemListService.childrenField = value;\n        }\n    }\n\n    /** Renvoie l'index de l'élément sur la liste plate corespondant à l'élément HTML spécifié\n     * @return Index sur la liste plate corespondant à l'élément HTML\n     */\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    public getItemIndexFromHTMLElement(element: HTMLElement): number {\n        // eslint-disable-next-line no-loops/no-loops\n        while (element?.parentElement && element.hasAttribute && !element.hasAttribute('flat') && element.parentElement.id !== this.listElementId) {\n            element = element.parentElement;\n        }\n\n        if (!element || !element.hasAttribute('flat')) {\n            return undefined;\n        }\n\n        return +element.getAttribute('flat');\n    }\n\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    public getItemFromHTMLElement(element: HTMLElement): IItemBase<T> {\n        const itemIndex = this.getItemIndexFromHTMLElement(element);\n        if (itemIndex === undefined) {\n            return undefined;\n        }\n\n        return this._itemList[itemIndex - this.vpStartRow];\n    }\n\n    /** Retourne le service de liste utilisé par ce composant.\n     * @return Service de liste utilisé par ce composant.\n     */\n    public getItemListService(): ItemListService<T> {\n        if (!this._itemListService) {\n            this.setItemListService(new ItemListService());\n        }\n        return this._itemListService;\n    }\n\n    /** Retourne la liste des éléments sélectionés.\n     * @return Liste des éléments selectionés.\n     */\n    public getSelectedItems(): IItemBase<T>[] {\n        return this.getItemListService().getSelectedItems();\n    }\n\n    /** Définit la liste des éléments sélectionés.\n     * @param items Liste des éléments a selectioner.\n     */\n    public setSelectedItems(value: IItemBase<T>[]): void {\n        this.getItemListService().setSelectedItems(value);\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /**\n     * Set a promise or an observable called before an item selection\n     */\n    public setLoadingItems(fn: (query: string | RegExp, selectedItems: IItemBase<T>[]) => Observable<IItemBase<T>[]>): void {\n        this.getItemListService().setLoadingItems(fn);\n    }\n\n    /**\n     * Set a promise or an observable called before an item deselection\n     */\n    public setSelectingItem(fn: (item: IItemBase<T>) => Promise<IItemBase<T>> | Observable<IItemBase<T>>): void {\n        this.getItemListService().setSelectingItem(fn);\n    }\n\n    /**\n     * Set a promise or an observable called before an item deselection\n     */\n    public setUnselectingItem(fn: (item: IItemBase<T>) => Promise<IItemBase<T>> | Observable<IItemBase<T>>): void {\n        this.getItemListService().setUnselectingItem(fn);\n    }\n\n    /**\n     * Set a promise or an observable called before an item selection\n     */\n    public setExpandingItem(fn: (item: IItemTree<T>) => Promise<IItemTree<T>> | Observable<IItemTree<T>>): void {\n        this.getItemListService().setExpandingItem(fn);\n    }\n\n    /**\n     * Set a promise or an observable called before an item deselection\n     */\n    public setCollapsingItem(fn: (item: IItemTree<T>) => Promise<IItemTree<T>> | Observable<IItemTree<T>>): void {\n        this.getItemListService().setCollapsingItem(fn);\n    }\n\n    /** Evalue le texte à afficher pour l'élément spécifié.\n     * @param value  Model à évaluer.\n     * @return Texte à afficher pour le modèle spécifié.\n     */\n    public getTextValue(value: unknown): string {\n        return this.getItemListService().getTextValue(value, this._textField);\n    }\n\n    /**\n     * Set le viewport mode\n     *\n     * @param mode Mode du viewport (sans viewport, avec un viewport tailles des rows fixes ou dynamiques)\n     */\n    public setViewportMode(mode: string): void {\n        this.viewPort.mode$.next(mode);\n    }\n\n    /** Trie la liste par le champs spécifié. */\n    public sort(name?: string): void {\n        this.sort$(name).pipe(\n            take(1),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n\n    /** Trie la liste par le champs spécifié. */\n    public sort$(name?: string): Observable<IViewListResult<T>> {\n        const sortField = name || this._textField;\n\n        if (!this._sortInfos) {\n            this._sortInfos = {\n                name: sortField,\n                order: 'ascending'\n            };\n        } else if (sortField === this._sortInfos.name) {\n            this._sortInfos.order = this._sortInfos.order === 'ascending' ? 'descending' : 'ascending';\n        } else {\n            this._sortInfos.name = sortField;\n            this._sortInfos.order = 'ascending';\n        }\n        return this.getItemListService().sort$(this._sortInfos).pipe(\n            take(1),\n            switchMap((si: never) => this.calcViewList$().pipe(take(1), map(() => si)))\n        );\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<T>> {\n        return this.getItemListService().group$(groups).pipe(\n            switchMap(() => this.calcViewList$().pipe(take(1)))\n        );\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<T>> {\n        return this.getItemListService().ungroup$(groupInfo).pipe(\n            switchMap(() => this.calcViewList$().pipe(\n                take(1)\n            ))\n        );\n    }\n\n    /** Change l'état d'expansion de tous les éléments.\n     * @return Observable résolu par la fonction.\n     */\n    public toggleAll$(collapsed?: boolean): Observable<IItemTree<T>[]> {\n        this.allCollapsed = (collapsed !== undefined) ? collapsed : !this.allCollapsed;\n        if (this.viewPort.mode === 'disabled') {\n            return from(this._itemList).pipe(\n                filter((item: IItemTree<T>) => item.$items && item.depth === 0 && (item.collapsible ?? true)),\n                switchMap((_item: IItemTree<T>, index: number) => this.toggleCollapse$(index + this.vpStartRow, this.allCollapsed)),\n                reduce((acc, item) => {\n                    acc.push(item);\n                    return acc;\n                }, [] as IItemTree<T>[]));\n        } else {\n            return this.getItemListService().toggleAll$(this.allCollapsed);\n        }\n    }\n\n    /** Change l'état d'expansion de l'élément spécifié par son index sur la liste des éléments visibles.\n     * @param index  Index sur la liste des éléments visibles de l'élément à changer.\n     * @param collapse  Etat de l'élément. True pour réduire l'élément.\n     * @return Observable résolu par la fonction.\n     */\n    public toggleCollapse$(index: number, collapsed: boolean): Observable<IItemTree<T>> {\n        return this.getItemListService().toggleCollapse$(index, collapsed).pipe(\n            switchMap(toggleResult => this.calcViewList$().pipe(\n                take(1), map(() => toggleResult))\n            )\n        );\n    }\n\n    /** Déselectionne tous les éléments sélectionés.\n     * @return Observable résolu par la fonction.\n     */\n    public unselectAll$(): Observable<IItemBase<T>[]> {\n        const itemListService = this.getItemListService();\n        return itemListService.unselectAll$();\n    }\n\n    /** Nettoye les caches et réaffiche le viewport. */\n    public refresh(): void {\n        this.getItemListService().invalidateCache();\n        this.calcViewList$().pipe(\n            take(1),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n\n    /** Recalcule le viewport. */\n    public refreshViewPort(item?: IItemBase<T> | IItemBase<T>[], clearMeasuredHeight?: boolean): void {\n        const refreshParams = {} as IViewPortRefreshParams;\n        if (item) {\n            refreshParams.items = item instanceof Array ? item : [item];\n        }\n        if (clearMeasuredHeight) {\n            refreshParams.clearMeasuredSize = clearMeasuredHeight;\n        }\n        this.viewPort.refresh(refreshParams);\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** Efface le viewport */\n    public clearViewPort(): void {\n        this.viewPort.clear();\n    }\n\n    /** Efface la hauteur calculée des lignes en mode automatique */\n    public clearRowsHeight(): void {\n        this.getItemListService().invalidateRowsHeightCache();\n    }\n\n    /** Retrouve les informations du parent de l'élément spécifié\n     * @param item Element enfant du parent à retrouver.\n     * @return Observable résolu par la fonction, qui retourne les informations sur le parent de l'élément spécifié\n     */\n    public getParentListInfos$(item: IItemTree<T>): Observable<IParentListInfoResult<T>> {\n        return this.getItemListService().getParentListInfos$(item, this._multiSelect);\n    }\n\n    public get listElementId(): string {\n        return this._listElementId;\n    }\n\n    public get listElement(): HTMLElement {\n        // Can be an overlay\n        return this._listElement || document.getElementById(this.listElementId);\n    }\n\n    public set listElement(elem: HTMLElement) {\n        this._listElement = elem;\n    }\n\n    public getViewPortRowHeight(): number {\n        return this._viewPortRowHeight || ViewPortService.itemDefaultSize;\n    }\n\n    public getCurrentItemIndex(): number {\n        return this._currentItemIndex;\n    }\n\n    /** Retourne l'élément courant (actif).\n     * @return Elément courant.\n     */\n    public getCurrentItem(): IItemBase<T> {\n        if (!this._currentItem && this._currentItemIndex >= 0) {\n            this._currentItem = this.getItemListService().getItemFromIndex(this._currentItemIndex);\n        }\n        return this._currentItem;\n    }\n\n    public getItemHeight(item: IItemBase<T>): number {\n        if (this.viewPort.mode === 'disabled') {\n            return null;\n        } else if (this.viewPort.mode === 'fixed') {\n            return this.getViewPortRowHeight();\n        } else if (this.viewPort.mode === 'auto') {\n            return item.size || null;\n        } else {\n            return (item.size && item.size > ViewPortService.itemDefaultSize) ? item.size : this.getViewPortRowHeight();\n        }\n    }\n\n    protected getSelectedModels(): (T | IItemBase<T>)[] {\n        return this.getItemListService().getSelectedItems().map(itm => itm.model !== undefined ? itm.model : itm);\n    }\n\n    protected setSelectedModels(values: unknown[]): void {\n        this.setSelectedItems(values && this.mapToIItemBase(values, true));\n    }\n\n    /** Trouve l'élément suivant répondant à la fonction de comparaison spécifiée.\n     * @param compare Function de comparaison pour la recherche de l'élément.\n     * @param startIndex Index de départ sur la liste des éléments visibles.\n     * @return Observable résolu par la fonction.\n     */\n    protected findNextMatch$(compare?: (item: IItemBase<T>, index: number) => boolean, startIndex?: number): Observable<IFindItemResult<T>> {\n        return this.ensureListCaches$().pipe(\n            switchMap(() => this.getItemListService().findNextMatch$(compare, startIndex)));\n    }\n\n    /** Définit la hauteur d'une ligne pour le calcul du viewport. Le Viewport ne fonctionne qu'avec des hauteurs de lignes fixe.\n     * Pour désactiver le viewport, mettre la hauteur de ligne à 0.\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     * @param value Hauteur de ligne à utiliser pour le calcul du viewport.\n     */\n    protected setViewPortRowHeight(value: NumberInput): void {\n        this._viewPortRowHeight = coerceNumberProperty(value);\n        if (value) {\n            this.viewPort.itemsSize$.next(this._viewPortRowHeight);\n        }\n    }\n\n    /** Definit le service de liste utilisé par ce composant.\n     * @param value Service de liste utilisé par ce composant.\n     */\n    protected setItemListService(value: ItemListService<T>): void {\n        if (this.waiter$sub) {\n            this.waiter$sub.unsubscribe();\n            this.waiter$sub = undefined;\n        }\n        this._itemListService = value;\n        if (this._itemListService) {\n            this._itemListService.hideSelected = this._hideSelected;\n            this._itemListService.childrenField = this._childrenField;\n            this._itemListService.valueField = this._valueField;\n            this.waiter$sub = this._itemListService.waiter$.pipe(\n                takeUntil(this.destroyed$)\n            ).subscribe(status => {\n                this._waiter = status;\n                this.changeDetectorRef.markForCheck();\n            });\n        }\n    }\n\n    /** Definit le service de tri utilisé par ce composant.\n     * @param value Service de tri utilisé par ce composant.\n     */\n    protected setSortingService(value: SortingService): void {\n        if (!value && !this._itemListService) {\n            return;\n        }\n        this._itemListService.setSortingService(value);\n    }\n\n    /** Definit le service de regroupement utilisé par ce composant.\n     * @param value Service de regroupement utilisé par ce composant.\n     */\n    protected setGroupingService(value: GroupingService): void {\n        if (!value && !this._itemListService) {\n            return;\n        }\n        this._itemListService.setGroupingService(value);\n    }\n\n    /** Définit le texte à afficher dans la zone de conseil.\n     * @param value Texte à afficher.\n     */\n    protected setHintLabel(value: string): void {\n        this._hintLabel = value;\n    }\n\n    /** Définit le texte à afficher si la liste est vide.\n     * @param value Texte à afficher.\n     */\n    protected setNodataLabel(value: string): void {\n        this._nodataLabel = value;\n    }\n\n    protected setCurrentItemIndex(value: number): void {\n        this._currentItemIndex = value;\n        this._currentItem = null;\n    }\n\n    /** Définit l'élément courant (actif).\n     * @param item Elément courant.\n     */\n    protected setCurrentItem(item: IItemBase<T>): void {\n        this._currentItemIndex = item ? this.getItemListService().getItemIndex(item) : -1;\n        this._currentItem = item;\n    }\n\n    /** Retourne l'index correspondant à l'élément spéficié dans la liste des éléments visibles\n     * @param item Element à chercher sur la liste des éléments visibles.\n     * @return Index correspondant à l'élément recherché.\n     */\n    protected getItemIndex(item: IItemBase<T>): number {\n        return item && this.getItemListService() ? this.getItemListService().getItemIndex(item) : -1;\n    }\n\n    /** Définit si plusieurs éléments peuvent être sélectionés.\n     * @param value True si plusieurs éléments peuvent être sélectionés.\n     */\n    protected setMultiSelect(value: boolean): void {\n        this._multiSelect = value;\n    }\n\n    /** Définit le modèle utilisé par la liste. Il est uniquement de type IItemBase<T>. Ce model peut ètre hierarchique sans limitation de la profondeur ou une chargé en asynchrone par une promise ou un observable.\n     * @param items Provider de la liste des éléments de la liste.\n     */\n    // eslint-disable-next-line rxjs/finnish\n    protected setItems$(items: IItemBase<T>[] | Promise<IItemBase<T>[]> | Observable<IItemBase<T>[]>): Observable<unknown> {\n        if (!(items instanceof Array)) {\n            this.clearViewPort();\n        }\n        return this.getItemListService().setItems$(items);\n    }\n\n    /** Définit le modèle utilisé par la liste. Il peut être de tout type d'objet. Ce model peut ètre hierarchique sans limitation de la profondeur ou une chargé en asynchrone par une promise ou un observable.\n     * @param items Provider de la liste des éléments de la liste.\n     */\n    // eslint-disable-next-line rxjs/finnish\n    protected setModels$(models: unknown[] | Observable<unknown[]>): Observable<unknown> {\n        let models$: Observable<unknown[]>;\n\n        if (models instanceof Array) {\n            models$ = of(models);\n        } else {\n            models$ = models;\n        }\n\n        const items$ = models$?.pipe(map(model => this.mapToIItemBase(model)));\n        return this.setItems$(items$);\n    }\n\n    // Ne pas utiliser, cette fonction retourne la liste des éléments pour l'implémentation de ngModel.\n    protected getItems(): IItemBase<T>[] {\n        return this.getItemListService().getItems();\n    }\n\n    /** Usage interne. Termine le drag and drop en cours. */\n    protected drop$(): Observable<boolean> {\n        this.setCurrentItemIndex(-1);\n        return this.getItemListService().drop$();\n    }\n\n    /** Usage interne. Retourne la portion de la liste à afficher en fonction des paramètres spécifiés. */\n    protected getViewList$(query?: RegExp | string, ignoreCache?: boolean): Observable<IViewListResult<T>> {\n        if (typeof query === 'string' && (query || '').length < this._minSearchLength) {\n            const emptyListResult = {\n                depthMax: 0,\n                visibleList: []\n            } as IViewListResult<T>;\n\n            if (!this.getItems()) {\n                return this.setItems$([]).pipe(map(() => emptyListResult));\n            } else {\n                return of(emptyListResult);\n            }\n        }\n\n        return this.getItemListService()\n            .getViewList$(this._searchField || this._textField, query, ignoreCache, this._ddStartIndex, this._ddTargetIndex, this._multiSelect);\n    }\n\n    /** Sélectionne une plage d'éléments en fonction de l'index de début et l'index de fin sur la liste des éléments visibles.\n     * @param indexFrom index sur la liste des éléments visibles du premier élément à sélectioner.\n     * @param indexTo index sur la liste des éléments visibles du dernier élément à sélectioner.\n     * @return Observable résolu par la fonction.\n     */\n    protected selectRange$(indexFrom: number, indexTo?: number): Observable<number> {\n        const itemListService = this.getItemListService();\n        return this.ensureListCaches$().pipe(\n            switchMap(() => itemListService.selectRange$(indexFrom, indexTo)));\n    }\n\n    /** Change l'état de selection de l'élément spécifié.\n     * @param items Liste des éléments à modifier.\n     * @param selected True si les éléments divent être sélectionés, False si ils doivent être déselectionés.\n     * @return Observable résolu par la fonction.\n     */\n    protected toggleSelect$(items: IItemBase<T>[], selected: boolean): Observable<IItemBase<T>[]> {\n        const itemListService = this.getItemListService();\n        return itemListService.toggleSelect$(items, selected);\n    }\n\n    /** Définit si l'élément spécifié peut être réduit.\n     * @param item Elément à analyser.\n     * @return True si l'élément peut être réduit.\n     */\n    protected isCollapsible(item: IItemTree<T>): boolean {\n        return item?.$items && (item.collapsible ?? true);\n    }\n\n    /** Définit si l'élément spécifié est selectionable.\n     * @param item Elément à analyser.\n     * @return True si l'élément est selectionable.\n     */\n    protected isSelectable(item: IItemBase<T>): boolean {\n        return item && (item.selectable ?? true);\n    }\n\n    /** Définit le champ à utiliser comme valeur d'affichage.\n     * @param value Champ à utiliser comme valeur d'affichage.\n     */\n    protected setTextField(value: string): void {\n        this._textField = value;\n    }\n\n    /** Retourne le champ utilisé comme valeur d'affichage.*/\n    protected getTextField(): string {\n        return this._textField || ItemListService.defaultTextField;\n    }\n\n    /** Définit le champ à utiliser comme valeur de comparaison.\n     * @param value Champ à utiliser comme valeur de comparaison.\n     */\n    protected setValueField(value: string): void {\n        this._valueField = value;\n        if (this._itemListService) {\n            this._itemListService.valueField = value;\n        }\n    }\n\n    /** Retourne le champ utilisé comme valeur de comparaison.*/\n    protected getValueField(): string {\n        return this._valueField || ItemListService.defaultValueField;\n    }\n\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     * @param value Champ à utiliser comme champ de recherche.\n     */\n    protected setSearchField(value: string): void {\n        this._searchField = value;\n    }\n\n    /** Définit la 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    protected setMaxHeight(value: NumberInput): void {\n        this._maxHeight = value === 'auto' ? null : +value || null;\n        this.viewPort.maxSize$.next(value);\n    }\n\n    /** Retourne la 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    protected getMaxHeight(): number {\n        return this._maxHeight;\n    }\n\n    /** Internal usage. Calc the best target when an item is drag and dropped */\n    protected calcDragTargetIndex$(index: number, targetIndex: number): Observable<number> {\n        return this.ensureListCaches$().pipe(\n            switchMap(() => this.getItemListService().calcDragTargetIndex$(index, targetIndex)));\n    }\n\n    /** Internal usage */\n    protected getItemTreeInfo(items: IItemBase<T>[], item: IItemBase<T>): IItemTreeInfo<T> {\n        const parentIndex = items.findIndex(itm => itm === item);\n        if (parentIndex < 0) {\n            return null;\n        }\n\n        const treeItem = item as IItemTree<T>;\n        const parentDepth = treeItem.depth;\n        let lastIndex = parentIndex;\n        const children = [] as IItemBase<T>[];\n\n        if (parentDepth !== undefined) {\n            // eslint-disable-next-line no-loops/no-loops\n            for (let i = parentIndex + 1; i < items.length; i++) {\n                const curItem = items[i] as IItemTree<T>;\n                if (curItem.depth <= parentDepth) {\n                    break;\n                }\n                children.push(curItem);\n                lastIndex = i;\n            }\n        }\n\n        return {\n            children: children,\n            item: item,\n            lastIndex: lastIndex,\n            startIndex: parentIndex\n        } as IItemTreeInfo<T>;\n    }\n\n    /** Calcule le viewport pour le conteneur spécifié. */\n    protected calcViewList$(query?: string): Observable<IViewListResult<T>> {\n        return this.getViewList$(query).pipe(\n            tap((result: IViewListResult<T>) => {\n                if (result.depthMax !== undefined) {\n                    this._depthMax = result.depthMax;\n                }\n                this.rowsCount = result.visibleList.length;\n                this.viewPort.items$.next(result.visibleList);\n            }));\n    }\n\n    protected ensureListCaches$(): Observable<IViewListResult<T>> {\n        return this._itemListService.hasCache ? of(null as IViewListResult<T>) : this.getViewList$();\n    }\n\n    /** Calcul la position de la scrollbar pour que l'élément spécifié soit dans la zone visible. */\n    protected ensureItemVisible(item: IItemBase<T> | number): void {\n        this.viewPort.ensureItem$.next(item);\n    }\n\n    /* eslint-disable @typescript-eslint/no-explicit-any */\n    /* eslint-disable @typescript-eslint/no-unsafe-return */\n    /* eslint-disable @typescript-eslint/no-unsafe-assignment */\n    /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    protected mapToIItemBase(modls: any[], selected?: boolean): IItemBase<T>[] {\n        const m = modls || [];\n        return m.map(model => {\n            const itemBase: IItemBase<T> = {};\n\n            itemBase.model = model;\n\n            const displayField = this.getTextField();\n            const valueField = this.getValueField();\n\n            if (typeof model === 'string') {\n                (<any>itemBase)[displayField] = model;\n                (<any>itemBase)[valueField] = model;\n\n                if (this._searchField) {\n                    (<any>itemBase)[this._searchField] = model;\n                }\n\n            } else {\n                (<any>itemBase)[displayField] = this.getTextValue(model);\n                (<any>itemBase)[valueField] = model[valueField];\n\n                if (this._searchField) {\n                    (<any>itemBase)[this._searchField] = model[this._searchField];\n                }\n            }\n\n            const childrenField = this.getItemListService().childrenField;\n            if (model[childrenField]) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n                (<any>itemBase)[childrenField] = this.mapToIItemBase(model[childrenField], selected);\n            } else {\n                itemBase.selected = selected || undefined;\n            }\n\n            return itemBase;\n        });\n    }\n\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    protected getVirtualSelectedEntities(value: any): unknown | unknown[] {\n        const dic = (v: any): any => {\n            if (typeof v === 'string') {\n                v = v.trim();\n            }\n            const model = {};\n            const textField = this.getTextField();\n            const valueField = this.getValueField();\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n            (<any>model)[textField] = v.toString();\n            (<any>model)[valueField] = v;\n            return model;\n        };\n\n        if (value) {\n            const modelType = typeof value;\n            if (modelType === 'string' || modelType === 'number') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n                value = this._multiSelect ? value.split(',').map(dic) : dic(value);\n            } else if (value instanceof Array && value.length) {\n                const type = typeof value[0];\n                if (type === 'string' || type === 'number') {\n                    value = this._multiSelect ? value.map(dic) : dic(value[0]);\n                }\n            } else if (value instanceof Array && !this._multiSelect) {\n                value = null;\n            }\n        }\n\n        return value;\n    }\n}\n\nexport interface IItemTreeInfo<T> {\n    item?: IItemBase<T>;\n    children?: IItemBase<T>[];\n    startIndex: number;\n    lastIndex?: 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 { IItemBase } from './item-base';\n\nexport class DejaItemEvent<T> {\n    public item: IItemBase<unknown>;\n    public model: T;\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 { IItemBase } from './item-base';\n\nexport class DejaItemsEvent<T> {\n    public items: IItemBase<unknown>[];\n    public models: T[];\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 { Component, Input } from '@angular/core';\n\nimport { ISortInfos } from './sort-infos.model';\n\n@Component({\n    selector: 'deja-sort-indicator',\n    styleUrls: ['./sort-indicator.component.scss'],\n    template: '<span [attr.sortorder]=\"sortInfos ? sortInfos.order : null\"><mat-icon>arrow_upward</mat-icon></span>'\n})\nexport class DejaSortIndicatorComponent {\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    @Input('sort-infos') public sortInfos: ISortInfos;\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 { SortOrder } from './sorting.service';\n\n/** Model de tri pour le SortingService */\nexport interface ISortInfos {\n    /* Nom du champ par lequel effectuer le tri ou fonction renvoyant le nom du champ */\n    name: string;\n    /* Ordre de tri */\n    order?: SortOrder;\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 { NgModule } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { DejaSortIndicatorComponent } from './sort-indicator.component';\n\n@NgModule({\n    declarations: [\n        DejaSortIndicatorComponent\n    ],\n    imports: [\n        MatIconModule\n    ],\n    exports: [\n        DejaSortIndicatorComponent\n    ]\n})\nexport class DejaSortingModule { }\n\nexport * from './sort-infos.model';\nexport * from './sorting.service';\nexport * from './sort-indicator.component';\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 { ISortInfos } from '../sorting/sort-infos.model';\n\nexport interface IGroupInfo {\n    sortInfos?: ISortInfos;\n    groupByField: ((model: unknown) => string) | string;\n    groupTextField?: ((model: unknown) => string) | string;\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\nexport interface IGroupParent {\n    groupedBy?: string; // Group field\n    toString?: () => string; // Label\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\nexport * from './group-infos';\nexport * from './group-parent';\nexport * from './grouping.service';\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';\n\nimport { DejaItemComponent } from './item.component';\n\n@NgModule({\n    declarations: [\n        DejaItemComponent\n    ],\n    exports: [\n        DejaItemComponent\n    ],\n    imports: [\n        CommonModule\n    ]\n})\nexport class DejaItemModule { }\n\nexport * from './viewport.service';\nexport * from './item-base';\nexport * from './item-tree';\nexport * from './item-list.service';\nexport * from './item-list-base';\nexport * from './item-event';\nexport * from './items-event';\nexport * from './item.component';\nexport * from './sorting/index';\nexport * from './grouping/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}