{"version":3,"file":"hug-ngx-numeric-stepper.mjs","sources":["../../../projects/numeric-stepper/src/numeric-stepper.component.ts","../../../projects/numeric-stepper/src/numeric-stepper.component.html","../../../projects/numeric-stepper/src/hug-ngx-numeric-stepper.ts"],"sourcesContent":["import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, HostBinding, inject, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { filterMap, KeyCodes } from '@hug/ngx-core';\nimport { combineLatestWith, debounceTime, delay, filter, fromEvent, map, mergeWith, ReplaySubject, shareReplay, startWith, Subject, switchMap, tap, timer, withLatestFrom } from 'rxjs';\n\nexport type NgxNumericStepperLayout = 'vertical' | 'horizontal' | 'horizontal-inlay';\n\n// TODO sdil refactor rxjs flows\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'ngx-numeric-stepper',\n    styleUrls: ['./numeric-stepper.component.scss'],\n    templateUrl: './numeric-stepper.component.html',\n    imports: [\n        MatIcon\n    ],\n    encapsulation: ViewEncapsulation.None\n})\nexport class NgxNumericStepperComponent 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: NgxNumericStepperLayout = '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 | null;\n\n    public leftUp?: number = undefined;\n    public leftDown?: number = undefined;\n    public topUp?: number = undefined;\n    public topDown?: number = undefined;\n    public leftShadow?: number = undefined;\n    public topShadow?: number = undefined;\n    public widthShadow?: number = undefined;\n    public heightShadow?: number = undefined;\n\n    public disableUp = false;\n    public disableDown = false;\n    public clickArrow$ = new Subject<boolean>();\n    public show$ = new ReplaySubject<void>(1);\n\n    protected elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n    protected changeDetectorRef = inject(ChangeDetectorRef);\n    private destroyRef = inject(DestroyRef);\n\n    private validateArrows$ = new Subject<void>();\n    private _arrowIcons = false;\n    private _showOnInit = false;\n    private arrowSize = 32;\n    private parentAppearance?: string;\n\n    public ngOnInit(): void {\n        const calcPositions = (inputElement: HTMLInputElement | undefined, formFieldElement: HTMLElement | undefined, containerElement: HTMLElement | undefined): void => {\n            const containerBounds = containerElement?.getBoundingClientRect();\n            const formFieldBounds = formFieldElement?.getBoundingClientRect() ?? {} as DOMRect;\n            const inputBounds = 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            formFieldElement?.setAttribute('hover', '');\n\n            if (this.layout === 'horizontal') {\n                const height = containerBounds?.height || formFieldBounds.height;\n                this.heightShadow = Math.min(54, 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 === '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(54, 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 === '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 | undefined;\n                let containerElement: HTMLElement | undefined;\n                let inputElement: HTMLInputElement | undefined;\n\n                // eslint-disable-next-line no-loops/no-loops\n                while (parentElement) {\n                    if (parentElement.tagName === 'MAT-FORM-FIELD' || parentElement.hasAttribute('ngx-numeric-stepper-form-field')) {\n                        formFieldElement = parentElement;\n                    }\n                    if (parentElement.hasAttribute('ngx-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('ngx-numeric-stepper-form-field', this.layout);\n                    this.parentAppearance = formFieldElement.getAttribute('appearance')?.toUpperCase();\n                }\n\n                if (!formFieldElement) {\n                    console.error('ngx-numeric-stepper work only inside a mat-form-field or a [ngx-numeric-stepper-form-field] element');\n                } else {\n                    inputElement = formFieldElement.getElementsByTagName('INPUT')?.[0] as HTMLInputElement || null;\n\n                    if (!inputElement) {\n                        console.error('ngx-numeric-stepper work only inside a mat-form-field or a [ngx-numeric-stepper-form-field] element containing an input element');\n                    }\n                }\n\n                return [inputElement, formFieldElement, containerElement] as const;\n            }),\n            filter(([inputElement, formFieldElement]) => !!formFieldElement && !!inputElement),\n            shareReplay({ bufferSize: 1, refCount: false })\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(NgxNumericStepperComponent.TYPE_ERROR);\n                }\n\n                if (!inputElement[fn]) {\n                    throw new Error(NgxNumericStepperComponent.STEP_FN_ERROR);\n                }\n\n                if (!this.input?.ngControl?.control) {\n                    throw new Error(NgxNumericStepperComponent.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, [inputElement]]) => {\n                if (isUp && !this.disableUp && inputElement) {\n                    step(inputElement, 'increment', 'stepUp');\n                }\n                if (!isUp && !this.disableDown && inputElement) {\n                    step(inputElement, 'decrement', 'stepDown');\n                }\n            }),\n            shareReplay({ bufferSize: 1, refCount: false })\n        );\n\n        const valueChange$ = linkedElements$.pipe(\n            filterMap(([inputElement]) => inputElement),\n            switchMap(inputElement => fromEvent<void>(inputElement, 'input').pipe(\n                mergeWith(step$, fromEvent<void>(inputElement, 'paste'), fromEvent<void>(inputElement, 'keypress'))\n            )),\n            debounceTime(50),\n            startWith(undefined)\n        );\n\n        linkedElements$.pipe(\n            switchMap(([inputElement, formFieldElement, containerElement]) => {\n                const element = containerElement ?? formFieldElement;\n                if (!element) {\n                    return [];\n                }\n\n                return fromEvent<MouseEvent>(element, 'mouseenter').pipe(\n                    switchMap(() => valueChange$),\n                    mergeWith(this.show$.pipe(\n                        delay(200)\n                    )),\n                    tap(() => calcPositions(inputElement, formFieldElement, containerElement)),\n                    switchMap(() => fromEvent<MouseEvent>(element, 'mouseleave')),\n                    delay(400),\n                    tap(() => {\n                        formFieldElement?.removeAttribute('hover');\n                    })\n                );\n            }),\n            takeUntilDestroyed(this.destroyRef)\n        ).subscribe();\n\n        linkedElements$.pipe(\n            filterMap(([_, formFieldElement]) => formFieldElement),\n            switchMap(formFieldElement => fromEvent<KeyboardEvent>(formFieldElement, 'keydown')),\n            filter(e => {\n                const keyCode = (e.code || e.key) as KeyCodes;\n                if (keyCode === 'ArrowUp' || keyCode === 'ArrowDown') {\n                    this.clickArrow$.next(keyCode === 'ArrowUp');\n                    return true;\n                }\n                return false;\n            }),\n            takeUntilDestroyed(this.destroyRef)\n        ).subscribe(event => {\n            event.preventDefault();\n            return false;\n        });\n\n        linkedElements$.pipe(\n            combineLatestWith(this.validateArrows$),\n            filterMap(([[inputElement]]) => inputElement),\n            debounceTime(1),\n            takeUntilDestroyed(this.destroyRef)\n        ).subscribe(inputElement => {\n            if (inputElement.disabled) {\n                this.disableDown = true;\n                this.disableUp = true;\n            } else {\n                const min = inputElement.min;\n                this.disableDown = min !== '' && !isNaN(+min) && +inputElement.value <= +min;\n\n                const max = inputElement.max;\n                this.disableUp = max !== '' && !isNaN(+max) && +inputElement.value >= +max;\n            }\n\n            this.changeDetectorRef.markForCheck();\n        });\n\n        step$.pipe(\n            takeUntilDestroyed(this.destroyRef)\n        ).subscribe();\n\n        if (this.showOnInit) {\n            this.show$.next();\n        }\n    }\n}\n","@if (leftUp !== null) {\n    <mat-icon\n        class=\"arrow noselect increment\"\n        [attr.disabled]=\"disableUp || null\"\n        [style.left.px]=\"leftUp\"\n        [style.top.px]=\"topUp\"\n        (click)=\"clickArrow$.next(true)\">\n        {{ (!arrowIcons && 'add') || (layout === 'vertical' && 'keyboard_arrow_up') || 'keyboard_arrow_right' }}\n    </mat-icon>\n}\n@if (leftDown !== null) {\n    <mat-icon\n        class=\"arrow noselect decrement\"\n        [attr.disabled]=\"disableDown || null\"\n        [style.left.px]=\"leftDown\"\n        [style.top.px]=\"topDown\"\n        (click)=\"clickArrow$.next(false)\">\n        {{ (!arrowIcons && 'remove') || (layout === 'vertical' && 'keyboard_arrow_down') || 'keyboard_arrow_left' }}\n    </mat-icon>\n}\n@if (widthShadow !== null) {\n    <div\n        class=\"shadow\"\n        [style.left.px]=\"leftShadow\"\n        [style.width.px]=\"widthShadow\"\n        [style.top.px]=\"topShadow\"\n        [style.height.px]=\"heightShadow\"></div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}