UNPKG

angular-mydatepicker

Version:
1,045 lines 92.9 kB
/** * @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 {?} */ var NGX_DP_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return AngularMyDatePickerDirective; })), multi: true }; /** @type {?} */ var NGX_DP_VALIDATORS = { provide: NG_VALIDATORS, useExisting: forwardRef((/** * @return {?} */ function () { return AngularMyDatePickerDirective; })), multi: true }; var AngularMyDatePickerDirective = /** @class */ (function () { function AngularMyDatePickerDirective(localeService, utilService, vcRef, cfr, renderer, cdr, elem, config) { var _this = this; 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 {?} */ function () { }); this.onTouchedCb = (/** * @return {?} */ function () { }); this.onClickWrapper = (/** * @param {?} event * @return {?} */ function (event) { return _this.onClick(event); }); this.onAnimateWrapper = (/** * @param {?} reason * @return {?} */ function (reason) { return _this.animationEnd(reason); }); this.opts = this.config.getDefaultConfig(); this.parseOptions(this.opts); } /** * @param {?} event * @return {?} */ AngularMyDatePickerDirective.prototype.onKeyUp = /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var keyCode = this.utilService.getKeyCodeFromEvent(event); if (this.ignoreKeyPress(keyCode)) { return; } if (keyCode === KeyCode.esc) { this.closeSelector(CalToggle.CloseByEsc); } else { var _a = this.opts, dateRange = _a.dateRange, dateFormat = _a.dateFormat, monthLabels = _a.monthLabels, dateRangeDatesDelimiter = _a.dateRangeDatesDelimiter; /** @type {?} */ var value = this.getHostValue(); /** @type {?} */ var dateModel = null; /** @type {?} */ var valid = false; /** @type {?} */ var validateOpts = null; if (!dateRange) { validateOpts = { validateDisabledDates: true, selectedValue: this.utilService.getSelectedValue(this.selectedValue, false) }; /** @type {?} */ var 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 {?} */ var range = this.utilService.isDateValidDateRange(value, this.opts, validateOpts); var begin = range.begin, end = range.end; 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 {?} */ AngularMyDatePickerDirective.prototype.onBlur = /** * @return {?} */ function () { var _a = this.opts, inputFieldValidation = _a.inputFieldValidation, dateRange = _a.dateRange, dateFormat = _a.dateFormat, monthLabels = _a.monthLabels, dateRangeDatesDelimiter = _a.dateRangeDatesDelimiter, closeSelectorOnDateSelect = _a.closeSelectorOnDateSelect; if (inputFieldValidation) { /** @type {?} */ var value = this.getHostValue(); /** @type {?} */ var valid = false; /** @type {?} */ var validateOpts = null; if (!dateRange) { validateOpts = { validateDisabledDates: true, selectedValue: this.utilService.getSelectedValue(this.selectedValue, false) }; /** @type {?} */ var date = this.utilService.isDateValid(value, this.opts, validateOpts); valid = this.utilService.isInitializedDate(date); if (valid && this.hostText !== value) { // Valid date /** @type {?} */ var 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 {?} */ var dateRange_1 = this.utilService.isDateValidDateRange(value, this.opts, validateOpts); var begin = dateRange_1.begin, end = dateRange_1.end; valid = this.utilService.isInitializedDate(begin) && this.utilService.isInitializedDate(end); if (valid && this.hostText !== value) { // Valid date range /** @type {?} */ var dateModel = this.utilService.getDateModel(null, dateRange_1, 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 {?} */ AngularMyDatePickerDirective.prototype.onClick = /** * @private * @param {?} event * @return {?} */ function (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 {?} */ AngularMyDatePickerDirective.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (changes.hasOwnProperty(LOCALE)) { this.setLocaleOptions(); } if (changes.hasOwnProperty(DEFAULT_MONTH)) { /** @type {?} */ var 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 {?} */ AngularMyDatePickerDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { this.closeCalendar(); }; /** * @return {?} */ AngularMyDatePickerDirective.prototype.setLocaleOptions = /** * @return {?} */ function () { var _this = this; /** @type {?} */ var opts = this.localeService.getLocaleOptions(this.locale); Object.keys(opts).forEach((/** * @param {?} k * @return {?} */ function (k) { ((/** @type {?} */ (_this.opts)))[k] = opts[k]; })); }; /** * @param {?} opts * @return {?} */ AngularMyDatePickerDirective.prototype.parseOptions = /** * @param {?} opts * @return {?} */ function (opts) { var _this = this; if (opts) { Object.keys(opts).forEach((/** * @param {?} k * @return {?} */ function (k) { ((/** @type {?} */ (_this.opts)))[k] = opts[k]; })); } var _a = this.opts, minYear = _a.minYear, maxYear = _a.maxYear, openSelectorTopOfInput = _a.openSelectorTopOfInput, inline = _a.inline; 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 {?} */ AngularMyDatePickerDirective.prototype.writeValue = /** * @param {?} value * @return {?} */ function (value) { if (this.disabled) { return; } /** @type {?} */ var validateOpts = null; var _a = this.opts, dateFormat = _a.dateFormat, monthLabels = _a.monthLabels, dateRangeDatesDelimiter = _a.dateRangeDatesDelimiter, inline = _a.inline; 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 var _b = value.singleDate, date = _b.date, jsDate = _b.jsDate; if (!date) { date = this.utilService.jsDateToMyDate(jsDate); } /** @type {?} */ var formatted = this.utilService.formatDate(date, dateFormat, monthLabels); validateOpts = { validateDisabledDates: false, selectedValue: this.utilService.getSelectedValue(this.selectedValue, false) }; /** @type {?} */ var 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 var _c = value.dateRange, beginDate = _c.beginDate, beginJsDate = _c.beginJsDate, endDate = _c.endDate, endJsDate = _c.endJsDate; if (!beginDate || !endDate) { beginDate = this.utilService.jsDateToMyDate(beginJsDate); endDate = this.utilService.jsDateToMyDate(endJsDate); } /** @type {?} */ var formatted = this.utilService.formatDate(beginDate, dateFormat, monthLabels) + dateRangeDatesDelimiter + this.utilService.formatDate(endDate, dateFormat, monthLabels); validateOpts = { validateDisabledDates: false, selectedValue: this.utilService.getSelectedValue(this.selectedValue, true) }; var _d = this.utilService.isDateValidDateRange(formatted, this.opts, validateOpts), begin = _d.begin, end = _d.end; /** @type {?} */ var valid = this.utilService.isInitializedDate(begin) && this.utilService.isInitializedDate(end); if (valid) { this.setHostValue(formatted); this.emitInputFieldChanged(formatted, valid); /** @type {?} */ var 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 {?} */ AngularMyDatePickerDirective.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this.onChangeCb = fn; }; /** * @param {?} fn * @return {?} */ AngularMyDatePickerDirective.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { this.onTouchedCb = fn; }; /** * @param {?} isDisabled * @return {?} */ AngularMyDatePickerDirective.prototype.setDisabledState = /** * @param {?} isDisabled * @return {?} */ function (isDisabled) { this.disabled = isDisabled; this.renderer.setProperty(this.elem.nativeElement, DISABLED, isDisabled); if (isDisabled) { this.closeCalendar(); } }; /** * @param {?} c * @return {?} */ AngularMyDatePickerDirective.prototype.validate = /** * @param {?} c * @return {?} */ function (c) { /** @type {?} */ var value = this.getHostValue(); if (value === null || value === EMPTY_STR) { return null; } /** @type {?} */ var validateOpts = null; if (!this.opts.dateRange) { validateOpts = { validateDisabledDates: true, selectedValue: this.utilService.getSelectedValue(this.selectedValue, false) }; /** @type {?} */ var 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) }; var _a = this.utilService.isDateValidDateRange(value, this.opts, validateOpts), begin = _a.begin, end = _a.end; if (!this.utilService.isInitializedDate(begin) || !this.utilService.isInitializedDate(end)) { return { invalidDateFormat: true }; } } return null; }; /** * @return {?} */ AngularMyDatePickerDirective.prototype.openCalendar = /** * @return {?} */ function () { var _this = this; 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 {?} */ function (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 {?} */ function (cvc) { _this.emitCalendarChanged(cvc); }), (/** * @param {?} rds * @return {?} */ function (rds) { _this.emitRangeDateSelection(rds); }), (/** * @param {?} va * @return {?} */ function (va) { _this.emitViewActivated(va); }), (/** * @return {?} */ function () { _this.closeSelector(CalToggle.CloseByEsc); })); this.emitCalendarToggle(CalToggle.Open); if (!this.opts.inline) { document.addEventListener(CLICK, this.onClickWrapper); } } setTimeout((/** * @return {?} */ function () { _this.preventClose = false; }), PREVENT_CLOSE_TIMEOUT); }; /** * @return {?} */ AngularMyDatePickerDirective.prototype.closeCalendar = /** * @return {?} */ function () { this.closeSelector(CalToggle.CloseByCalBtn); }; /** * @return {?} */ AngularMyDatePickerDirective.prototype.toggleCalendar = /** * @return {?} */ function () { if (this.disabled) { return; } /** @type {?} */ var isOpen = this.cRef === null; if (isOpen) { this.openCalendar(); } else { this.closeSelector(CalToggle.CloseByCalBtn); } return isOpen; }; /** * @return {?} */ AngularMyDatePickerDirective.prototype.clearDate = /** * @return {?} */ function () { if (this.disabled) { return; } var inline = this.opts.inline; 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 {?} */ AngularMyDatePickerDirective.prototype.isDateValid = /** * @return {?} */ function () { /** @type {?} */ var value = this.getHostValue(); if (value === null || value === EMPTY_STR) { return false; } /** @type {?} */ var validateOpts = null; if (!this.opts.dateRange) { validateOpts = { validateDisabledDates: true, selectedValue: this.utilService.getSelectedValue(this.selectedValue, false) }; /** @type {?} */ var 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) }; var _a = this.utilService.isDateValidDateRange(value, this.opts, validateOpts), begin = _a.begin, end = _a.end; if (this.utilService.isInitializedDate(begin) && this.utilService.isInitializedDate(end)) { this.emitInputFieldChanged(value, true); return true; } } this.emitInputFieldChanged(value, false); return false; }; /** * @param {?} headerAction * @return {?} */ AngularMyDatePickerDirective.prototype.headerAction = /** * @param {?} headerAction * @return {?} */ function (headerAction) { if (this.cRef) { this.cRef.instance.headerAction(headerAction); } }; /** * @param {?} value * @return {?} */ AngularMyDatePickerDirective.prototype.setHostValue = /** * @param {?} value * @return {?} */ function (value) { var divHostElement = this.opts.divHostElement; this.hostText = value; /** @type {?} */ var 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 {?} */ AngularMyDatePickerDirective.prototype.ignoreKeyPress = /** * @private * @param {?} keyCode * @return {?} */ function (keyCode) { return keyCode === KeyCode.leftArrow || keyCode === KeyCode.rightArrow || keyCode === KeyCode.upArrow || keyCode === KeyCode.downArrow || keyCode === KeyCode.tab || keyCode === KeyCode.shift; }; /** * @private * @param {?} reason * @return {?} */ AngularMyDatePickerDirective.prototype.animationEnd = /** * @private * @param {?} reason * @return {?} */ function (reason) { if (this.cRef) { this.cRef.instance.selectorEl.nativeElement.removeEventListener(ANIMATION_END, this.onAnimateWrapper); this.removeComponent(); this.emitCalendarToggle(reason); } }; /** * @private * @param {?} reason * @return {?} */ AngularMyDatePickerDirective.prototype.closeSelector = /** * @private * @param {?} reason * @return {?} */ function (reason) { var _a = this.opts, inline = _a.inline, calendarAnimation = _a.calendarAnimation; if (this.cRef && !inline) { if (calendarAnimation.out !== CalAnimation.None) { var instance = this.cRef.instance; 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 {?} */ AngularMyDatePickerDirective.prototype.removeComponent = /** * @private * @return {?} */ function () { if (this.vcRef !== null) { this.vcRef.remove(this.vcRef.indexOf(this.cRef.hostView)); this.cRef = null; } }; /** * @private * @param {?} model * @return {?} */ AngularMyDatePickerDirective.prototype.updateModel = /** * @private * @param {?} model * @return {?} */ function (model) { this.setHostValue(this.utilService.getFormattedDate(model)); this.onChangeCb(model); this.onTouchedCb(); }; /** * @private * @return {?} */ AngularMyDatePickerDirective.prototype.getHostValue = /** * @private * @return {?} */ function () { var _a = this.elem.nativeElement, value = _a.value, innerHTML = _a.innerHTML; return !this.opts.divHostElement.enabled ? value : innerHTML; }; /** * @private * @return {?} */ AngularMyDatePickerDirective.prototype.focusToInput = /** * @private * @return {?} */ function () { var _this = this; var _a = this.opts, focusInputOnDateSelect = _a.focusInputOnDateSelect, divHostElement = _a.divHostElement; if (focusInputOnDateSelect && !divHostElement.enabled) { setTimeout((/** * @return {?} */ function () { _this.elem.nativeElement.focus(); })); } }; /** * @private * @param {?} dateModel * @return {?} */ AngularMyDatePickerDirective.prototype.emitDateChanged = /** * @private * @param {?} dateModel * @return {?} */ function (dateModel) { this.dateChanged.emit(dateModel); this.setSelectedValue(dateModel); }; /** * @private * @param {?} dateModel * @return {?} */ AngularMyDatePickerDirective.prototype.setSelectedValue = /** * @private * @param {?} dateModel * @return {?} */ function (dateModel) { var isRange = dateModel.isRange, dateRange = dateModel.dateRange, singleDate = dateModel.singleDate; this.selectedValue = isRange ? dateRange : singleDate; }; /** * @private * @param {?} value * @param {?} valid * @return {?} */ AngularMyDatePickerDirective.prototype.emitInputFieldChanged = /** * @private * @param {?} value * @param {?} valid * @return {?} */ function (value, valid) { this.inputFieldChanged.emit({ value: value, dateFormat: this.opts.dateFormat, valid: valid }); }; /** * @private * @param {?} cvc * @return {?} */ AngularMyDatePickerDirective.prototype.emitCalendarChanged = /** * @private * @param {?} cvc * @return {?} */ function (cvc) { this.calendarViewChanged.emit(cvc); }; /** * @private * @param {?} rds * @return {?} */ AngularMyDatePickerDirective.prototype.emitRangeDateSelection = /** * @private * @param {?} rds * @return {?} */ function (rds) { this.rangeDateSelection.emit(rds); }; /** * @private * @param {?} va * @return {?} */ AngularMyDatePickerDirective.prototype.emitViewActivated = /** * @private * @param {?} va * @return {?} */ function (va) { this.viewActivated.emit(va); }; /** * @private * @param {?} reason * @return {?} */ AngularMyDatePickerDirective.prototype.emitCalendarToggle = /** * @private * @param {?} reason * @return {?} */ function (reason) { this.calendarToggle.emit(reason); }; /** * @private * @param {?} elem * @return {?} */ AngularMyDatePickerDirective.prototype.appendSelector = /** * @private * @param {?} elem * @return {?} */ function (elem) { if (this.opts.appendSelectorToBody) { document.querySelector(BODY).appendChild(elem); } }; /** * @private * @param {?} elem * @return {?} */ AngularMyDatePickerDirective.prototype.getSelectorPosition = /** * @private * @param {?} elem * @return {?} */ function (elem) { /** @type {?} */ var top = 0; /** @type {?} */ var left = 0; var _a = this.opts, appendSelectorToBody = _a.appendSelectorToBody, openSelectorTopOfInput = _a.openSelectorTopOfInput, selectorHeight = _a.selectorHeight, selectorWidth = _a.selectorWidth, showSelectorArrow = _a.showSelectorArrow, alignSelectorRight = _a.alignSelectorRight; if (appendSelectorToBody) { /** @type {?} */ var b = document.body.getBoundingClientRect(); /** @type {?} */ var 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 {?} */ AngularMyDatePickerDirective.prototype.getSelectorDimension = /** * @private * @param {?} value * @return {?} */ function (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 = function () { return [ { 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,] }] }; return AngularMyDatePickerDirective; }()); export { AngularMyDatePickerDirective }; 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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