{"version":3,"file":"index.mjs","sources":["../../../../../../projects/components/widgets/input/epoch/base-date-time/src/base-date-time.component.ts","../../../../../../projects/components/widgets/input/epoch/base-date-time/src/index.ts"],"sourcesContent":["import {AfterViewInit, Directive, Inject, Injector, OnDestroy, Optional, ViewChild} from '@angular/core';\nimport {AbstractControl, Validator} from '@angular/forms';\nimport {Subscription} from 'rxjs';\nimport {FormStyle, getLocaleDayPeriods, TranslationWidth} from '@angular/common';\nimport {BsDropdownDirective} from 'ngx-bootstrap/dropdown';\nimport {TimepickerComponent, TimepickerConfig} from 'ngx-bootstrap/timepicker';\nimport {AbstractI18nService, getDateObj, getFormattedDate, getNativeDateObject, isMobile, setAttr} from '@wm/core';\n\nimport {getContainerTargetClass, ToDatePipe} from '@wm/components/base';\nimport {BaseFormCustomComponent} from '@wm/components/input/base-form-custom';\nimport {BsDatepickerConfig, BsDatepickerDirective} from 'ngx-bootstrap/datepicker';\nimport {DateTimePickerComponent} from '@wm/components/input/epoch/date-time-picker';\nimport {filter, forEach, get, includes, isNaN as _isNaN, isString, isUndefined, parseInt, split} from \"lodash-es\";\nimport * as momentLib from 'moment';\n\ndeclare const $;\nconst moment = momentLib.default || window['moment'];\n\nconst CURRENT_DATE = 'CURRENT_DATE';\nconst months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nconst DATEPICKER_DROPDOWN_OPTIONS = {\n    BUTTON: 'button',\n    DEFAULT: 'default'\n};\nconst DATAENTRYMODE_DROPDOWN_OPTIONS = {\n    PICKER: 'picker',\n    DEFAULT: 'default'\n};\n\n// Providing meridians to the timepicker baesd on selected locale\nexport function getTimepickerConfig(i18nService): TimepickerConfig {\n    return Object.assign(new TimepickerConfig(), {\n        meridians: [i18nService.getLocalizedMessage(\"LABEL_AM\")||\"AM\",i18nService.getLocalizedMessage(\"LABEL_PM\")||\"PM\"]\n    });\n}\n\n@Directive()\nexport abstract class BaseDateTimeComponent extends BaseFormCustomComponent implements AfterViewInit, OnDestroy, Validator {\n    public required: boolean;\n    public disabled: boolean;\n    public tabindex: any;\n    public name: string;\n    public autofocus: boolean;\n    public readonly: boolean;\n    public placeholder: string;\n    public shortcutkey: string;\n    public _triggeredByUser: boolean;\n\n    public excludedays: string;\n    public excludedDaysToDisable: Array<number>;\n    public excludedDatesToDisable: Array<Date>;\n    public excludedates;\n    public outputformat;\n    public mindate;\n    public maxdate;\n    public dataentrymode;\n    protected activeDate;\n    private elementScope;\n    public viewmode;\n    public datepattern;\n    public timepattern;\n    protected showseconds: boolean;\n    protected ismeridian: boolean;\n    protected meridians: any;\n    protected datePipe;\n    protected i18nService;\n    public isReadOnly = false;\n    protected selectedLocale: string;\n    public selectfromothermonth: boolean;\n    public todaybutton: boolean;\n    public clearbutton: boolean;\n    public removeKeyupListener;\n    public loadNativeDateInput;\n    public showcustompicker;\n    public next;\n    public prev;\n    public clicked = false;\n    public showampmbuttons=true;\n    protected dateNotInRange: boolean;\n    protected timeNotInRange: boolean;\n    protected invalidDateTimeFormat: boolean;\n\n    public am:string;\n    public pm: string;\n    private dateOnShowSubscription: Subscription;\n    private cancelLocaleChangeSubscription;\n    public get timeZone() { return this.inj.get(AbstractI18nService).getTimezone(this); }\n\n    formatsByLocale = {'timezone': ''};\n\n    /**\n     * Safely replace internal meridians with localized display meridians only for string values\n     */\n    protected safeReplaceMeridians(value: any) {\n        if (typeof value === 'string') {\n            return value.replace(this.meridians[0], this.am).replace(this.meridians[1], this.pm);\n        }\n        return value;\n    }\n\n    /**\n     * This is an internal property used to map the containerClass, showWeekNumbers etc., to the bsDatepicker\n     */\n    public _dateOptions: BsDatepickerConfig = new BsDatepickerConfig();\n    protected bsDatePickerDirective: BsDatepickerDirective;\n\n    @ViewChild(BsDropdownDirective) protected bsDropdown;\n    @ViewChild(TimepickerComponent) protected bsTimePicker;\n    @ViewChild(DateTimePickerComponent) datetimepickerComponent;\n    private validateType: string;\n    containerTarget: string;\n\n    constructor(inj: Injector, WIDGET_CONFIG, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n        super(inj, WIDGET_CONFIG, explicitContext);\n        this.i18nService = this.inj.get(AbstractI18nService);\n        this.invokeEventCallback('beforeload');\n\n        this.datePipe = this.inj.get(ToDatePipe);\n        this.selectedLocale = this.i18nService.getSelectedLocale();\n        this._dateOptions.todayPosition = 'left';\n        this._dateOptions.clearPosition = 'right';\n        this.meridians = getLocaleDayPeriods(this.selectedLocale, FormStyle.Format, TranslationWidth.Abbreviated);\n        this.loadNativeDateInput = isMobile() && !this.showcustompicker;\n        this.am=this.i18nService.getLocalizedMessage(\"LABEL_AM\")||\"AM\";\n        this.pm=this.i18nService.getLocalizedMessage(\"LABEL_PM\")||\"PM\";\n\n        this.cancelLocaleChangeSubscription = this.getAppInstance().subscribe(\"locale-changed\", (locale) => {\n            this.datePipe.datePipe.locale = locale.angular;\n            this._dateOptions.todayButtonLabel = this.i18nService.getLocalizedMessage('LABEL_TODAY_DATE');\n            this._dateOptions.clearButtonLabel = this.i18nService.getLocalizedMessage('LABEL_CLEAR_DATE');\n        });\n    }\n\n\n    /**\n     * returns true if the input value is default (i.e open date picker on input click)\n     * @param1 dropdownvalue, user selected value (by default datepicker opens on input click)\n     * **/\n    protected isDropDownDisplayEnabledOnInput(dropdownvalue) {\n        return dropdownvalue === DATEPICKER_DROPDOWN_OPTIONS.DEFAULT;\n    }\n\n    /**\n     * returns true if the input value is default (i.e Data entry can be done either by selecting from the Date/DateTime/Time Picker or by entering  manually using the keyboard. )\n     * @param1 dropdownvalue, user selected value\n     * **/\n    protected isDataEntryModeEnabledOnInput(dropdownvalue) {\n        return dropdownvalue === DATAENTRYMODE_DROPDOWN_OPTIONS.DEFAULT;\n    }\n    /**\n     * This method is used to show validation message depending on the isNativePicker flag.\n     */\n    private showValidation($event, displayValue, isNativePicker, msg) {\n        if (isNativePicker) {\n            console.warn('min max date validation failed ', msg);\n            return $($event.target).val(displayValue);\n        }\n    }\n\n    resetDisplayInput() {\n        $(this.nativeElement).find('.display-input').val('');\n    }\n\n    public validate(c: AbstractControl) {\n        if (this.invalidDateTimeFormat) {\n            return {\n                invalidDateTimeFormat: {\n                    valid: false\n                }\n            };\n        }\n        if (!isUndefined(this.dateNotInRange) && this.dateNotInRange) {\n            return {\n                dateNotInRange: {\n                    valid: false\n                },\n            };\n        }\n        if (!isUndefined(this.timeNotInRange) && this.timeNotInRange) {\n            return {\n                timeNotInRange: {\n                    valid: false\n                },\n            };\n        }\n        /* WMS-18269 | Extending the existing validation for 'required' */\n        if (this['show'] && this['required']) {\n            return !!c.value ? null : { required: true };\n        }\n        this.validateType = '';\n        return null;\n    }\n\n    /**\n     * This method is used to validate date pattern and time pattern\n     * If user selects one pattern in design time and if he tries to enter the date in another pattern then the device is throwing an error\n     */\n    protected formatValidation(newVal, inputVal, isNativePicker?: boolean) {\n        const pattern = this.datepattern || this.timepattern;\n        const timeZone = this.timeZone;\n        const formattedDate = getFormattedDate(this.datePipe, newVal, pattern, timeZone, null, null, this);\n        inputVal = inputVal.trim();\n        if (inputVal) {\n            if (pattern === 'timestamp') {\n                if (!_isNaN(inputVal) && parseInt(inputVal) !== formattedDate) {\n                    this.invalidDateTimeFormat = true;\n                    this.validateType = 'incorrectformat';\n                    this.invokeOnChange(this.datavalue, undefined, false);\n                    return false;\n                }\n            } else {\n                if (isNativePicker) {\n                    // format the date value only when inputVal is obtained from $event.target.value, as the format doesnt match.\n                    inputVal = getFormattedDate(this.datePipe, inputVal, pattern, timeZone);\n                }\n                if (inputVal?.replace(this.am, this.meridians[0])?.replace(this.pm, this.meridians[1]) !== formattedDate) {\n                    this.invalidDateTimeFormat = true;\n                    this.validateType = 'incorrectformat';\n                    this.invokeOnChange(this.datavalue, undefined, false);\n                    return false;\n                }\n            }\n\n        }\n        return true;\n    }\n\n    /**\n     * This method is used to validate min date, max date, exclude dates and exclude days\n     * In mobile if invalid dates are entered, device is showing an alert.\n     * In web if invalid dates are entered, device is showing validation message.\n     */\n    protected minDateMaxDateValidationOnInput(newVal, $event?: Event, displayValue?: string, isNativePicker?: boolean) {\n        if (newVal) {\n            const dateTimeVal = newVal;\n            newVal = moment(newVal).startOf('day').toDate();\n            const minDate = moment(getDateObj(this.mindate)).startOf('day').toDate();\n            const maxDate = moment(getDateObj(this.maxdate)).startOf('day').toDate();\n            if (this.mindate && newVal < minDate) {\n                const msg = `${this.appLocale.LABEL_MINDATE_VALIDATION_MESSAGE} ${this.mindate}.`;\n                this.invokeOnChange(this.datavalue, undefined, false);\n                if (isNativePicker && getFormattedDate(this.datePipe, minDate, this.datepattern, this.timeZone, null, null, this) === displayValue) {\n                    return $($event.target).val(displayValue);\n                }\n                this.dateNotInRange = true;\n                this.validateType = 'mindate';\n                return this.showValidation($event, displayValue, isNativePicker, msg);\n            }\n            if (this.maxdate && newVal > maxDate) {\n                const msg = `${this.appLocale.LABEL_MAXDATE_VALIDATION_MESSAGE} ${this.maxdate}.`;\n                this.invokeOnChange(this.datavalue, undefined, false);\n                if (isNativePicker && getFormattedDate(this.datePipe, maxDate, this.datepattern, this.timeZone, null, null, this) === displayValue) {\n                    return $($event.target).val(displayValue);\n                }\n                this.dateNotInRange = true;\n                this.validateType = 'maxdate';\n                return this.showValidation($event, displayValue, isNativePicker, msg);\n            }\n            if (this.excludedates) {\n                let excludeDatesArray;\n                if (isString(this.excludedates)) {\n                    excludeDatesArray = split(this.excludedates, ',');\n                } else {\n                    excludeDatesArray = this.excludedates;\n                }\n                excludeDatesArray = excludeDatesArray.map(d => getFormattedDate(this.datePipe, d, this.datepattern, this.timeZone, null, null, this));\n                if (excludeDatesArray.indexOf(getFormattedDate(this.datePipe, dateTimeVal, this.datepattern, this.timeZone, null, null, this)) > -1) {\n                    this.dateNotInRange = true;\n                    this.validateType = 'excludedates';\n                    this.invokeOnChange(this.datavalue, undefined, false);\n                    return;\n                }\n            }\n            if (this.excludedays) {\n                const excludeDaysArray = split(this.excludedays, ',');\n                const day = get(dateTimeVal, 'getDay') ? dateTimeVal.getDay() : dateTimeVal;\n                if (excludeDaysArray.indexOf(day.toString()) > -1) {\n                    this.dateNotInRange = true;\n                    this.validateType = 'excludedays';\n                    this.invokeOnChange(this.datavalue, undefined, false);\n                    return;\n                }\n            }\n        }\n\n        if (!isNativePicker) {\n            this.dateNotInRange = false;\n            this.invokeOnChange(this.datavalue, undefined, false);\n        }\n    }\n\n    /**\n     * This method is used to highlight the current date\n     */\n    // protected hightlightToday(newDate) {\n    //     if(this.datavalue) return;\n    //     const activeMonth = $(`.bs-datepicker-head .current span`).first().text().trim();\n    //     const activeYear =  $(\".bs-datepicker-head .current\").eq(1).text();\n    //     const month = new Date(newDate).toLocaleString('default', { month: 'long' });\n    //     const year = newDate.getFullYear().toString();\n    //     if(activeMonth == month && activeYear == new Date().getFullYear() && newDate.getDate() === new Date().getDate() && newDate.getMonth() === new Date().getMonth() && newDate.getFullYear() === new Date().getFullYear()) {\n    //         const toDay = new Date().getDate().toString();\n    //         filter($(`span:contains(${toDay})`).not('.is-other-month'), (obj) => {\n    //             if ($(obj).text() === toDay) {\n    //                 $(obj).addClass('current-date text-info');\n    //                 $(obj).off('mouseenter.dateHover').on('mouseenter.dateHover', () => {\n    //                   setTimeout(()=>{ this.hightlightToday(new Date())})\n    //                 });\n    //             }\n    //         });\n    //     }\n    // }\n\n    /**\n     * This method is used to find the new date is from another year or not\n     * @param newDate - newly selected date value\n     */\n    private isOtheryear(newDate) {\n        return (newDate.getMonth() === 0 && this.activeDate.getMonth() === 11) || (newDate.getMonth() === 11 && this.activeDate.getMonth() === 0);\n    }\n\n    public showDatePickerModal(bsDataValue) {\n        this.activeDate = bsDataValue || new Date();\n        this.setNextData(this.activeDate);\n        this.datetimepickerComponent.show();\n        setTimeout(() => {\n            this.addDatepickerMouseEvents();\n            this.setActiveDateFocus(this.activeDate, true);\n        }, 500);\n        return ;\n    }\n\n    /**\n     * This method is used to load other month days or other month or other year\n     * @param btnClass - class(previous/next) of the button which we have to click\n     * @param timePeriod - String value decides to load other month days or other month or other year\n     */\n    private goToOtherMonthOryear(btnClass, timePeriod) {\n        const $node = $(`.bs-datepicker-head .${btnClass}`);\n        if ($node.attr('disabled')) {\n            return;\n        }\n        $node.trigger('click');\n        if (timePeriod === 'days') {\n            this.loadDays();\n        } else if (timePeriod === 'month') {\n            this.loadMonths();\n        } else if (timePeriod === 'year') {\n            this.loadYears();\n        }\n    }\n\n    /**\n     * This method is used to set focus for active day\n     * @param newDate - newly selected date value\n     * @param isMouseEvent - boolean value represents the event is mouse event/ keyboard event\n     * @param fromKeyboardEvents\n     */\n    private setActiveDateFocus(newDate, isMouseEvent?: boolean, fromKeyboardEvents?: boolean) {\n        this.setNextData(newDate);\n        this.clicked = false;\n        const activeMonth = this.activeDate.getMonth();\n        // check for keyboard event\n        if (!isMouseEvent) {\n            if (newDate.getMonth() < activeMonth) {\n                this.isOtheryear(newDate) ? this.goToOtherMonthOryear('next', 'days') : this.goToOtherMonthOryear('previous', 'days');\n            } else if (newDate.getMonth() > activeMonth) {\n                this.isOtheryear(newDate) ? this.goToOtherMonthOryear('previous', 'days') : this.goToOtherMonthOryear('next', 'days');\n            }\n        }\n        setTimeout(() => {\n            const newDay = newDate.getDate().toString();\n            filter($(`span:contains(${newDay})`).not('.is-other-month'), (obj) => {\n                const activeMonth = $(`.bs-datepicker-head .current`).first().text();\n                const activeYear =  $(\".bs-datepicker-head .current\").eq(1).text();\n                const monthName = new Date().toLocaleString('default', { month: 'long' });\n                if ($(obj).text() === newDay) {\n                    if ($(obj).hasClass('selected')) {\n                        $(obj).parent().attr('aria-selected', 'true');\n                    }\n                    $(obj).attr('aria-label', moment(newDate).format('dddd, MMMM Do YYYY'));\n                    $('[bsdatepickerdaydecorator]').not('.is-other-month').attr('tabindex', '-1');\n                    $(obj).attr('tabindex', '0');\n                    setTimeout(()=>{ $(obj).focus();},10)\n                    // $(obj).focus();\n                    this.activeDate = newDate;\n                }\n            });\n            // if (newDate.getMonth() === new Date().getMonth() && newDate.getFullYear() === new Date().getFullYear()) {\n            //     this.hightlightToday(new Date());\n            // }\n        });\n\n    }\n\n    private getMonth(date, inc) {\n        const currentMonth = new Date(date);\n\n        let month = currentMonth.getMonth();\n        const year = currentMonth.getFullYear();\n\n        month += inc;\n\n        const newDate = new Date(year, month);\n\n        const fullMonth = newDate.toLocaleString('en-US', { month: 'long' });\n\n        return {\n            date: newDate,\n            fullMonth: fullMonth\n        };\n    }\n\n    /**\n     * This method sets focus for months/days depending on the loaded datepicker table\n     */\n    private setFocusForMonthOrDay() {\n        const activeMonthOrYear = $(`.bs-datepicker-head .current`).first().text();\n        const datePickerBody = $('.bs-datepicker-body');\n        if (datePickerBody.find('table.months').length > 0) {\n            if (parseInt(activeMonthOrYear) !== this.activeDate.getFullYear()) {\n                this.loadMonths();\n            }\n            const newDate = new Date(parseInt(activeMonthOrYear), this.activeDate.getMonth(), this.activeDate.getDate());\n            this.setActiveMonthFocus(newDate, true);\n        } else if (datePickerBody.find('table.days').length > 0) {\n            const newMonth = months.indexOf(activeMonthOrYear);\n            if (newMonth !== this.activeDate.getMonth()) {\n                this.loadDays();\n            }\n            const newDate = new Date(this.activeDate.getFullYear(), newMonth, 1);\n            this.setActiveDateFocus(newDate, true);\n        }\n    }\n\n    /**\n     * This method sets focus for months/years depending on the loaded datepicker table\n     */\n    private setFocusForCurrentMonthOryear() {\n        const datePickerBody = $('.bs-datepicker-body');\n        if (datePickerBody.find('table.months').length > 0) {\n            this.loadMonths();\n            this.setActiveMonthFocus(this.activeDate, true);\n        } else if (datePickerBody.find('table.years').length > 0) {\n            this.loadYears();\n            this.setActiveYearFocus(this.activeDate, true);\n        }\n    }\n\n    /**\n     * This method sets focus for months/years/days depending on the loaded datepicker table\n     */\n    private setFocusForDate(count) {\n        const datePickerBody = $('.bs-datepicker-body');\n        if (datePickerBody.find('table.months').length > 0) {\n            this.loadMonths();\n            const newDate = new Date(this.activeDate.getFullYear() + count, 0, this.activeDate.getDate());\n            this.setActiveMonthFocus(newDate, true);\n        } else if (datePickerBody.find('table.years').length > 0) {\n            this.loadYears();\n            const startYear = datePickerBody.find('table.years span').first().text();\n            const newDate = new Date(parseInt(startYear), this.activeDate.getMonth(), this.activeDate.getDate());\n            this.setActiveYearFocus(newDate, true);\n        } else if (datePickerBody.find('table.days').length > 0) {\n            this.loadDays();\n            const [monthText, yearText] = $('.bs-datepicker-head .current').map((_, el) => $(el).text().trim()).get();\n            const monthIndex = new Date(`${monthText} 1, ${yearText}`).getMonth();\n            const year = parseInt(yearText, 10);\n            const inMonth = (d: Date) => d.getFullYear() === year && d.getMonth() === monthIndex;\n            let newDate = this.mindate && inMonth(new Date(this.mindate)) ? new Date(this.mindate) : this.maxdate && inMonth(new Date(this.maxdate)) ? new Date(this.maxdate) : new Date(year, monthIndex, 1);\n            this.setActiveDateFocus(newDate, true);\n        }\n    }\n\n    /**\n     * This method is used to add keyboard events while opening the date picker\n     * @param scope - scope of the date/datetime widget\n     * @param isDateTime - boolean value represents the loaded widget is date or datetime\n     */\n    protected addDatepickerKeyboardEvents(scope, isDateTime) {\n        this.elementScope = scope;\n        const dateContainer = document.querySelector(`.${scope.dateContainerCls}`) as HTMLElement;\n        setAttr(dateContainer, 'tabindex', '0');\n        dateContainer.onkeydown = (event) => {\n            // Check for Shift+Tab key or Tab key or escape\n            if (event.key === 'Escape') {\n                this.elementScope.hideDatepickerDropdown();\n                const displayInputElem = this.elementScope.nativeElement.querySelector('.display-input') as HTMLElement;\n                setTimeout(() => displayInputElem.focus());\n            }\n        };\n        this.loadDays();\n        this.setActiveDateFocus(this.activeDate, undefined, true);\n    }\n    private setNextData(nextDate) {\n        this.next = this.getMonth(nextDate, 1);\n        this.prev = this.getMonth(nextDate, -1);\n    }\n    /**\n     * This method is used to add tabindex, keybord and mouse events for days\n     */\n    private loadDays() {\n        setTimeout(() => {\n            $('[bsdatepickerdaydecorator]').not('.is-other-month').attr('tabindex', '0');\n            // if (this.clicked === false) {\n            //     this.next = this.getMonth(this.activeDate, 1);\n            //     this.prev = this.getMonth(this.activeDate, -1);\n            // }\n            this.addKeyBoardEventsForDays();\n            this.addDatepickerMouseEvents();\n        });\n    }\n\n    /**\n     * This method sets keyboard events for days\n     */\n    private addKeyBoardEventsForDays() {\n        const datePickerBody = $('.bs-datepicker-body');\n        datePickerBody.keydown((event) => {\n            let newdate;\n            if (event.key === 'ArrowDown') {\n                event.preventDefault();\n                newdate = moment(this.activeDate).add(+7, 'days').toDate();\n                this.setActiveDateFocus(newdate);\n            } else if (event.ctrlKey && event.key === 'ArrowUp') {\n                // clicking on table header month name to load list of months\n                $('.bs-datepicker-head .current').first().click();\n                this.loadMonths();\n                this.setActiveMonthFocus(this.activeDate);\n            } else if (event.key === 'ArrowUp') {\n                event.preventDefault();\n                newdate = moment(this.activeDate).add(-7, 'days').toDate();\n                this.setActiveDateFocus(newdate);\n            } else if (event.key === 'ArrowLeft') {\n                newdate = moment(this.activeDate).add(-1, 'days').toDate();\n                this.setActiveDateFocus(newdate);\n            } else if (event.key === 'ArrowRight') {\n                newdate = moment(this.activeDate).add(+1, 'days').toDate();\n                this.setActiveDateFocus(newdate);\n            } else if (event.key === 'PageUp') {\n                event.preventDefault();\n                newdate = moment(this.activeDate).add(-1, 'month').toDate();\n                this.setActiveDateFocus(newdate);\n            } else if (event.key === 'PageDown') {\n                event.preventDefault();\n                newdate = moment(this.activeDate).add(+1, 'month').toDate();\n                this.setActiveDateFocus(newdate);\n            } else if (event.key === 'Enter') {\n                if ($(document.activeElement).hasClass('disabled')) {\n                    return;\n                }\n                $(document.activeElement).click();\n                this.elementScope.hideDatepickerDropdown();\n                const displayInputElem = this.elementScope.nativeElement.querySelector('.display-input') as HTMLElement;\n                setTimeout(() => displayInputElem.focus());\n            }\n        });\n        this.focusBlurDatePickerHeadButtons();\n    }\n\n    private focusBlurDatePickerHeadButtons() {\n        const datePickerHeadButton = $('.bs-datepicker-head button');\n        datePickerHeadButton.on('focus', function() { $(this).css('background-color', '#9AA0A3'); });\n        datePickerHeadButton.on('blur', function() { $(this).css('background-color', ''); });\n    }\n\n    /**\n     * This method is used to add tabindex, keybord and mouse events for months\n     */\n    private loadMonths() {\n        setTimeout(() => {\n            this.addKeyBoardEventsForMonths();\n            this.addDatepickerMouseEvents();\n        });\n    }\n\n    /**\n     * This method sets keyboard events for months\n     */\n    private addKeyBoardEventsForMonths() {\n        $('.bs-datepicker-body').keydown((event) => {\n            let newdate;\n            if ((event.ctrlKey && event.key === 'ArrowDown') || event.key === 'Enter') {\n                if ($(document.activeElement).parent().hasClass('disabled')) {\n                    return;\n                }\n                $(document.activeElement).click();\n                this.loadDays();\n                const newDate = new Date(this.activeDate.getFullYear(), this.activeDate.getMonth(), 1);\n                this.setActiveDateFocus(newDate);\n            } else if (event.ctrlKey && event.key === 'ArrowUp') {\n                // clicking on table header year to load list of years\n                $('.bs-datepicker-head .current').first().click();\n                this.loadYears();\n                this.setActiveYearFocus(this.activeDate);\n            } else if (event.key === 'ArrowDown') {\n                event.preventDefault();\n                newdate = moment(this.activeDate).add(+3, 'month').toDate();\n                this.setActiveMonthFocus(newdate);\n            } else if (event.key === 'ArrowUp') {\n                event.preventDefault();\n                newdate = moment(this.activeDate).add(-3, 'month').toDate();\n                this.setActiveMonthFocus(newdate);\n            } else if (event.key === 'ArrowLeft') {\n                newdate = moment(this.activeDate).add(-1, 'month').toDate();\n                this.setActiveMonthFocus(newdate);\n            } else if (event.key === 'ArrowRight') {\n                newdate = moment(this.activeDate).add(+1, 'month').toDate();\n                this.setActiveMonthFocus(newdate);\n            }\n        });\n        this.focusBlurDatePickerHeadButtons();\n    }\n\n    /**\n     * This method is used to add tabindex, keybord and mouse events for years\n     */\n    private loadYears() {\n        setTimeout(() => {\n            this.addKeyBoardEventsForYears();\n            this.addDatepickerMouseEvents();\n        });\n    }\n\n    /**\n     * This method is used to set focus for active month\n     */\n    private setActiveMonthFocus(newDate, isMoouseEvent?: boolean) {\n        this.setNextData(newDate);\n        const newMonth = months[newDate.getMonth()];\n        // check for keyboard event\n        if (!isMoouseEvent) {\n            if (newDate.getFullYear() < this.activeDate.getFullYear()) {\n                this.goToOtherMonthOryear('previous', 'month');\n            } else if (newDate.getFullYear() > this.activeDate.getFullYear()) {\n                this.goToOtherMonthOryear('next', 'month');\n            }\n        }\n        setTimeout(() => {\n            $(`.bs-datepicker-body table.months span`).attr('tabindex', '-1');\n            $(`.bs-datepicker-body table.months span:contains(${newMonth})`).attr('tabindex', '0');\n            $(`.bs-datepicker-body table.months span:contains(${newMonth})`).focus();\n            this.activeDate = newDate;\n        });\n    }\n\n    /**\n     * This method sets keyboard events for years\n     */\n    private addKeyBoardEventsForYears() {\n        $('.bs-datepicker-body').keydown((event) => {\n            let newdate;\n            if ((event.ctrlKey && event.key === 'ArrowDown') || event.key === 'Enter') {\n                if ($(document.activeElement).parent().hasClass('disabled')) {\n                    return;\n                }\n                $(document.activeElement).click();\n                this.loadMonths();\n                this.setActiveMonthFocus(this.activeDate);\n            } else if (event.key === 'ArrowDown') {\n                event.preventDefault();\n                newdate = moment(this.activeDate).add(+4, 'year').toDate();\n                this.setActiveYearFocus(newdate);\n            } else if (event.key === 'ArrowUp') {\n                event.preventDefault();\n                newdate = moment(this.activeDate).add(-4, 'year').toDate();\n                this.setActiveYearFocus(newdate);\n            } else if (event.key === 'ArrowLeft') {\n                newdate = moment(this.activeDate).add(-1, 'year').toDate();\n                this.setActiveYearFocus(newdate);\n            } else if (event.key === 'ArrowRight') {\n                newdate = moment(this.activeDate).add(+1, 'year').toDate();\n                this.setActiveYearFocus(newdate);\n            }\n        });\n        this.focusBlurDatePickerHeadButtons();\n    }\n\n    /**\n     * This method is used to set focus for active year\n     */\n    private setActiveYearFocus(newDate, isMouseEvent?: boolean) {\n        const newYear = newDate.getFullYear();\n        const datePickerYears = $('.bs-datepicker-body table.years span');\n        const startYear = datePickerYears.first().text();\n        const endYear = datePickerYears.last().text();\n        // check for keyboard event\n        if (!isMouseEvent) {\n            if (newDate.getFullYear() < parseInt(startYear)) {\n                this.goToOtherMonthOryear('previous', 'year');\n            } else if (newDate.getFullYear() > parseInt(endYear)) {\n                this.goToOtherMonthOryear('next', 'year');\n            }\n        }\n        setTimeout(() => {\n            $(`.bs-datepicker-body table.years span`).attr('tabindex', '-1');\n            $(`.bs-datepicker-body table.years span:contains(${newYear})`).attr('tabindex', '0');\n            $(`.bs-datepicker-body table.years span:contains(${newYear})`).focus();\n            this.activeDate = newDate;\n        });\n    }\n\n    /**\n     * This method sets focus for timepicker first input field(hours field) while opening time picker\n     * @param scope - scope of the time picker widget\n     */\n    protected focusTimePickerPopover(scope) {\n        this.elementScope = scope;\n        // setTimeout is used so that by then time input has the updated value. focus is setting back to the input field\n        this.elementScope.ngZone.runOutsideAngular(() => {\n            setTimeout(() => {\n                const hoursInput = $('timepicker .form-group').first().find('> input.form-control')[0] as HTMLElement;\n                hoursInput?.focus({ preventScroll: true });\n            },10);\n        });\n\n\n    }\n    /**\n     * This function sets the keyboard events to Timepicker popup\n     */\n    protected bindTimePickerKeyboardEvents() {\n        setTimeout(() => {\n            const $timepickerPopup = $('body').find('> bs-dropdown-container timepicker');\n            $timepickerPopup.attr('tabindex', 0);\n            this.addEventsOnTimePicker($timepickerPopup);\n        });\n    }\n\n    protected focusOnInputEl() {\n        if ($(this.nativeElement).closest('.caption-floating').length > 0) {\n            setTimeout(() => {\n                $(this.nativeElement).find('.app-textbox').focus();\n            }, 100);\n        }\n    }\n\n    /**\n     * This function checks whether the given date is valid or not\n     * @returns boolean value, true if date is valid else returns false\n     */\n    private isValidDate(date) {\n        return date && date instanceof Date && !isNaN(date.getTime());\n    }\n\n    /**\n     * This function checks whether the given time is valid or not\n     */\n    private timeFormatValidation() {\n        const enteredDate = $(this.nativeElement).find('input').val()?.replace(this.am, this.meridians[0])?.replace(this.pm, this.meridians[1]);\n        const newVal = getNativeDateObject(enteredDate, {meridians: this.meridians, pattern: this.datepattern});\n        if (!this.formatValidation(newVal, enteredDate)) {\n            return;\n        }\n        this.invalidDateTimeFormat = false;\n        this.invokeOnChange(this.datavalue, undefined, false);\n    }\n\n    private updateTimeValue(el, value, fieldName) {\n        let minEl = el.find('input[aria-label=\"minutes\"]');\n        let secEl = el.find('input[aria-label=\"seconds\"]');\n        minEl.value = secEl.value = '00';\n        if (value.length < 2) {\n            setTimeout(() => {\n                fieldName === 'minutes' ? this.bsTimePicker.updateMinutes(minEl) : this.bsTimePicker.updateSeconds(secEl);\n            }, 500);\n        } else {\n            fieldName === 'minutes' ? this.bsTimePicker.updateMinutes(minEl) : this.bsTimePicker.updateSeconds(secEl);\n        }\n    }\n\n    /**\n     * This function sets the events to given element\n     * @param $el - element on which the event is added\n     */\n    private addEventsOnTimePicker($el: JQuery) {\n        const inputFields = $el.find('.bs-timepicker-field');\n        // WMS-19382: update minutes and seconds to 0 when we enter hour value\n        inputFields.first().on('keyup', evt => {\n            const hourValue = (evt.target as any).value;\n            forEach(inputFields, (field, index) => {\n                // @ts-ignore\n                if (evt.target !== field && field.value === '' && hourValue.length) {\n                    const fieldName = index === 1 ? 'minutes' : 'seconds';\n                    this.updateTimeValue($el, hourValue, fieldName);\n                }\n            });\n        });\n        this.removeKeyupListener = () => {\n            inputFields.first().off('keyup');\n        };\n        $el.on('keydown', event => {\n            const $target = $(event.target);\n            const $parent = $target.parent();\n            const elementScope = this.elementScope;\n\n            let stopPropogation, preventDefault;\n\n            if (event.key === 'Escape') {\n                elementScope.hideTimepickerDropdown();\n            }\n\n            if ($target.hasClass('bs-timepicker-field')) {\n                if ($parent.is(':first-child')) {\n                    if ((event.shiftKey && event.key === 'Tab') || event.key === 'Enter' || event.key === 'Escape') {\n                        elementScope.setIsTimeOpen(false);\n                        this.focus();\n                        stopPropogation = true;\n                        preventDefault = true;\n                    }\n                } else if ($parent.is(':last-child') || ($parent.next().next().find('button.disabled').length)) {\n                    if (event.key === 'Tab' || event.key === 'Escape' || event.key === 'Enter') {\n                        elementScope.setIsTimeOpen(false);\n                        this.focus();\n                        stopPropogation = true;\n                        preventDefault = true;\n                    }\n                } else {\n                    if (event.key === 'Enter' || event.key === 'Escape') {\n                        elementScope.setIsTimeOpen(false);\n                        this.focus();\n                        stopPropogation = true;\n                        preventDefault = true;\n                    }\n                }\n                if (stopPropogation) {\n                    event.stopPropagation();\n                }\n                if (preventDefault) {\n                    event.preventDefault();\n                }\n                if (elementScope.mintime && elementScope.maxtime && !this.isValidDate(elementScope.bsTimeValue)) {\n                    if (event.key === 'ArrowDown') {\n                        elementScope.bsTimeValue = elementScope.maxTime;\n                    } else if (event.key === 'ArrowUp') {\n                        elementScope.bsTimeValue = elementScope.minTime;\n                    }\n                }\n                if (event.key === 'Tab') {\n                    this.invalidDateTimeFormat = false;\n                    this.invokeOnChange(this.datavalue, undefined, false);\n                    const pattern = this.datepattern || this.timepattern;\n                    if (getFormattedDate(elementScope.datePipe, elementScope.bsTimeValue, pattern, this.timeZone, null, null, this) === elementScope.displayValue) {\n                        $(this.nativeElement).find('.display-input').val(elementScope.displayValue);\n                    }\n                }\n                if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n                    this.timeFormatValidation();\n                }\n            } else if ($target.hasClass('btn-default')) {\n                if (event.key === 'Tab' || event.key === 'Escape') {\n                    elementScope.setIsTimeOpen(false);\n                    this.focus();\n                }\n            }\n        });\n        $el.find('a').on('click', evt => {\n            const elementScope = this.elementScope;\n            const $target = $(evt.target);\n            if (elementScope.mintime && elementScope.maxtime && !this.isValidDate(elementScope.bsTimeValue)) {\n                if ($target.find('span').hasClass('bs-chevron-down')) {\n                    elementScope.bsTimeValue = elementScope.maxTime;\n                } else if ($target.find('span').hasClass('bs-chevron-up')) {\n                    elementScope.bsTimeValue = elementScope.minTime;\n                }\n            }\n            this.timeFormatValidation();\n        });\n    }\n\n    public updateFormat(pattern) {\n        if (pattern === 'datepattern') {\n            this._dateOptions.dateInputFormat = this.datepattern;\n            this.showseconds = includes(this.datepattern, 's');\n            this.ismeridian = includes(this.datepattern, 'h');\n        } else if (pattern === 'timepattern') {\n            this.showseconds = includes(this.timepattern, 's');\n            this.ismeridian = includes(this.timepattern, 'h');\n        }\n    }\n\n    getMobileInput() {\n        return this.nativeElement.querySelector('.mobile-input') as HTMLElement;\n    }\n\n    onDateTimeInputBlur() {\n        // removing the opacity on blur of the mobile widget\n        const displayInputElem = this.getMobileInput();\n        if (displayInputElem) {\n            const children = this.nativeElement.children;\n            for (let i = 0; i < children.length; i++) {\n                children[i].classList.remove('add-opacity');\n            }\n            displayInputElem.classList.remove('remove-opacity');\n        }\n    }\n\n    onDateTimeInputFocus(skipFocus: boolean = false): void {\n        if (!this.loadNativeDateInput) {\n            return;\n        }\n        const displayInputElem = this.getMobileInput();\n        // toggling the classes to show and hide the native widget using opacity\n        if (skipFocus) {\n            const children = this.nativeElement.children;\n            for (let i = 0; i < children.length; i++) {\n                children[i].classList.add('add-opacity');\n            }\n            displayInputElem.classList.add('remove-opacity');\n            return;\n        }\n\n        if (displayInputElem && this._triggeredByUser) {\n            displayInputElem.focus();\n            displayInputElem.click();\n        }\n    }\n\n    /**\n     * This method sets the mouse events to Datepicker popup. These events are required when we navigate date picker through mouse.\n     */\n    private addDatepickerMouseEvents() {\n        $(\".bs-datepicker-head .previous span\").attr(\"aria-hidden\", 'true');\n        $(\".bs-datepicker-head .next span\").attr(\"aria-hidden\", 'true');\n\n        $(\".bs-datepicker-head\").on(\"click\", \".previous\", (event) => {\n            this.next = this.getMonth(this.activeDate, 0);\n            this.prev = this.getMonth(this.activeDate, -2);\n            this.clicked = true;\n            // check for original mouse click\n            if (event.originalEvent) {\n                this.setFocusForDate(-1);\n            }\n            var prevMon = this.getMonth(this.activeDate, -1);\n            // const current = new Date();\n            // if(prevMon.date.getMonth()===current.getMonth() && prevMon.date.getFullYear()===current.getFullYear()) {\n            //     this.hightlightToday(new Date());\n            // }\n            setTimeout(() => {\n                $(\".bs-datepicker-head .previous span\").attr(\"aria-hidden\", 'true');\n                $(\".bs-datepicker-head .next span\").attr(\"aria-hidden\", 'true');\n                $(\".bs-datepicker-head .next\").attr('aria-label', `Next Month, ${this.next.fullMonth} ${this.next.date.getFullYear()}`);\n                $(\".bs-datepicker-head .previous\").attr('aria-label', `Previous Month, ${this.prev.fullMonth} ${this.prev.date.getFullYear()}`);\n                $('.bs-datepicker-head .current').first().append(`<h2 aria-hidden=\"false\" aria-atomic=\"true\" aria-live='polite' class=\"sr-only\">Changed to Previous Month, ${prevMon.fullMonth} and year ${prevMon.date.getFullYear()}</h2>`);\n                $('.bs-datepicker-head').on('focus', '.current', function () {\n                    $('.bs-datepicker-head .current').find('h2').remove();\n                })\n                $(`.bs-datepicker-head .previous`).focus();\n\n            });\n\n        });\n        $(\".bs-datepicker-head\").on(\"click\", \".next\", (event) => {\n            this.next = this.getMonth(this.activeDate, 2);\n            this.prev = this.getMonth(this.activeDate, 0);\n            this.clicked = true;\n            // check for original mouse click\n            if (event.originalEvent) {\n                this.setFocusForDate(1);\n            }\n            var nextMon = this.getMonth(this.activeDate, 1);\n            // const current = new Date();\n            // if (nextMon.date.getMonth() === current.getMonth() && nextMon.date.getFullYear() === current.getFullYear()) {\n            //     this.hightlightToday(current);\n            // }\n            setTimeout(() => {\n                $(\".bs-datepicker-head .previous span\").attr(\"aria-hidden\", 'true');\n                $(\".bs-datepicker-head .next span\").attr(\"aria-hidden\", 'true');\n                $(\".bs-datepicker-head .next\").attr('aria-label', `Next Month, ${this.next.fullMonth} ${this.next.date.getFullYear()}`);\n                $(\".bs-datepicker-head .previous\").attr('aria-label', `Previous Month, ${this.prev.fullMonth} ${this.prev.date.getFullYear()}`);\n                $('.bs-datepicker-head .current').first().append(`<h2 aria-hidden=\"false\" aria-atomic=\"true\" aria-live='polite' class=\"sr-only\">Changed to Next Month, ${nextMon.fullMonth} and year ${nextMon.date.getFullYear()}</h2>`);\n                $('.bs-datepicker-head').on('focus', '.current', function () {\n                    $('.bs-datepicker-head .current').find('h2').remove();\n                })\n                $(`.bs-datepicker-head .next`).focus();\n            });\n\n        });\n        $(\".bs-datepicker-head\").on(\"click\", \".current\", (event) => {\n            // check for original mouse click\n            if (event.originalEvent) {\n                this.setFocusForCurrentMonthOryear();\n            }\n        });\n        $('.bs-datepicker-body').on(\"click\", \".bs-datepicker-action-buttons\", (event) => {\n            event.stopPropagation();\n            // check for original mouse click\n            if (event.originalEvent) {\n                this.setFocusForMonthOrDay();\n            }\n        });\n        // if(!this.clicked) {\n        $(\".bs-datepicker-head .next\").attr('aria-label', `Next Month, ${this.next.fullMonth} ${this.next.date.getFullYear()}`);\n        $(\".bs-datepicker-head .previous\").attr('aria-label', `Previous Month, ${this.prev.fullMonth} ${this.prev.date.getFullYear()}`);\n        //  }\n    }\n\n    blurDateInput(isPickerOpen) {\n        const displayInputElem = this.nativeElement.querySelector('.display-input') as HTMLElement;\n        if (isPickerOpen) {\n            setTimeout(() => displayInputElem.blur());\n        }\n    }\n\n    getPeriod(): 'AM' | 'PM' {\n        if (!this.elementScope.bsTimeValue) return 'AM';\n        const hours =this.elementScope.bsTimeValue.getHours();\n        return hours >= 12 ? 'PM' : 'AM';\n    }\n\n    setPeriod(period: 'AM' | 'PM'): void {\n        const current = this.elementScope.bsTimeValue;\n        if (!current || !(current instanceof Date)) return;\n        const updatedDate = new Date(current);\n        const hours = updatedDate.getHours();\n        if (period === 'AM' && hours >= 12) {\n            updatedDate.setHours(hours - 12);\n        } else if (period === 'PM' && hours < 12) {\n            updatedDate.setHours(hours + 12);\n        }\n        if(this.elementScope.widgetType==='wm-time'){\n           const isInvalid= this.elementScope.minTime && this.elementScope.maxTime && (updatedDate < this.elementScope.minTime || updatedDate > this.elementScope.maxTime);\n           if(!isInvalid)\n            this.elementScope.onTimeChange(updatedDate);\n        }\n        else{\n            this.elementScope.onModelUpdate(updatedDate);\n        }\n    }\n\n    onPropertyChange(key, nv, ov?) {\n        const isPristine=this.formControl?.pristine;\n        if (key === 'tabindex') {\n            return;\n        }\n        if(key === 'showampmbuttons') {\n            this.showampmbuttons=nv;\n        }\n        if (key === 'required') {\n            this._onChange(this.datavalue);\n            return;\n        }\n        if (key === 'datepattern') {\n            this.updateFormat(key);\n        } else if(key === 'viewmode') {\n            this._dateOptions.minMode = this.viewmode;\n        } else if (key === 'showweeks') {\n            this._dateOptions.showWeekNumbers = nv;\n        } else if (key === 'mindate') {\n            this._dateOptions.minDate = (nv === CURRENT_DATE) ? this.mindate = new Date() : getDateObj(nv);\n            this.minDateMaxDateValidationOnInput(this.datavalue);\n        } else if (key === 'maxdate') {\n            this._dateOptions.maxDate = (nv === CURRENT_DATE) ? this.maxdate = new Date() : getDateObj(nv);\n            this.minDateMaxDateValidationOnInput(this.datavalue);\n        } else if (key === 'excludedates' || key === 'excludedays') {\n            if (this.excludedays) {\n                this.excludedDaysToDisable = split(this.excludedays, ',').map((day) => {\n                    return +day;\n                });\n            }\n            if (this.excludedates) {\n                this.excludedDatesToDisable = this.excludedates;\n                if (isString(this.excludedates)) {\n                    // @ts-ignore\n                    this.excludedDatesToDisable = split(this.excludedates, ',');\n                }\n                this.excludedDatesToDisable = this.excludedDatesToDisable.map(d => getDateObj(d));\n            }\n            this.minDateMaxDateValidationOnInput(this.datavalue);\n        } else if (key === 'selectfromothermonth') {\n            this._dateOptions.selectFromOtherMonth = nv;\n\n        } else if (key === 'todaybutton') {\n            this._dateOptions.showTodayButton = nv;\n        } else if (key === 'clearbutton') {\n            this._dateOptions.showClearButton = nv;\n        } else if (key === 'todaybuttonlabel') {\n            this._dateOptions.todayButtonLabel = this.i18nService.getLocalizedMessage(nv) || nv;\n        } else if (key === 'clearbuttonlabel') {\n            this._dateOptions.clearButtonLabel = this.i18nService.getLocalizedMessage(nv) || nv;\n        } else if (key === 'showcustompicker') {\n            this.loadNativeDateInput = isMobile() && !this.showcustompicker;\n        } else if (key === 'adaptiveposition') {\n            this._dateOptions.adaptivePosition = nv;\n        } else {\n            super.onPropertyChange(key, nv, ov);\n        }\n        if((key === 'mindate'||key === 'maxdate'||key === 'excludedates'|| key === 'excludedays') && isPristine) {\n            this.formControl?.control?.markAsPristine()\n        }\n    }\n\n    ngAfterViewInit() {\n        super.ngAfterViewInit();\n        this.containerTarget = getContainerTargetClass(this.nativeElement);\n        this.isReadOnly = this.dataentrymode != 'undefined' && !this.isDataEntryModeEnabledOnInput(this.dataentrymode);\n\n        // this mobileinput width varies in ios hence setting width here.\n        const mobileInput = this.getMobileInput();\n        if (mobileInput) {\n            setTimeout(() => {\n                mobileInput.style.width = '100%';\n                mobileInput.style.height = '100%';\n            });\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.dateOnShowSubscription) {\n            this.dateOnShowSubscription.unsubscribe();\n        }\n        if(this.cancelLocaleChangeSubscription) {\n            this.cancelLocaleChangeSubscription();\n        }\n\n        super.ngOnDestroy();\n    }\n\n    public ngOnDetach() {\n        this.datetimepickerComponent?.hideModal();\n    }\n\n    setTimezone(locale) {\n        this.i18nService.setTimezone(locale, this);\n    }\n    ngOnInit() {\n        super.ngOnInit();\n        if (this.dateNotInRange||this.timeNotInRange||this.invalidDateTimeFormat) {\n            const formattedDisplay = getFormattedDate(this.datePipe, this.datavalue, this.datepattern||this.timepattern, this.timeZone, null, null, this);\n            const value=this.datavalue;\n            this.datavalue = undefined;\n            setTimeout(() => {\n                $(this.nativeElement).find('.display-input').val(this.safeReplaceMeridians(formattedDisplay));\n                this.minDateMaxDateValidationOnInput(formattedDisplay);\n                this.invokeOnChange(value, {}, false);\n            });\n        }\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_isNaN"],"mappings":"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"}