{"version":3,"file":"deja-js-component-v2-tree-list.mjs","sources":["../../../../projects/deja-js/component/v2/tree-list/tree-list.component.ts","../../../../projects/deja-js/component/v2/tree-list/tree-list.component.html","../../../../projects/deja-js/component/v2/tree-list/index.ts","../../../../projects/deja-js/component/v2/tree-list/deja-js-component-v2-tree-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, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, HostBinding, Input, Optional, Output, Self, SkipSelf, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { DejaChildValidatorDirective, Destroy, KeyCodes } from '@deja-js/component/core';\nimport { Item, ItemComponent, ItemEvent, ItemService } from '@deja-js/component/v2/item-list';\nimport { ViewPort, ViewPortComponent, ViewPortItemClassEvent, ViewPortMode } from '@deja-js/component/v2/viewport';\nimport { BehaviorSubject, combineLatestWith, delay, distinctUntilChanged, filter, fromEvent, map, mergeWith, Observable, of, ReplaySubject, Subject, switchMap, takeUntil, tap, timer, withLatestFrom } from 'rxjs';\n\nexport type NgModelType = 'item' | 'model' | 'value';\n\nexport type NgControlType<T> = Item<T> | ReadonlyArray<Item<T>> | T | ReadonlyArray<T> | string | ReadonlyArray<string>;\n\n/** Composant de liste évoluée avec gestion de viewport et templating */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [\n        ItemService\n    ],\n    selector: 'tree-list',\n    styleUrls: [\n        './tree-list.component.scss'\n    ],\n    templateUrl: './tree-list.component.html'\n})\nexport class TreeListComponent<T> extends Destroy implements ControlValueAccessor {\n    /** Texte à afficher par default dans la zone de recherche */\n    @Input() public placeholder: string;\n    /**\n     * Les valeurs acceptées en paramètre se trouvent dans l'enum ViewPortMode (disabled, constant, variable ou auto)\n     * Attention, une désactivation du viewport dégrade considérablement les performances de la liste et ne doit pas être activée si la liste\n     * est suceptible de contenir beaucoup d'éléments.\n     */\n    @Input() public viewPortMode: ViewPortMode;\n    /** Texte affiché si aucune donnée n'est présente dans le tableau */\n    @Input() public nodataholder: string;\n    /** Permet de définir un template de ligne par binding */\n    @Input() public itemTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template de ligne parente par binding. */\n    @Input() public parentItemTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template d'entête de colonne par binding. */\n    @Input() public headerTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template comme prefixe de la zone de recherche par binding. */\n    @Input() public searchPrefixTemplateExternal: TemplateRef<unknown>;\n    /** Permet de définir un template comme suffixe de la zone de recherche par binding. */\n    @Input() public searchSuffixTemplateExternal: TemplateRef<unknown>;\n    /** Exécuté lorsque l'utilisateur sélectionne ou désélectionne une ligne. */\n    @Output() public readonly selectedChange = new EventEmitter<ItemEvent<T>>();\n    /** Exécuté lorsque l'utilisateur collapse une ligne. */\n    @Output() public readonly itemCollapse = new EventEmitter<ItemEvent<T>>();\n    /** Exécuté lorsque l'utilisateur étend une ligne. */\n    @Output() public readonly itemExpand = new EventEmitter<ItemEvent<T>>();\n    /** Exécuté lorsque l'utilisateur tape enter sur une ligne. */\n    @Output() public readonly itemEnter = new EventEmitter<ItemEvent<T>>();\n    /** Exécuté lorsque l'utilisateur a modifié le filtrage de la liste. */\n    @Output() public readonly queryChange = new EventEmitter<string>();\n\n    // Cancelable pre events\n    @Input() public expandingItem: (items: Item<T>) => Observable<Item<T>>;\n    @Input() public collapsingItem: (items: Item<T>) => Observable<Item<T>>;\n\n    @Input() public debugMode = false;\n\n    @HostBinding('attr.disabled') public _disabled: boolean = null;\n\n    // Templates\n    @ContentChild('itemTemplate') private itemTemplateInternal: TemplateRef<unknown>;\n    @ContentChild('parentItemTemplate') private parentItemTemplateInternal: TemplateRef<unknown>;\n    @ContentChild('headerTemplate') private headerTemplateInternal: TemplateRef<unknown>;\n    @ContentChild('searchPrefixTemplate') private searchPrefixTemplateInternal: TemplateRef<unknown>;\n    @ContentChild('searchSuffixTemplate') private searchSuffixTemplateInternal: TemplateRef<unknown>;\n\n    public viewPort$: Observable<ViewPort<T>>;\n    public listElementId: string;\n    public itemService: ItemService<T>;\n\n    private _selectedItems: ReadonlyArray<Item<T>>;\n    private ngModelType$ = new BehaviorSubject<NgModelType>('value');\n    private _ngModelType: NgModelType = 'value';\n    private writeValue$ = new ReplaySubject<NgControlType<T>>(1);\n    private multiSelect$ = new BehaviorSubject<boolean>(false);\n    private _multiSelect = false;\n    private listElement$ = new ReplaySubject<HTMLElement>(1);\n    private inputElement$ = new ReplaySubject<HTMLInputElement>(1);\n    private raiseChangeCallback = false;\n    private _currentItem: Item<T> | undefined;\n    private _pageSize = 0;\n    private filterExpression = '';\n    private _maxHeight: number;\n    private viewPortComponent$ = new ReplaySubject<ViewPortComponent<T>>(1);\n    private _viewPortComponent: ViewPortComponent<T>;\n    private _viewPortRowHeight = 40;\n    private keyboardStartIndex = undefined as number;\n    private collapseItem$ = new Subject<Item<T>>();\n    private _hintLabel: string;\n    private _searchArea = false;\n    private lastClickedItem: Item<T>; // Double-click detection\n    private reloadViewPort$ = new BehaviorSubject<void>(undefined);\n    private _query: string;\n\n    @ViewChild(ViewPortComponent)\n    public set viewPortComponent(viewPortComponent: ViewPortComponent<T>) {\n        this.viewPortComponent$.next(viewPortComponent);\n        this._viewPortComponent = viewPortComponent;\n    }\n\n    public get viewPortComponent(): ViewPortComponent<T> {\n        return this._viewPortComponent;\n    }\n\n    @ContentChildren(ItemComponent)\n    public set options(value: ReadonlyArray<ItemComponent>) {\n        if (value?.length) {\n            this.itemService.options$.next(value);\n        }\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    @Input()\n    public set viewPortRowHeight(value: NumberInput) {\n        this._viewPortRowHeight = coerceNumberProperty(value);\n    }\n\n    public get viewPortRowHeight(): NumberInput {\n        return this._viewPortRowHeight;\n    }\n\n    /** Définit la liste des éléments */\n    @Input()\n    public set items(items: ReadonlyArray<Item<T>>) {\n        delete this.hintLabel;\n        this.itemService.items$.next(items);\n    }\n\n    /** Définit la liste des éléments (tout type d'objet métier) */\n    @Input() public set models(models: ReadonlyArray<T>) {\n        this.itemService.models$.next(models);\n    }\n\n    /** Définit la liste des éléments sélectionnés en mode multiselect */\n    @Input()\n    public set selectedItems(value: ReadonlyArray<Item<T>>) {\n        this.itemService.setSelectedItems(value);\n    }\n\n    /** Retourne la liste des éléments sélectionnés en mode multiselect */\n    public get selectedItems(): ReadonlyArray<Item<T>> {\n        return this._selectedItems;\n    }\n\n    /** Définit l'élément sélectionné en mode single select */\n    @Input()\n    public set selectedItem(value: Item<T> | undefined) {\n        this.itemService.setSelectedItems(value && [value]);\n    }\n\n    /** Retourne l'éléments sélectionné en mode single select */\n    public get selectedItem(): Item<T> | undefined {\n        return this.selectedItems?.[0];\n    }\n\n    /** Définit le model sélectionné en mode single select */\n    @Input()\n    public set selectedModel(value: T | undefined) {\n        this.itemService.setSelectedModels(value && [value]);\n    }\n\n    /** Retourne le model sélectionné en mode single select */\n    public get selectedModel(): T | undefined {\n        return this.selectedModels?.[0];\n    }\n\n    /** Définit la liste des models sélectionnés en mode multiselect */\n    @Input()\n    public set selectedModels(value: ReadonlyArray<T>) {\n        this.itemService.setSelectedModels(value);\n    }\n\n    /** Retourne la liste des models sélectionnés en mode multiselect */\n    public get selectedModels(): ReadonlyArray<T> {\n        return this.selectedItems?.map(itm => itm.model);\n    }\n\n    /** Définit le model sélectionné en mode single select */\n    @Input()\n    public set selectedValue(value: string | undefined) {\n        this.itemService.setSelectedValues(value && [value]);\n    }\n\n    /** Retourne le model sélectionné en mode single select */\n    public get selectedValue(): string | undefined {\n        return this.selectedValues?.[0];\n    }\n\n    /** Définit la liste des models sélectionnés en mode multiselect */\n    @Input()\n    public set selectedValues(value: ReadonlyArray<string>) {\n        this.itemService.setSelectedValues(value);\n    }\n\n    /** Retourne la liste des models sélectionnés en mode multiselect */\n    public get selectedValues(): ReadonlyArray<string> {\n        return this.selectedItems?.map(itm => itm.id);\n    }\n\n    /** Définit une valeur indiquant si en reactive form le model renvoyé doit être un obeject oue une valeur */\n    @Input()\n    public set ngModelType(value: NgModelType) {\n        this.ngModelType$.next(value);\n    }\n\n    /** Définit une valeur indiquant si plusieurs lignes peuvent être sélectionnées. */\n    @Input()\n    public set multiSelect(value: BooleanInput) {\n        this._multiSelect = coerceBooleanProperty(value);\n        this.multiSelect$.next(this._multiSelect);\n    }\n\n    public get multiSelect(): BooleanInput {\n        return this._multiSelect;\n    }\n\n    /** Correspond au ngModel du champ de filtrage ou recherche */\n    @Input()\n    public set query(value: string) {\n        this.itemService.query$.next(value);\n    }\n\n    public get query(): string {\n        return this._query;\n    }\n\n    @Input() public set selectingItems(value: (items: ReadonlyArray<Item<T>>) => Observable<ReadonlyArray<Item<T>>>) {\n        this.itemService.selectingItems = value;\n    }\n\n    @Input() public set unSelectingItems(value: (items: ReadonlyArray<Item<T>>) => Observable<ReadonlyArray<Item<T>>>) {\n        this.itemService.unSelectingItems = value;\n    }\n\n    @ViewChild('listElement', { static: true })\n    public set listElememtRef(elem: ElementRef<HTMLElement>) {\n        this.listElement$.next(elem?.nativeElement);\n    }\n\n    @ViewChild('inputelement', { static: false })\n    public set inputElememtRef(elem: ElementRef<HTMLInputElement>) {\n        this.inputElement$.next(elem?.nativeElement);\n    }\n\n    /** Permet de désactiver la liste */\n    @Input()\n    public set disabled(value: BooleanInput) {\n        const disabled = coerceBooleanProperty(value);\n        this._disabled = disabled || null;\n    }\n\n    public get disabled(): BooleanInput {\n        return this._disabled;\n    }\n\n    /** Définit le champ utilisé pour la liste des enfants d'un parent */\n    @Input()\n    public set childrenField(value: string) {\n        this.itemService.childrenField$.next(value);\n    }\n\n    /** Définit le champ à utiliser comme valeur d'affichage. */\n    @Input()\n    public set textField(value: string) {\n        this.itemService.textField$.next(value);\n    }\n\n    /** Définit le champ à utiliser comme valeur de comparaison. */\n    @Input()\n    public set valueField(value: string) {\n        this.itemService.valueField$.next(value);\n    }\n\n    /** Définit la ligne courant ou ligne active */\n    @Input()\n    public set currentItem(item: Item<T> | undefined) {\n        this._currentItem = item;\n    }\n\n    /** Retourne la ligne courant ou ligne active */\n    public get currentItem(): Item<T> | undefined {\n        return this._currentItem;\n    }\n\n    @Input()\n    /** Définit le nombre de lignes à sauter en cas de pression sur les touches PageUp ou PageDown */\n    public set pageSize(value: NumberInput) {\n        this._pageSize = coerceNumberProperty(value);\n    }\n\n    /** Retourne le nombre de lignes à sauter en cas de pression sur les touches PageUp ou PageDown */\n    public get pageSize(): NumberInput {\n        return this._pageSize;\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    @Input()\n    public set maxHeight(value: NumberInput) {\n        this._maxHeight = coerceNumberProperty(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    public get maxHeight(): NumberInput {\n        return this._maxHeight;\n    }\n\n    /** Affiche un barre de recherche au dessus de la liste. */\n    @Input()\n    public set searchArea(value: BooleanInput) {\n        this._searchArea = coerceBooleanProperty(value);\n    }\n\n    public get searchArea(): BooleanInput {\n        return this._searchArea;\n    }\n\n    public constructor(\n        public elementRef: ElementRef,\n        @Self() @Optional() public control: NgControl,\n        localItemService: ItemService<T>,\n        @SkipSelf() @Optional() extendedItemService: ItemService<T>,\n        public changeDetectorRef: ChangeDetectorRef\n    ) {\n        super();\n\n        this.itemService = extendedItemService || localItemService;\n\n        this.listElementId = `listcontainer_${(1000000000 * Math.random()).toString().substr(10)}`;\n\n        if (this.control) {\n            this.control.valueAccessor = this;\n        }\n\n        const viewPort$ = this.viewPortComponent$.pipe(\n            filter(viewPortComponent => !!viewPortComponent),\n            switchMap(viewPortComponent => viewPortComponent.viewPort$)\n        );\n\n        this.viewPort$ = viewPort$.pipe(\n            combineLatestWith(this.reloadViewPort$),\n            map(([viewPort]) => viewPort)\n        );\n\n        this.viewPortComponent$.pipe(\n            filter(viewPortComponent => !!viewPortComponent),\n            switchMap(viewPortComponent => viewPortComponent.itemClass),\n            takeUntil(this.destroyed$)\n        ).subscribe((itemClassEvent: ViewPortItemClassEvent<T>) => {\n            const item = itemClassEvent.item as unknown as Item<T>;\n            if (item?.selected) {\n                itemClassEvent.classes.push('selected');\n            }\n            if (item === this.currentItem) {\n                itemClassEvent.classes.push('current');\n            }\n            if (item.className) {\n                itemClassEvent.classes.push(item.className);\n            }\n            if (item.collapsing || item.expanding) {\n                itemClassEvent.classes.push('hide');\n            }\n            if (item.items) {\n                itemClassEvent.classes.push('parent');\n            }\n            if (item.collapsed) {\n                itemClassEvent.classes.push('collapsed');\n            }\n            if (!item.isSelectable) {\n                itemClassEvent.classes.push('unselectable');\n            }\n            if (item.odd) {\n                itemClassEvent.classes.push('odd');\n            }\n            if (item.depth) {\n                itemClassEvent.classes.push(`depth${item.depth}`);\n            }\n        });\n\n        this.itemService.selectedItems$.pipe(\n            tap(selectedItems => {\n                this._selectedItems = selectedItems;\n\n                if (this.raiseChangeCallback) {\n                    this.onChangeCallback(this.value);\n                    this.onTouchedCallback();\n                    this.raiseChangeCallback = false;\n\n                    if (this.selectedChange.observed) {\n                        const selectedModels = this.selectedModels;\n                        this.selectedChange.next({\n                            item: selectedItems[0],\n                            model: selectedModels[0],\n                            items: selectedItems,\n                            models: selectedModels\n                        } as ItemEvent<T>);\n                    }\n                }\n            }),\n            withLatestFrom(this.viewPortComponent$),\n            filter(([_, viewPortComponent]) => !!viewPortComponent),\n            delay(1),\n            takeUntil(this.destroyed$)\n        ).subscribe(([_, viewPortComponent]) => {\n            viewPortComponent.reloadViewPort();\n        });\n\n        this.itemService.query$.pipe(\n            map(query => query || ''),\n            distinctUntilChanged(),\n            filter(query => typeof query === 'string'),\n            takeUntil(this.destroyed$)\n        ).subscribe(query => {\n            this._query = query as string;\n            this.queryChange.emit(this._query);\n        });\n\n        const modelType$ = this.ngModelType$.pipe(\n            tap(modelType => this._ngModelType = modelType)\n        );\n\n        this.writeValue$.pipe(\n            combineLatestWith(this.multiSelect$, modelType$),\n            takeUntil(this.destroyed$)\n        ).subscribe(([value, multiSelect, modelType]) => {\n            if (!value) {\n                this.itemService.unselectAll();\n            } else if (multiSelect) {\n                switch (modelType) {\n                    case 'item':\n                        this.selectedItems = value as ReadonlyArray<Item<T>>;\n                        break;\n                    case 'model':\n                        this.selectedModels = value as ReadonlyArray<T>;\n                        break;\n                    default:\n                        this.selectedValues = value as ReadonlyArray<string>;\n                }\n            } else {\n                switch (modelType) {\n                    case 'item':\n                        this.selectedItem = value as Item<T>;\n                        break;\n                    case 'model':\n                        this.selectedModel = value as T;\n                        break;\n                    default:\n                        this.selectedValue = value as string;\n                }\n            }\n        });\n\n        // Clear text selection on double-click\n        this.listElement$.pipe(\n            switchMap(element => fromEvent<MouseEvent>(element, 'dblclick')),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => window.getSelection().empty());\n\n        this.listElement$.pipe(\n            switchMap(element => fromEvent<MouseEvent>(element, 'mousedown').pipe(\n                withLatestFrom(this.viewPort$, this.itemService.visibleItemList$),\n                switchMap(([event, viewPort, visibleItemList]) => {\n                    if (this.disabled) {\n                        return of(null);\n                    }\n\n                    const target = event.target as HTMLElement;\n                    const itemIndex = this.itemService.getItemIndexFromHtmlElement(target);\n                    if (itemIndex === undefined) {\n                        return of(null);\n                    }\n\n                    const isExpandButton = (el: HTMLElement): boolean => el.hasAttribute('expandbtn') || el.parentElement.hasAttribute('expandbtn');\n\n                    const clickedItem = viewPort.visibleItems[itemIndex - viewPort.startIndex] as unknown as Item<T>;\n\n                    if ((!isExpandButton(target) || !clickedItem.isCollapsible) && clickedItem.isSelectable && (!event.ctrlKey || !this.multiSelect) && (event.button === 0 || !clickedItem.selected)) {\n                        if (event.shiftKey && this.multiSelect) {\n                            // Select all from current to clicked\n                            const startIndex = Math.max(visibleItemList.findIndex(item => this.currentItem === item), 0);\n                            const rangeSelection = visibleItemList.slice(Math.min(startIndex, itemIndex), Math.max(startIndex, itemIndex) + 1).filter(item => item.isSelectable);\n                            this.raiseChangeCallback = true;\n                            this.itemService.setSelectedItems(rangeSelection);\n                            this.viewPortComponent.reloadViewPort();\n                            return of(null);\n\n                        } else if (!event.ctrlKey) {\n                            if (!this.multiSelect && clickedItem.selected) {\n                                return of(null);\n                            } else if (!this.multiSelect || !clickedItem.selected) {\n                                this.raiseChangeCallback = true;\n                                this.itemService.setSelectedItems([clickedItem]);\n                                this.currentItem = clickedItem;\n                                this.ensureItemVisible(clickedItem);\n                                this.viewPortComponent.reloadViewPort();\n                                this.lastClickedItem = clickedItem; // Keep for double-click\n\n                                return of(clickedItem);\n                            }\n                        }\n                    }\n\n                    return fromEvent<MouseEvent>(element, 'mouseup').pipe(\n                        filter(() => !this.disabled),\n                        tap(upevt => {\n                            const upTarget = upevt.target as HTMLElement;\n                            const upIndex = this.itemService.getItemIndexFromHtmlElement(upTarget);\n                            if (upIndex === undefined) {\n                                return;\n                            }\n\n                            const upItem = viewPort.visibleItems[upIndex - viewPort.startIndex] as unknown as Item<T>;\n                            if (clickedItem && upItem !== clickedItem) {\n                                return;\n                            }\n\n                            if (upevt.button !== 0) {\n                                // Right click menu\n                                return;\n                            }\n\n                            if (upItem.isCollapsible && (isExpandButton(upTarget) || !upItem.isSelectable || this.lastClickedItem === upItem)) {\n                                this.collapseItem$.next(upItem);\n                                this.ensureItemVisible(upItem);\n\n                            } else if (upItem.isSelectable) {\n                                this.raiseChangeCallback = true;\n                                if (upevt.ctrlKey && this.multiSelect) {\n                                    this.itemService.toggleSelect([upItem]);\n                                } else if (upevt.ctrlKey) {\n                                    if (upItem.selected) {\n                                        this.itemService.unselectAll();\n                                    } else {\n                                        this.itemService.setSelectedItems([upItem]);\n                                    }\n                                } else {\n                                    this.itemService.setSelectedItems([upItem]);\n                                }\n\n                                this.keyboardStartIndex = undefined;\n                                this.currentItem = upItem;\n                                this.ensureItemVisible(upItem);\n                                this.viewPortComponent.reloadViewPort();\n                                this.lastClickedItem = upItem; // Keep for double-click\n                            } else {\n                                this.lastClickedItem = upItem; // Keep for double-click\n                            }\n                        }),\n                        delay(300),\n                        tap(() => {\n                            this.lastClickedItem = undefined;\n                        })\n                    );\n                })\n            )),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n\n        const inputKeyDownEvents$ = this.inputElement$.pipe(\n            switchMap(inputElement => {\n                if (inputElement) {\n                    return fromEvent<KeyboardEvent>(inputElement, 'keydown');\n                }\n                return of(null as KeyboardEvent);\n            }),\n            filter(event => !!event)\n        );\n\n        const listKeyDownEvent$ = this.listElement$.pipe(\n            switchMap(listElement => fromEvent<KeyboardEvent>(listElement, 'keydown'))\n        );\n\n        listKeyDownEvent$.pipe(\n            mergeWith(inputKeyDownEvents$),\n            filter(() => !this.disabled),\n            filter(event => {\n                const keyCode = event.code;\n                return keyCode === KeyCodes.Home ||\n                    keyCode === KeyCodes.End ||\n                    keyCode === KeyCodes.PageUp ||\n                    keyCode === KeyCodes.PageDown ||\n                    keyCode === KeyCodes.UpArrow ||\n                    keyCode === KeyCodes.DownArrow ||\n                    keyCode === KeyCodes.Space ||\n                    keyCode === KeyCodes.Enter;\n            }),\n            withLatestFrom(this.viewPort$, this.itemService.visibleItemList$, this.listElement$),\n            takeUntil(this.destroyed$)\n        ).subscribe(([event, viewPort, visibleItemList, listElement]) => {\n            let stopEvent = false;\n\n            if (listElement?.clientHeight && this.viewPortRowHeight && this.pageSize === 0) {\n                this.pageSize = Math.floor(listElement.clientHeight / +this.viewPortRowHeight);\n            }\n\n            // Set current item from index for keyboard features only\n            const setCurrentIndex = (index: number): void => {\n                this.currentItem = viewPort.items[index] as unknown as Item<T>;\n                this.ensureItemVisible(this.currentItem);\n                this.viewPortComponent.reloadViewPort();\n            };\n\n            const selectRange = (currentIndex: number, target: number): void => {\n                const rangeSelection = visibleItemList.slice(Math.min(currentIndex, target), Math.max(currentIndex, target) + 1).filter(item => item.isSelectable);\n                this.raiseChangeCallback = true;\n                this.itemService.setSelectedItems(rangeSelection);\n            };\n\n            const navigateToIndex = (nextIndex: number): void => {\n                if (this.multiSelect && event.shiftKey) {\n                    selectRange(currentIndex, nextIndex);\n                    this.ensureItemVisible(nextIndex);\n                    this.viewPortComponent.reloadViewPort();\n                } else if (!event.ctrlKey) {\n                    this.raiseChangeCallback = true;\n                    this.selectedItem = viewPort.items[nextIndex] as unknown as Item<T>;\n                    setCurrentIndex(nextIndex);\n                } else {\n                    setCurrentIndex(nextIndex);\n                }\n                this.keyboardStartIndex = nextIndex;\n                stopEvent = true;\n            };\n\n            const currentIndex = visibleItemList.findIndex(item => this.currentItem === item);\n            let target: HTMLElement;\n\n            switch (event.code) {\n                case KeyCodes.Home:\n                    if (this.multiSelect && event.shiftKey) {\n                        // Select all from current to first élément\n                        selectRange(currentIndex, 0);\n                    } else if (!event.ctrlKey) {\n                        // Select first element\n                        this.raiseChangeCallback = true;\n                        this.selectedItem = viewPort.items[0] as unknown as Item<T>;\n                    }\n                    setCurrentIndex(0);\n                    this.keyboardStartIndex = 0;\n                    stopEvent = true;\n                    break;\n\n                case KeyCodes.End:\n                    if (this.multiSelect && event.shiftKey) {\n                        // Select all from current to last élément\n                        selectRange(currentIndex, visibleItemList.length - 1);\n                    } else if (!event.ctrlKey) {\n                        // Select last element\n                        this.raiseChangeCallback = true;\n                        this.selectedItem = viewPort.items[viewPort.items.length - 1] as unknown as Item<T>;\n                    }\n                    setCurrentIndex(viewPort.items.length - 1);\n                    this.keyboardStartIndex = viewPort.items.length - 1;\n                    stopEvent = true;\n                    break;\n\n                case KeyCodes.PageUp:\n                    // Select previous page\n                    navigateToIndex(Math.max(0, (this.keyboardStartIndex ?? currentIndex) - this._pageSize));\n                    break;\n\n                case KeyCodes.PageDown:\n                    // Select next page\n                    navigateToIndex(Math.max(0, (this.keyboardStartIndex ?? currentIndex) + this._pageSize));\n                    break;\n\n                case KeyCodes.UpArrow:\n                    // Select previous element\n                    navigateToIndex(Math.max(0, (this.keyboardStartIndex ?? currentIndex) - 1));\n                    break;\n\n                case KeyCodes.DownArrow:\n                    // Select next element\n                    navigateToIndex(Math.min(viewPort.items.length - 1, (this.keyboardStartIndex ?? currentIndex) + 1));\n                    break;\n\n                case KeyCodes.Space:\n                    target = event.target as HTMLElement;\n                    if (target.tagName === 'INPUT' && !event.ctrlKey && !event.shiftKey) {\n                        return;\n                    }\n\n                    if (this.currentItem) {\n                        if (this.currentItem.isCollapsible) {\n                            this.collapseItem$.next(this.currentItem);\n                            this.ensureItemVisible(this.currentItem);\n                        } else {\n                            this.raiseChangeCallback = true;\n                            if (this.currentItem.selected || this.multiSelect && event.ctrlKey) {\n                                this.itemService.toggleSelect([this.currentItem]);\n                            } else {\n                                this.selectedItem = this.currentItem;\n                            }\n                            this.ensureItemVisible(this.currentItem);\n                            this.viewPortComponent.reloadViewPort();\n                        }\n                    }\n                    break;\n\n                case KeyCodes.Enter:\n                    if (this.currentItem) {\n                        if (this.currentItem.isCollapsible) {\n                            this.collapseItem$.next(this.currentItem);\n                            this.ensureItemVisible(this.currentItem);\n\n                        } else if (this.currentItem.isSelectable) {\n                            if (this.itemEnter.observed) {\n                                this.itemEnter.next({\n                                    item: this.currentItem,\n                                    items: [this.currentItem],\n                                    model: this.currentItem.model,\n                                    models: this.currentItem.model && [this.currentItem.model]\n                                } as ItemEvent<T>);\n                            } else {\n                                this.raiseChangeCallback = true;\n                                this.selectedItem = this.currentItem;\n                                this.ensureItemVisible(this.currentItem);\n                                this.viewPortComponent.reloadViewPort();\n                            }\n                        }\n                    }\n                    break;\n\n                default:\n                    // eslint-disable-next-line no-debugger\n                    debugger;\n                    this.keyboardStartIndex = undefined;\n            }\n\n            if (stopEvent) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        });\n\n        const inputKeyboardEvents$ = this.inputElement$.pipe(\n            switchMap(inputElement => {\n                if (inputElement) {\n                    const inputKeyup$ = fromEvent<KeyboardEvent>(inputElement, 'keyup');\n                    const inputDrop$ = fromEvent<KeyboardEvent>(inputElement, 'drop');\n                    return inputKeyup$.pipe(\n                        mergeWith(inputDrop$)\n                    );\n                }\n                return of(null as KeyboardEvent);\n            }),\n            filter(event => !!event)\n        );\n\n        const listKeyboardEvent$ = this.listElement$.pipe(\n            switchMap(listElement => fromEvent<KeyboardEvent>(listElement, 'keyup'))\n        );\n\n        listKeyboardEvent$.pipe(\n            mergeWith(inputKeyboardEvents$),\n            filter(() => !this.disabled),\n            filter(event => {\n                const keyCode = event.code;\n                return keyCode >= KeyCodes.Key0 ||\n                    keyCode === KeyCodes.Backspace ||\n                    keyCode === KeyCodes.Space ||\n                    keyCode === KeyCodes.Delete;\n            }),\n            withLatestFrom(this.viewPort$),\n            filter(([_, viewPort]) => viewPort.items?.length > 0),\n            switchMap(([event, viewPort]) => {\n                if (!this.searchArea) {\n                    if ((/[a-zA-Z0-9]/).test(event.key)) {\n                        // Valid char\n                        const findNextMatch = (): boolean => {\n                            const rg = new RegExp(`^${this.filterExpression}`, 'i');\n                            const startIndex = Math.max(viewPort.items.findIndex(item => this.currentItem === item), 0);\n                            let nextIndex = this.filterExpression.length > 1 ? startIndex : startIndex + 1;\n                            // Just turn the number of items max\n                            return viewPort.items.some(() => {\n                                // That the real index and item in the loop\n                                const item = viewPort.items[nextIndex] as unknown as Item<T>;\n                                if (item?.isSelectable) {\n                                    if (rg.test(item.label)) {\n                                        // Found, set current item\n                                        this.raiseChangeCallback = true;\n                                        this.selectedItem = this.currentItem = item;\n                                        this.ensureItemVisible(this.currentItem);\n                                        this.viewPortComponent.reloadViewPort();\n                                        return true; // Find, stop the loop\n                                    }\n                                }\n                                nextIndex++;\n                                if (nextIndex >= viewPort.items.length) {\n                                    nextIndex = 0;\n                                }\n                                return false;\n                            });\n                        };\n\n                        // Search next\n                        this.filterExpression += event.key;\n                        if (findNextMatch()) {\n                            event.preventDefault();\n                            event.stopPropagation();\n                        } else {\n                            this.filterExpression = event.key;\n                            if (findNextMatch()) {\n                                event.preventDefault();\n                                event.stopPropagation();\n                            }\n                        }\n                    }\n                } else {\n                    // Autocomplete, filter the list\n                    // this.keyboardNavigation$.next();\n                }\n\n                // clear filterExpression after 1 second\n                // Timer is automatically canceled by the switchmap if a second character is typed before 1 second\n                return timer(1000);\n            }),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            this.filterExpression = '';\n        });\n\n        this.collapseItem$.pipe(\n            switchMap(item => {\n                if (!item.collapsed && this.collapsingItem) {\n                    return this.collapsingItem(item);\n                } else if (this.expandingItem) {\n                    return this.expandingItem(item);\n                } else {\n                    return of(item);\n                }\n            }),\n            filter(item => !!item),\n            takeUntil(this.destroyed$)\n        ).subscribe(item => {\n            item.collapsed = !item.collapsed;\n            this.itemService.refreshVisibleItemList$.next();\n            const itemEvent = {\n                item: item,\n                model: item.model,\n                items: [item],\n                models: [item.model]\n            } as ItemEvent<T>;\n            if (item.collapsed) {\n                this.itemCollapse.emit(itemEvent);\n            } else {\n                this.itemExpand.emit(itemEvent);\n            }\n        });\n\n        this.maxHeight = 0;\n    }\n\n    /** Définit la longueur minimale de caractères dans le champ de recherche avant que la recherche ou le filtrage soient effectués */\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    @Input('min-search-length')\n    public set minSearchlength(value: NumberInput) {\n        this.itemService.minSearchLength$.next(coerceNumberProperty(value));\n    }\n\n    /** Définit un texte de conseil en cas d'erreur de validation ou autre */\n    @Input()\n    public set hintLabel(value: string) {\n        this._hintLabel = value;\n    }\n\n    /** Retourne un texte de conseil en cas d'erreur de validation ou autre */\n    public get hintLabel(): string {\n        return this._hintLabel;\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     */\n    @Input()\n    public set searchField(value: string) {\n        this.itemService.searchField$.next(value);\n    }\n\n    @ViewChild(DejaChildValidatorDirective)\n    public set inputValidatorDirective(value: DejaChildValidatorDirective) {\n        if (value) {\n            value.parentControl = this.control;\n        }\n    }\n\n    public get itemTemplate(): TemplateRef<unknown> {\n        return this.itemTemplateExternal || this.itemTemplateInternal;\n    }\n\n    public get parentItemTemplate(): TemplateRef<unknown> {\n        return this.parentItemTemplateExternal || this.parentItemTemplateInternal;\n    }\n\n    public get headerTemplate(): TemplateRef<unknown> {\n        return this.headerTemplateExternal || this.headerTemplateInternal;\n    }\n\n    public get searchPrefixTemplate(): TemplateRef<unknown> {\n        return this.searchPrefixTemplateExternal || this.searchPrefixTemplateInternal;\n    }\n\n    public get searchSuffixTemplate(): TemplateRef<unknown> {\n        return this.searchSuffixTemplateExternal || this.searchSuffixTemplateInternal;\n    }\n\n    // ************* ControlValueAccessor Implementation **************\n    public get value(): NgControlType<T> {\n        if (this._multiSelect) {\n            switch (this._ngModelType) {\n                case 'item':\n                    return this.selectedItems;\n                case 'model':\n                    return this.selectedModels;\n                default:\n                    return this.selectedValues;\n            }\n        } else {\n            switch (this._ngModelType) {\n                case 'item':\n                    return this.selectedItem;\n                case 'model':\n                    return this.selectedModel;\n                default:\n                    return this.selectedValue;\n            }\n        }\n    }\n\n    public set value(val: NgControlType<T>) {\n        this.writeValue(val);\n        this.onChangeCallback(val);\n        this.onTouchedCallback();\n    }\n\n    public writeValue(value: NgControlType<T>): void {\n        this.writeValue$.next(value);\n    }\n\n    public registerOnChange(fn: (_a: unknown) => void): void {\n        this.onChangeCallback = fn;\n    }\n\n    public registerOnTouched(fn: () => void): void {\n        this.onTouchedCallback = fn;\n    }\n\n    public setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n    // ************* End of ControlValueAccessor Implementation **************\n\n    /** Positionne a scrollbar pour assurer que l'élément spécifié soit visible */\n    public ensureItemVisible(item: Item<T> | number): void {\n        if (this.viewPortComponent) {\n            this.viewPortComponent.ensureVisible(item);\n        }\n    }\n\n    /** Rebind le viewport */\n    public reloadViewPort(): void {\n        if (this.viewPortComponent) {\n            this.viewPortComponent.reloadViewPort();\n        }\n    }\n\n    /** Recalcule le viewport. */\n    public refreshViewPort(clearMeasuredSize?: boolean): void {\n        if (this.viewPortComponent) {\n            this.viewPortComponent.refreshViewPort(clearMeasuredSize);\n        }\n    }\n\n    /** Efface le viewport */\n    public clearViewPort(): void {\n        if (this.viewPortComponent) {\n            this.viewPortComponent.clearViewPort();\n        }\n    }\n\n    // NgModel implementation\n    public onTouchedCallback = (): void => undefined;\n    public onChangeCallback = (_a?: unknown): void => undefined;\n}\n","<div id=\"header\" *ngIf=\"searchArea || (itemService.minSearchLength$ | async)\">\n    <mat-form-field deja-child-validator id=\"input\">\n        <input #inputelement type=\"text\" matInput tabindex=\"0\" [ngModel]=\"itemService.query$ | async\" [placeholder]=\"placeholder\" [disabled]=\"disabled\" (input)=\"itemService.query$.next(model && model.value)\" #model=\"ngModel\">\n        <span *ngIf=\"searchPrefixTemplate\" matPrefix>\n            <ng-template [ngTemplateOutlet]=\"searchPrefixTemplate\"></ng-template>\n        </span>\n        <span *ngIf=\"searchSuffixTemplate\" matSuffix>\n            <ng-template [ngTemplateOutlet]=\"searchSuffixTemplate\"></ng-template>\n        </span>\n    </mat-form-field>\n</div>\n<div id=\"listheader\" *ngIf=\"headerTemplate\">\n    <ng-template [ngTemplateOutlet]=\"headerTemplate\"></ng-template>\n</div>\n<div [id]=\"listElementId\" #listElement class=\"listcontainer\" [style.max-height.px]=\"maxHeight || null\" tabindex=\"1\" [class.hasheader]=\"headerTemplate\">\n    <div id=\"error-hint\" *ngIf=\"hintLabel\">{{ hintLabel }}</div>\n    <ng-container *ngIf=\"itemService.visibleItemList$ | async as itemList\">\n        <div id=\"nodata-holder\" *ngIf=\"!itemList.length\">{{ nodataholder }}</div>\n        <viewport *ngIf=\"itemList.length\" [items]=\"itemList\" [itemSize]=\"viewPortRowHeight\" [viewPortMode]=\"viewPortMode\" [debugMode]=\"debugMode\">\n            <ng-template #viewPortItemTemplate let-item let-size=\"size\" let-index=\"index\">\n                <span expandbtn>\n                    <mat-icon *ngIf=\"item.items?.length\">arrow_drop_down</mat-icon>\n                </span>\n                <ng-container *ngIf=\"(!item.items || !parentItemTemplate) && (item.items || !itemTemplate)\">{{ item.label }}</ng-container>\n                <ng-container *ngIf=\"item.items && parentItemTemplate\">\n                    <ng-template [ngTemplateOutlet]=\"parentItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item, query: query, flatindex: index }\"></ng-template>\n                </ng-container>\n                <ng-container *ngIf=\"!item.items && itemTemplate\">\n                    <ng-template [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item, query: query, flatindex: index }\"></ng-template>\n                </ng-container>\n            </ng-template>\n        </viewport>\n    </ng-container>\n</div>\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { DejaChildValidatorModule } from '@deja-js/component/core';\nimport { ItemModule } from '@deja-js/component/v2/item-list';\nimport { ViewPortModule } from '@deja-js/component/v2/viewport';\n\nimport { TreeListComponent } from './tree-list.component';\n\n@NgModule({\n    declarations: [\n        TreeListComponent\n    ],\n    exports: [\n        TreeListComponent\n    ],\n    imports: [\n        CommonModule,\n        DejaChildValidatorModule,\n        FormsModule,\n        ItemModule,\n        MatIconModule,\n        MatInputModule,\n        ViewPortModule\n    ]\n})\nexport class TreeListModule { }\n\nexport * from './tree-list.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}