{"version":3,"file":"deja-js-component-date-picker.mjs","sources":["../../../../projects/deja-js/component/date-picker/format-to-mask.ts","../../../../projects/deja-js/component/date-picker/date-picker.component.ts","../../../../projects/deja-js/component/date-picker/date-picker.component.html","../../../../projects/deja-js/component/date-picker/index.ts","../../../../projects/deja-js/component/date-picker/deja-js-component-date-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\n/**\n * List of possible format for the date-picker converted to their mask.\n *\n * Not fully implemented yet\n */\n/* eslint-disable @typescript-eslint/naming-convention */\nexport const formatToMask = {\n    M: null,\n    Mo: null,\n    MM: 'F0',\n    MMM: null,\n    MMMM: null,\n    Q: null,\n    Qo: null,\n    D: null,\n    Do: null,\n    DD: 'd0',\n    DDD: null,\n    DDDo: null,\n    DDDD: null,\n    d: null,\n    do: null,\n    dd: 'd0',\n    ddd: null,\n    dddd: null,\n    e: null,\n    E: null,\n    w: null,\n    wo: null,\n    ww: null,\n    W: null,\n    Wo: null,\n    WW: null,\n    yy: '00',\n    yyyy: 'B000',\n    y: null,\n    gg: null,\n    gggg: null,\n    GG: null,\n    GGGG: null,\n    A: null,\n    a: null,\n    H: null,\n    HH: 'Hh',\n    h: null,\n    hh: 'Hh',\n    k: null,\n    kk: null,\n    m: null,\n    mm: 'm0',\n    s: null,\n    ss: 's0',\n    S: null,\n    SS: null,\n    SSS: null,\n    z: null,\n    zz: null,\n    Z: null,\n    ZZ: null,\n    X: null,\n    x: null\n} as { [f: string]: string };\n\nexport const formatToPattern = {\n    M: null,\n    Mo: null,\n    MM: new Map<string, { pattern: RegExp; symbol?: string; optional?: boolean }>()\n        .set('F', { pattern: new RegExp('[0|1]') })\n        .set('0', { pattern: new RegExp('\\\\d') }),\n    MMM: null,\n    MMMM: null,\n    Q: null,\n    Qo: null,\n    D: null,\n    Do: null,\n    DD: new Map<string, { pattern: RegExp; symbol?: string; optional?: boolean }>()\n        .set('d', { pattern: new RegExp('[0-3]') })\n        .set('0', { pattern: new RegExp('\\\\d') }),\n    DDD: null,\n    DDDo: null,\n    DDDD: null,\n    d: null,\n    do: null,\n    dd: new Map<string, { pattern: RegExp; symbol?: string; optional?: boolean }>()\n        .set('d', { pattern: new RegExp('[0-3]') })\n        .set('0', { pattern: new RegExp('\\\\d') }),\n    ddd: null,\n    dddd: null,\n    e: null,\n    E: null,\n    w: null,\n    wo: null,\n    ww: null,\n    W: null,\n    Wo: null,\n    WW: null,\n    yy: new Map<string, { pattern: RegExp; symbol?: string; optional?: boolean }>()\n        .set('0', { pattern: new RegExp('\\\\d') })\n        .set('0', { pattern: new RegExp('\\\\d') }),\n    yyyy: new Map<string, { pattern: RegExp; symbol?: string; optional?: boolean }>()\n        .set('B', { pattern: new RegExp('[1|2]') })\n        .set('0', { pattern: new RegExp('\\\\d') }),\n    y: null,\n    gg: null,\n    gggg: null,\n    GG: null,\n    GGGG: null,\n    A: null,\n    a: null,\n    H: null,\n    HH: new Map<string, { pattern: RegExp; symbol?: string; optional?: boolean }>()\n        .set('h', { pattern: new RegExp('\\\\d') })\n        .set('H', { pattern: new RegExp('[0-2]') }),\n    h: null,\n    hh: new Map<string, { pattern: RegExp; symbol?: string; optional?: boolean }>()\n        .set('h', { pattern: new RegExp('\\\\d') })\n        .set('H', { pattern: new RegExp('[0-2]') }),\n    k: null,\n    kk: null,\n    m: null,\n    mm: new Map<string, { pattern: RegExp; symbol?: string; optional?: boolean }>()\n        .set('m', { pattern: new RegExp('[0-5]') })\n        .set('0', { pattern: new RegExp('\\\\d') }),\n    s: null,\n    ss: new Map<string, { pattern: RegExp; symbol?: string; optional?: boolean }>()\n        .set('s', { pattern: new RegExp('[0-5]') })\n        .set('0', { pattern: new RegExp('\\\\d') }),\n    S: null,\n    SS: null,\n    SSS: null,\n    z: null,\n    zz: null,\n    Z: null,\n    ZZ: null,\n    X: null,\n    x: null\n} as { [f: string]: Map<string, { pattern: RegExp; symbol?: string; optional?: boolean }> };\n\nexport const formatToUnitOfTime = {\n    M: null,\n    Mo: null,\n    MM: 'months',\n    MMM: null,\n    MMMM: null,\n    Q: null,\n    Qo: null,\n    D: null,\n    Do: null,\n    DD: null,\n    DDD: null,\n    DDDo: null,\n    DDDD: null,\n    d: null,\n    do: null,\n    dd: 'days',\n    ddd: null,\n    dddd: null,\n    e: null,\n    E: null,\n    w: null,\n    wo: null,\n    ww: null,\n    W: null,\n    Wo: null,\n    WW: null,\n    yy: 'years',\n    yyyy: 'years',\n    y: null,\n    gg: null,\n    gggg: null,\n    GG: null,\n    GGGG: null,\n    A: null,\n    a: null,\n    H: null,\n    HH: 'hours',\n    h: null,\n    hh: 'hours',\n    k: null,\n    kk: null,\n    m: null,\n    mm: 'minutes',\n    s: null,\n    ss: 'seconds',\n    S: null,\n    SS: null,\n    SSS: null,\n    z: null,\n    zz: null,\n    Z: null,\n    ZZ: null,\n    X: null,\n    x: null\n} as { [f: string]: string };\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 { FocusMonitor } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty, NumberInput } from '@angular/cdk/coercion';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, DoCheck, ElementRef, EventEmitter, HostBinding, Input, OnDestroy, OnInit, Optional, Output, Self, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { CanUpdateErrorState, ErrorStateMatcher } from '@angular/material/core';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { _MatInputMixinBase, DejaChildValidatorDirective, DejaConnectionPositionPair, formatWithLocale, KeyCodes } from '@deja-js/component/core';\nimport { DateComponentLayout, DaysOfWeek, DejaDateSelectorComponent } from '@deja-js/component/date-selector';\nimport { add, isValid, parse, startOfToday } from 'date-fns';\nimport { combineLatestWith, delay, filter, fromEvent, map, mergeWith, ReplaySubject, Subject, switchMap, take, takeUntil, tap, timer } from 'rxjs';\n\nimport { formatToMask, formatToPattern, formatToUnitOfTime } from './format-to-mask';\nimport { Pattern } from './models/pattern.model';\n\n\n/**\n * Date-picker component for Angular\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [{ provide: MatFormFieldControl, useExisting: DejaDatePickerComponent }],\n    selector: 'deja-date-picker',\n    styleUrls: ['./date-picker.component.scss'],\n    templateUrl: './date-picker.component.html'\n})\nexport class DejaDatePickerComponent extends _MatInputMixinBase implements OnInit, ControlValueAccessor, AfterContentInit, DoCheck, OnDestroy, MatFormFieldControl<Date | string>, CanUpdateErrorState {\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    public static nextId = 0;\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    private static formattingTokens = new RegExp('(\\\\[[^\\\\[]*\\\\])|(\\\\\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|yyyyyy|yyyyy|yyyy|yy|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)', 'g');\n\n\n    @HostBinding() public id = `my-tel-input-${DejaDatePickerComponent.nextId++}`;\n    @HostBinding('attr.aria-describedby') public describedBy = '';\n    @Output() public readonly dateChange = new EventEmitter<Date | string>();\n    @Output() public readonly timeChange = new EventEmitter<Date>();\n\n    /** Maximum date avaliable inside date-picker */\n    @Input() public dateMax: Date;\n    /** Minimum date avaliable inside date-picker */\n    @Input() public dateMin: Date;\n\n    @Input() public label: string;\n    /** Disabled dates. It's an array of DaysOfWeek (number between 0 and 6) or a date. */\n    @Input() public disableDates: Array<DaysOfWeek | Date>; // | ((d: Date) => boolean);\n    /** Reference to DejaDateSelectorComponent inside thic control */\n    @ViewChild(DejaDateSelectorComponent, { static: true }) public dateSelectorComponent: DejaDateSelectorComponent;\n    /** Offset de position horizontal de la zone de dropdown */\n    @Input() public overlayOffsetX = 0;\n    /** Offset de position verticale de la zone de dropdown */\n    @Input() public overlayOffsetY = 6;\n\n    @Input() public updateInputOn: 'change' | 'blur' | 'submit';\n\n    public get overlayContainerClass(): string {\n        let oc = 'deja-datepicker-overlay-container';\n        if (this.breakpointObserver.isMatched('(max-height: 900px)')) {\n            oc += ' under-toolbar-position';\n        }\n        if (this.breakpointObserver.isMatched('(max-height: 550px)')) {\n            oc += ' top-position';\n        }\n        return oc;\n    }\n\n    @ViewChild(DejaChildValidatorDirective) private inputValidatorDirective: DejaChildValidatorDirective;\n\n    @HostBinding('class.floating')\n    public get shouldLabelFloat(): boolean {\n        return this.focused || !this.empty || !!this.mask;\n    }\n\n    public _layout: NumberInput;\n\n    /** Date format. If unset, format will be 'yyyy-MM-dd' + ' HH:mm' it's a date-time selector */\n    @Input() public set format(dateFormat: string) {\n        this._format = dateFormat;\n        this.formatChanged$.next(dateFormat);\n    }\n\n    public get format(): string {\n        return this._format;\n    }\n\n    /** Placeholder for input */\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    /** Afficher un bouton raccourcis permettant de sélectionner la date courante */\n    @Input() public set showCurrentDateButton(value: boolean) {\n        this._showCurrentDateButton = coerceBooleanProperty(value);\n    }\n\n    public get showCurrentDateButton(): boolean {\n        return this._showCurrentDateButton;\n    }\n\n    public get ngModelOptions(): { updateOn: 'change' | 'blur' | 'submit' } {\n        return {\n            updateOn: this.updateInputOn || 'blur'\n        };\n    }\n\n    /** matFormField implementation */\n    // eslint-disable-next-line rxjs/finnish\n    public stateChanges = new Subject<void>();\n\n    /** Permettre la saisie de texte libre */\n    @Input()\n    public set allowFreeEntry(value: BooleanInput) {\n        this._allowFreeEntry = coerceBooleanProperty(value) || null;\n    }\n\n    public get allowFreeEntry(): BooleanInput {\n        return this._allowFreeEntry;\n    }\n\n    /** Mask for input */\n    public _mask = '';\n\n    public get mask(): string {\n        return this._mask;\n    }\n\n    /** Pattern for input */\n    public _pattern: Pattern;\n\n    public get pattern(): Pattern {\n        return this._pattern;\n    }\n\n    /** Internal use */\n    public overlayOwnerElement: HTMLElement;\n    public date: Date | string;\n\n    /** matFormField focus implementation */\n    public focused = false;\n\n    /** This property indicates whether the associated NgControl is in an error state. */\n    public errorState = false;\n\n    /** This property allows us to specify a unique string for the type of control in form field.\n     * The <mat-form-field> will add an additional class based on this type that can be used to\n     * easily apply special styles to a <mat-form-field> that contains a specific type of control.\n     * In this example we'll use deja-date-picker as our control type which will result in the form field\n     * adding the class mat-form-field-deja-date-picker.\n     */\n    public controlType = 'deja-date-picker';\n\n    public formatChanged$ = new Subject<string>();\n\n    protected destroyed$ = new Subject<void>();\n\n    private _allowFreeEntry = false;\n\n    /** Default placeholder for input */\n    private _placeholder: string;\n    private _showCurrentDateButton: boolean;\n    private _disabled: boolean;\n    private _required: boolean;\n    private _time: boolean;\n    private _format: string;\n    private inputElement$ = new ReplaySubject<HTMLInputElement>(1);\n    private inputElement: HTMLInputElement;\n    private focus$ = new Subject<void>();\n    private _showDropDown = false;\n    private _positions = DejaConnectionPositionPair.default;\n\n    private _inputModel: string;\n    private cursorPosition: number;\n    private dateChanged$ = new Subject<Date | string>();\n\n    @ViewChild('inputelement')\n    public set inputElementRef(element: ElementRef<HTMLInputElement>) {\n        if (element) {\n            this.inputElement = element.nativeElement;\n            this.overlayOwnerElement = this.inputElement || this.elementRef.nativeElement;\n            this.inputElement$.next(this.inputElement);\n        } else {\n            this.overlayOwnerElement = this.elementRef.nativeElement;\n        }\n    }\n\n    public get inputModel(): string {\n        return this._inputModel;\n    }\n\n    @Input()\n    public set positions(value: DejaConnectionPositionPair[] | string) {\n        this._positions = typeof value === 'string' ? DejaConnectionPositionPair.parse(value) : value;\n    }\n\n    public get positions(): DejaConnectionPositionPair[] | string {\n        return this._positions;\n    }\n\n    public get empty(): boolean {\n        return !this.value;\n    }\n\n    /**\n     * Constructor\n     * subscribe on different events needed inside this component\n     */\n    public constructor(\n        private elementRef: ElementRef<HTMLInputElement>,\n        private changeDetectorRef: ChangeDetectorRef,\n        @Self() @Optional() public ngControl: NgControl,\n        @Optional() _parentForm: NgForm,\n        @Optional() _parentFormGroup: FormGroupDirective,\n        _defaultErrorStateMatcher: ErrorStateMatcher,\n        private fm: FocusMonitor,\n        private breakpointObserver: BreakpointObserver\n    ) {\n        super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n\n        console.warn('@deja-js/component/date-picker is deprecated, and will be removed in a further version. Please use mat-datepicker instead. Look at the mat-datepicker demo page of @deja-js/component for implementation.');\n\n        if (this.ngControl) {\n            this.ngControl.valueAccessor = this;\n        }\n        this.overlayOwnerElement = this.elementRef.nativeElement;\n\n        if (this._parentForm) {\n            this._parentForm.ngSubmit.pipe(\n                takeUntil(this.destroyed$)\n            ).subscribe(() => {\n                this.changeDetectorRef.markForCheck();\n            });\n        }\n\n        if (this._parentFormGroup) {\n            this._parentFormGroup.ngSubmit.pipe(\n                takeUntil(this.destroyed$)\n            ).subscribe(() => {\n                this.changeDetectorRef.markForCheck();\n            });\n        }\n\n        fm.monitor(this.elementRef.nativeElement, true).pipe(\n            map(origin => {\n                this.focused = !!origin;\n                if (!this.focused) {\n                    this.onTouchedCallback();\n                } else {\n                    return !this.value;\n                }\n                return false;\n            }),\n            filter(select => select),\n            delay(1),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => this.inputElement.setSelectionRange(0, 0));\n\n        const keydown$ = this.inputElement$.pipe(\n            switchMap(element => fromEvent<KeyboardEvent>(element, 'keydown'))\n        );\n\n        const cursorChanged$ = this.inputElement$.pipe(\n            switchMap(element => fromEvent<MouseEvent>(element, 'mouseup').pipe(\n                mergeWith(fromEvent<Event>(element, 'focus'), fromEvent<KeyboardEvent>(element, 'keyup')),\n                map(() => element.selectionStart)\n            ))\n        );\n\n        cursorChanged$.pipe(\n            takeUntil(this.destroyed$)\n        ).subscribe(position => this.cursorPosition = position);\n\n        keydown$.pipe(\n            filter(event => !this.showDropDown && (event.code === KeyCodes.KeyD || event.code === KeyCodes.UpArrow || event.code === KeyCodes.DownArrow)),\n            takeUntil(this.destroyed$)\n        ).subscribe(event => {\n            switch (event.code) {\n                case (KeyCodes.KeyD):\n                    if (!this.allowFreeEntry) {\n                        event.preventDefault();\n                        this.setToCurrentDate();\n                    }\n                    break;\n\n                case (KeyCodes.UpArrow):\n                    event.preventDefault();\n                    if (event.altKey) {\n                        this.open();\n                    } else if (this.date) {\n                        // If cursor is on number, we can update it\n                        if (!isNaN(+this._inputModel[this.cursorPosition - 1])) {\n                            const updatedValue = this.incrementDateBySegment(1);\n                            this.updateModel(!this.dateMax || updatedValue <= this.dateMax ? updatedValue : this.value);\n                        }\n                    }\n                    break;\n                case (KeyCodes.DownArrow):\n                    event.preventDefault();\n                    if (event.altKey) {\n                        this.open();\n                    } else if (this.date) {\n                        // Same as arrowUp\n                        if (!isNaN(+this._inputModel[this.cursorPosition - 1])) {\n                            const updatedValue = this.incrementDateBySegment(-1);\n                            this.updateModel(!this.dateMin || updatedValue >= this.dateMin ? updatedValue : this.value);\n                        }\n                    }\n                    break;\n                default:\n                    break;\n            }\n        });\n\n        const valueUpdated$ = this.formatChanged$.pipe(\n            combineLatestWith(this.dateChanged$),\n            tap(([dateFormat]) => {\n                // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n                const array = dateFormat.match(DejaDatePickerComponent.formattingTokens);\n                this._mask = array.map(val => formatToMask[val] || val).join('');\n\n                this._pattern = array.reduce((patternBuilder, val) => {\n                    const patternSection = formatToPattern[val] || null;\n                    if (patternSection) {\n                        patternSection.forEach((value, key) => {\n                            patternBuilder[key] = value;\n                        });\n                    }\n                    return patternBuilder;\n                }, {} as Pattern);\n            })\n        );\n\n        const inputElement$ = this.inputElement$.pipe(\n            delay(1),\n            take(1)\n        );\n\n        valueUpdated$.pipe(\n            tap(([dateFormat, value]) => {\n                this.date = value;\n                this._inputModel = (this.date && (this.date instanceof Date ? formatWithLocale(this.date, dateFormat) : this.date)) || null;\n                this.changeDetectorRef.markForCheck();\n            }),\n            filter(() => this.cursorPosition && !this.allowFreeEntry),\n            switchMap(() => inputElement$),\n            takeUntil(this.destroyed$)\n        ).subscribe(elem => elem.setSelectionRange(this.cursorPosition, this.cursorPosition)); // si la position du curseur était stockée, on la restaure apres avoir changé la valeur\n\n        keydown$.pipe(\n            filter(() => this.showDropDown),\n            takeUntil(this.destroyed$)\n        ).subscribe(event => {\n            if (event.code === KeyCodes.Escape) {\n                this.close();\n            } else {\n                this.dateSelectorComponent.keyDown(event);\n            }\n        });\n\n        this.inputElement$.pipe(\n            combineLatestWith(this.focus$),\n            takeUntil(this.destroyed$)\n        ).subscribe(([element]) => element.focus());\n    }\n\n    public onChangeCallback = (_a?: unknown): void => undefined;\n    public onTouchedCallback = (): void => undefined;\n\n    /** unsubscribe to all Observable when component is destroyed */\n    public ngOnDestroy(): void {\n        this.fm.stopMonitoring(this.elementRef.nativeElement);\n        this.destroyed$.next();\n        this.destroyed$.unsubscribe();\n        this.stateChanges.complete();\n    }\n\n    /** Init mask */\n    public ngOnInit(): void {\n        if (!this._format) {\n            if (!this.layout || this.layout === DateComponentLayout.dateonly || this.layout === 'dateonly') {\n                this.format = 'yyyy/MM/dd';\n            } else if (this.layout === DateComponentLayout.datetime || this.layout === 'datetime') {\n                this.format = 'yyyy/MM/dd HH:mm';\n            } else if (this.layout === DateComponentLayout.timeonly || this.layout === 'timeonly') {\n                this.format = 'HH:mm';\n            } else {\n                this.format = 'yyyy/MM/dd';\n            }\n        }\n    }\n\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    /** This method is used by the <mat-form-field> to specify the IDs that should be used for the aria-describedby attribute of your component.\n     * The method has one parameter, the list of IDs, we just need to apply the given IDs to our host element.\n     */\n    public setDescribedByIds(ids: string[]): void {\n        this.describedBy = ids.join(' ');\n    }\n\n    /** This method will be called when the form field is clicked on.\n     * It allows your component to hook in and handle that click however it wants.\n     * The method has one parameter, the MouseEvent for the click.\n     * In our case we'll just focus the first <input> if the user isn't about to click an <input> anyways.\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    public get showDropDown(): boolean {\n        return this._showDropDown;\n    }\n\n    /** disabled property setter. Can be string or empty so you can use it like : <deja-date-picker disabled></deja-date-picker> */\n    @Input()\n    public set disabled(value: boolean) {\n        this._disabled = coerceBooleanProperty(value) ? true : null;\n        this.stateChanges.next();\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** disabled property getter. */\n    public get disabled(): boolean {\n        return this._disabled;\n    }\n\n    /** required property setter. Can be string or empty so you can use it like : <deja-date-picker required></deja-date-picker> */\n    @Input()\n    public set required(value: boolean) {\n        this._required = coerceBooleanProperty(value) || null;\n        this.stateChanges.next();\n    }\n\n    /** required property getter. */\n    public get required(): boolean {\n        return this._required;\n    }\n\n    /**\n     * Component Layout\n     */\n    @Input()\n    public set layout(value: DateComponentLayout | string) {\n        if (value) {\n            this._layout = value;\n        }\n        this.changeDetectorRef.markForCheck();\n    }\n\n    public get layout(): string | DateComponentLayout {\n        return this._layout;\n    }\n\n    /**\n     * Time property setter. Can be string or empty so you can use it like : <deja-date-picker time></deja-date-picker>\n     * Used to add time selector next to calendar\n     */\n    @Input()\n    public set time(value: BooleanInput) {\n        this._time = coerceBooleanProperty(value) ? true : null;\n        if (this._time) {\n            this.layout = DateComponentLayout.datetime;\n        }\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** Time property getter */\n    public get time(): BooleanInput {\n        return this._time;\n    }\n\n    /** Method to close date-picker dialog */\n    public close(): boolean {\n        this._showDropDown = false;\n        this.changeDetectorRef.markForCheck();\n        return false;\n    }\n\n    /** Method to open date-picker dialog */\n    public open(): void {\n        this._showDropDown = true;\n        this.changeDetectorRef.markForCheck();\n    }\n\n    /** set accessor including call the onchange callback */\n    public set value(v: Date | string) {\n        if (v !== this.date) {\n            this.writeValue(v);\n            this.onChangeCallback(v);\n            this.stateChanges.next();\n        }\n    }\n\n    // ************* ControlValueAccessor Implementation **************\n    /** get accessor */\n    public get value(): Date | string {\n        return this.date;\n    }\n\n    /** From ControlValueAccessor interface */\n    public writeValue(value: Date | string): void {\n        if (value !== this.date) {\n            this.dateChanged$.next(value);\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    /** For reactive form. */\n    public ngAfterContentInit(): void {\n        if (this.inputValidatorDirective) {\n            this.inputValidatorDirective.parentControl = this.ngControl;\n        }\n    }\n\n    /** Give focus to this component */\n    public setFocus(): void {\n        this.focus$.next();\n    }\n\n    /**\n     * Called when user click on the input of this component.\n     * If click is located on icon 'calendar' who is in the matPrefix of mat-form-field-container, the picker show off.\n     *\n     * @param event\n     */\n    public toggleDateSelector(event: Event): boolean {\n        if (this.disabled) {\n            return undefined;\n        }\n\n        const target = event.currentTarget as HTMLElement;\n        if (target.id !== 'calendar-button') {\n            return undefined;\n        }\n\n        this.open();\n\n        return false;\n    }\n\n    /**\n     * Called when input change. If it's a string it's because user set the date manually. So we need to convert it into date.\n     *\n     * @param date new value of this model\n     */\n    public updateModel(date: string | Date): void {\n        if (typeof date === 'string' && !this.allowFreeEntry) { // && date.replace(/_/g, '').length === this._format.length) {\n            if (date.replace(/_/g, '').length === this._format.length) { // If mask is fully filled\n                const mDate = parse(date, this._format, startOfToday());\n                if (mDate && isValid(mDate)) {\n                    date = mDate || null;\n                } else {\n                    console.warn('[DatePicker]: Invalid Date');\n                    this.ngControl.control.setErrors({ invalidMask: true });\n                    this.changeDetectorRef.markForCheck();\n                }\n                // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n            } else if (!date.match(/[0-9]/)) { // if mask is empty - do nothing\n                return;\n            } else { // If mask is partially filled\n                date = null;\n                console.warn('[DatePicker]: Invalid Date');\n                this.ngControl.control.setErrors({ invalidMask: true });\n                this.changeDetectorRef.markForCheck();\n            }\n        }\n\n        if (date instanceof Date) {\n            if (this.value instanceof Date && this.value && this.value.getTime() === date.getTime()) {\n                return;\n            }\n\n            let event: EventEmitter<Date | string>;\n\n            // now we check if it's date or time who is updated to raise correct event\n            if (this.value instanceof Date && this.value && (date.getFullYear() !== this.value.getFullYear() || date.getMonth() !== this.value.getMonth() || date.getDate() !== this.value.getDate())) {\n                event = this.dateChange;\n            } else if (this.value instanceof Date && this.value && (date.getHours() !== this.value.getHours() || date.getMinutes() !== this.value.getMinutes() || date.getSeconds() !== this.value.getSeconds() || date.getMilliseconds() !== this.value.getMilliseconds())) {\n                event = this.timeChange;\n            } else {\n                event = this.dateChange;\n            }\n\n            this.value = date;\n            this.onTouchedCallback();\n            event.emit(date);\n\n            if (!this._layout || this._layout === DateComponentLayout.dateonly) {\n                this.close();\n            } else {\n                this.changeDetectorRef.markForCheck();\n            }\n        } else if (this.allowFreeEntry) {\n            this.value = date;\n            this.onTouchedCallback();\n            this.dateChange.emit(date);\n            this.changeDetectorRef.markForCheck();\n        }\n    }\n\n    /** Reset date-picker values. */\n    public reset(): void {\n        // To prevent \"ExpressionChangedAfterItHasBeenCheckedError\"\n        timer(0).pipe(\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            this.value = null;\n            delete this._inputModel;\n        });\n        this.close();\n    }\n\n    public setToCurrentDate(): void {\n        this.value = new Date();\n\n        this.selectHours();\n    }\n\n    private selectHours(): void {\n        if (this.layout === DateComponentLayout.datetime) {\n            timer(0).pipe(\n                takeUntil(this.destroyed$)\n            ).subscribe(() => {\n                const hoursTemplate = formatWithLocale(this.toDate(this.date), 'HH:mm');\n                const stringDate = this.inputElement.value;\n                const hoursPosition = stringDate.indexOf(hoursTemplate);\n                this.inputElement.setSelectionRange(hoursPosition, stringDate.length);\n            });\n        }\n    }\n\n    private incrementDateBySegment(increment: number): string | Date {\n        // We get an array of all sections of the date format\n        // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n        const dateFormat = this._format.match(DejaDatePickerComponent.formattingTokens);\n        // We check the letter of the format at cursor position\n        const f = this._format[this.cursorPosition - 1];\n        // With this letter we determinate the format by checking on format array\n        let unitOfTime = dateFormat.find(str => str.includes(f));\n        // If this format has a corresponding value inside formatToUnitOfTime object we can increment its value with add() method\n        unitOfTime = (unitOfTime && formatToUnitOfTime[unitOfTime]) || undefined;\n        if (unitOfTime) {\n            const duration = {\n                [unitOfTime]: increment\n            } as Duration;\n            const updatedValue = add(this.toDate(this.value), duration);\n            return updatedValue;\n        }\n\n        return this.value;\n    }\n\n    private toDate(value: Date | string): Date {\n        return typeof value === 'string' ? parse(value, this.format, startOfToday()) : value;\n    }\n}\n","<input *ngIf=\"!allowFreeEntry\"\n    deja-child-validator\n    #inputelement\n    date-selector-input\n    matInput\n    autocomplete=\"off\"\n    [disabled]=\"disabled\"\n    [required]=\"required\"\n    [ngModel]=\"inputModel\"\n    [placeholder]=\"placeholder\"\n    [mask]=\"mask\"\n    [showMaskTyped]=\"true\"\n    [patterns]=\"pattern\"\n    [dropSpecialCharacters]=\"false\"\n    (ngModelChange)=\"updateModel($event)\"\n    [ngModelOptions]=\"ngModelOptions\"\n    />\n<input *ngIf=\"allowFreeEntry\" class=\"free-txt\" deja-child-validator #inputelement date-selector-input matInput autocomplete=\"off\" [disabled]=\"disabled\" [required]=\"required\" [ngModel]=\"inputModel\" [placeholder]=\"placeholder\" (ngModelChange)=\"updateModel($event)\" [ngModelOptions]=\"ngModelOptions\">\n<div class=\"datepicker-actions\">\n    <button type=\"button\" *ngIf=\"inputModel && !disabled\" (click)=\"reset()\" id=\"clear-button\" tabindex=\"-1\">\n\t\t<mat-icon inline>clear</mat-icon>\n\t</button>\n    <button type=\"button\" *ngIf=\"showCurrentDateButton && !disabled\" (click)=\"setToCurrentDate()\" id=\"current-date-button\" tabindex=\"-1\" [disabled]=\"disabled\">\n\t\t<mat-icon inline>today</mat-icon>\n\t</button>\n    <button type=\"button\" *ngIf=\"!disabled\" (click)=\"toggleDateSelector($event)\" id=\"calendar-button\" tabindex=\"-1\">\n\t\t<mat-icon inline>date_range</mat-icon>\n\t</button>\n</div>\n\n<deja-overlay #dejaOverlay [overlayContainerClass]=\"overlayContainerClass\" [ownerElement]=\"overlayOwnerElement\" [isVisible]=\"showDropDown\" (closed)=\"close()\" [positions]=\"positions\" [overlayOffsetY]=\"overlayOffsetY\" [overlayOffsetX]=\"overlayOffsetX\">\n    <deja-date-time-selector [layout]=\"layout\" [disableDates]=\"disableDates\" [ngModel]=\"date\" (ngModelChange)=\"updateModel($event);\" class=\"inside-dropdown\" [dateMax]=\"dateMax\" [dateMin]=\"dateMin\" [layout]=\"layout\" [format]=\"format\"></deja-date-time-selector>\n    <div class=\"actions\">\n        <button mat-mini-fab type=\"button\" (click)=\"close()\">\n\t\t\t<mat-icon>close</mat-icon>\n\t\t</button>\n    </div>\n</deja-overlay>\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 } from '@deja-js/component/core';\nimport { DejaDateSelectorModule } from '@deja-js/component/date-selector';\nimport { DejaOverlayModule } from '@deja-js/component/overlay';\nimport { NgxMaskModule } from 'ngx-mask';\n\nimport { DejaDatePickerComponent } from './date-picker.component';\n\n@NgModule({\n    declarations: [DejaDatePickerComponent],\n    exports: [DejaDatePickerComponent],\n    imports: [\n        CommonModule,\n        DejaChildValidatorModule,\n        DejaDateSelectorModule,\n        DejaOverlayModule,\n        FormsModule,\n        MatButtonModule,\n        MatIconModule,\n        MatInputModule,\n        NgxMaskModule.forRoot()\n    ]\n})\nexport class DejaDatePickerModule { }\n\nexport * from './date-picker.component';\nexport * from './format-to-mask';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}