{"version":3,"file":"deja-js-component-time-picker.mjs","sources":["../../../../projects/deja-js/component/time-picker/time-picker.component.ts","../../../../projects/deja-js/component/time-picker/time-picker.component.html","../../../../projects/deja-js/component/time-picker/index.ts","../../../../projects/deja-js/component/time-picker/deja-js-component-time-picker.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, ElementRef, EventEmitter, Input, Optional, Output, Self, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\nimport { Destroy } from '@deja-js/component/core';\nimport { isSameHour, set } from 'date-fns';\nimport { debounce, distinctUntilChanged, map, Subject, takeUntil, timer } from 'rxjs';\n\nexport type TimePickerDisplayMode = 'fullTime' | 'fullTimeWithHoursDisabled' | 'fullTimeWithMinutesDisabled' | 'hoursOnly' | 'minutesOnly';\n\nexport type DateOrDuration = Date | Duration;\n\ntype DataType = 'date' | 'duration';\n\ntype FieldType = 'hours' | 'minutes';\n\n/**\n * Time-picker component for Angular\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'deja-time-picker',\n    styleUrls: ['./time-picker.component.scss'],\n    templateUrl: './time-picker.component.html',\n    encapsulation: ViewEncapsulation.None\n})\nexport class DejaTimePickerComponent extends Destroy implements ControlValueAccessor {\n    @ViewChild('hours') public hours: ElementRef<HTMLInputElement>;\n    @ViewChild('minutes') public minutes: ElementRef<HTMLInputElement>;\n\n    @Output() public readonly timeChange = new EventEmitter<DateOrDuration>();\n\n    /** Display mode for the time-picker */\n    @Input() public mode: TimePickerDisplayMode = 'fullTime';\n\n    /** Data type to manage (Date or Duration) */\n    @Input() public dataType: DataType = 'date';\n\n    /**\n     * Force the hour or minute to be null (only if the other field is disabled)\n     *\n     * For instance, if set to true and the hours are disabled, the minutes input value will be null\n     * This is useful to force the user to provide a value\n     */\n    @Input() public forceNullValue = false;\n\n    @Input() public appearance: MatFormFieldAppearance = 'outline';\n\n    @Input()\n    public set autoFocus(value: BooleanInput) {\n        this._autoFocus = coerceBooleanProperty(value);\n    }\n\n    @Input() public defaultPlaceholderHours = '_ _';\n    @Input() public defaultPlaceholderMinutes = '_ _';\n\n    @Input()\n    public set time(value: DateOrDuration) {\n        this.writeValue(value);\n    }\n\n    public get time(): DateOrDuration {\n        return this.value;\n    }\n\n    /** Step of the arrows */\n    @Input()\n    public set step(value: NumberInput) {\n        this._step = coerceNumberProperty(value);\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** To get the step of the minutes arrows */\n    public get step(): NumberInput {\n        return this._step;\n    }\n\n    /** Disabled property setter. Can be string or empty so you can use it like : <time-picker disabled></time-picker> */\n    @Input()\n    public set disabled(value: BooleanInput) {\n        this._disabled = coerceBooleanProperty(value);\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** To get disabled attribute. */\n    public get disabled(): BooleanInput {\n        return this._disabled;\n    }\n\n    public onHoursChange$ = new Subject<Event | number>();\n    public onMinutesChange$ = new Subject<Event | number>();\n    public _step = 1;\n    private _disabled = false;\n    private _value: DateOrDuration;\n    private _autoFocus = true;\n\n    public constructor(\n        private changeDetectorRef: ChangeDetectorRef,\n        @Self() @Optional() public control: NgControl\n    ) {\n        super();\n\n        if (this.control) {\n            this.control.valueAccessor = this;\n        }\n\n        this.onHoursChange$.pipe(\n            debounce(hours => timer(typeof hours === 'object' ? 0 : 10)),\n            distinctUntilChanged(),\n            map(hours => {\n                let isEvent = false;\n                if (typeof hours === 'object') {\n                    const value = (hours.target as HTMLInputElement).value;\n                    hours = value !== undefined ? parseInt(value, 10) : undefined as number;\n                    isEvent = true;\n                }\n                return {\n                    hours: !isNaN(hours) ? hours : 0,\n                    isEvent\n                };\n            }),\n            takeUntil(this.destroyed$)\n        ).subscribe(({ hours, isEvent }) => {\n            if (!this.value) {\n                this.value = this.dataType === 'date' ? set(new Date(), { hours, minutes: 0, seconds: 0, milliseconds: 0 }) : { hours, minutes: 0 } as Duration;\n            } else if (this.value instanceof Date) {\n                const value = this.value?.getTime();\n                const clone = new Date(value);\n                clone.setHours(hours);\n                this.value = clone;\n            } else {\n                this.value = {\n                    hours: hours < 0 ? 0 : hours,\n                    minutes: this.value.minutes\n                };\n            }\n            this.changeDetectorRef.markForCheck();\n\n            if (isEvent && this._autoFocus) {\n                this.minutes.nativeElement.focus({\n                    preventScroll: true\n                });\n                this.minutes.nativeElement.select();\n            }\n        });\n\n        this.onMinutesChange$.pipe(\n            debounce(minutes => timer(typeof minutes === 'object' ? 0 : 10)),\n            distinctUntilChanged(),\n            map(minutes => {\n                if (typeof minutes === 'object') {\n                    const value = (minutes.target as HTMLInputElement).value;\n                    minutes = value !== undefined ? parseInt(value, 10) : undefined as number;\n                }\n                return !isNaN(minutes) ? minutes : 0;\n            }),\n            takeUntil(this.destroyed$)\n        ).subscribe(minutes => {\n            if (!this.value) {\n                this.value = this.dataType === 'date' ? set(new Date(), { hours: 0, minutes, seconds: 0, milliseconds: 0 }) : { hours: 0, minutes } as Duration;\n            } else if (this.value instanceof Date) {\n                const newValue = new Date(this.value.getTime());\n                if (minutes < 0) {\n                    minutes += 60;\n                } else if (minutes >= 60) {\n                    minutes -= 60;\n                }\n                newValue.setMinutes(minutes);\n\n                if (this.mode !== 'fullTimeWithHoursDisabled' || (this.mode === 'fullTimeWithHoursDisabled' && isSameHour(this.value, newValue))) {\n                    this.value = newValue;\n                }\n            } else {\n                this.value = {\n                    hours: this.value.hours,\n                    minutes: minutes < 0 || minutes >= 60 ? 0 : minutes\n                };\n            }\n            this.changeDetectorRef.markForCheck();\n        });\n    }\n\n    public onKeyDown($event: KeyboardEvent, mode: 'hours' | 'minutes'): void {\n        // Get input element\n        const inputElement = mode === 'hours' ? this.hours.nativeElement : this.minutes.nativeElement;\n        if ($event.key?.toLowerCase() === 'd') {\n            $event.stopPropagation();\n            $event.preventDefault();\n            this.value = new Date();\n        } else if ($event.key?.toLowerCase() === 'a' && $event.ctrlKey) {\n            inputElement.select();\n        } else if ($event.key && !['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab', 'Enter', 'Control', 'Shift'].includes($event.key)) {\n            // Set regex for input format validation (differs if we are dealing with a date or a duration)\n            let regex;\n            if (mode === 'hours') {\n                regex = this.dataType === 'date' ? /^(\\d|[01]\\d|2[0-3])$/ : /^(\\d+)$/;\n            } else {\n                regex = /^(\\d|[0-5]\\d)$/;\n            }\n\n            // Get the selection in input element\n            const [selectionStart, selectionEnd] = [inputElement.selectionStart, inputElement.selectionEnd].sort((a, b) => a - b);\n            const selectionDiff = selectionEnd - selectionStart;\n\n            // Get the current value in input element and update it with the new touched key\n            const inputValue = inputElement.value || '';\n            const inputValueArr = Array.from(inputValue);\n            inputValueArr.splice(selectionStart, selectionDiff, $event.key);\n            const newInputValue = inputValueArr.join('');\n\n            // Prevent event if the time is not valid\n            if (!regex.test(newInputValue)) {\n                $event.stopPropagation();\n                $event.preventDefault();\n            } else if (this._autoFocus && mode === 'hours' && ((this.dataType === 'date' && parseFloat(newInputValue) >= 3) || newInputValue.length === 2)) {\n                this.onHoursChange$.next($event);\n            }\n        }\n    }\n\n    public get hoursValue(): number {\n        if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithMinutesDisabled' && this.control.pristine)) {\n            return null;\n        }\n        return this.value instanceof Date ? this.value.getHours() : this.value.hours;\n    }\n\n    public get minutesValue(): number {\n        if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithHoursDisabled' && this.control.pristine)) {\n            return null;\n        }\n        return this.value instanceof Date ? this.value.getMinutes() : this.value.minutes;\n    }\n\n    public incrementValue(fieldType: FieldType): void {\n        if (fieldType === 'hours') {\n            this.onHoursChange$.next((this.hoursValue || 0) + 1);\n        } else {\n            this.onMinutesChange$.next((this.minutesValue || 0) + this._step);\n        }\n    }\n\n    public decrementValue(fieldType: FieldType): void {\n        if (fieldType === 'hours') {\n            this.onHoursChange$.next((this.hoursValue || 0) - 1);\n        } else {\n            this.onMinutesChange$.next((this.minutesValue || 0) - this._step);\n        }\n    }\n\n    public onClick(mode: 'hours' | 'minutes'): void {\n        if (this._autoFocus) {\n            if (mode === 'hours') {\n                this.hours.nativeElement.select();\n            } else {\n                this.minutes.nativeElement.select();\n            }\n        }\n    }\n\n    // ************* ControlValueAccessor Implementation **************\n    /** set accessor including call the onchange callback */\n    public set value(v: DateOrDuration) {\n        if (v !== this._value) {\n            this.writeValue(v);\n            this.onChangeCallback(v);\n            this.timeChange.emit(v);\n        }\n    }\n\n    /** get accessor */\n    public get value(): DateOrDuration {\n        return this._value;\n    }\n\n    /** From ControlValueAccessor interface */\n    public writeValue(value: DateOrDuration): void {\n        if ((value || null) !== (this._value || null)) {\n            if (value instanceof Date) {\n                this._value = value ? new Date(value.getTime()) : set(new Date(), { hours: 0, minutes: 0, seconds: 0 });\n            } else {\n                this._value = value;\n            }\n\n            this.changeDetectorRef.markForCheck();\n        }\n    }\n\n    /** From ControlValueAccessor interface */\n    public registerOnChange(fn: (_a: unknown) => void): void {\n        this.onChangeCallback = fn;\n    }\n\n    /** From ControlValueAccessor interface */\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    protected onChangeCallback = (_a: unknown): void => undefined;\n    protected onTouchedCallback = (): void => undefined;\n}\n","<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n    <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number:'2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n    <deja-numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></deja-numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n    <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number:'2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n    <deja-numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></deja-numeric-stepper>\n</mat-form-field>\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 { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { DejaNumericStepperModule } from '@deja-js/component/v2/numeric-stepper';\n\nimport { DejaTimePickerComponent } from './time-picker.component';\n\n@NgModule({\n    declarations: [DejaTimePickerComponent],\n    exports: [DejaTimePickerComponent],\n    imports: [\n        CommonModule,\n        DejaNumericStepperModule,\n        FormsModule,\n        MatFormFieldModule,\n        MatInputModule\n    ]\n})\nexport class DejaTimePickerModule { }\n\nexport * from './time-picker.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}