UNPKG

@jermeo/ionic4-datepicker

Version:

ionic4-datepicker inspired by rajeshwar patlolla ionic1 datepicker

652 lines 87.1 kB
/** * @fileoverview added by tsickle * Generated from: lib/ionic4-datepicker-modal/ionic4-datepicker-modal.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewChild } from '@angular/core'; import { NavParams, ModalController, IonContent } from '@ionic/angular'; import * as moment_ from 'moment'; import { Ionic4DatepickerService } from '../ionic4-datepicker.service'; /** @type {?} */ const moment = moment_; export class Ionic4DatepickerModalComponent { /** * @param {?} navParams * @param {?} modalCtrl * @param {?} datePickerService */ constructor(navParams, modalCtrl, datePickerService) { this.navParams = navParams; this.modalCtrl = modalCtrl; this.datePickerService = datePickerService; // inputs this.mainObj = {}; this.selectedDate = {}; // component variables this.selctedDateEpoch = 0; this.disabledDates = []; this.highlightedDates = {}; this.disableWeekdays = []; this.data = { currentMonth: '', currentYear: '', currentMonthSelected: '' }; this.rows = [0, 7, 14, 21, 28, 35]; this.cols = [0, 1, 2, 3, 4, 5, 6]; this.monthsList = ['Jan', 'Feb', 'March', 'April', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']; this.weeksList = ['S', 'M', 'T', 'W', 'T', 'F', 'S']; this.yearsList = []; this.daysList = []; this.yearInAscending = false; this.momentLocale = 'en-US'; // month year scroll variables this.isMonthYearSelectorOpen = false; this.scrollingMonthOrYearArray = []; this.isSelectedDateFound = false; this.today = this.resetHMSM(new Date()).getTime(); if (this.navParams.get('selectedDate')) { // console.log('Selected date =>', this.navParams.get('selectedDate')); this.selectedDate.date = this.navParams.get('selectedDate'); this.isSelectedDateFound = true; } this.mainObj = this.initDatePickerObj(this.navParams.get('objConfig')); } /** * @return {?} */ ngOnInit() { this.datePickerService.isModalOpen = true; this.initDatePicker(); } /** * @return {?} */ ngOnDestroy() { this.datePickerService.isModalOpen = false; } // Reset the hours, minutes, seconds and milli seconds /** * @param {?} currentDate * @return {?} */ resetHMSM(currentDate) { currentDate.setHours(0); currentDate.setMinutes(0); currentDate.setSeconds(0); currentDate.setMilliseconds(0); return currentDate; } // this method change month or year list to dateList /** * @return {?} */ changeToDateList() { // console.log('changeToDateList'); this.isMonthYearSelectorOpen = false; } // Virtual scroll create for select year and month /** * @param {?} isMonthSelect * @return {?} */ selectMonthYear(isMonthSelect) { // console.log('selectMonthYear', i); this.isMonthYearSelectorOpen = true; this.isMonthSelect = isMonthSelect; this.scrollingMonthOrYearArray = isMonthSelect ? this.mainObj.monthsList : this.yearsList; this.selectedYearOrMonth = isMonthSelect ? this.data.currentMonth : this.data.currentYear; /** @type {?} */ const index = this.scrollingMonthOrYearArray.indexOf(this.selectedYearOrMonth); /** @type {?} */ const iditem = index + 'list'; setTimeout((/** * @return {?} */ () => { document.getElementById(iditem).scrollIntoView(); }), 100); } // select month or year /** * @param {?} monthYear * @return {?} */ onChangeMonthYear(monthYear) { // console.log('onChangeMonthYear', monthYear); if (monthYear) { if (this.isMonthSelect) { this.data.currentMonth = monthYear; this.selectedYearOrMonth = this.data.currentMonth; /** @type {?} */ const monthNumber = this.monthsList.indexOf(this.data.currentMonth); this.currentDate.setDate(1); this.currentDate.setMonth(monthNumber); } else { this.data.currentYear = monthYear; this.selectedYearOrMonth = this.data.currentYear; this.currentDate.setFullYear(this.data.currentYear); this.refreshDateList(this.currentDate); } this.refreshDateList(this.currentDate); } this.isMonthYearSelectorOpen = false; } // Previous month /** * @return {?} */ prevMonth() { // console.log('prevNext', this.currentDate); /** @type {?} */ const currentMonth = this.currentDate.getMonth(); /** @type {?} */ const currentYear = this.currentDate.getFullYear(); if (currentYear <= this.yearsList[(this.yearsList.length - 1)] && currentMonth === 0) { return; } if (currentMonth === 1) { this.currentDate.setFullYear(currentYear); } this.currentDate.setMonth(currentMonth - 1); this.data.currentMonth = this.mainObj.monthsList[currentMonth]; this.data.currentYear = currentYear; this.refreshDateList(this.currentDate); // this.changeDaySelected(); } // Next month /** * @return {?} */ nextMonth() { // console.log('nextNext', this.currentDate); /** @type {?} */ const currentMonth = this.currentDate.getMonth(); /** @type {?} */ const currentYear = this.currentDate.getFullYear(); if (currentYear >= this.yearsList[0] && currentMonth === 11) { return; } if (currentMonth === 11) { this.currentDate.setFullYear(currentYear); } this.currentDate.setDate(1); this.currentDate.setMonth(currentMonth + 1); this.data.currentMonth = this.mainObj.monthsList[currentMonth]; this.data.currentYear = currentYear; this.refreshDateList(this.currentDate); // this.changeDaySelected(); } // changeDaySelected ( day selection changes ) /** * @return {?} */ changeDaySelected() { // console.log('changeDaySelected'); /** @type {?} */ const newSelectedDate = new Date(this.selctedDateEpoch); newSelectedDate.setMonth(this.currentDate.getMonth()); newSelectedDate.setYear(this.currentDate.getFullYear()); this.selctedDateEpoch = newSelectedDate.getTime(); this.selectedDateString = this.formatDate(); // this.closeModal(this.selctedDateEpoch); } // Date selected /** * @param {?} selectedDate * @return {?} */ dateSelected(selectedDate) { // console.log('dateSelected =>', selectedDate); if (selectedDate && !selectedDate.disabled) { if (!selectedDate || Object.keys(selectedDate).length === 0) { return; } this.isSelectedDateFound = true; this.selctedDateEpoch = selectedDate.epoch; this.selectedDateString = this.formatDate(); if (this.mainObj.closeOnSelect) { this.closeModal(this.selctedDateEpoch); } } } // Set today as date for the modal /** * @return {?} */ setIonicDatePickerTodayDate() { // console.log('setIonicDatePickerTodayDate'); /** @type {?} */ const today = new Date(this.today); /** @type {?} */ const today_obj = { date: today.getDate(), month: today.getMonth(), year: today.getFullYear(), day: today.getDay(), epoch: today.getTime(), disabled: false }; this.dateSelected(today_obj); this.refreshDateList(new Date()); this.selctedDateEpoch = this.resetHMSM(today).getTime(); this.selectedDateString = this.formatDate(); // this.closeModal(this.selctedDateEpoch); } // Set date for the modal /** * @return {?} */ setIonicDatePickerDate() { // console.log('setIonicDatePickerDate'); this.closeModal(this.selctedDateEpoch); } // Setting the disabled dates list. /** * @param {?} obj * @return {?} */ setDisabledDates(obj) { // console.log('setDisabledDates =>', obj); if (!obj.disabledDates || obj.disabledDates.length === 0) { this.disabledDates = []; } else { this.disabledDates = []; for (let i = 0; i < obj.disabledDates.length; i++) { // val = resetHMSM(new Date(val)); this.disabledDates.push(this.resetHMSM(new Date(obj.disabledDates[i])).getTime()); } } } // Set hightlighted dates /** * @param {?} obj * @return {?} */ setHightlightedDates(obj) { if (!obj.highlightedDates || obj.highlightedDates.length === 0) { this.highlightedDates = {}; } else { this.highlightedDates = {}; for (let i = 0; i < obj.highlightedDates.length; i++) { /** @type {?} */ const hDate = obj.highlightedDates[i].date; /** @type {?} */ const hColor = obj.highlightedDates[i].color; /** @type {?} */ const hFontColor = obj.highlightedDates[i].fontColor; /** @type {?} */ const hDateTime = this.resetHMSM(new Date(hDate)).getTime(); this.highlightedDates[hDateTime] = { color: hColor, fontColor: hFontColor }; } } } // Refresh the list of the dates of a month /** * @param {?} currentDate * @return {?} */ refreshDateList(currentDate) { // console.log('refreshDateList =>', currentDate); currentDate = this.resetHMSM(currentDate); this.currentDate = currentDate; /** @type {?} */ const firstDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1).getDate(); /** @type {?} */ const lastDay = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0).getDate(); this.monthsList = []; if (this.mainObj.monthsList && this.mainObj.monthsList.length === 12) { this.monthsList = this.mainObj.monthsList; } else { this.monthsList = this.monthsList; } this.yearsList = this.getYearsList(this.mainObj.from, this.mainObj.to); this.daysList = []; /** @type {?} */ let tempDate; /** @type {?} */ let disabled; this.firstDayEpoch = this.resetHMSM(new Date(currentDate.getFullYear(), currentDate.getMonth(), firstDay)).getTime(); this.lastDayEpoch = this.resetHMSM(new Date(currentDate.getFullYear(), currentDate.getMonth(), lastDay)).getTime(); for (let i = firstDay; i <= lastDay; i++) { tempDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), i); disabled = false; /** @type {?} */ const day = tempDate.getDay(); if (this.disableWeekdays.length > 0) { if (this.disableWeekdays.indexOf(day) >= 0) { disabled = this.disableWeekdays.indexOf(day) >= 0; } else { disabled = false; } } if (this.disabledDates.length > 0) { if (this.disabledDates.indexOf(tempDate.getTime()) >= 0) { disabled = true; } } if (this.fromDate && !disabled) { disabled = (tempDate.getTime() < this.fromDate) || this.mainObj.disableWeekDays.indexOf(tempDate.getDay()) >= 0; } if (this.toDate && !disabled) { disabled = (tempDate.getTime() > this.toDate) || this.mainObj.disableWeekDays.indexOf(tempDate.getDay()) >= 0; } /** @type {?} */ const hightLightDate = this.highlightedDates[tempDate.getTime()]; /** @type {?} */ let fontColor = null; if (tempDate.getDay() === 0 && this.mainObj.isSundayHighlighted && this.mainObj.isSundayHighlighted.fontColor) { fontColor = this.mainObj.isSundayHighlighted.fontColor; } else if (hightLightDate && hightLightDate.fontColor) { fontColor = hightLightDate.fontColor; } this.daysList.push({ date: tempDate.getDate(), month: tempDate.getMonth(), year: tempDate.getFullYear(), day: tempDate.getDay(), epoch: tempDate.getTime(), disabled: disabled, color: hightLightDate && hightLightDate.color ? hightLightDate.color : null, fontColor: fontColor // fontColor: hightLightDate && hightLightDate.fontColor ? hightLightDate.fontColor : null }); } // To set Monday as the first day of the week. /** @type {?} */ let firstDayMonday = this.daysList[0].day - this.mainObj.mondayFirst; firstDayMonday = (firstDayMonday < 0) ? 6 : firstDayMonday; for (let j = 0; j < firstDayMonday; j++) { this.daysList.unshift({}); } this.rows = [0, 7, 14, 21, 28, 35]; this.cols = [0, 1, 2, 3, 4, 5, 6]; this.data.currentMonth = this.mainObj.monthsList[currentDate.getMonth()]; this.data.currentYear = currentDate.getFullYear(); this.data.currentMonthSelected = this.data.currentMonth; this.currentYearSelected = this.data.currentYear; this.numColumns = 7; } // Setting up the initial object /** * @param {?} ipObj * @return {?} */ setInitialObj(ipObj) { // console.log('setInitialObj =>', ipObj); this.mainObj = ipObj; if (this.isSelectedDateFound) { this.isSelectedDateFound = true; this.selctedDateEpoch = this.resetHMSM(this.mainObj.inputDate).getTime(); } this.selectedDateString = this.formatDate(); if (this.mainObj.weeksList && this.mainObj.weeksList.length === 7) { this.weeksList = this.mainObj.weeksList; } if (this.mainObj.mondayFirst) { this.weeksList.push(this.mainObj.weeksList.shift()); } if (this.mainObj.yearInAscending) { this.yearInAscending = this.mainObj.yearInAscending; } if (this.mainObj.momentLocale) { this.momentLocale = this.mainObj.momentLocale; } this.disableWeekdays = this.mainObj.disableWeekDays; this.setDisabledDates(this.mainObj); this.refreshDateList(this.mainObj.inputDate); } // for dismiss modal /** * @param {?} selectedDate * @return {?} */ closeModal(selectedDate) { // console.log('closeModal => ', selectedDate); this.modalCtrl.getTop(); /** @type {?} */ const formattedDate = moment(selectedDate).format(this.mainObj.dateFormat); this.modalCtrl.dismiss({ 'date': formattedDate }); } // close modal button /** * @return {?} */ closeIonicDatePickerModal() { // console.log('closeIonicDatePickerModal'); this.closeModal(null); } // get years list ( GIVE HERE MIN OR MAX YEAR IN DATE_PICKER ) /** * @param {?} from * @param {?} to * @return {?} */ getYearsList(from, to) { // console.log('getYearsList =>', from, to); /** @type {?} */ const yearsList = []; /** @type {?} */ let minYear = 1950; /** @type {?} */ let maxYear = new Date().getFullYear() + 1; minYear = from ? new Date(from).getFullYear() : minYear; maxYear = to ? new Date(to).getFullYear() : maxYear; // console.log('getYearsList: ', this.yearInAscending); if (this.yearInAscending) { for (let i = minYear; i <= maxYear; i++) { yearsList.push(i); } } else { for (let i = maxYear; i >= minYear; i--) { yearsList.push(i); } } return yearsList; } // Init Date-Picker /** * @return {?} */ initDatePicker() { this.fromDate = ''; this.toDate = ''; // $scope.mainObj = angular.extend({}, config, ipObj); if (this.mainObj.from) { this.fromDate = this.resetHMSM(new Date(this.mainObj.from)).getTime(); } if (this.mainObj.to) { this.toDate = this.resetHMSM(new Date(this.mainObj.to)).getTime(); } // if (ipObj.disableWeekdays && this.config.disableWeekdays) { // this.mainObj.disableWeekDays = ipObj.disableWeekdays.concat(this.config.disableWeekdays); // } this.setInitialObj(this.mainObj); } // Init DatePicker Object /** * @param {?} config * @return {?} */ initDatePickerObj(config) { // const config = this.mainObj; if (config.inputDate && !this.selectedDate.date) { this.isSelectedDateFound = true; this.selectedDate.date = config.inputDate; } /** @type {?} */ const objConfig = {}; objConfig.from = config.fromDate ? config.fromDate : ''; objConfig.to = config.toDate ? config.toDate : ''; objConfig.showTodayButton = config.showTodayButton === undefined ? true : config.showTodayButton; objConfig.closeOnSelect = config.closeOnSelect ? config.closeOnSelect : false; objConfig.disableWeekDays = config.disableWeekDays ? config.disableWeekDays : []; objConfig.mondayFirst = config.mondayFirst ? config.mondayFirst : false; objConfig.setLabel = config.setLabel ? config.setLabel : 'Set'; objConfig.todayLabel = config.todayLabel ? config.todayLabel : 'Today'; objConfig.closeLabel = config.closeLabel ? config.closeLabel : 'Close'; objConfig.disabledDates = config.disabledDates ? config.disabledDates : []; objConfig.titleLabel = config.titleLabel ? config.titleLabel : null; objConfig.showHeader = config.showHeader === undefined ? true : config.showHeader; objConfig.showFooter = config.showFooter === undefined ? true : config.showFooter; objConfig.showDateInTitle = config.showDateInTitle === undefined ? true : config.showDateInTitle; objConfig.monthsList = config.monthsList ? config.monthsList : this.monthsList; objConfig.monthsList = [...objConfig.monthsList]; objConfig.weeksList = config.weeksList ? config.weeksList : this.weeksList; objConfig.weeksList = [...objConfig.weeksList]; objConfig.dateFormat = config.dateFormat ? config.dateFormat : 'DD MMM YYYY'; // console.log(this.selectedDate.date, objConfig.dateFormat, moment.locale()); objConfig.clearButton = config.clearButton ? config.clearButton : false; objConfig.yearInAscending = config.yearInAscending ? config.yearInAscending : false; objConfig.momentLocale = config.momentLocale ? config.momentLocale : 'en-US'; moment.locale(objConfig.momentLocale); objConfig.inputDate = this.selectedDate.date ? moment(this.selectedDate.date, objConfig.dateFormat).toDate() : new Date(); objConfig.btnCloseSetInReverse = config.btnCloseSetInReverse ? config.btnCloseSetInReverse : false; objConfig.btnProperties = {}; if (config.btnProperties) { /** @type {?} */ const btnProperties = config.btnProperties; objConfig.btnProperties.expand = btnProperties.expand ? btnProperties.expand : 'block'; objConfig.btnProperties.fill = btnProperties.fill ? btnProperties.fill : 'solid'; objConfig.btnProperties.size = btnProperties.size ? btnProperties.size : 'default'; objConfig.btnProperties.color = btnProperties.color ? btnProperties.color : ''; objConfig.btnProperties.disabled = btnProperties.disabled ? btnProperties.disabled : false; objConfig.btnProperties.strong = btnProperties.strong ? btnProperties.strong : false; } else { objConfig.btnProperties.expand = 'block'; objConfig.btnProperties.fill = 'solid'; objConfig.btnProperties.size = 'default'; objConfig.btnProperties.disabled = false; objConfig.btnProperties.strong = false; } objConfig.arrowNextPrev = {}; if (config.arrowNextPrev) { /** @type {?} */ const arrowNextPrev = config.arrowNextPrev; objConfig.arrowNextPrev.nextArrowSrc = arrowNextPrev.nextArrowSrc ? arrowNextPrev.nextArrowSrc : false; objConfig.arrowNextPrev.prevArrowSrc = arrowNextPrev.prevArrowSrc ? arrowNextPrev.prevArrowSrc : false; } objConfig.highlightedDates = []; if (config.highlightedDates && config.highlightedDates.length > 0) { objConfig.highlightedDates = config.highlightedDates; this.setHightlightedDates(objConfig); } objConfig.isSundayHighlighted = {}; if (config.isSundayHighlighted) { /** @type {?} */ const isSundayHighlighted = config.isSundayHighlighted; objConfig.isSundayHighlighted.fontColor = isSundayHighlighted.fontColor ? isSundayHighlighted.fontColor : null; } // console.log('config =>', objConfig); return objConfig; } // Format date /** * @return {?} */ formatDate() { // console.log('formatDate: ', this.selctedDateEpoch, new Date(this.selctedDateEpoch)); return moment(this.selctedDateEpoch).format(this.mainObj.dateFormat); } } Ionic4DatepickerModalComponent.decorators = [ { type: Component, args: [{ selector: 'li-ionic4-datepicker-modal', template: "<ion-header [hidden]=\"!mainObj?.showHeader\">\n <ion-toolbar (click)=\"changeToDateList()\" class=\"ion-no-padding\">\n <ion-title>\n <h1 *ngIf=\"mainObj?.titleLabel\">{{mainObj?.titleLabel}}</h1>\n <span *ngIf=\"mainObj?.showDateInTitle\">{{selectedDateString}}</span>\n </ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content forceOverscroll=\"false\" class=\"ionic_datepicker_modal_content\">\n <ion-grid class=\"dp-month-year-container\" [ngClass]=\"isMonthYearSelectorOpen ? 'dp-virual-scroller-hide' : 'dp-virual-scroller-show'\">\n <ion-row>\n <ion-col size=\"1.5\" class=\"dp-left-right-arrow\" (click)=\"prevMonth()\">\n <ion-button [ngClass]=\"{'pointer_events_none':((firstDayEpoch - 86400000) < fromDate)}\">\n <ion-icon *ngIf=\"!mainObj?.arrowNextPrev?.prevArrowSrc\" name=\"arrow-back\"></ion-icon>\n <ion-icon *ngIf=\"mainObj?.arrowNextPrev?.prevArrowSrc\" src=\"{{mainObj?.arrowNextPrev?.prevArrowSrc}}\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col size=\"9\">\n <ion-grid>\n <ion-row>\n <ion-col class=\"dp-select-month-year\" size=\"5.5\" class=\"ion-no-padding\" (click)=\"selectMonthYear(true)\">\n <ion-button class=\"dp-buttons\">\n {{ data.currentMonth }}\n <ion-icon name=\"md-arrow-dropdown\" class=\"dp-down-arrow\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col size=\"1\"></ion-col>\n <ion-col class=\"dp-select-month-year\" size=\"5.5\" class=\"ion-no-padding\" (click)=\"selectMonthYear(false)\">\n <ion-button class=\"dp-buttons\">\n {{ data.currentYear }}\n <ion-icon name=\"md-arrow-dropdown\" class=\"dp-down-arrow\"></ion-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-col>\n <ion-col size=\"1.5\" class=\"dp-left-right-arrow\" (click)=\"nextMonth()\">\n <ion-button [ngClass]=\"{'pointer_events_none':((lastDayEpoch + 86400000)> toDate)}\">\n <ion-icon *ngIf=\"!mainObj?.arrowNextPrev?.nextArrowSrc\" name=\"arrow-forward\"></ion-icon>\n <ion-icon *ngIf=\"mainObj?.arrowNextPrev?.nextArrowSrc\" src=\"{{mainObj?.arrowNextPrev?.nextArrowSrc}}\"></ion-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <ion-grid class=\"dp-weeks-container\" *ngIf=\"daysList\" [ngClass]=\"isMonthYearSelectorOpen ? 'dp-virual-scroller-hide' : 'dp-virual-scroller-show'\">\n <ion-row class=\" dp-weeks-name\">\n <ion-col *ngFor=\"let weekName of mainObj?.weeksList; let i = index\">\n <!-- <div class=\"weeks\">{{weekName}} {{i}}</div> -->\n <div class=\"weeks\" *ngIf=\"mainObj?.mondayFirst\"\n [style.color]=\"mainObj?.isSundayHighlighted && i === 6 ? mainObj?.isSundayHighlighted.fontColor : ''\">\n {{weekName}}</div>\n <div class=\"weeks\" *ngIf=\"!mainObj?.mondayFirst\"\n [style.color]=\"mainObj?.isSundayHighlighted && i === 0 ? mainObj?.isSundayHighlighted.fontColor : ''\">\n {{weekName}}</div>\n </ion-col>\n </ion-row>\n <ion-row *ngFor=\"let row of rows;\" class=\"dp-days-list\">\n <ion-col *ngFor=\"let col of cols; let i = index ;\" (click)=\"dateSelected(daysList[row + i])\"\n [style.background-color]=\"(daysList[row + i]?.color) ? (daysList[row + i]?.color) : ''\"\n [style.border-radius]=\"(daysList[row + i]?.color) ? '4px' : ''\" class=\"ion-no-padding\" [ngClass]=\"{\n 'dp-selecteddate': (daysList[row + i]?.epoch === selctedDateEpoch),\n 'dp-today' : (daysList[row + i]?.epoch == today),\n 'disabled' : (daysList[row + i]?.disabled)}\">\n <div class=\"days\" [style.color]=\"(daysList[row + i]?.fontColor) ? (daysList[row + i]?.fontColor) : ''\">\n {{daysList[row + col]?.date}}\n </div>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-col>\n </ion-row>\n </ion-grid>\n <ion-list class=\"dp-month-year-scroll-container\" [ngClass]=\"isMonthYearSelectorOpen ? 'dp-virual-scroller-show' : 'dp-virual-scroller-hide'\">\n <ion-item *ngFor=\"let monthYear of scrollingMonthOrYearArray;let i=index;\" id=\"{{i +'list'}}\" (click)=\"onChangeMonthYear(monthYear)\">\n <ion-label [ngClass]=\"selectedYearOrMonth === monthYear ? 'dp-selected' : ''\">{{ monthYear }}</ion-label>\n </ion-item>\n </ion-list>\n</ion-content>\n\n<ion-footer [hidden]=\"!mainObj?.showFooter\">\n <ion-toolbar class=\"ion-no-padding\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\" [ngClass]=\"mainObj?.btnCloseSetInReverse ? 'dp-btn-set-close-in-reverse' : ''\">\n <ion-col class=\"ion-no-padding\">\n <ion-button class=\"ion-button\" expand=\"{{mainObj?.btnProperties?.expand}}\" fill=\"{{mainObj?.btnProperties?.fill}}\"\n size=\"{{mainObj?.btnProperties?.size}}\" color=\"{{mainObj?.btnProperties?.color}}\" disabled=\"{{mainObj?.btnProperties?.disabled}}\"\n strong=\"{{mainObj?.btnProperties?.strong}}\" (click)=\"closeIonicDatePickerModal()\">\n {{mainObj?.closeLabel}}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-no-padding\" *ngIf=\"mainObj?.showTodayButton\">\n <ion-button class=\"ion-button\" expand=\"{{mainObj?.btnProperties?.expand}}\" fill=\"{{mainObj?.btnProperties?.fill}}\"\n size=\"{{mainObj?.btnProperties?.size}}\" color=\"{{mainObj?.btnProperties?.color}}\" disabled=\"{{mainObj?.btnProperties?.disabled}}\"\n strong=\"{{mainObj?.btnProperties?.strong}}\" (click)=\"setIonicDatePickerTodayDate()\">\n {{mainObj?.todayLabel}}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-no-padding\" *ngIf=\"!mainObj?.closeOnSelect\">\n <ion-button class=\"ion-button\" expand=\"{{mainObj?.btnProperties?.expand}}\"\n fill=\"{{mainObj?.btnProperties?.fill}}\" size=\"{{mainObj?.btnProperties?.size}}\"\n color=\"{{mainObj?.btnProperties?.color}}\"\n disabled=\"{{mainObj?.btnProperties?.disabled || !isSelectedDateFound}}\"\n strong=\"{{mainObj?.btnProperties?.strong}}\" (click)=\"setIonicDatePickerDate()\">\n {{mainObj?.setLabel}}\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-toolbar>\n</ion-footer>", styles: [":host .no-scroll{--overflow:hidden}:host ion-header{height:60px}:host ion-header ion-toolbar{--background:var(--ion-color-primary);-webkit-box-align:center;align-items:center;display:-webkit-box;display:flex;color:var(--ion-color-primary-contrast);min-height:60px}:host ion-header ion-toolbar ion-title{font-size:20px;font-weight:700;text-align:center;padding:0;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;height:100%;cursor:pointer}:host ion-header ion-toolbar ion-title h1{font-size:14px;margin:0 0 4px}:host .ionic_datepicker_modal_content .dp-month-year-container ion-col{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center}:host .ionic_datepicker_modal_content .dp-month-year-container ion-col ion-grid{width:100%}:host .ionic_datepicker_modal_content .dp-month-year-container ion-col ion-grid .dp-select-month-year{border-bottom:1.5px solid;border-bottom-color:var(--ion-color-primary)}:host .ionic_datepicker_modal_content .dp-month-year-container ion-col ion-grid .dp-select-month-year .dp-buttons{width:100%;height:40px;margin:0;padding:0;color:var(--ion-color-primary);--background:transparent;--box-shadow:none}:host .ionic_datepicker_modal_content .dp-month-year-container ion-col ion-grid .dp-select-month-year .dp-buttons.activated{--background-activated:transparent;--color-activated:var(--ion-color-primary)}:host .ionic_datepicker_modal_content .dp-month-year-container ion-col ion-grid .dp-select-month-year .dp-down-arrow{position:absolute;width:16px;right:0;top:10px;color:var(--ion-color-primary)}:host .ionic_datepicker_modal_content .dp-month-year-container .dp-left-right-arrow ion-button{--background:transparent;--background-hover:transparent;--box-shadow:0;color:var(--ion-color-primary)}:host .ionic_datepicker_modal_content .dp-month-year-container .dp-left-right-arrow ion-button:focus{outline:0}:host .ionic_datepicker_modal_content .dp-month-year-container .dp-left-right-arrow ion-button.activated{--ion-color-primary-shade:transparent;--ion-color-primary-contrast:var(--ion-color-primary-tint)}:host .ionic_datepicker_modal_content .dp-weeks-container{margin:4px 0}:host .ionic_datepicker_modal_content .dp-weeks-container .dp-weeks-name ion-col{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center}:host .ionic_datepicker_modal_content .dp-weeks-container .dp-weeks-name ion-col .weeks{width:14%;display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;font-weight:700}:host .ionic_datepicker_modal_content .dp-weeks-container .dp-days-list ion-col{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;padding:10px;cursor:pointer}:host .ionic_datepicker_modal_content .dp-weeks-container .dp-days-list ion-col .days{width:14%;display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center}:host .ionic_datepicker_modal_content .dp-selecteddate{background:var(--ion-color-primary);color:var(--ion-color-primary-contrast);border-radius:4px;font-weight:500}:host .ionic_datepicker_modal_content .dp-today{border-radius:4px;font-weight:500;border:1px solid;border-color:var(--ion-color-primary)}:host .ionic_datepicker_modal_content .dp-month-year-scroll-container{position:absolute;top:0;bottom:0;left:0;right:0;margin:0;overflow-y:scroll}:host .ionic_datepicker_modal_content .dp-month-year-scroll-container ion-item{--padding-start:0;--inner-padding-end:0;--inner-border-width:0;cursor:pointer}:host .ionic_datepicker_modal_content .dp-month-year-scroll-container ion-item ion-label{text-align:center;margin:0;font-size:16px}:host .ionic_datepicker_modal_content .dp-month-year-scroll-container ion-item ion-label.dp-selected{color:var(--ion-color-primary);font-size:20px;font-weight:500}:host .disabled{color:#aaa}:host .dp-virual-scroller-show{-webkit-transition:opacity .3s ease-in;transition:opacity .3s ease-in;opacity:1;visibility:visible}:host .dp-virual-scroller-hide{opacity:0;visibility:hidden;height:auto}:host ion-footer{height:55px}:host ion-footer ion-toolbar{height:100%;--border-width:0;--padding-top:0px;--padding-bottom:0px;--padding-start:0px;--padding-end:0px}:host ion-footer ion-toolbar .toolbar-container{height:100%}:host ion-footer ion-toolbar .dp-btn-set-close-in-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;flex-direction:row-reverse}:host ion-footer ion-toolbar ion-button{--border-radius:0;height:55px;margin:0}:host ion-footer ion-toolbar ion-button:focus{outline:0}:host ion-footer ion-toolbar ion-button.activated{--background-activated:var(--ion-color-primary-tint);--color-activated:var(--ion-color-primary-contrast)}"] }] } ]; /** @nocollapse */ Ionic4DatepickerModalComponent.ctorParameters = () => [ { type: NavParams }, { type: ModalController }, { type: Ionic4DatepickerService } ]; Ionic4DatepickerModalComponent.propDecorators = { content: [{ type: ViewChild, args: [IonContent, { static: true },] }] }; if (false) { /** @type {?} */ Ionic4DatepickerModalComponent.prototype.content; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.currentDate; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.today; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.mainObj; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.selectedDate; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.selctedDateEpoch; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.firstDayEpoch; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.lastDayEpoch; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.disabledDates; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.highlightedDates; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.fromDate; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.toDate; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.disableWeekdays; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.data; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.currentYearSelected; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.numColumns; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.rows; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.cols; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.monthsList; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.weeksList; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.yearsList; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.daysList; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.yearInAscending; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.momentLocale; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.selectedDateString; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.isMonthYearSelectorOpen; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.selectedYearOrMonth; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.isMonthSelect; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.scrollingMonthOrYearArray; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.isSelectedDateFound; /** * @type {?} * @private */ Ionic4DatepickerModalComponent.prototype.navParams; /** * @type {?} * @private */ Ionic4DatepickerModalComponent.prototype.modalCtrl; /** @type {?} */ Ionic4DatepickerModalComponent.prototype.datePickerService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9uaWM0LWRhdGVwaWNrZXItbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGplcm1lby9pb25pYzQtZGF0ZXBpY2tlci8iLCJzb3VyY2VzIjpbImxpYi9pb25pYzQtZGF0ZXBpY2tlci1tb2RhbC9pb25pYzQtZGF0ZXBpY2tlci1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RSxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7TUFDakUsTUFBTSxHQUFHLE9BQU87QUFPdEIsTUFBTSxPQUFPLDhCQUE4Qjs7Ozs7O0lBZ0R6QyxZQUNVLFNBQW9CLEVBQ3BCLFNBQTBCLEVBQzNCLGlCQUEwQztRQUZ6QyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzNCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBeUI7O1FBM0NuRCxZQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLGlCQUFZLEdBQVEsRUFBRSxDQUFDOztRQUd2QixxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFJckIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIscUJBQWdCLEdBQVEsRUFBRSxDQUFDO1FBSTNCLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLFNBQUksR0FBUTtZQUNWLFlBQVksRUFBRSxFQUFFO1lBQ2hCLFdBQVcsRUFBRSxFQUFFO1lBQ2Ysb0JBQW9CLEVBQUUsRUFBRTtTQUN6QixDQUFDO1FBSUYsU0FBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFF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