{"version":3,"file":"deja-js-component-numeric-stepper.mjs","sources":["../../../../projects/deja-js/component/numeric-stepper/numeric-stepper.component.ts","../../../../projects/deja-js/component/numeric-stepper/numeric-stepper.component.html","../../../../projects/deja-js/component/numeric-stepper/index.ts","../../../../projects/deja-js/component/numeric-stepper/deja-js-component-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 { FocusMonitor } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, DoCheck, ElementRef, EventEmitter, HostBinding, Input, OnChanges, OnDestroy, Optional, Output, Self, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroupDirective, NgControl, NgForm, ValidationErrors, Validator, ValidatorFn } from '@angular/forms';\nimport { CanUpdateErrorState, ErrorStateMatcher } from '@angular/material/core';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { _MatInputMixinBase, DejaChildValidatorDirective, DejaTextMetricsService } from '@deja-js/component/core';\nimport { Subject } from 'rxjs';\n\nexport interface RangeError {\n    rangeError: {\n        given: unknown;\n        max: NumberInput;\n        min: NumberInput;\n    };\n}\n\nexport const createCounterRangeValidator = (comp: DejaNumericStepperComponent) => (c: FormControl): RangeError => {\n    const err = {\n        rangeError: {\n            given: c.value,\n            max: comp.max,\n            min: comp.min\n        }\n    } as RangeError;\n\n    if (c.value === null || c.value === undefined) {\n        return null;\n    }\n    return comp.isOffLimits ? err : null;\n};\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [{ provide: MatFormFieldControl, useExisting: DejaNumericStepperComponent }],\n    selector: 'deja-numeric-stepper',\n    styleUrls: ['./numeric-stepper.component.scss'],\n    templateUrl: './numeric-stepper.component.html'\n})\n// eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle\nexport class DejaNumericStepperComponent extends _MatInputMixinBase implements CanUpdateErrorState, DoCheck, OnChanges, OnDestroy, ControlValueAccessor, MatFormFieldControl<number>, Validator {\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    public static nextId = 0;\n\n    /** Output to get the event when the value is modified (no validation)  */\n    @Output() public readonly textChange = new EventEmitter<number>();\n\n    @HostBinding() public id = `deja-numeric-stepper-${DejaNumericStepperComponent.nextId++}`;\n    @HostBinding('class.floating')\n    public get shouldLabelFloat(): boolean {\n        return this.focused || !this.empty || this._alwaysDisplayUnit;\n    }\n\n    @HostBinding('attr.aria-describedby') public describedBy = '';\n    @HostBinding('attr.disabled') public _disabled: boolean = null;\n\n    /** Unit of stepper */\n    @Input() public unit: string;\n\n    public controlType = 'deja-numeric-stepper';\n    public errorState = false;\n    public size = 0;\n    // eslint-disable-next-line rxjs/finnish\n    public stateChanges = new Subject<void>();\n    public focused = false;\n\n    /** Function for min / max validation */\n    public validateFn: ValidatorFn;\n\n    public _max: number = null;\n    public _min: number = null;\n    public _step = 1;\n\n    private _hideSteppers = false;\n    private inputElement: HTMLInputElement;\n\n    /** InputElement of stepper */\n    @ViewChild('inputStepper')\n    public set inputElementRef(element: ElementRef<HTMLInputElement>) {\n        if (element) {\n            this.inputElement = element.nativeElement;\n        }\n    }\n\n    /** Max value of stepper */\n    public get max(): NumberInput {\n        return this._max;\n    }\n\n    @Input()\n    public set max(value: NumberInput) {\n        this._max = coerceNumberProperty<number>(value, null);\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** Min value of stepper */\n    public get min(): NumberInput {\n        return this._min;\n    }\n\n    @Input()\n    public set min(value: NumberInput) {\n        this._min = coerceNumberProperty<number>(value, null);\n        this.changeDetectorRef.markForCheck();\n    }\n\n    public get isOffLimits(): boolean {\n        return (this.min !== null && this.value < this.min) || (this.max !== null && this.value > this.max);\n    }\n\n    /** Step for stepper : default 1 */\n    public get step(): NumberInput {\n        return this._step;\n    }\n\n    @Input()\n    public set step(value: NumberInput) {\n        this._step = coerceNumberProperty(value, 1);\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** hide the steppers */\n    public get hideSteppers(): BooleanInput {\n        return this._hideSteppers;\n    }\n\n    @Input()\n    public set hideSteppers(value: BooleanInput) {\n        this._hideSteppers = coerceBooleanProperty(value);\n        this.changeDetectorRef.markForCheck();\n    }\n\n    @ViewChild(DejaChildValidatorDirective, { static: true })\n    public set inputValidatorDirective(value: DejaChildValidatorDirective) {\n        if (value) {\n            value.parentControl = this.ngControl;\n        }\n    }\n\n    /**\n     * Placeholder of the input\n     */\n    @Input() public get placeholder(): string {\n        return this._placeholder;\n    }\n\n    public set placeholder(plh: string) {\n        this._placeholder = plh;\n        this.stateChanges.next();\n    }\n\n    private _placeholder: string;\n\n    /** unit always visible */\n    @Input() public get alwaysDisplayUnit(): BooleanInput {\n        return this._alwaysDisplayUnit;\n    }\n\n    public set alwaysDisplayUnit(value: BooleanInput) {\n        this._alwaysDisplayUnit = coerceBooleanProperty(value);\n    }\n\n    private _alwaysDisplayUnit: boolean;\n\n    public get empty(): boolean {\n        return !this._value && this._value !== 0;\n    }\n\n    private _value: number;\n\n    /**\n * Get disable value\n */\n    public get disabled(): boolean {\n        return this.ngControl ? this.ngControl.disabled : this._disabled;\n    }\n\n    /** Allow to disabled the component */\n    @Input()\n    public set disabled(value: boolean) {\n        const disabled = coerceBooleanProperty(value);\n        this._disabled = disabled || null;\n        this.changeDetectorRef.markForCheck();\n    }\n\n    @Input()\n    public get required(): boolean {\n        return this._required;\n    }\n\n    public set required(req: boolean) {\n        this._required = coerceBooleanProperty(req);\n        this.stateChanges.next();\n    }\n\n    private _required = false;\n\n    public constructor(\n        public dejaTextMetricsService: DejaTextMetricsService,\n        private elementRef: ElementRef<HTMLElement>,\n        private changeDetectorRef: ChangeDetectorRef,\n        @Self() @Optional() public ngControl: NgControl,\n        private fm: FocusMonitor,\n        @Optional() _parentForm: NgForm,\n        @Optional() _parentFormGroup: FormGroupDirective,\n        _defaultErrorStateMatcher: ErrorStateMatcher\n    ) {\n        super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n\n        console.warn('@deja-js/component/numeric-stepper is deprecated, and will be removed in a further version. Please use @deja-js/component/v2/numeric-stepper instead.');\n\n        if (this.ngControl) {\n            this.ngControl.valueAccessor = this;\n        }\n\n        // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n        this.fm.monitor(elementRef.nativeElement, true).subscribe(origin => {\n            this.focused = !!origin;\n            if (!this.focused) {\n                this.onTouchedCallback();\n            }\n            this.stateChanges.next();\n        });\n    }\n\n    // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle, @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n    public ngOnChanges(changes: any): void {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        if (changes.min || changes.max) {\n            this.validateFn = createCounterRangeValidator(this);\n            if (this.ngControl?.control) {\n                const validators: ValidatorFn[] = [this.validateFn];\n                if (this.ngControl.control.validator) {\n                    validators.push(this.ngControl.control.validator);\n                }\n                this.ngControl.control.setValidators(validators);\n            }\n        }\n    }\n\n    // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle\n    public ngDoCheck(): void {\n        if (this.ngControl) {\n            // We need to re-evaluate this on every change detection cycle, because there are some\n            // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n            // that whatever logic is in here has to be super lean or we risk destroying the performance.\n            this.updateErrorState();\n        }\n    }\n\n    // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle\n    public ngOnDestroy(): void {\n        this.stateChanges.complete();\n        this.fm.stopMonitoring(this.elementRef.nativeElement);\n    }\n\n    public validate(c: FormControl): ValidationErrors {\n        return this.validateFn(c) || c.validator?.(c);\n    }\n\n    public setDescribedByIds(ids: string[]): void {\n        this.describedBy = ids.join(' ');\n    }\n\n    public onContainerClick(event: MouseEvent): void {\n        if ((event.target as Element).tagName.toLowerCase() !== 'input') {\n            this.elementRef.nativeElement.querySelector('input').focus();\n        }\n    }\n\n    /** Give focus to this component */\n    public setFocus(): void {\n        if (this.inputElement) {\n            this.inputElement.focus();\n        }\n    }\n\n    // ************* ControlValueAccessor Implementation **************\n    public get value(): number {\n        return this._value;\n    }\n\n    public set value(val: number) {\n        this.writeValue(val);\n        this.onChangeCallback(val);\n        this.onTouchedCallback();\n        this.stateChanges.next();\n    }\n\n    public writeValue(value: number): void {\n        if (value === null || value === undefined) {\n            this._value = value;\n        } else {\n            this._value = isNaN(value) ? null : +value;\n        }\n        this.checkSize(value);\n        this.changeDetectorRef.markForCheck();\n        this.textChange.emit(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    public checkSize(value?: number): void {\n        this.size = this.dejaTextMetricsService.getTextWidth((value || this.value || 0).toString(), this.elementRef.nativeElement);\n    }\n\n    // NgModel implementation\n    protected onTouchedCallback = (): void => undefined;\n    protected onChangeCallback = (_?: unknown): void => undefined;\n    protected onValidatorChangeCallback = (): void => undefined;\n}\n","<input deja-child-validator matInput [class.off-limits]=\"isOffLimits\" [disabled]=\"disabled\" #inputStepper type=\"number\" [(ngModel)]=\"value\" [min]=\"_min\" [max]=\"_max\" [step]=\"_step\" [style.width.px]=\"size\" />\n<span class=\"unit\" *ngIf=\"unit && shouldLabelFloat\">{{ unit }}</span>\n\n<span class=\"steppers\" *ngIf=\"!hideSteppers\">\n    <button [disabled]=\"disabled || value === _min\" (click)=\"value = ((value || 0) * 10000 - _step * 10000) / 10000\" type=\"button\" tabindex=\"-1\">remove</button>\n    <button [disabled]=\"disabled || value === _max\" (click)=\"value = ((value || 0) * 10000 + _step * 10000) / 10000\" type=\"button\" tabindex=\"-1\">add</button>\n</span>\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 { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { DejaChildValidatorModule, DejaTextMetricsModule } from '@deja-js/component/core';\n\nimport { DejaNumericStepperComponent } from './numeric-stepper.component';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        DejaChildValidatorModule,\n        DejaTextMetricsModule,\n        FormsModule,\n        MatButtonModule,\n        MatIconModule,\n        MatInputModule\n    ],\n    exports: [\n        DejaNumericStepperComponent\n    ],\n    declarations: [\n        DejaNumericStepperComponent\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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"}