{"version":3,"file":"deja-js-component-viewport.mjs","sources":["../../../../projects/deja-js/component/viewport/viewport.component.ts","../../../../projects/deja-js/component/viewport/viewport.component.html","../../../../projects/deja-js/component/viewport/index.ts","../../../../projects/deja-js/component/viewport/deja-js-component-viewport.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 { coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, HostBinding, Input, TemplateRef, ViewChild } from '@angular/core';\nimport { Destroy } from '@deja-js/component/core';\nimport { IViewPort, IViewPortItem, IViewPortRefreshParams, ViewPortService } from '@deja-js/component/core/item-list';\nimport { BehaviorSubject, debounceTime, distinctUntilChanged, filter, fromEvent, interval, map, mergeWith, Observable, of, Subject, switchMap, takeUntil, tap, timer } from 'rxjs';\n\nexport type DejaViewPortScrollStyleType = 'scrollbar' | 'buttons';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [ViewPortService],\n    selector: 'deja-viewport',\n    styleUrls: ['./viewport.component.scss'],\n    templateUrl: './viewport.component.html'\n})\nexport class DejaViewPortComponent extends Destroy {\n    @HostBinding('attr.hasUpBtn') public hasUpButton = false;\n    @HostBinding('attr.hasDownBtn') public hasDownButton = false;\n    @HostBinding('attr.horizontal') public _isHorizontal = false;\n    @HostBinding('attr.buttons') public _hasButtons = false;\n\n    /** Permet de définir un template d'élément par binding */\n    @Input() public itemTemplateExternal: TemplateRef<unknown>;\n\n    @ContentChild('itemTemplate') private itemTemplateInternal: TemplateRef<unknown>;\n\n    public beforeSize: number;\n    public afterSize: number;\n    public vpItems: IDejaViewPortItem[];\n    public vpStartIndex: number;\n    public vpEndIndex: number;\n    public startOffset: number; // Buttons mode only\n\n    public get hasButtons(): boolean {\n        return this._hasButtons;\n    }\n\n    public get isHorizontal(): boolean {\n        return this._isHorizontal;\n    }\n\n    private _items: IDejaViewPortItem[];\n    private element: HTMLElement;\n    private downButton$ = new BehaviorSubject<HTMLElement>(null);\n    private upButton$ = new Subject<HTMLElement>();\n    private scrollPosition = 0;\n    private _buttonsStep: number;\n\n    @Input()\n    public set buttonsStep(value: number) {\n        this._buttonsStep = value;\n    }\n\n    public get buttonsStep(): number {\n        return this._buttonsStep || 20;\n    }\n\n    @ViewChild('down')\n    public set downButton(element: ElementRef<HTMLElement>) {\n        this.downButton$.next(element?.nativeElement || null);\n    }\n\n    @ViewChild('up')\n    public set upButton(element: ElementRef<HTMLElement>) {\n        this.upButton$.next(element?.nativeElement || null);\n    }\n\n    /** Set the list of models to render inside the viewport control */\n    @Input()\n    public set models(models: unknown[]) {\n        this.items = models ? models.map(model => ({\n            model: model\n        } as IDejaViewPortItem)) : [];\n    }\n\n    /** Set the list of items to render inside the viewport control */\n    @Input()\n    public set items(items: IDejaViewPortItem[]) {\n        this._items = items || [] as IDejaViewPortItem[];\n        if (this.viewPort.mode === 'disabled') {\n            this.vpItems = this._items;\n        }\n        this.viewPort.items$.next(this._items);\n    }\n\n    /** Set the scrolling style\n      * scrollbar: Classic scrollbars\n      * buttons: A button before is placed at the top or at the left of the list, and a button after is placed at the right or the bottom of the list.\n      */\n    @Input()\n    public set scrollingStyle(value: DejaViewPortScrollStyleType) {\n        this._hasButtons = value === 'buttons';\n    }\n\n    /** Set the direction of the items rendering\n     * vertical: The item are displayed vertically\n     * horizontal: The item are displayed horizontally\n     */\n    @Input()\n    public set direction(value: string) {\n        this.viewPort.direction$.next(value);\n        this._isHorizontal = value === 'horizontal';\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** Set the item size in fixed mode or the default item size before rendering in auto mode */\n    @Input()\n    public set itemSize(value: NumberInput) {\n        if (value) {\n            const size = coerceNumberProperty(value);\n            this.viewPort.itemsSize$.next(+value);\n            if (!this._buttonsStep) {\n                this._buttonsStep = size;\n            }\n        }\n    }\n\n    public get itemSize(): NumberInput {\n        return this.viewPort.itemsSize;\n    }\n\n    @ViewChild('wrapper', { static: true })\n    public set wrapperElement(element: ElementRef) {\n        this.element = element.nativeElement as HTMLElement;\n        this.viewPort.element$.next(this.element);\n        fromEvent<Event>(this.element, 'scroll').pipe(\n            map(event => event.target as HTMLElement),\n            map(target => Math.round(this._isHorizontal ? target.scrollLeft : target.scrollTop)),\n            takeUntil(this.destroyed$)\n        ).subscribe(scrollPos => this.viewPort.scrollPosition$.next(scrollPos));\n    }\n\n    public get itemTemplate(): TemplateRef<unknown> {\n        return this.itemTemplateExternal || this.itemTemplateInternal;\n    }\n\n    public get clientSize(): number {\n        if (!this.element) {\n            return 0;\n        }\n        return this._isHorizontal ? this.element.clientWidth : this.element.clientHeight;\n    }\n\n    public set scrollPos(value: number) {\n        const scrollPos = Math.max(coerceNumberProperty(value), 0);\n        this.scrollPosition = scrollPos;\n        this.viewPort.scrollPosition$.next(scrollPos);\n    }\n\n    public get scrollPos(): number {\n        return this.scrollPosition;\n    }\n\n    /**\n     * Définit la méthode de calcul de la taille des éléments. Les valuers acceptées sont\n     * disabled: Tous les éléments sont rendus. (< 100 éléments)\n     * fixed: Seul les éléments visibles sont rendus. La taille des éléments est constante et définie par itemsSize. (performances ++)\n     * variable: Seul les éléments visibles sont rendus. La taille des éléments est variable et définie par item.size. (performances +-)\n     * auto: Seul les éléments visibles sont rendus. La taille des éléments est calculée automatiquement (performances --)\n     */\n    @Input()\n    public set viewportMode(mode: string) {\n        this.viewPort.mode$.next(mode);\n    }\n\n    public get viewportMode(): string {\n        return this.viewPort.mode;\n    }\n\n    public constructor(private changeDetectorRef: ChangeDetectorRef, private viewPort: ViewPortService) {\n        super();\n\n        console.warn('@deja-js/component/viewport is deprecated, and will be removed in a further version. Please use @deja-js/component/v2/viewport instead.');\n\n        fromEvent<Event>(window, 'resize').pipe(\n            debounceTime(5),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            this.viewPort.deleteSizeCache();\n            this.viewPort.refresh();\n            this.changeDetectorRef.markForCheck();\n        });\n\n        const scroll = (vp: IViewPort): void => {\n            if (vp) {\n                if (!this.hasButtons) {\n                    if (this.element) {\n                        if (this._isHorizontal) {\n                            this.element.scrollLeft = vp.scrollPos;\n                        } else {\n                            this.element.scrollTop = vp.scrollPos;\n                        }\n                        this.scrollPosition = vp.scrollPos;\n                    }\n                } else {\n                    this.scrollPos = vp.scrollPos;\n                    this.startOffset = this.scrollPos - vp.beforeSize;\n                }\n            }\n            this.changeDetectorRef.markForCheck();\n        };\n\n        viewPort.viewPort$.pipe(\n            switchMap(viewPortResult => {\n                if (viewPort.mode !== 'disabled') {\n                    this.vpItems = viewPortResult.visibleItems as IDejaViewPortItem[];\n                    this.vpStartIndex = viewPortResult.startIndex;\n                    this.vpEndIndex = viewPortResult.endIndex;\n                } else {\n                    this.vpStartIndex = 0;\n                    this.vpEndIndex = 0;\n                }\n\n                if (this.hasButtons) {\n                    this.startOffset = this.scrollPos - viewPortResult.beforeSize;\n                    this.beforeSize = null;\n                    this.afterSize = null;\n                    this.hasUpButton = this.scrollPos > 0;\n                    this.hasDownButton = this.scrollPos + viewPortResult.listSize < viewPortResult.beforeSize + viewPortResult.viewPortSize + viewPortResult.afterSize;\n\n                } else {\n                    this.startOffset = 0;\n                    this.beforeSize = viewPortResult.beforeSize || null;\n                    this.afterSize = viewPortResult.afterSize || null;\n                    this.hasUpButton = false;\n                    this.hasDownButton = false;\n                }\n\n                if (viewPortResult.scrollPos !== undefined) {\n                    let length = 0;\n                    if (this.element) {\n                        const listItems = this.element.getElementsByClassName('listitem');\n                        length = listItems.length;\n                    }\n                    const rebind = length !== viewPortResult.visibleItems.length;\n                    if (!rebind) {\n                        return of(viewPortResult);\n                    } else {\n                        this.changeDetectorRef.markForCheck();\n                        return timer(1).pipe(\n                            map(() => viewPortResult)\n                        );\n                    }\n                } else {\n                    return of(null);\n                }\n            }),\n            takeUntil(this.destroyed$)\n        ).subscribe(scroll);\n\n        const mouseWheel$ = (): Observable<number> => {\n            const mouseWheelEvent$ = fromEvent<WheelEvent>(this.element, 'mousewheel');\n            return mouseWheelEvent$.pipe(\n                map(event => {\n                    event.stopPropagation();\n                    event.preventDefault();\n                    return this.scrollPos + event.deltaY;\n                })\n            );\n        };\n\n        const downButton$ = this.downButton$.pipe(\n            distinctUntilChanged()\n        );\n\n        const upButton$ = this.upButton$.pipe(\n            distinctUntilChanged()\n        );\n\n        downButton$.pipe(\n            switchMap(downButton => downButton ? mouseWheel$() : of(0)),\n            takeUntil(this.destroyed$)\n        ).subscribe(scrollPos => this.scrollPos = scrollPos);\n\n        const autoScroll$ = (event: MouseEvent, sign: number): Observable<number> => timer(750).pipe(\n            switchMap(() => interval(50)),\n            tap(() => this.scrollPos += sign * (event.ctrlKey ? this.clientSize : this.buttonsStep * 2))\n        );\n\n        const initButton$ = (button: HTMLElement): Observable<number> => {\n            const sign = button.id === 'down' ? 1 : -1;\n            const mouseUpEvent$ = fromEvent<MouseEvent>(button, 'mouseup');\n            const mouseLeaveEvent$ = fromEvent<MouseEvent>(button, 'mouseleave');\n            const mouseup$ = mouseUpEvent$.pipe(\n                mergeWith(mouseLeaveEvent$),\n                tap(upEvent => this.scrollPos += sign * (upEvent.ctrlKey ? this.clientSize : this.buttonsStep))\n            );\n\n            const mouseDownEvent$ = fromEvent<MouseEvent>(button, 'mousedown');\n            return mouseDownEvent$.pipe(\n                tap(event => this.scrollPos += sign * (event.ctrlKey ? this.clientSize : this.buttonsStep * 2)),\n                switchMap(event => autoScroll$(event, sign).pipe(\n                    takeUntil(mouseup$)\n                ))\n            );\n        };\n\n        downButton$.pipe(\n            filter(downButton => !!downButton),\n            switchMap(initButton$),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n\n        upButton$.pipe(\n            filter(upButton => !!upButton),\n            switchMap(initButton$),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n\n        downButton$.pipe(\n            mergeWith(upButton$),\n            debounceTime(10),\n            filter(needToRefresh => !!needToRefresh),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => this.viewPort.refresh());\n    }\n\n    public refresh(): void {\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** Recalcule le viewport. */\n    public refreshViewPort(item?: IViewPortItem, clearMeasuredHeight?: boolean): void {\n        const refreshParams = {} as IViewPortRefreshParams;\n        if (item) {\n            refreshParams.items = [item];\n        }\n        if (clearMeasuredHeight) {\n            refreshParams.clearMeasuredSize = clearMeasuredHeight;\n        }\n        this.viewPort.refresh(refreshParams);\n        this.changeDetectorRef.markForCheck();\n    }\n\n    public ensureVisible(item: unknown): void {\n        this.viewPort.ensureItem$.next(item);\n    }\n\n    public getCssSize(item: IViewPortItem): string {\n        const itemSize = this.getItemSize(item);\n        return itemSize ? `${itemSize}px` : 'auto';\n    }\n\n    public getItemSize(item: IViewPortItem): NumberInput {\n        if (this.viewPort.mode === 'disabled') {\n            return null;\n        } else if (this.viewPort.mode === 'fixed') {\n            return this.itemSize;\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.itemSize;\n        }\n    }\n}\n\nexport interface IDejaViewPortItem extends IViewPortItem {\n    model?: unknown;\n}\n","<div #up id=\"up\" *ngIf=\"hasButtons\"><mat-icon>keyboard_arrow_up</mat-icon></div>\n<div #wrapper id=\"viewport-wrapper\">\n\t<ng-container *ngIf=\"!isHorizontal\">\n\t\t<div *ngIf=\"beforeSize\" [style.height.px]=\"beforeSize\"></div>\n\t\t<div class=\"listitem\" *ngFor=\"let item of vpItems; let index = index\" [attr.flat]=\"vpStartIndex + index\" [style.height]=\"getCssSize(item)\" [style.margin-top.px]=\"startOffset && index === 0 ? -startOffset : null\">\n\t\t\t<ng-template [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item, index: vpStartIndex + index, size: getItemSize(item), model: item.model }\"></ng-template>\n\t\t</div>\n\t\t<div *ngIf=\"afterSize\" [style.height.px]=\"afterSize\"></div>\n\t</ng-container>\n\t<ng-container *ngIf=\"isHorizontal\">\n\t\t<div *ngIf=\"beforeSize\" [style.flex-basis.px]=\"beforeSize\"></div>\n\t\t<div class=\"listitem\" *ngFor=\"let item of vpItems; let index = index\" [attr.flat]=\"vpStartIndex + index\" [style.flex-basis]=\"getCssSize(item)\" [style.margin-left.px]=\"startOffset && index === 0 ? -startOffset : null\">\n\t\t\t<ng-template [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item, index: vpStartIndex + index, size: getItemSize(item), model: item.model }\"></ng-template>\n\t\t</div>\n\t\t<div *ngIf=\"afterSize\" [style.flex-basis.px]=\"afterSize\"></div>\n\t</ng-container>\n</div>\n<div #down id=\"down\" *ngIf=\"hasButtons\"><mat-icon>keyboard_arrow_down</mat-icon></div>","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { DejaViewPortComponent } from './viewport.component';\n\n@NgModule({\n    declarations: [\n        DejaViewPortComponent\n    ],\n    exports: [\n        DejaViewPortComponent\n    ],\n    imports: [\n        CommonModule,\n        MatIconModule\n    ]\n})\nexport class DejaViewPortModule { }\n\nexport * from './viewport.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}