ngx-animating-datepicker
Version:
An Animating Datepicker for Angular 2+, for some smooth date picking :).
940 lines • 77.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, EventEmitter, HostBinding, Input, Output, ViewChild } from '@angular/core';
import { DatepickerService } from '../../services/datepicker.service';
import { UtilitiesService } from '../../services/utilities.service';
import { DefaultOptions } from './datepicker.options';
var DatepickerComponent = /** @class */ (function () {
function DatepickerComponent(utils, element) {
this.utils = utils;
this.element = element;
/* ==============================================
* Internal Properties
* ============================================== */
this.date = new Date();
this.year = null;
this.month = null;
this.today = this.date;
this.months = null;
this.weekdays = ['M', 'T', 'W', 'T', 'F', 'S', 'S'];
this.selectedRange = 'startDate';
this.startDate = null;
this.endDate = null;
this.initialised = false;
this.weekStartArray = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
/* ==============================================
* Initial Options
* ============================================== */
this._options = DefaultOptions;
/* ==============================================
* External Properties
* ============================================== */
/**
* Set the the language manualy. A string with a BCP 47 language tag
* @example nl-NL
*/
this._language = navigator.language;
/**
* Minimal Date: If set the dates before it will be disabled
*/
this._minDate = null;
/**
* Maximal Date: If set the dates after it will be disabled
*/
this._maxDate = null;
/**
* Selected Dates: handles the selected dates array. Can be set both internally and externally
*/
this._selectedDates = [];
this.selectedDatesChange = new EventEmitter();
this.theme = '';
this.isOpen = true;
this.asDirective = false;
this.animate = false;
this.topPosition = null;
this.leftPosition = null;
this.bottomPosition = null;
this.rightPosition = null;
}
Object.defineProperty(DatepickerComponent.prototype, "options", {
get: /**
* @return {?}
*/
function () {
return this._options;
},
set: /**
* @param {?} options
* @return {?}
*/
function (options) {
if (options === undefined || !options) {
return;
}
this._options = tslib_1.__assign({}, this._options, options);
if (options.currentDate !== undefined) {
this.date = this.options.currentDate;
}
if (this.initialised) {
this.goToDate();
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(DatepickerComponent.prototype, "language", {
get: /**
* @return {?}
*/
function () {
return this._language;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (!value || value === undefined || !DatepickerService.isValidIsoCode(value)) {
return;
}
this._language = value;
this.renderWeekdays();
},
enumerable: true,
configurable: true
});
Object.defineProperty(DatepickerComponent.prototype, "minDate", {
get: /**
* @return {?}
*/
function () {
return this._minDate;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value === undefined || value === this._minDate) {
return;
}
this._minDate = new Date(value);
this.goToDate();
},
enumerable: true,
configurable: true
});
Object.defineProperty(DatepickerComponent.prototype, "maxDate", {
get: /**
* @return {?}
*/
function () {
return this._maxDate;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value === undefined || value === this._minDate) {
return;
}
this._maxDate = new Date(value);
this.goToDate();
},
enumerable: true,
configurable: true
});
Object.defineProperty(DatepickerComponent.prototype, "selectedDates", {
get: /**
* @return {?}
*/
function () {
return this._selectedDates;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
/** @type {?} */
var _value = Array.isArray(value) ? value : [value];
if (!DatepickerService.isValidDate(_value)) {
return;
}
this._selectedDates = _value;
if (this.options.range) {
this.resetRange();
}
this.goToDate();
this.selectedDatesChange.emit(this._selectedDates);
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
DatepickerComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.initialised = true;
if (!this.month && !this.year) {
this.goToDate(this.options.currentDate);
}
};
/**
* Creates a day array
*
* @param year
* @param month
* @param isRestDays
*/
/**
* Creates a day array
*
* @param {?} year
* @param {?} month
* @param {?=} isRestDays
* @return {?}
*/
DatepickerComponent.prototype.createDayArray = /**
* Creates a day array
*
* @param {?} year
* @param {?} month
* @param {?=} isRestDays
* @return {?}
*/
function (year, month, isRestDays) {
/** @type {?} */
var days = [];
/** @type {?} */
var daysInMonth = DatepickerService.getDaysInMonth(year, month);
for (var index = 0; index < daysInMonth; index++) {
/** @type {?} */
var dayNumber = index + 1;
/** @type {?} */
var date = new Date(year, month, dayNumber);
/** @type {?} */
var day = {
date: date,
dayNumber: dayNumber,
isFirst: dayNumber === 1,
isLast: dayNumber === daysInMonth,
isToday: this.isToday(date),
isSelected: this.isSelected(date),
isRest: isRestDays,
isHidden: isRestDays && this.options.hideRestDays,
isDisabled: ((this.minDate || this.maxDate) && this.isDisabled(date)) ||
(isRestDays && this.options.disableRestDays),
isInRange: this.isInRange(date) ||
((this.isStartDate(date) || this.isEndDate(date)) && this.startDate && this.endDate),
isStartDate: this.isStartDate(date),
isEndDate: this.isEndDate(date)
};
days.push(day);
}
return days;
};
/**
* Get the days from the next month
*
* @param year
* @param month
*/
/**
* Get the days from the next month
*
* @param {?} year
* @param {?} month
* @return {?}
*/
DatepickerComponent.prototype.getNextRestDays = /**
* Get the days from the next month
*
* @param {?} year
* @param {?} month
* @return {?}
*/
function (year, month) {
/** @type {?} */
var monthLength = DatepickerService.getDaysInMonth(year, month);
/** @type {?} */
var weekStartIndex = this.weekStartArray.indexOf(this.options.weekStart);
// Get the end of the month number minus the week start index
/** @type {?} */
var endOfTheMonth = new Date(year, month, monthLength).getDay() - weekStartIndex;
// Flip minus to plus when the end month number is minus.
// this occurs when there are less rest days then the week start index
/** @type {?} */
var _endOfTheMonth = endOfTheMonth < 0 ? 7 - Math.abs(endOfTheMonth) : endOfTheMonth;
/** @type {?} */
var nextDays = this.createDayArray(DatepickerService.getYearOfNextMonth(year, month), DatepickerService.getNextMonth(month), true).slice(0, 7 - _endOfTheMonth);
return nextDays.length > 6 ? [] : nextDays;
};
/**
* Get the days of the previous month
*
* @param year
* @param month
*/
/**
* Get the days of the previous month
*
* @param {?} year
* @param {?} month
* @return {?}
*/
DatepickerComponent.prototype.getPreviousRestDays = /**
* Get the days of the previous month
*
* @param {?} year
* @param {?} month
* @return {?}
*/
function (year, month) {
/** @type {?} */
var startOfTheMonth = new Date(year, month, 0).getDay();
/** @type {?} */
var previousDays = this.createDayArray(DatepickerService.getYearOfPreviousMonth(year, month), DatepickerService.getPreviousMonth(month), true);
/** @type {?} */
var weekStartIndex = this.weekStartArray.indexOf(this.options.weekStart);
/** @type {?} */
var _weekStartIndex = weekStartIndex === 0 ? 0 : (7 - weekStartIndex);
/** @type {?} */
var sliceIndex = previousDays.length - startOfTheMonth - _weekStartIndex;
sliceIndex = previousDays.length - sliceIndex >= 7 ? sliceIndex + 7 : sliceIndex;
return previousDays.slice(sliceIndex, previousDays.length);
};
/**
* Merge all the day arrays together
*
* @param year
* @param month
*/
/**
* Merge all the day arrays together
*
* @param {?} year
* @param {?} month
* @return {?}
*/
DatepickerComponent.prototype.getMergedDayArrays = /**
* Merge all the day arrays together
*
* @param {?} year
* @param {?} month
* @return {?}
*/
function (year, month) {
return tslib_1.__spread(this.getPreviousRestDays(year, month), this.createDayArray(year, month), this.getNextRestDays(year, month));
};
/**
* Create the calendar array from the week arrays
*
* @param year
* @param month
*/
/**
* Create the calendar array from the week arrays
*
* @param {?} year
* @param {?} month
* @return {?}
*/
DatepickerComponent.prototype.createCalendarArray = /**
* Create the calendar array from the week arrays
*
* @param {?} year
* @param {?} month
* @return {?}
*/
function (year, month) {
/** @type {?} */
var dayArray = this.getMergedDayArrays(year, month);
/** @type {?} */
var weeks = DatepickerService.createWeekArray(dayArray);
return [{ weeks: weeks }];
};
/**
* Update value is being triggered
*
* @param date
*/
/**
* Update value is being triggered
*
* @param {?} date
* @return {?}
*/
DatepickerComponent.prototype.updateValue = /**
* Update value is being triggered
*
* @param {?} date
* @return {?}
*/
function (date) {
if (this.options.range) {
this.selectRange(date);
}
else if (!this.isSelected(date)) {
if (this.options.selectMultiple) {
this.selectDate(date);
}
else {
this.toggleDate(date);
}
if (this.options.closeOnSelect) {
this.close(true);
}
}
else {
this.deselectDate(date);
if (this.options.closeOnSelect) {
this.close(true);
}
}
this.months = this.createCalendarArray(this.year, this.month);
};
/**
* Select range method - contains the logic to select the start- and endrange
*
* @param date
*/
/**
* Select range method - contains the logic to select the start- and endrange
*
* @param {?} date
* @return {?}
*/
DatepickerComponent.prototype.selectRange = /**
* Select range method - contains the logic to select the start- and endrange
*
* @param {?} date
* @return {?}
*/
function (date) {
if (this.isSelected(date)) {
this.deselectDate(date);
}
else if (DatepickerService.isEarlier(date, this.startDate)) {
if (this.startDate) {
this.toggleDate(date, this.startDate, true);
}
else {
this.selectDate(date);
}
this.startDate = date;
this.selectEndDate();
}
else if (this.endDate && DatepickerService.isLater(date, this.endDate)) {
this.toggleDate(date, this.endDate);
this.endDate = date;
this.selectStartDate();
}
else if (this.selectedRange === 'startDate') {
if (this.startDate) {
this.toggleDate(date, this.startDate, true);
}
else {
this.selectDate(date);
}
this.startDate = date;
this.selectEndDate();
}
else if (this.selectedRange === 'endDate') {
if (this.endDate) {
this.toggleDate(date, this.endDate);
}
else {
this.selectDate(date);
}
this.endDate = date;
this.selectStartDate();
if (this.options.closeOnSelect) {
this.close(true);
}
}
};
/**
* Reset the range if the selected dates change externally
*/
/**
* Reset the range if the selected dates change externally
* @return {?}
*/
DatepickerComponent.prototype.resetRange = /**
* Reset the range if the selected dates change externally
* @return {?}
*/
function () {
if (this._selectedDates.length === 1) {
this.startDate = this._selectedDates[0];
this.endDate = null;
}
else if (this._selectedDates.length === 0) {
this.startDate = null;
this.endDate = null;
}
};
/**
* Toggle a date. One in, on out.
*
* @param date - Date to be toggled on
* @param toggleDate - Optional set specific date to toggle off
* @param unshift - Optional set to unshift in the selectedDates array. is passed to selectDate method
*/
/**
* Toggle a date. One in, on out.
*
* @param {?} date - Date to be toggled on
* @param {?=} toggleDate - Optional set specific date to toggle off
* @param {?=} unshift - Optional set to unshift in the selectedDates array. is passed to selectDate method
* @return {?}
*/
DatepickerComponent.prototype.toggleDate = /**
* Toggle a date. One in, on out.
*
* @param {?} date - Date to be toggled on
* @param {?=} toggleDate - Optional set specific date to toggle off
* @param {?=} unshift - Optional set to unshift in the selectedDates array. is passed to selectDate method
* @return {?}
*/
function (date, toggleDate, unshift) {
if (!toggleDate) {
this.selectedDates = [date];
}
else if (unshift) {
this._selectedDates.unshift(date);
this.selectedDates = this._selectedDates.filter(function (selectedDate) {
return selectedDate.toDateString() !== toggleDate.toDateString();
});
}
else {
this._selectedDates.push(date);
this.selectedDates = this._selectedDates.filter(function (selectedDate) {
return selectedDate.toDateString() !== toggleDate.toDateString();
});
}
};
/**
* Select a date
*
* @param date
* @param unshift - Optional set to unshift instead of push the date in the selectedDates array
*/
/**
* Select a date
*
* @param {?} date
* @param {?=} unshift - Optional set to unshift instead of push the date in the selectedDates array
* @return {?}
*/
DatepickerComponent.prototype.selectDate = /**
* Select a date
*
* @param {?} date
* @param {?=} unshift - Optional set to unshift instead of push the date in the selectedDates array
* @return {?}
*/
function (date, unshift) {
/** @type {?} */
var selectedDates = tslib_1.__spread(this.selectedDates);
if (unshift) {
selectedDates.unshift(date);
}
else {
selectedDates.push(date);
}
this.selectedDates = selectedDates;
};
/**
* Deselect a date
*
* @param date
*/
/**
* Deselect a date
*
* @param {?} date
* @return {?}
*/
DatepickerComponent.prototype.deselectDate = /**
* Deselect a date
*
* @param {?} date
* @return {?}
*/
function (date) {
this.selectedDates = this._selectedDates.filter(function (selectedDate) {
return selectedDate.toDateString() !== date.toDateString();
});
};
/**
* Go to the next month
*/
/**
* Go to the next month
* @return {?}
*/
DatepickerComponent.prototype.goToNextMonth = /**
* Go to the next month
* @return {?}
*/
function () {
this.year = DatepickerService.getYearOfNextMonth(this.year, this.month);
this.month = DatepickerService.getNextMonth(this.month);
this.totalYearMonth = [{ month: this.month, year: this.year }];
this.months = this.createCalendarArray(this.year, this.month);
};
/**
* Go to the previous month
*/
/**
* Go to the previous month
* @return {?}
*/
DatepickerComponent.prototype.goToPreviousMonth = /**
* Go to the previous month
* @return {?}
*/
function () {
this.year = DatepickerService.getYearOfPreviousMonth(this.year, this.month);
this.month = DatepickerService.getPreviousMonth(this.month);
this.totalYearMonth = [{ month: this.month, year: this.year }];
this.months = this.createCalendarArray(this.year, this.month);
};
/**
* Go to a specific month. Is also used to rerender the datepicker
*
* @param date - default is the current date.
*/
/**
* Go to a specific month. Is also used to rerender the datepicker
*
* @param {?=} date - default is the current date.
* @return {?}
*/
DatepickerComponent.prototype.goToDate = /**
* Go to a specific month. Is also used to rerender the datepicker
*
* @param {?=} date - default is the current date.
* @return {?}
*/
function (date) {
if (date === void 0) { date = this.date; }
this.month = date.getMonth();
this.year = date.getFullYear();
this.totalYearMonth = [{ month: this.month, year: this.year }];
this.months = this.createCalendarArray(this.year, this.month);
};
/**
* Render weekdays when options or language changes
*/
/**
* Render weekdays when options or language changes
* @return {?}
*/
DatepickerComponent.prototype.renderWeekdays = /**
* Render weekdays when options or language changes
* @return {?}
*/
function () {
this.weekdays = DatepickerService.getWeekDays(this._language, this.options.weekdayFormat, this.options.weekStart);
};
/**
* Set the open state to true
*/
/**
* Set the open state to true
* @return {?}
*/
DatepickerComponent.prototype.open = /**
* Set the open state to true
* @return {?}
*/
function () {
if (this.isOpen) {
return;
}
this.isOpen = true;
};
/**
* Close the datepicker
*
* @param useTimeout - optional timeout
*/
/**
* Close the datepicker
*
* @param {?=} useTimeout - optional timeout
* @return {?}
*/
DatepickerComponent.prototype.close = /**
* Close the datepicker
*
* @param {?=} useTimeout - optional timeout
* @return {?}
*/
function (useTimeout) {
var _this = this;
if (!this.isOpen) {
return;
}
/** @type {?} */
var timeout = useTimeout ? this.options.timeoutBeforeClosing : 0;
setTimeout(function () {
_this.isOpen = false;
}, timeout);
};
/**
* Select the start date - used for range functionality
*/
/**
* Select the start date - used for range functionality
* @return {?}
*/
DatepickerComponent.prototype.selectStartDate = /**
* Select the start date - used for range functionality
* @return {?}
*/
function () {
this.selectedRange = 'startDate';
};
/**
* Select the end date - used for range functionality
*/
/**
* Select the end date - used for range functionality
* @return {?}
*/
DatepickerComponent.prototype.selectEndDate = /**
* Select the end date - used for range functionality
* @return {?}
*/
function () {
this.selectedRange = 'endDate';
};
// TODO: maybe output the startDate and Endate or just of internal use
/**
* Check if date is the start date
*/
// TODO: maybe output the startDate and Endate or just of internal use
/**
* Check if date is the start date
* @param {?} date
* @return {?}
*/
DatepickerComponent.prototype.isStartDate =
// TODO: maybe output the startDate and Endate or just of internal use
/**
* Check if date is the start date
* @param {?} date
* @return {?}
*/
function (date) {
return this.startDate && date.toDateString() === this.startDate.toDateString();
};
/**
* Check if date is the end date
*/
/**
* Check if date is the end date
* @param {?} date
* @return {?}
*/
DatepickerComponent.prototype.isEndDate = /**
* Check if date is the end date
* @param {?} date
* @return {?}
*/
function (date) {
return this.endDate && date.toDateString() === this.endDate.toDateString();
};
/**
* Check if date is today
*/
/**
* Check if date is today
* @param {?} date
* @return {?}
*/
DatepickerComponent.prototype.isToday = /**
* Check if date is today
* @param {?} date
* @return {?}
*/
function (date) {
return date.toDateString() === this.today.toDateString();
};
/**
* Check if date is selected
*/
/**
* Check if date is selected
* @param {?} dateToCheck
* @return {?}
*/
DatepickerComponent.prototype.isSelected = /**
* Check if date is selected
* @param {?} dateToCheck
* @return {?}
*/
function (dateToCheck) {
return this._selectedDates.map(function (date) { return date.toDateString(); }).indexOf(dateToCheck.toDateString()) !== -1;
};
/**
* Check if date is disabled
*/
/**
* Check if date is disabled
* @param {?} date
* @return {?}
*/
DatepickerComponent.prototype.isDisabled = /**
* Check if date is disabled
* @param {?} date
* @return {?}
*/
function (date) {
if (!this.minDate) {
return !(date < this.maxDate);
}
if (!this.maxDate) {
return !(date > this.minDate);
}
return !(date < this.maxDate && date > this.minDate);
};
/**
* Check if date is in range
*/
/**
* Check if date is in range
* @param {?} date
* @return {?}
*/
DatepickerComponent.prototype.isInRange = /**
* Check if date is in range
* @param {?} date
* @return {?}
*/
function (date) {
return this.startDate && this.endDate && this.startDate < date && date < this.endDate;
};
DatepickerComponent.decorators = [
{ type: Component, args: [{
selector: 'aa-datepicker',
template: "<div class=\"datepicker__wrapper\">\n\t<div>\n\t\t<aa-navigation\n\t\t\t\t[hideNavigation]=\"options.hideNavigation\"\n (previousClick)=\"goToPreviousMonth()\"\n\t\t\t\t(nextClick)=\"goToNextMonth()\"\n\t\t\t\t[language]=\"language\"\n\t\t\t\t[totalYearMonth]=\"totalYearMonth\"></aa-navigation>\n\t\t<div class=\"datepicker__weekdays-wrapper\">\n\t\t\t<div class=\"datepicker__weekdays-container\">\n\t\t\t\t<table class=\"datepicker__weekdays\">\n\t\t\t\t\t<thead>\n\t\t\t\t\t<td class=\"datepicker__weekday\" *ngFor=\"let weekday of weekdays; index as i\">{{weekday}}</td>\n\t\t\t\t\t</thead>\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"datepicker__calendar-wrapper\">\n\t\t<div *ngFor=\"let month of months;\" class=\"datepicker__calendar-container\">\n\t\t\t<table class=\"datepicker__calendar\">\n\t\t\t\t<tbody>\n\t\t\t\t<tr *ngFor=\"let week of month.weeks; index as i\">\n\t\t\t\t\t<td class=\"datepicker__day\" *ngFor=\"let day of week.days; index as i\" [ngClass]=\"{\n\t\t\t'is-first': day.isFirst,\n\t\t\t'is-last': day.isLast,\n\t\t\t'is-hidden': day.isHidden,\n\t\t\t'is-disabled': day.isDisabled,\n\t\t\t'is-today': day.isToday,\n\t\t\t'is-selected': day.isSelected,\n\t\t\t'is-in-range': day.isInRange,\n\t\t\t'is-start-date': day.isStartDate,\n\t\t\t'is-end-date': day.isEndDate,\n\t\t\t'is-rest': day.isRest\n\t\t\t}\">\n\t\t\t\t\t\t<button class=\"datepicker__button\" [disabled]=\"day.isDisabled || day.isHidden\"\n\t\t\t\t\t\t\t\t(click)=\"updateValue(day.date)\">{{day.dayNumber}}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t</div>\n\t</div>\n\t<ng-content></ng-content>\n</div>",
styles: [":host{font-family:Arial,Helvetica,sans-serif;border:1px solid #d9d9d8;width:300px;position:relative;display:inline-block;z-index:2;border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,.15);overflow:hidden;background-color:#fff;box-sizing:border-box;visibility:hidden}:host *{box-sizing:border-box}:host .datepicker__calendar-container{padding:0 10px 10px}:host .datepicker__footer{position:relative;z-index:1}:host table{width:100%;table-layout:fixed;border-spacing:0;border-collapse:collapse}:host td{padding:0}:host .datepicker__weekdays-wrapper::after,:host .datepicker__weekdays-wrapper::before{content:' ';display:table}:host .datepicker__weekdays-wrapper::after{clear:both}:host .datepicker__weekdays-container{padding:10px 10px 0;float:left}:host .datepicker__weekdays{table-layout:fixed;width:100%}:host .datepicker__weekday{color:grey;font-size:12px;height:20px;text-align:center}:host .datepicker__day{position:relative;text-align:center;height:40px;width:auto;border:1px solid #d9d9d8}:host .datepicker__day.is-rest{border:none}:host .datepicker__button{padding:0;background-color:transparent;border:none;outline:0;font-style:inherit;cursor:pointer;color:#8e8d8a;width:100%;height:100%}:host .datepicker__button:hover{border:1px solid transparent;background-color:#f2f2f2;color:#8e8d8a}:host .is-hidden{opacity:0;display:table-cell}:host .is-rest{border:none}:host .is-rest .datepicker__button{color:#c0c0be}:host .is-today .datepicker__button{background-color:#eae7dc}:host .is-in-range .datepicker__button{background-color:#e98074;color:#fff}:host .is-in-range .datepicker__button:hover{background-color:#e66c5e}:host .is-selected .datepicker__button{background-color:#e85a4f;color:#fff;font-weight:700}:host .is-selected .datepicker__button:hover{background-color:#e23022}:host .is-start-date .datepicker__button{background-color:#e85a4f;color:#fff}:host .is-end-date .datepicker__button{background-color:#e85a4f;color:#fff}:host .is-disabled .datepicker__button{color:#d9d9d8;cursor:default}:host .is-disabled .datepicker__button:hover{background-color:transparent}:host.is-directive{visibility:hidden;position:absolute}:host.is-open{visibility:visible}:host.is-animate{transition:height .2s ease-in;width:300px}:host.is-animate .datepicker__main{transition:height .2s ease-in}:host.is-animate .datepicker__calendar-wrapper{position:absolute;width:200%;left:0}:host.is-animate .datepicker__calendar{float:left;width:100%}:host.is-animate .datepicker__calendar-container{float:left}"]
},] },
];
DatepickerComponent.ctorParameters = function () { return [
{ type: UtilitiesService },
{ type: ElementRef }
]; };
DatepickerComponent.propDecorators = {
options: [{ type: Input, args: ['options',] }],
language: [{ type: Input }],
minDate: [{ type: Input }],
maxDate: [{ type: Input }],
selectedDatesChange: [{ type: Output }],
selectedDates: [{ type: Input }],
calendarContainer: [{ type: ViewChild, args: ['calendarContainer',] }],
calendarTopContainer: [{ type: ViewChild, args: ['calendarTopContainer',] }],
theme: [{ type: HostBinding, args: ['class',] }, { type: Input }],
isOpen: [{ type: HostBinding, args: ['class.is-open',] }, { type: Input }],
asDirective: [{ type: HostBinding, args: ['class.is-directive',] }],
animate: [{ type: HostBinding, args: ['class.is-animate',] }],
topPosition: [{ type: HostBinding, args: ['style.top.px',] }],
leftPosition: [{ type: HostBinding, args: ['style.left.px',] }],
bottomPosition: [{ type: HostBinding, args: ['style.bottom.px',] }],
rightPosition: [{ type: HostBinding, args: ['style.right.px',] }]
};
return DatepickerComponent;
}());
export { DatepickerComponent };
if (false) {
/** @type {?} */
DatepickerComponent.prototype.date;
/** @type {?} */
DatepickerComponent.prototype.year;
/** @type {?} */
DatepickerComponent.prototype.month;
/** @type {?} */
DatepickerComponent.prototype.today;
/** @type {?} */
DatepickerComponent.prototype.months;
/** @type {?} */
DatepickerComponent.prototype.weekdays;
/** @type {?} */
DatepickerComponent.prototype.totalYearMonth;
/** @type {?} */
DatepickerComponent.prototype.selectedRange;
/** @type {?} */
DatepickerComponent.prototype.startDate;
/** @type {?} */
DatepickerComponent.prototype.endDate;
/** @type {?} */
DatepickerComponent.prototype.initialised;
/**
* @type {?}
* @private
*/
DatepickerComponent.prototype.weekStartArray;
/** @type {?} */
DatepickerComponent.prototype._options;
/**
* Set the the language manualy. A string with a BCP 47 language tag
* \@example nl-NL
* @type {?}
*/
DatepickerComponent.prototype._language;
/**
* Minimal Date: If set the dates before it will be disabled
* @type {?}
*/
DatepickerComponent.prototype._minDate;
/**
* Maximal Date: If set the dates after it will be disabled
* @type {?}
*/
DatepickerComponent.prototype._maxDate;
/**
* Selected Dates: handles the selected dates array. Can be set both internally and externally
* @type {?}
* @private
*/
DatepickerComponent.prototype._selectedDates;
/** @type {?} */
DatepickerComponent.prototype.selectedDatesChange;
/** @type {?} */
DatepickerComponent.prototype.calendarContainer;
/** @type {?} */
DatepickerComponent.prototype.calendarTopContainer;
/** @type {?} */
DatepickerComponent.prototype.theme;
/** @type {?} */
DatepickerComponent.prototype.isOpen;
/** @type {?} */
DatepickerComponent.prototype.asDirective;
/** @type {?} */
DatepickerComponent.prototype.animate;
/** @type {?} */
DatepickerComponent.prototype.topPosition;
/** @type {?} */
DatepickerComponent.prototype.leftPosition;
/** @type {?} */
DatepickerComponent.prototype.bottomPosition;
/** @type {?} */
DatepickerComponent.prototype.rightPosition;
/** @type {?} */
DatepickerComponent.prototype.utils;
/** @type {?} */
DatepickerComponent.prototype.element;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYW5pbWF0aW5nLWRhdGVwaWNrZXIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9kYXRlcGlja2VyL2RhdGVwaWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQ7SUFrTUMsNkJBQW1CLEtBQXVCLEVBQVMsT0FBbUI7UUFBbkQsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFBUyxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBL0l0RTs7NERBRW9EO1FBQzdDLFNBQUksR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3hCLFNBQUksR0FBVyxJQUFJLENBQUM7UUFDcEIsVUFBSyxHQUFXLElBQUksQ0FBQztRQUNyQixVQUFLLEdBQVMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN4QixXQUFNLEdBQVksSUFBSSxDQUFDO1FBQ3ZCLGFBQVEsR0FBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXpELGtCQUFhLEdBQUcsV0FBVyxDQUFDO1FBQzVCLGNBQVMsR0FBUyxJQUFJLENBQUM7UUFDdkIsWUFBTyxHQUFTLElBQUksQ0FBQztRQUNyQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNuQixtQkFBYyxHQUFHLENBQUMsUUFBUSxF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