angular-mydatepicker
Version:
Angular datepicker and date range picker
896 lines • 87.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, Input, ElementRef, ViewContainerRef, Renderer2, ChangeDetectorRef, ComponentFactoryResolver, forwardRef, EventEmitter, Output, HostListener } from "@angular/core";
import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from "@angular/forms";
import { CalendarComponent } from "./components/calendar/calendar.component";
import { LocaleService } from "./services/angular-mydatepicker.locale.service";
import { UtilService } from "./services/angular-mydatepicker.util.service";
import { DefaultConfigService } from "./services/angular-mydatepicker.config.service";
import { CalToggle } from "./enums/cal-toggle.enum";
import { Year } from "./enums/year.enum";
import { KeyCode } from "./enums/key-code.enum";
import { CalAnimation } from "./enums/cal-animation.enum";
import { KEYUP, BLUR, EMPTY_STR, DISABLED, CLICK, BODY, VALUE, PREVENT_CLOSE_TIMEOUT, OPTIONS, DEFAULT_MONTH, LOCALE, OBJECT, PX, INNER_HTML, ANIMATION_END, ANIMATION_TIMEOUT } from "./constants/constants";
/** @type {?} */
const NGX_DP_VALUE_ACCESSOR = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
() => AngularMyDatePickerDirective)),
multi: true
};
/** @type {?} */
const NGX_DP_VALIDATORS = {
provide: NG_VALIDATORS,
useExisting: forwardRef((/**
* @return {?}
*/
() => AngularMyDatePickerDirective)),
multi: true
};
export class AngularMyDatePickerDirective {
/**
* @param {?} localeService
* @param {?} utilService
* @param {?} vcRef
* @param {?} cfr
* @param {?} renderer
* @param {?} cdr
* @param {?} elem
* @param {?} config
*/
constructor(localeService, utilService, vcRef, cfr, renderer, cdr, elem, config) {
this.localeService = localeService;
this.utilService = utilService;
this.vcRef = vcRef;
this.cfr = cfr;
this.renderer = renderer;
this.cdr = cdr;
this.elem = elem;
this.config = config;
this.defaultMonth = { defMonth: EMPTY_STR, overrideSelection: false };
this.dateChanged = new EventEmitter();
this.inputFieldChanged = new EventEmitter();
this.calendarViewChanged = new EventEmitter();
this.calendarToggle = new EventEmitter();
this.rangeDateSelection = new EventEmitter();
this.viewActivated = new EventEmitter();
this.cRef = null;
this.hostText = EMPTY_STR;
this.preventClose = false;
this.disabled = false;
this.selectedValue = null;
this.onChangeCb = (/**
* @return {?}
*/
() => { });
this.onTouchedCb = (/**
* @return {?}
*/
() => { });
this.onClickWrapper = (/**
* @param {?} event
* @return {?}
*/
(event) => this.onClick(event));
this.onAnimateWrapper = (/**
* @param {?} reason
* @return {?}
*/
(reason) => this.animationEnd(reason));
this.opts = this.config.getDefaultConfig();
this.parseOptions(this.opts);
}
/**
* @param {?} event
* @return {?}
*/
onKeyUp(event) {
/** @type {?} */
const keyCode = this.utilService.getKeyCodeFromEvent(event);
if (this.ignoreKeyPress(keyCode)) {
return;
}
if (keyCode === KeyCode.esc) {
this.closeSelector(CalToggle.CloseByEsc);
}
else {
const { dateRange, dateFormat, monthLabels, dateRangeDatesDelimiter } = this.opts;
/** @type {?} */
const value = this.getHostValue();
/** @type {?} */
let dateModel = null;
/** @type {?} */
let valid = false;
/** @type {?} */
let validateOpts = null;
if (!dateRange) {
validateOpts = { validateDisabledDates: true, selectedValue: this.utilService.getSelectedValue(this.selectedValue, false) };
/** @type {?} */
const date = this.utilService.isDateValid(value, this.opts, validateOpts);
valid = this.utilService.isInitializedDate(date);
if (valid) {
dateModel = this.utilService.getDateModel(date, null, dateFormat, monthLabels, dateRangeDatesDelimiter);
}
}
else {
validateOpts = { validateDisabledDates: true, selectedValue: this.utilService.getSelectedValue(this.selectedValue, true) };
/** @type {?} */
const range = this.utilService.isDateValidDateRange(value, this.opts, validateOpts);
const { begin, end } = range;
valid = this.utilService.isInitializedDate(begin) && this.utilService.isInitializedDate(end);
if (valid) {
dateModel = this.utilService.getDateModel(null, range, dateFormat, monthLabels, dateRangeDatesDelimiter);
}
}
this.onChangeCb(dateModel);
this.emitInputFieldChanged(value, valid);
}
}
/**
* @return {?}
*/
onBlur() {
const { inputFieldValidation, dateRange, dateFormat, monthLabels, dateRangeDatesDelimiter, closeSelectorOnDateSelect } = this.opts;
if (inputFieldValidation) {
/** @type {?} */
const value = this.getHostValue();
/** @type {?} */
let valid = false;
/** @type {?} */
let validateOpts = null;
if (!dateRange) {
validateOpts = { validateDisabledDates: true, selectedValue: this.utilService.getSelectedValue(this.selectedValue, false) };
/** @type {?} */
const date = this.utilService.isDateValid(value, this.opts, validateOpts);
valid = this.utilService.isInitializedDate(date);
if (valid && this.hostText !== value) {
// Valid date
/** @type {?} */
const dateModel = this.utilService.getDateModel(date, null, dateFormat, monthLabels, dateRangeDatesDelimiter);
this.emitDateChanged(dateModel);
this.updateModel(dateModel);
if (closeSelectorOnDateSelect) {
this.closeSelector(CalToggle.CloseByDateSel);
}
}
}
else {
validateOpts = { validateDisabledDates: true, selectedValue: this.utilService.getSelectedValue(this.selectedValue, true) };
/** @type {?} */
const dateRange = this.utilService.isDateValidDateRange(value, this.opts, validateOpts);
const { begin, end } = dateRange;
valid = this.utilService.isInitializedDate(begin) && this.utilService.isInitializedDate(end);
if (valid && this.hostText !== value) {
// Valid date range
/** @type {?} */
const dateModel = this.utilService.getDateModel(null, dateRange, dateFormat, monthLabels, dateRangeDatesDelimiter);
this.emitDateChanged(dateModel);
this.updateModel(dateModel);
if (closeSelectorOnDateSelect) {
this.closeSelector(CalToggle.CloseByDateSel);
}
}
}
if (!valid && this.hostText !== value) {
if (value === EMPTY_STR) {
this.clearDate();
}
else {
this.onChangeCb(null);
}
}
this.hostText = value;
}
this.onTouchedCb();
}
/**
* @private
* @param {?} event
* @return {?}
*/
onClick(event) {
if (this.opts.closeSelectorOnDocumentClick && !this.preventClose && event.target && this.cRef
&& this.elem.nativeElement !== event.target && !this.cRef.location.nativeElement.contains(event.target)
&& !this.disabled) {
this.closeSelector(CalToggle.CloseByOutClick);
}
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (changes.hasOwnProperty(LOCALE)) {
this.setLocaleOptions();
}
if (changes.hasOwnProperty(DEFAULT_MONTH)) {
/** @type {?} */
let dm = changes[DEFAULT_MONTH].currentValue;
if (typeof dm === OBJECT) {
if (!dm.overrideSelection) {
dm.overrideSelection = false;
}
}
else {
dm = { defMonth: dm, overrideSelection: false };
}
this.defaultMonth = dm;
}
if (changes.hasOwnProperty(OPTIONS)) {
this.parseOptions(changes[OPTIONS].currentValue);
}
if (this.cRef) {
this.cRef.instance.refreshComponent(this.opts, this.defaultMonth, this.selectedValue, this.getHostValue());
}
}
/**
* @return {?}
*/
ngOnDestroy() {
this.closeCalendar();
}
/**
* @return {?}
*/
setLocaleOptions() {
/** @type {?} */
const opts = this.localeService.getLocaleOptions(this.locale);
Object.keys(opts).forEach((/**
* @param {?} k
* @return {?}
*/
(k) => {
((/** @type {?} */ (this.opts)))[k] = opts[k];
}));
}
/**
* @param {?} opts
* @return {?}
*/
parseOptions(opts) {
if (opts) {
Object.keys(opts).forEach((/**
* @param {?} k
* @return {?}
*/
(k) => {
((/** @type {?} */ (this.opts)))[k] = opts[k];
}));
}
const { minYear, maxYear, openSelectorTopOfInput, inline } = this.opts;
if (minYear < Year.min) {
this.opts.minYear = Year.min;
}
if (maxYear > Year.max) {
this.opts.maxYear = Year.max;
}
if (openSelectorTopOfInput || inline) {
this.opts.showSelectorArrow = false;
}
if (inline) {
this.openCalendar();
}
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
if (this.disabled) {
return;
}
/** @type {?} */
let validateOpts = null;
const { dateFormat, monthLabels, dateRangeDatesDelimiter, inline } = this.opts;
if (!value) {
this.setHostValue(EMPTY_STR);
this.emitInputFieldChanged(EMPTY_STR, false);
if (this.cRef) {
this.cRef.instance.resetDateValue();
}
}
else if (!value.isRange && value.singleDate) {
// single date
let { date, jsDate } = value.singleDate;
if (!date) {
date = this.utilService.jsDateToMyDate(jsDate);
}
/** @type {?} */
const formatted = this.utilService.formatDate(date, dateFormat, monthLabels);
validateOpts = { validateDisabledDates: false, selectedValue: this.utilService.getSelectedValue(this.selectedValue, false) };
/** @type {?} */
const valid = this.utilService.isInitializedDate(this.utilService.isDateValid(formatted, this.opts, validateOpts));
if (valid) {
this.setHostValue(formatted);
this.emitInputFieldChanged(formatted, valid);
this.setSelectedValue(this.utilService.getDateModel(date, null, dateFormat, monthLabels, dateRangeDatesDelimiter));
if (this.cRef) {
this.cRef.instance.refreshComponent(this.opts, this.defaultMonth, this.selectedValue, this.getHostValue());
}
}
}
else if (value.isRange && value.dateRange) {
// date range
let { beginDate, beginJsDate, endDate, endJsDate } = value.dateRange;
if (!beginDate || !endDate) {
beginDate = this.utilService.jsDateToMyDate(beginJsDate);
endDate = this.utilService.jsDateToMyDate(endJsDate);
}
/** @type {?} */
const formatted = this.utilService.formatDate(beginDate, dateFormat, monthLabels) + dateRangeDatesDelimiter +
this.utilService.formatDate(endDate, dateFormat, monthLabels);
validateOpts = { validateDisabledDates: false, selectedValue: this.utilService.getSelectedValue(this.selectedValue, true) };
const { begin, end } = this.utilService.isDateValidDateRange(formatted, this.opts, validateOpts);
/** @type {?} */
const valid = this.utilService.isInitializedDate(begin) && this.utilService.isInitializedDate(end);
if (valid) {
this.setHostValue(formatted);
this.emitInputFieldChanged(formatted, valid);
/** @type {?} */
const dateRange = { begin: beginDate, end: endDate };
this.setSelectedValue(this.utilService.getDateModel(null, dateRange, dateFormat, monthLabels, dateRangeDatesDelimiter));
if (this.cRef) {
this.cRef.instance.refreshComponent(this.opts, this.defaultMonth, this.selectedValue, this.getHostValue());
}
}
}
}
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this.onChangeCb = fn;
}
/**
* @param {?} fn
* @return {?}
*/
registerOnTouched(fn) {
this.onTouchedCb = fn;
}
/**
* @param {?} isDisabled
* @return {?}
*/
setDisabledState(isDisabled) {
this.disabled = isDisabled;
this.renderer.setProperty(this.elem.nativeElement, DISABLED, isDisabled);
if (isDisabled) {
this.closeCalendar();
}
}
/**
* @param {?} c
* @return {?}
*/
validate(c) {
/** @type {?} */
const value = this.getHostValue();
if (value === null || value === EMPTY_STR) {
return null;
}
/** @type {?} */
let validateOpts = null;
if (!this.opts.dateRange) {
validateOpts = { validateDisabledDates: true, selectedValue: this.utilService.getSelectedValue(this.selectedValue, false) };
/** @type {?} */
const date = this.utilService.isDateValid(value, this.opts, validateOpts);
if (!this.utilService.isInitializedDate(date)) {
return { invalidDateFormat: true };
}
}
else {
validateOpts = { validateDisabledDates: true, selectedValue: this.utilService.getSelectedValue(this.selectedValue, true) };
const { begin, end } = this.utilService.isDateValidDateRange(value, this.opts, validateOpts);
if (!this.utilService.isInitializedDate(begin) || !this.utilService.isInitializedDate(end)) {
return { invalidDateFormat: true };
}
}
return null;
}
/**
* @return {?}
*/
openCalendar() {
if (this.disabled) {
return;
}
this.preventClose = true;
this.cdr.detectChanges();
if (this.cRef === null) {
this.cRef = this.vcRef.createComponent(this.cfr.resolveComponentFactory(CalendarComponent));
this.appendSelector(this.cRef.location.nativeElement);
this.cRef.instance.initializeComponent(this.opts, this.defaultMonth, this.selectedValue, this.getHostValue(), this.getSelectorPosition(this.elem.nativeElement), (/**
* @param {?} dm
* @param {?} close
* @return {?}
*/
(dm, close) => {
this.focusToInput();
this.emitDateChanged(dm);
this.emitInputFieldChanged(this.utilService.getFormattedDate(dm), true);
this.updateModel(dm);
if (close) {
this.closeSelector(CalToggle.CloseByDateSel);
}
}), (/**
* @param {?} cvc
* @return {?}
*/
(cvc) => {
this.emitCalendarChanged(cvc);
}), (/**
* @param {?} rds
* @return {?}
*/
(rds) => {
this.emitRangeDateSelection(rds);
}), (/**
* @param {?} va
* @return {?}
*/
(va) => {
this.emitViewActivated(va);
}), (/**
* @return {?}
*/
() => {
this.closeSelector(CalToggle.CloseByEsc);
}));
this.emitCalendarToggle(CalToggle.Open);
if (!this.opts.inline) {
document.addEventListener(CLICK, this.onClickWrapper);
}
}
setTimeout((/**
* @return {?}
*/
() => {
this.preventClose = false;
}), PREVENT_CLOSE_TIMEOUT);
}
/**
* @return {?}
*/
closeCalendar() {
this.closeSelector(CalToggle.CloseByCalBtn);
}
/**
* @return {?}
*/
toggleCalendar() {
if (this.disabled) {
return;
}
/** @type {?} */
const isOpen = this.cRef === null;
if (isOpen) {
this.openCalendar();
}
else {
this.closeSelector(CalToggle.CloseByCalBtn);
}
return isOpen;
}
/**
* @return {?}
*/
clearDate() {
if (this.disabled) {
return;
}
const { inline } = this.opts;
this.setHostValue(EMPTY_STR);
this.emitDateChanged({
isRange: this.opts.dateRange,
singleDate: {
date: this.utilService.resetDate(),
jsDate: null,
formatted: EMPTY_STR,
epoc: 0
},
dateRange: {
beginDate: this.utilService.resetDate(),
beginJsDate: null,
beginEpoc: 0,
endDate: this.utilService.resetDate(),
endJsDate: null,
endEpoc: 0,
formatted: EMPTY_STR
}
});
this.onChangeCb(null);
this.onTouchedCb();
if (this.cRef) {
this.cRef.instance.clearDate();
}
if (!inline) {
this.closeSelector(CalToggle.CloseByCalBtn);
}
}
/**
* @return {?}
*/
isDateValid() {
/** @type {?} */
const value = this.getHostValue();
if (value === null || value === EMPTY_STR) {
return false;
}
/** @type {?} */
let validateOpts = null;
if (!this.opts.dateRange) {
validateOpts = { validateDisabledDates: true, selectedValue: this.utilService.getSelectedValue(this.selectedValue, false) };
/** @type {?} */
const date = this.utilService.isDateValid(value, this.opts, validateOpts);
if (this.utilService.isInitializedDate(date)) {
this.emitInputFieldChanged(value, true);
return true;
}
}
else {
validateOpts = { validateDisabledDates: true, selectedValue: this.utilService.getSelectedValue(this.selectedValue, true) };
const { begin, end } = this.utilService.isDateValidDateRange(value, this.opts, validateOpts);
if (this.utilService.isInitializedDate(begin) && this.utilService.isInitializedDate(end)) {
this.emitInputFieldChanged(value, true);
return true;
}
}
this.emitInputFieldChanged(value, false);
return false;
}
/**
* @param {?} headerAction
* @return {?}
*/
headerAction(headerAction) {
if (this.cRef) {
this.cRef.instance.headerAction(headerAction);
}
}
/**
* @param {?} value
* @return {?}
*/
setHostValue(value) {
const { divHostElement } = this.opts;
this.hostText = value;
/** @type {?} */
const valueType = !divHostElement.enabled ? VALUE : INNER_HTML;
value = valueType === INNER_HTML && value === EMPTY_STR ? divHostElement.placeholder : value;
this.renderer.setProperty(this.elem.nativeElement, valueType, value);
}
/**
* @private
* @param {?} keyCode
* @return {?}
*/
ignoreKeyPress(keyCode) {
return keyCode === KeyCode.leftArrow || keyCode === KeyCode.rightArrow || keyCode === KeyCode.upArrow || keyCode === KeyCode.downArrow || keyCode === KeyCode.tab || keyCode === KeyCode.shift;
}
/**
* @private
* @param {?} reason
* @return {?}
*/
animationEnd(reason) {
if (this.cRef) {
this.cRef.instance.selectorEl.nativeElement.removeEventListener(ANIMATION_END, this.onAnimateWrapper);
this.removeComponent();
this.emitCalendarToggle(reason);
}
}
/**
* @private
* @param {?} reason
* @return {?}
*/
closeSelector(reason) {
const { inline, calendarAnimation } = this.opts;
if (this.cRef && !inline) {
if (calendarAnimation.out !== CalAnimation.None) {
const { instance } = this.cRef;
instance.selectorEl.nativeElement.addEventListener(ANIMATION_END, this.onAnimateWrapper.bind(this, reason));
instance.setCalendarAnimation(calendarAnimation, false);
// In case the animationend event is not fired
setTimeout(this.onAnimateWrapper.bind(this, reason), ANIMATION_TIMEOUT);
}
else {
this.removeComponent();
this.emitCalendarToggle(reason);
}
document.removeEventListener(CLICK, this.onClickWrapper);
}
}
/**
* @private
* @return {?}
*/
removeComponent() {
if (this.vcRef !== null) {
this.vcRef.remove(this.vcRef.indexOf(this.cRef.hostView));
this.cRef = null;
}
}
/**
* @private
* @param {?} model
* @return {?}
*/
updateModel(model) {
this.setHostValue(this.utilService.getFormattedDate(model));
this.onChangeCb(model);
this.onTouchedCb();
}
/**
* @private
* @return {?}
*/
getHostValue() {
const { value, innerHTML } = this.elem.nativeElement;
return !this.opts.divHostElement.enabled ? value : innerHTML;
}
/**
* @private
* @return {?}
*/
focusToInput() {
const { focusInputOnDateSelect, divHostElement } = this.opts;
if (focusInputOnDateSelect && !divHostElement.enabled) {
setTimeout((/**
* @return {?}
*/
() => {
this.elem.nativeElement.focus();
}));
}
}
/**
* @private
* @param {?} dateModel
* @return {?}
*/
emitDateChanged(dateModel) {
this.dateChanged.emit(dateModel);
this.setSelectedValue(dateModel);
}
/**
* @private
* @param {?} dateModel
* @return {?}
*/
setSelectedValue(dateModel) {
const { isRange, dateRange, singleDate } = dateModel;
this.selectedValue = isRange ? dateRange : singleDate;
}
/**
* @private
* @param {?} value
* @param {?} valid
* @return {?}
*/
emitInputFieldChanged(value, valid) {
this.inputFieldChanged.emit({ value, dateFormat: this.opts.dateFormat, valid });
}
/**
* @private
* @param {?} cvc
* @return {?}
*/
emitCalendarChanged(cvc) {
this.calendarViewChanged.emit(cvc);
}
/**
* @private
* @param {?} rds
* @return {?}
*/
emitRangeDateSelection(rds) {
this.rangeDateSelection.emit(rds);
}
/**
* @private
* @param {?} va
* @return {?}
*/
emitViewActivated(va) {
this.viewActivated.emit(va);
}
/**
* @private
* @param {?} reason
* @return {?}
*/
emitCalendarToggle(reason) {
this.calendarToggle.emit(reason);
}
/**
* @private
* @param {?} elem
* @return {?}
*/
appendSelector(elem) {
if (this.opts.appendSelectorToBody) {
document.querySelector(BODY).appendChild(elem);
}
}
/**
* @private
* @param {?} elem
* @return {?}
*/
getSelectorPosition(elem) {
/** @type {?} */
let top = 0;
/** @type {?} */
let left = 0;
const { appendSelectorToBody, openSelectorTopOfInput, selectorHeight, selectorWidth, showSelectorArrow, alignSelectorRight } = this.opts;
if (appendSelectorToBody) {
/** @type {?} */
const b = document.body.getBoundingClientRect();
/** @type {?} */
const e = elem.getBoundingClientRect();
top = e.top - b.top;
left = e.left - b.left;
}
if (openSelectorTopOfInput) {
top = top - this.getSelectorDimension(selectorHeight) - 2;
}
else {
top = top + elem.offsetHeight + (showSelectorArrow ? 12 : 2);
}
if (alignSelectorRight) {
left = left + elem.offsetWidth - this.getSelectorDimension(selectorWidth);
}
return { top: top + PX, left: left + PX };
}
/**
* @private
* @param {?} value
* @return {?}
*/
getSelectorDimension(value) {
return Number(value.replace(PX, EMPTY_STR));
}
}
AngularMyDatePickerDirective.decorators = [
{ type: Directive, args: [{
selector: "[angular-mydatepicker]",
exportAs: "angular-mydatepicker",
providers: [UtilService, LocaleService, DefaultConfigService, NGX_DP_VALUE_ACCESSOR, NGX_DP_VALIDATORS]
},] }
];
/** @nocollapse */
AngularMyDatePickerDirective.ctorParameters = () => [
{ type: LocaleService },
{ type: UtilService },
{ type: ViewContainerRef },
{ type: ComponentFactoryResolver },
{ type: Renderer2 },
{ type: ChangeDetectorRef },
{ type: ElementRef },
{ type: DefaultConfigService }
];
AngularMyDatePickerDirective.propDecorators = {
options: [{ type: Input }],
locale: [{ type: Input }],
defaultMonth: [{ type: Input }],
dateChanged: [{ type: Output }],
inputFieldChanged: [{ type: Output }],
calendarViewChanged: [{ type: Output }],
calendarToggle: [{ type: Output }],
rangeDateSelection: [{ type: Output }],
viewActivated: [{ type: Output }],
onKeyUp: [{ type: HostListener, args: [KEYUP, ["$event"],] }],
onBlur: [{ type: HostListener, args: [BLUR,] }]
};
if (false) {
/** @type {?} */
AngularMyDatePickerDirective.prototype.options;
/** @type {?} */
AngularMyDatePickerDirective.prototype.locale;
/** @type {?} */
AngularMyDatePickerDirective.prototype.defaultMonth;
/** @type {?} */
AngularMyDatePickerDirective.prototype.dateChanged;
/** @type {?} */
AngularMyDatePickerDirective.prototype.inputFieldChanged;
/** @type {?} */
AngularMyDatePickerDirective.prototype.calendarViewChanged;
/** @type {?} */
AngularMyDatePickerDirective.prototype.calendarToggle;
/** @type {?} */
AngularMyDatePickerDirective.prototype.rangeDateSelection;
/** @type {?} */
AngularMyDatePickerDirective.prototype.viewActivated;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.cRef;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.hostText;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.preventClose;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.disabled;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.selectedValue;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.opts;
/** @type {?} */
AngularMyDatePickerDirective.prototype.onChangeCb;
/** @type {?} */
AngularMyDatePickerDirective.prototype.onTouchedCb;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.onClickWrapper;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.onAnimateWrapper;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.localeService;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.utilService;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.vcRef;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.cfr;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.renderer;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.cdr;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.elem;
/**
* @type {?}
* @private
*/
AngularMyDatePickerDirective.prototype.config;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1teWRhdGVwaWNrZXIuaW5wdXQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLW15ZGF0ZXBpY2tlci8iLCJzb3VyY2VzIjpbImxpYi9hbmd1bGFyLW15ZGF0ZXBpY2tlci5pbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQWdCLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQ2hHLHdCQUF3QixFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE0QixZQUFZLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDdEksT0FBTyxFQUF3QyxhQUFhLEVBQUUsaUJBQWlCLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUNsSCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQVczRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDN0UsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzlDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUd4RCxPQUFPLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQ3pHLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVB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