{"version":3,"file":"deja-js-component-v2-numeric-stepper.mjs","sources":["../../../../projects/deja-js/component/v2/numeric-stepper/numeric-stepper.component.ts","../../../../projects/deja-js/component/v2/numeric-stepper/numeric-stepper.component.html","../../../../projects/deja-js/component/v2/numeric-stepper/index.ts","../../../../projects/deja-js/component/v2/numeric-stepper/deja-js-component-v2-numeric-stepper.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 { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { Destroy, KeyCodes } from '@deja-js/component/core';\nimport { combineLatestWith, debounceTime, delay, filter, fromEvent, map, mergeWith, ReplaySubject, shareReplay, startWith, Subject, switchMap, takeUntil, tap, timer, withLatestFrom } from 'rxjs';\n\nexport type DejaNumericStepperLayout = 'vertical' | 'horizontal' | 'horizontal-inlay';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'deja-numeric-stepper',\n    styleUrls: ['./numeric-stepper.component.scss'],\n    templateUrl: './numeric-stepper.component.html',\n    encapsulation: ViewEncapsulation.None\n})\nexport class DejaNumericStepperComponent extends Destroy implements OnInit {\n    private static TYPE_ERROR = 'Input element on the same mat-form-field must be type=\"number\". With other input type, use increment or decrement events and implement your proper functions to change the value.';\n    private static STEP_FN_ERROR = 'Input element on the same mat-form-field must implement stepDown/stepUp functions.';\n    private static INPUT_ERROR = 'To use the automatic binding, you must specify the input field with a matInput reference. [input]=\"matInputRef\"';\n\n    @HostBinding('attr.layout') @Input()\n    public layout: DejaNumericStepperLayout = 'vertical';\n\n    @Output() public readonly increment = new EventEmitter<void>();\n    @Output() public readonly decrement = new EventEmitter<void>();\n\n    @Input() public input: MatFormFieldControl<unknown>;\n\n    @Input()\n    public set arrowIcons(value: BooleanInput) {\n        this._arrowIcons = coerceBooleanProperty(value);\n    }\n\n    public get arrowIcons(): BooleanInput {\n        return this._arrowIcons;\n    }\n\n    @Input()\n    public set showOnInit(value: BooleanInput) {\n        this._showOnInit = coerceBooleanProperty(value);\n    }\n\n    public get showOnInit(): BooleanInput {\n        return this._showOnInit;\n    }\n\n    @HostBinding('attr.hover')\n    protected hover = null as boolean;\n\n    public leftUp: number = null;\n    public leftDown: number = null;\n    public topUp: number = null;\n    public topDown: number = null;\n    public leftShadow: number = null;\n    public topShadow: number = null;\n    public widthShadow: number = null;\n    public heightShadow: number = null;\n\n    public disableUp = false;\n    public disableDown = false;\n    public clickArrow$ = new Subject<boolean>();\n    public show$ = new ReplaySubject<void>(1);\n\n    private validateArrows$ = new Subject<void>();\n    private _arrowIcons = false;\n    private _showOnInit = false;\n    private arrowSize = 32;\n    private parentAppearance: string = null;\n\n    public constructor(\n        private elementRef: ElementRef<HTMLElement>,\n        private changeDetectorRef: ChangeDetectorRef\n    ) {\n        super();\n    }\n\n    public ngOnInit(): void {\n        const calcPositions = (linkedElements: { formFieldElement: HTMLElement; containerElement: HTMLElement; inputElement: HTMLInputElement }): void => {\n            const containerBounds = linkedElements.containerElement?.getBoundingClientRect();\n            const formFieldBounds = linkedElements.formFieldElement?.getBoundingClientRect();\n            const inputBounds = linkedElements.inputElement.getBoundingClientRect() || formFieldBounds;\n\n            const bounds = this.elementRef.nativeElement.getBoundingClientRect();\n\n            this.validateArrows$.next();\n\n            // Ensure delayed hover in case of the mouse leave accidentally\n            linkedElements.formFieldElement.setAttribute('hover', '');\n\n            if (this.layout === 'horizontal') {\n                this.heightShadow = Math.min(48, containerBounds?.height || formFieldBounds.height) + 2;\n                this.topShadow = (containerBounds?.top ?? inputBounds.top + (inputBounds.height - this.heightShadow) / 2 - 5) - bounds.top;\n                this.leftDown = this.leftShadow = formFieldBounds.left - bounds.left - 28;\n                this.leftUp = formFieldBounds.right - bounds.left;\n                this.widthShadow = this.leftUp - this.leftDown + 28;\n\n                if (this.parentAppearance === 'LEGACY' || this.parentAppearance === 'STANDARD') {\n                    this.heightShadow -= 6;\n                } else if (this.parentAppearance === 'FILL') {\n                    this.heightShadow -= 2;\n                }\n\n                this.topUp = this.topDown = inputBounds.top + (inputBounds.height - this.arrowSize) / 2 - bounds.top;\n\n            } else if (this.layout === 'horizontal-inlay') {\n                this.heightShadow = Math.min(48, containerBounds?.height || formFieldBounds.height) + 4;\n                this.topShadow = containerBounds?.top ?? (inputBounds.top + (inputBounds.height - this.heightShadow) / 2 - 5) - bounds.top;\n                this.leftDown = this.leftShadow = formFieldBounds.left - bounds.left;\n                this.leftUp = formFieldBounds.right - bounds.left - 28;\n                this.widthShadow = this.leftUp - this.leftDown + 28;\n\n                if (this.parentAppearance === 'LEGACY' || this.parentAppearance === 'STANDARD') {\n                    const addedPadding = 6;\n                    this.widthShadow += addedPadding * 2;\n                    this.leftDown -= addedPadding;\n                    this.leftUp += addedPadding;\n                    this.heightShadow -= addedPadding;\n                    this.leftShadow -= addedPadding;\n                } else if (this.parentAppearance === 'FILL') {\n                    this.heightShadow -= 2;\n                }\n\n                this.topUp = this.topDown = inputBounds.top + (inputBounds.height - this.arrowSize) / 2 - bounds.top;\n\n            } else {\n                this.heightShadow = 90;\n                this.topShadow = inputBounds.top - bounds.top + (inputBounds.height - this.heightShadow) / 2;\n                this.leftShadow = (containerBounds?.left ?? formFieldBounds.left) - bounds.left;\n                this.topUp = this.topShadow;\n                this.topDown = this.topShadow + this.heightShadow - this.arrowSize;\n                this.widthShadow = containerBounds?.width || formFieldBounds.width;\n                this.leftUp = this.leftDown = formFieldBounds.left + (formFieldBounds.width - this.arrowSize) / 2 - bounds.left;\n            }\n\n            this.changeDetectorRef.markForCheck();\n        };\n\n        const linkedElements$ = timer(100).pipe(\n            map(() => {\n                // Find form field\n                let parentElement = this.elementRef.nativeElement.parentElement;\n                let formFieldElement: HTMLElement;\n                let containerElement: HTMLElement;\n                let inputElement: HTMLInputElement;\n\n                // eslint-disable-next-line no-loops/no-loops\n                while (parentElement) {\n                    if (parentElement.tagName === 'MAT-FORM-FIELD' || parentElement.hasAttribute('deja-numeric-stepper-form-field')) {\n                        formFieldElement = parentElement;\n                    }\n                    if (parentElement.hasAttribute('deja-numeric-stepper-container')) {\n                        containerElement = parentElement;\n                    }\n                    if (containerElement && formFieldElement) {\n                        break;\n                    }\n                    parentElement = parentElement.parentElement;\n                }\n\n                if (formFieldElement) {\n                    formFieldElement.setAttribute('deja-numeric-stepper-form-field', this.layout);\n                    this.parentAppearance = formFieldElement.getAttribute('appearance')?.toUpperCase();\n                }\n\n                if (!formFieldElement) {\n                    console.error('deja-numeric-stepper work only inside a mat-form-field or a [deja-numeric-stepper-form-field] element');\n                } else {\n                    inputElement = formFieldElement.getElementsByTagName('INPUT')?.[0] as HTMLInputElement || null;\n\n                    if (!inputElement) {\n                        console.error('deja-numeric-stepper work only inside a mat-form-field or a [deja-numeric-stepper-form-field] element containing an input element');\n                    }\n                }\n\n                return { formFieldElement, containerElement, inputElement };\n            }),\n            filter(containerElements => containerElements.formFieldElement && !!containerElements.inputElement),\n            shareReplay(1)\n        );\n\n        const step = (inputElement: HTMLInputElement, event: 'increment' | 'decrement', fn: 'stepUp' | 'stepDown'): void => {\n            if (this[event].observed) {\n                this[event].emit();\n            } else {\n                if (inputElement?.type !== 'number') {\n                    throw new Error(DejaNumericStepperComponent.TYPE_ERROR);\n                }\n\n                if (!inputElement[fn]) {\n                    throw new Error(DejaNumericStepperComponent.STEP_FN_ERROR);\n                }\n\n                if (!this.input?.ngControl?.control) {\n                    throw new Error(DejaNumericStepperComponent.INPUT_ERROR);\n                }\n\n                inputElement[fn]();\n                this.input.ngControl.control.setValue(+inputElement.value);\n            }\n            this.validateArrows$.next();\n        };\n\n        const step$ = this.clickArrow$.pipe(\n            debounceTime(10),\n            withLatestFrom(linkedElements$),\n            tap(([isUp, linkedElements]) => {\n                if (isUp && !this.disableUp) {\n                    step(linkedElements.inputElement, 'increment', 'stepUp');\n                }\n                if (!isUp && !this.disableDown) {\n                    step(linkedElements.inputElement, 'decrement', 'stepDown');\n                }\n            }),\n            shareReplay({ bufferSize: 1, refCount: false })\n        );\n\n        const valueChange$ = linkedElements$.pipe(\n            switchMap(linkedElements => fromEvent<void>(linkedElements.inputElement, 'input').pipe(\n                mergeWith(step$, fromEvent<void>(linkedElements.inputElement, 'paste'), fromEvent<void>(linkedElements.inputElement, 'keypress'))\n            )),\n            debounceTime(50),\n            startWith(null as void)\n        );\n\n        linkedElements$.pipe(\n            switchMap(linkedElements => fromEvent<MouseEvent>(linkedElements.containerElement || linkedElements.formFieldElement, 'mouseenter').pipe(\n                switchMap(() => valueChange$),\n                mergeWith(this.show$.pipe(\n                    delay(200)\n                )),\n                tap(() => calcPositions(linkedElements)),\n                switchMap(() => fromEvent<MouseEvent>(linkedElements.containerElement || linkedElements.formFieldElement, 'mouseleave')),\n                delay(400),\n                tap(() => {\n                    linkedElements.formFieldElement.removeAttribute('hover');\n                })\n            )),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n\n        linkedElements$.pipe(\n            switchMap(linkedElements => fromEvent<KeyboardEvent>(linkedElements.formFieldElement, 'keydown')),\n            filter(event => event.code === KeyCodes.UpArrow || event.code === KeyCodes.DownArrow),\n            takeUntil(this.destroyed$)\n        ).subscribe(event => {\n            this.clickArrow$.next(event.code === KeyCodes.UpArrow);\n            event.preventDefault();\n            return false;\n        });\n\n        linkedElements$.pipe(\n            combineLatestWith(this.validateArrows$),\n            debounceTime(1),\n            takeUntil(this.destroyed$)\n        ).subscribe(([inputElement]) => {\n            if (inputElement.inputElement.disabled) {\n                this.disableDown = true;\n                this.disableUp = true;\n            } else {\n                const min = inputElement.inputElement.min;\n                this.disableDown = min !== '' && !isNaN(+min) && +inputElement.inputElement.value <= +min;\n\n                const max = inputElement.inputElement.max;\n                this.disableUp = max !== '' && !isNaN(+max) && +inputElement.inputElement.value >= +max;\n            }\n\n            this.changeDetectorRef.markForCheck();\n        });\n\n        step$.pipe(\n            takeUntil(this.destroyed$)\n        ).subscribe();\n\n        if (this.showOnInit) {\n            this.show$.next();\n        }\n    }\n}\n","<mat-icon *ngIf=\"leftUp !== null\" class=\"arrow noselect increment\" [attr.disabled]=\"disableUp || null\" [style.left.px]=\"leftUp\" [style.top.px]=\"topUp\" (click)=\"clickArrow$.next(true)\">{{ (!arrowIcons && \"add\") || (layout===\"vertical\" && \"keyboard_arrow_up\") || \"keyboard_arrow_right\" }}</mat-icon>\n<mat-icon *ngIf=\"leftDown !== null\" class=\"arrow noselect decrement\" [attr.disabled]=\"disableDown || null\" [style.left.px]=\"leftDown\" [style.top.px]=\"topDown\" (click)=\"clickArrow$.next(false)\">{{ (!arrowIcons && \"remove\") || (layout===\"vertical\" && \"keyboard_arrow_down\") || \"keyboard_arrow_left\" }}</mat-icon>\n<div *ngIf=\"widthShadow !== null\" class=\"shadow\" [style.left.px]=\"leftShadow\" [style.width.px]=\"widthShadow\" [style.top.px]=\"topShadow\" [style.height.px]=\"heightShadow\"></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, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { DejaNumericStepperComponent } from './numeric-stepper.component';\n\n@NgModule({\n    declarations: [DejaNumericStepperComponent],\n    exports: [DejaNumericStepperComponent],\n    imports: [\n        CommonModule,\n        FormsModule,\n        MatFormFieldModule,\n        MatIconModule,\n        MatInputModule,\n        ReactiveFormsModule\n    ]\n})\nexport class DejaNumericStepperModule { }\n\nexport * from './numeric-stepper.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}