moots-datetime-picker
Version:
Combination of a calendar datepicker and clock timepicker into one component for ionic 4.
443 lines • 71.1 kB
JavaScript
import { animate, state, style, transition, trigger } from '@angular/animations';
import { ChangeDetectorRef, Component, ElementRef, HostBinding, Input, Renderer2, ViewChild } from '@angular/core';
import { IonContent, ModalController, NavParams } from '@ionic/angular';
import { DateTime } from 'luxon';
import { GlobalPickState, PickMode } from '../calendar.model';
import { CalendarService } from '../services/calendar.service';
import { ClockPickState } from './clock-picker.component';
const NUM_OF_MONTHS_TO_CREATE = 2;
export class PickerModal {
constructor(_renderer, _elementRef, params, modalCtrl, ref, calSvc) {
this._renderer = _renderer;
this._elementRef = _elementRef;
this.params = params;
this.modalCtrl = modalCtrl;
this.ref = ref;
this.calSvc = calSvc;
this.GlobalPickState = GlobalPickState;
this.PickMode = PickMode;
this.ionPage = true;
this.datesTemp = [undefined, undefined];
this.timesTemp = [undefined, undefined];
this._scrollLock = true;
this.pickState = GlobalPickState.BEGIN_DATE;
this.clockPickState = ClockPickState.HOUR;
}
is24Hours() {
return this.modalOptions.locale && this.modalOptions.uses24Hours;
}
onSelectChange(cstate) {
this.clockPickState = cstate;
switch (this.pickState) {
case GlobalPickState.BEGIN_HOUR:
this.setPickState(GlobalPickState.BEGIN_MINUTE);
break;
case GlobalPickState.BEGIN_MINUTE:
this.setPickState(GlobalPickState.END_DATE);
break;
case GlobalPickState.END_HOUR:
this.setPickState(GlobalPickState.END_MINUTE);
break;
}
}
onClockValue(time) {
if (this.isBegin(this.pickState)) {
this.timesTemp[0] = time;
}
else {
this.timesTemp[1] = time;
}
if (this.clockPickState == ClockPickState.HOUR) {
return;
}
this.preventInvalidRange();
switch (this.pickState) {
case GlobalPickState.BEGIN_HOUR:
this.setPickState(GlobalPickState.BEGIN_MINUTE);
break;
case GlobalPickState.BEGIN_MINUTE:
this.setPickState(GlobalPickState.END_DATE);
break;
case GlobalPickState.END_HOUR:
this.setPickState(GlobalPickState.END_MINUTE);
break;
}
}
preventInvalidRange() {
if (!this.datesTemp[1] || this.datesTemp[0].time.day === this.datesTemp[1].time.day) {
if (this.timesTemp[0].valueOf() > this.timesTemp[1].valueOf()) {
if (this.isBegin(this.pickState)) {
this.timesTemp[1] = this.timesTemp[0].plus({ minutes: 15 });
}
else {
const ampm = this.getAmPm(1);
if (this.is24Hours() || ampm === 'pm') {
this.timesTemp[0] = this.timesTemp[1].minus({ minutes: 15 });
}
else {
const f = this.timesTemp[1].toFormat('t');
const temp = DateTime.fromFormat(f.replace(ampm, 'pm'), 't', { zone: 'Etc/UTC' });
this.timesTemp[1] = this.timesTemp[1].set({ hour: temp.hour, minute: temp.minute });
}
}
}
}
}
getAmPm2(input) {
const s = input.toLocaleString({ hour: 'numeric', minute: 'numeric', hour12: !this.options.uses24Hours });
return s.substring(s.length - 2).toLowerCase();
}
getDateString(index) {
if (!this.datesTemp[index]) {
index--;
}
return this.datesTemp[index].time.toLocaleString(DateTime.DATE_FULL);
}
getTimeHours(index) {
return this.timesTemp[index].toFormat(this.is24Hours() ? 'HH' : 'hh');
}
getTimeMinutes(index) {
return this.timesTemp[index].toFormat('mm');
}
getAmPm(index) {
return this.getAmPm2(this.timesTemp[index]);
}
setPickState(pstate) {
this.pickState = pstate;
if (this.isHour(pstate)) {
this.clockPickState = ClockPickState.HOUR;
}
else if (this.isMinute(pstate)) {
this.clockPickState = ClockPickState.MINUTE;
}
}
onClickStartDate() {
this.setPickState(GlobalPickState.BEGIN_DATE);
this.scrollToDate(this.datesTemp[0].time);
}
onClickStartHour($event) {
this.setPickState(GlobalPickState.BEGIN_HOUR);
if ($event) {
$event.stopPropagation();
}
}
onClickStartMin($event) {
this.setPickState(GlobalPickState.BEGIN_MINUTE);
if ($event) {
$event.stopPropagation();
}
}
onClickEndDate() {
this.setPickState(GlobalPickState.END_DATE);
this.scrollToDate(this.datesTemp[0].time);
}
onClickEndHour($event) {
this.setPickState(GlobalPickState.END_HOUR);
if ($event) {
$event.stopPropagation();
}
}
onClickEndMin($event) {
this.setPickState(GlobalPickState.END_MINUTE);
if ($event) {
$event.stopPropagation();
}
}
ngOnInit() {
this.init();
this.initDefaultDate();
}
ngAfterViewInit() {
this.findCssClass();
if (this.modalOptions.canBackwardsSelected) {
this.backwardsMonth();
}
}
init() {
this.modalOptions = this.calSvc.safeOpt(this.options);
this.modalOptions.showAdjacentMonthDay = false;
this.step = this.modalOptions.step;
if (this.step > this.calSvc.DEFAULT_STEP) {
this.step = this.calSvc.DEFAULT_STEP;
}
this.calendarMonths = this.calSvc.createMonthsByPeriod(this.modalOptions.from.startOf('day'), this.findInitMonthNumber(this.modalOptions.defaultScrollTo) + this.step, this.modalOptions);
this.setPickState(this.modalOptions.pickState);
}
initDefaultDate() {
const { pickMode,
// defaultDate,
defaultDateRange, defaultDates } = this.modalOptions;
switch (pickMode) {
case PickMode.SINGLE:
// if (defaultDate) {
// this.datesTemp[0] = this.calSvc.createCalendarDay(
// this._getDayTime(defaultDate),
// this._d
// );
// this.datesTemp[1] = this.calSvc.createCalendarDay(
// this._getDayTime(defaultDate),
// this._d
// );
// }
// if ((nowMod.minutes() % 5) > 0) {
// nowMod.minutes(nowMod.minutes() - (nowMod.minutes() % 5));
// }
// this.timesTemp = [nowMod.format('hh:mm a'), nowMod.format('hh:mm a')];
break;
case PickMode.RANGE:
if (defaultDateRange) {
if (defaultDateRange.from) {
this.datesTemp[0] = this.calSvc.createCalendarDay(defaultDateRange.from.startOf('day'), this.modalOptions);
this.timesTemp[0] = defaultDateRange.from;
}
if (defaultDateRange.to) {
this.datesTemp[1] = this.calSvc.createCalendarDay(defaultDateRange.to.startOf('day'), this.modalOptions);
if (defaultDateRange.from >= defaultDateRange.to) {
this.datesTemp[1] = undefined;
this.timesTemp[1] = this.timesTemp[0].plus({
minutes: 30
});
}
else {
this.timesTemp[1] = defaultDateRange.to;
}
}
}
if (this.timesTemp[0].minute % 5 > 0) {
this.timesTemp[0] = this.timesTemp[0].set({ minute: this.timesTemp[0].minute - (this.timesTemp[0].minute % 5) });
}
if (this.timesTemp[1].minute % 5 > 0) {
this.timesTemp[1] = this.timesTemp[1].set({ minute: this.timesTemp[1].minute - (this.timesTemp[1].minute % 5) });
}
break;
case PickMode.MULTI:
if (defaultDates && defaultDates.length) {
this.datesTemp = defaultDates.map((e) => this.calSvc.createCalendarDay(e.startOf('day'), this.modalOptions));
}
break;
default:
this.datesTemp = [undefined, undefined];
}
}
findCssClass() {
const { cssClass } = this.modalOptions;
if (cssClass) {
cssClass.split(' ').forEach((_class) => {
if (_class.trim() !== '') {
this._renderer.addClass(this._elementRef.nativeElement, _class);
}
});
}
}
onChange(data) {
// const { pickMode, autoDone } = this._d;
if (this.pickState === GlobalPickState.BEGIN_DATE) {
this.datesTemp[0] = data[0];
}
else if (this.pickState === GlobalPickState.END_DATE) {
this.datesTemp[1] = data[1];
}
this.modalOptions.tapticConf.onCalendarSelect();
this.ref.detectChanges();
// if (pickMode !== pickModes.MULTI && autoDone && this.canDone()) {
// this.done();
// }
this.repaintDOM();
if (this.modalOptions.changeListener) {
this.modalOptions.changeListener(data);
}
if (this.canDone()) {
if (this.pickState === GlobalPickState.END_DATE) {
setTimeout(() => {
if (!this.modalOptions.fullday) {
this.onClickEndHour(undefined);
}
}, 200);
}
else {
setTimeout(() => {
if (this.modalOptions.fullday) {
this.onClickEndDate();
}
else {
this.onClickStartHour(undefined);
}
}, 200);
}
}
}
onCancel() {
this.modalCtrl.dismiss(undefined, 'cancel');
}
done() {
const { pickMode } = this.modalOptions;
this.preventInvalidRange();
this.modalCtrl.dismiss(this.calSvc.wrapResult(this.datesTemp, this.timesTemp, pickMode), 'done');
}
canDone() {
return true;
}
nextMonth(event) {
const len = this.calendarMonths.length;
const final = this.calendarMonths[len - 1];
const nextTime = final.original.date.plus({ months: 1 });
const rangeEnd = this.modalOptions.to ? this.modalOptions.to.minus({ months: 1 }) : 0;
if (len <= 0 || (rangeEnd !== 0 && final.original.date < rangeEnd)) {
event.target.disabled = true;
return;
}
this.calendarMonths.push(...this.calSvc.createMonthsByPeriod(nextTime, NUM_OF_MONTHS_TO_CREATE, this.modalOptions));
event.target.complete();
this.repaintDOM();
}
backwardsMonth() {
const first = this.calendarMonths[0];
if (first.original.date.valueOf() <= 0) {
this.modalOptions.canBackwardsSelected = false;
return;
}
const firstTime = (this.actualFirstTime = first.original.date.minus({
months: NUM_OF_MONTHS_TO_CREATE
}));
this.calendarMonths.unshift(...this.calSvc.createMonthsByPeriod(firstTime, NUM_OF_MONTHS_TO_CREATE, this.modalOptions));
this.ref.detectChanges();
this.repaintDOM();
}
scrollToDate(date) {
const defaultDateIndex = this.findInitMonthNumber(date);
const monthElement = this.monthsEle.nativeElement.children[`month-${defaultDateIndex}`];
const domElemReadyWaitTime = 300;
setTimeout(() => {
const defaultDateMonth = monthElement ? monthElement.offsetTop : 0;
if (defaultDateIndex !== -1 && defaultDateMonth !== 0) {
this.content.scrollByPoint(0, defaultDateMonth, 128);
}
}, domElemReadyWaitTime);
}
scrollToDefaultDate() {
this.scrollToDate(this.modalOptions.defaultScrollTo);
}
onScroll($event) {
if (!this.modalOptions.canBackwardsSelected) {
return;
}
const { detail } = $event;
if (detail.scrollTop <= 200 && detail.velocityY < 0 && this._scrollLock) {
this.content.getScrollElement().then((scrollElem) => {
this._scrollLock = !1;
const heightBeforeMonthPrepend = scrollElem.scrollHeight;
this.backwardsMonth();
setTimeout(() => {
const heightAfterMonthPrepend = scrollElem.scrollHeight;
this.content.scrollByPoint(0, heightAfterMonthPrepend - heightBeforeMonthPrepend, 0).then(() => {
this._scrollLock = !0;
});
}, 180);
});
}
}
/**
* In some older Safari versions (observed at Mac's Safari 10.0), there is an issue where style updates to
* shadowRoot descendants don't cause a browser repaint.
* See for more details: https://github.com/Polymer/polymer/issues/4701
*/
repaintDOM() {
return this.content.getScrollElement().then((scrollElem) => {
// Update scrollElem to ensure that height of the container changes as Months are appended/prepended
scrollElem.style.zIndex = '2';
scrollElem.style.zIndex = 'initial';
// Update monthsEle to ensure selected state is reflected when tapping on a day
this.monthsEle.nativeElement.style.zIndex = '2';
this.monthsEle.nativeElement.style.zIndex = 'initial';
});
}
findInitMonthNumber(date) {
let startDate = this.actualFirstTime ? this.actualFirstTime : this.modalOptions.from;
const defaultScrollTo = date;
const isAfter = defaultScrollTo > startDate;
if (!isAfter) {
return -1;
}
if (this.showYearPicker) {
startDate = DateTime.fromJSDate(new Date(this.year, 0, 1), { zone: 'Etc/UTC' });
}
return defaultScrollTo.diff(startDate, 'months').milliseconds;
}
_getDayTime(date) {
return DateTime.fromFormat(date.toFormat('yyyy-MM-dd'), 'yyyy-MM-dd', { zone: 'Etc/UTC' }).valueOf();
}
_monthFormat(date) {
return date.toLocaleString({ year: 'numeric', month: 'short' });
}
trackByIndex(index, momentDate) {
return momentDate.original ? momentDate.original.date.valueOf() : index;
}
isBegin(pstate) {
return pstate === GlobalPickState.BEGIN_DATE || pstate === GlobalPickState.BEGIN_HOUR || pstate === GlobalPickState.BEGIN_MINUTE;
}
isEnd(pstate) {
return !this.isBegin(pstate);
}
isDate(pstate) {
return pstate === GlobalPickState.BEGIN_DATE || pstate === GlobalPickState.END_DATE;
}
isTime(pstate) {
return !this.isDate(pstate);
}
isHour(pstate) {
return pstate === GlobalPickState.BEGIN_HOUR || pstate === GlobalPickState.END_HOUR;
}
isMinute(pstate) {
return pstate === GlobalPickState.BEGIN_MINUTE || pstate === GlobalPickState.END_MINUTE;
}
}
PickerModal.decorators = [
{ type: Component, args: [{
selector: 'moots-picker-modal',
animations: [
trigger('openClose', [
state('open', style({
opacity: 1
})),
state('closed', style({
opacity: 0
})),
transition('open => closed', [animate('0.4s')]),
transition('closed => open', [animate('0.5s')])
]),
trigger('enterAnimation', [
transition(':enter', [style({ opacity: 0 }), animate('500ms', style({ opacity: 1 }))]),
transition(':leave', [style({ opacity: 1 }), animate('400ms', style({ opacity: 0 }))])
]),
trigger('highlight', [
state('active', style({
'box-shadow': '0 5px 15px 0 rgba(0, 0, 0, 0.5)',
border: 'solid 2px #f8e71c'
})),
state('inactive', style({
'box-shadow': '0 1px 3px 0 rgba(0, 0, 0, 0.5)',
border: 'solid 2px transparent'
})),
transition('* => *', [animate('0.2s')])
])
],
template: "<div class=\"root-container\">\r\n <div class=\"header-container\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\r\n <div\r\n fxLayout=\"column\"\r\n fxLayoutAlign=\"space-between start\"\r\n fxFlex=\"45%\"\r\n class=\"begin-container\"\r\n [@highlight]=\"isBegin(pickState) ? 'active' : 'inactive'\"\r\n (click)=\"onClickStartDate()\"\r\n [style.height.px]=\"this.modalOptions.fullday ? '101' : '148'\"\r\n >\r\n <div class=\"title-label\">{{ this.modalOptions.startLabel }}</div>\r\n <div class=\"date-label\" [class.selected]=\"pickState === GlobalPickState.BEGIN_DATE\">{{ getDateString(0) }}</div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"time-label\" *ngIf=\"!this.modalOptions.fullday\">\r\n <div [class.selected]=\"pickState === GlobalPickState.BEGIN_HOUR\" (click)=\"onClickStartHour($event)\">{{ getTimeHours(0) }}</div>\r\n <div>:</div>\r\n <div [class.selected]=\"pickState === GlobalPickState.BEGIN_MINUTE\" (click)=\"onClickStartMin($event)\">{{ getTimeMinutes(0) }}</div>\r\n <div *ngIf=\"!is24Hours()\" class=\"ampm-indicator\" fxLayoutAlign=\"center center\" (click)=\"onClickStartHour($event)\">\r\n {{ getAmPm(0) }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n fxLayout=\"column\"\r\n fxLayoutAlign=\"space-between start\"\r\n fxFlex=\"45%\"\r\n class=\"end-container\"\r\n [@highlight]=\"isEnd(pickState) ? 'active' : 'inactive'\"\r\n (click)=\"onClickEndDate()\"\r\n [style.height.px]=\"this.modalOptions.fullday ? '101' : '148'\"\r\n >\r\n <div class=\"title-label\">{{ this.modalOptions.endLabel }}</div>\r\n <div class=\"date-label\" [class.selected]=\"pickState === GlobalPickState.END_DATE\">{{ getDateString(1) }}</div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"time-label\" *ngIf=\"!this.modalOptions.fullday\">\r\n <div [class.selected]=\"pickState === GlobalPickState.END_HOUR\" (click)=\"onClickEndHour($event)\">{{ getTimeHours(1) }}</div>\r\n <div>:</div>\r\n <div [class.selected]=\"pickState === GlobalPickState.END_MINUTE\" (click)=\"onClickEndMin($event)\">{{ getTimeMinutes(1) }}</div>\r\n <div *ngIf=\"!is24Hours()\" class=\"ampm-indicator\" fxLayoutAlign=\"center center\" (click)=\"onClickEndHour($event)\">\r\n {{ getAmPm(1) }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-content select=\"[sub-header]\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"isTime(pickState)\" style=\"background-color: var(--ion-color-light-tint); height: 100%\">\r\n <div [@enterAnimation] style=\"background-color: var(--ion-color-light-tint); height: 100%; overflow: hidden\">\r\n <moots-clock-picker\r\n #clockPicker\r\n [pickState]=\"clockPickState\"\r\n [mode24]=\"is24Hours()\"\r\n [tapConf]=\"modalOptions.tapticConf\"\r\n (valueSelected)=\"onClockValue($event)\"\r\n (selectChange)=\"onSelectChange($event)\"\r\n [inputTime]=\"isBegin(pickState) ? timesTemp[0] : timesTemp[1]\"\r\n ></moots-clock-picker>\r\n </div>\r\n</div>\r\n\r\n<moots-calendar-week\r\n [@openClose]=\"isDate(pickState) ? 'open' : 'closed'\"\r\n *ngIf=\"isDate(pickState)\"\r\n [color]=\"modalOptions.color\"\r\n [weekArray]=\"modalOptions.weekdays\"\r\n [weekStart]=\"modalOptions.weekStart\"\r\n>\r\n</moots-calendar-week>\r\n\r\n<ion-content\r\n (ionScroll)=\"onScroll($event)\"\r\n [scrollEvents]=\"true\"\r\n class=\"calendar-page\"\r\n [ngClass]=\"{ 'multi-selection': modalOptions.pickMode === PickMode.MULTI }\"\r\n [class.noFlow]=\"isTime(pickState)\"\r\n [@openClose]=\"isDate(pickState) ? 'open' : 'closed'\"\r\n>\r\n <div #months>\r\n <ng-template ngFor let-month [ngForOf]=\"calendarMonths\" [ngForTrackBy]=\"trackByIndex\" let-i=\"index\">\r\n <div class=\"month-box\" [attr.id]=\"'month-' + i\">\r\n <h4 class=\"text-center month-title\">{{ _monthFormat(month.original.date) }}</h4>\r\n <moots-calendar-month\r\n [month]=\"month\"\r\n [pickMode]=\"modalOptions.pickMode\"\r\n [isSaveHistory]=\"modalOptions.isSaveHistory\"\r\n [id]=\"modalOptions.id\"\r\n [color]=\"modalOptions.color\"\r\n (change)=\"onChange($event)\"\r\n [(ngModel)]=\"datesTemp\"\r\n [selectBegin]=\"isBegin(pickState)\"\r\n >\r\n </moots-calendar-month>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <ion-infinite-scroll threshold=\"25%\" (ionInfinite)=\"nextMonth($event)\">\r\n <ion-infinite-scroll-content></ion-infinite-scroll-content>\r\n </ion-infinite-scroll>\r\n</ion-content>\r\n\r\n<ion-footer>\r\n <ion-toolbar>\r\n <ion-buttons slot=\"start\">\r\n <ion-button type=\"button\" slot=\"icon-only\" fill=\"clear\" (click)=\"onCancel()\">\r\n <span *ngIf=\"modalOptions.closeLabel !== '' && !modalOptions.closeIcon\">{{ modalOptions.closeLabel }}</span>\r\n <ion-icon *ngIf=\"modalOptions.closeIcon\" name=\"close\"></ion-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n\r\n <ion-buttons slot=\"end\">\r\n <ion-button type=\"button\" slot=\"icon-only\" *ngIf=\"!modalOptions.autoDone\" fill=\"clear\" [disabled]=\"!canDone()\" (click)=\"done()\">\r\n <span *ngIf=\"modalOptions.doneLabel !== '' && !modalOptions.doneIcon\">{{ modalOptions.doneLabel }}</span>\r\n <ion-icon *ngIf=\"modalOptions.doneIcon\" name=\"checkmark\"></ion-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n</ion-footer>\r\n",
styles: [":host moots-picker-modal{font-family:Roboto,\"Helvetica Neue\",sans-serif}:host ion-select{max-width:unset}:host ion-select .select-icon>.select-icon-inner,:host ion-select .select-text{color:#fff!important}:host ion-select.select-ios{max-width:unset}:host .calendar-page{background-color:#fbfbfb}:host .month-box{display:inline-block;width:100%;padding-bottom:1em;border-bottom:1px solid var(--ion-color-light-shade);background-color:var(--ion-color-light)}:host .month-title{font-size:1rem;font-weight:500;color:var(--ion-color-dark-shade);font-weight:bold}:host h4{font-weight:400;font-size:1.1rem;display:block;text-align:center;margin:1rem 0 0;color:#929292}:host .header-grid{text-align:center;vertical-align:middle;width:100%;overflow:hidden;padding:0}:host .date-col{color:#fffc;font-weight:500;width:30%;margin-top:0}:host h2{margin-top:4px}:host h3{margin-top:8px}:host .highlight-part{opacity:1!important;color:#fff;text-shadow:0 0 1vw #0af,0 0 3vw #0af,0 0 10vw #0af,0 0 10vw #8cf,0 0 .4vw #FFF}:host .selected-am-pm{color:green;font-size:2rem}:host .selected-time{font-size:4rem;font-weight:bold}:host .active-time-unit{color:green}:host .date-string{font-size:17px;font-weight:bold;line-height:1.35;text-align:center;opacity:.8;padding:6px 2px}:host .time-string{font-size:32px;font-weight:bold;font-style:normal;font-stretch:normal;line-height:.94;letter-spacing:normal;text-align:center;padding:8px 2px}:host .title-label{font-size:21px;font-weight:900;font-stretch:normal;font-style:normal;line-height:1.24;letter-spacing:.36px;color:var(--ion-color-dark-shade)}:host .date-label-active{font-size:15px;font-weight:normal;font-stretch:normal;font-style:normal;line-height:1.33;letter-spacing:-.24px;color:var(--ion-color-dark-shade)}:host .date-label{font-size:15px;font-weight:normal;font-stretch:normal;font-style:normal;line-height:1.33;letter-spacing:-.24px;color:var(--ion-color-medium)}:host .date-label.selected{color:var(--ion-color-dark-shade)}:host .time-label{font-size:32px;font-weight:900;font-stretch:normal;font-style:normal;line-height:.81;letter-spacing:.55px;color:var(--ion-color-medium)}:host .time-label .selected{color:var(--ion-color-dark-shade)}:host .time-label div{height:25px}:host .begin-container{padding:1em;height:148px;border-top-left-radius:25px;border-bottom-left-radius:25px;background-color:var(--ion-color-light-tint);border:solid 2px transparent;box-shadow:0 1px 3px #00000080;cursor:pointer}:host .end-container{padding:1em;height:148px;border-top-right-radius:25px;border-bottom-right-radius:25px;background-color:var(--ion-color-light-tint);border:solid 2px transparent;box-shadow:0 1px 3px #00000080;cursor:pointer}:host .header-container{background:linear-gradient(0deg,var(--ion-color-light-tint) 50%,#1490e1 50%);padding-top:1rem;padding-bottom:1.25rem}:host .root-container{padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}:host .ampm-indicator{font-size:1.5rem;margin-left:.25rem}\n"]
},] }
];
PickerModal.ctorParameters = () => [
{ type: Renderer2 },
{ type: ElementRef },
{ type: NavParams },
{ type: ModalController },
{ type: ChangeDetectorRef },
{ type: CalendarService }
];
PickerModal.propDecorators = {
content: [{ type: ViewChild, args: [IonContent, { static: true },] }],
monthsEle: [{ type: ViewChild, args: ['months', { static: true },] }],
clockPicker: [{ type: ViewChild, args: ['clockPicker',] }],
ionPage: [{ type: HostBinding, args: ['class.ion-page',] }],
options: [{ type: Input }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9vdHMtcGlja2VyL2NvbXBvbmVudHMvY2FsZW5kYXIubW9kYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQWlCLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUE4QixlQUFlLEVBQUUsUUFBUSxFQUE4QyxNQUFNLG1CQUFtQixDQUFDO0FBQ3RJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsY0FBYyxFQUF3QixNQUFNLDBCQUEwQixDQUFDO0FBRWhGLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0FBOENsQyxNQUFNLE9BQU8sV0FBVztJQStCdEIsWUFDVSxTQUFvQixFQUNyQixXQUF1QixFQUN2QixNQUFpQixFQUNqQixTQUEwQixFQUMxQixHQUFzQixFQUN0QixNQUF1QjtRQUx0QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3JCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFwQ2hDLG9CQUFlLEdBQUcsZUFBZSxDQUFD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SDt3QkFDRCxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7cUJBQ3hDLENBQUM7aUJBQ0g7Z0JBRUQsMm5MQUFvQzs7YUFDckM7OztZQXJENkYsU0FBUztZQUFqRCxVQUFVO1lBQzFCLFNBQVM7WUFBMUIsZUFBZTtZQURaLGlCQUFpQjtZQUloQyxlQUFlOzs7c0JBc0RyQixTQUFTLFNBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTt3QkFFdEMsU0FBUyxTQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7MEJBRXBDLFNBQVMsU0FBQyxhQUFhO3NCQUd2QixXQUFXLFNBQUMsZ0JBQWdCO3NCQUc1QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25Jbml0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJb25Db250ZW50LCBNb2RhbENvbnRyb2xsZXIsIE5hdlBhcmFtcyB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcclxuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XHJcbmltcG9ydCB7IENhbGVuZGFyRGF5LCBDYWxlbmRhck1vbnRoLCBHbG9iYWxQaWNrU3RhdGUsIFBpY2tNb2RlLCBQaWNrZXJNb2RhbE9wdGlvbnMsIFBpY2tlck1vZGFsT3B0aW9uc1NhZmUgfSBmcm9tICcuLi9jYWxlbmRhci5tb2RlbCc7XHJcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NhbGVuZGFyLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgQ2xvY2tQaWNrU3RhdGUsIENsb2NrUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jbG9jay1waWNrZXIuY29tcG9uZW50JztcclxuXHJcbmNvbnN0IE5VTV9PRl9NT05USFNfVE9fQ1JFQVRFID0gMjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbW9vdHMtcGlja2VyLW1vZGFsJyxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdvcGVuQ2xvc2UnLCBbXHJcbiAgICAgIHN0YXRlKFxyXG4gICAgICAgICdvcGVuJyxcclxuICAgICAgICBzdHlsZSh7XHJcbiAgICAgICAgICBvcGFjaXR5OiAxXHJcbiAgICAgICAgfSlcclxuICAgICAgKSxcclxuICAgICAgc3RhdGUoXHJcbiAgICAgICAgJ2Nsb3NlZCcsXHJcbiAgICAgICAgc3R5bGUoe1xyXG4gICAgICAgICAgb3BhY2l0eTogMFxyXG4gICAgICAgIH0pXHJcbiAgICAgICksXHJcbiAgICAgIHRyYW5zaXRpb24oJ29wZW4gPT4gY2xvc2VkJywgW2FuaW1hdGUoJzAuNHMnKV0pLFxyXG4gICAgICB0cmFuc2l0aW9uKCdjbG9zZWQgPT4gb3BlbicsIFthbmltYXRlKCcwLjVzJyldKVxyXG4gICAgXSksXHJcbiAgICB0cmlnZ2VyKCdlbnRlckFuaW1hdGlvbicsIFtcclxuICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW3N0eWxlKHsgb3BhY2l0eTogMCB9KSwgYW5pbWF0ZSgnNTAwbXMnLCBzdHlsZSh7IG9wYWNpdHk6IDEgfSkpXSksXHJcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtzdHlsZSh7IG9wYWNpdHk6IDEgfSksIGFuaW1hdGUoJzQwMG1zJywgc3R5bGUoeyBvcGFjaXR5OiAwIH0pKV0pXHJcbiAgICBdKSxcclxuICAgIHRyaWdnZXIoJ2hpZ2hsaWdodCcsIFtcclxuICAgICAgc3RhdGUoXHJcbiAgICAgICAgJ2FjdGl2ZScsXHJcbiAgICAgICAgc3R5bGUoe1xyXG4gICAgICAgICAgJ2JveC1zaGFkb3cnOiAnMCA1cHggMTVweCAwIHJnYmEoMCwgMCwgMCwgMC41KScsXHJcbiAgICAgICAgICBib3JkZXI6ICdzb2xpZCAycHggI2Y4ZTcxYydcclxuICAgICAgICB9KVxyXG4gICAgICApLFxyXG4gICAgICBzdGF0ZShcclxuICAgICAgICAnaW5hY3RpdmUnLFxyXG4gICAgICAgIHN0eWxlKHtcclxuICAgICAgICAg