UNPKG

ngx-mat-calendar

Version:

A datepicker with nepali and english calendar support

724 lines 109 kB
import { Component, EventEmitter, Input, Optional, Output, Self, ViewChild, ViewEncapsulation } from '@angular/core'; import { FormControl, NgControl } from '@angular/forms'; import { MatMenuTrigger } from '@angular/material/menu'; import * as moment_ from 'moment'; import { Subject } from 'rxjs'; import { CalendarService } from '../../services/calendar.service'; import { DateFormat, DateType } from '../../model/calendar.model'; import { CalendarErrorStateMatcher } from '../../validators/calendar-error-state-matcher'; import * as language from '../../data/language.data'; import { coerceBooleanProperty } from '@angular/cdk/coercion'; import { MatSnackBar } from '@angular/material/snack-bar'; const moment = moment_; export class DateComponent { constructor(dpService, snackbar, controlDir) { this.dpService = dpService; this.snackbar = snackbar; this.controlDir = controlDir; this.onDateChanged = new EventEmitter(); this.matcher = new CalendarErrorStateMatcher(); this.dateFormat = DateFormat.ddMMyyyy; this.datemask = [/\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]; this.stateChanges = new Subject(); /////////////////////////////////////////// this.changeDateTooltip = 'Toggle Date Type'; this.showCalendarTooltip = 'Show Calendar'; this.clearTooltip = 'Clear date'; this.errorMessage = ''; this.isPickerVisible = false; this.dateObject = []; /////////////////////////////////////////////// // private _dateType: DateType = DateType.AD; // private _dateFormatAD: DateFormat = DateFormat.ddMMyyyy; // private _dateFormatBS: DateFormat = DateFormat.yyyyMMdd; this._withTime = false; this._placeholder = "Date"; this._readonly = false; this._closeOnClick = true; this._isRange = false; this._language = 0; this._required = false; this.lastEmitted = null; this.manualChanged = true; this._param = { dateType: DateType.AD, dateFormatAD: DateFormat.ddMMyyyy, dateFormatBS: DateFormat.yyyyMMdd }; this.propagateChange = (_) => { }; this.onTouched = () => { }; this.onBlur = (event) => { if (event.target.value === "" || event.target.value.toString().includes("_")) { this.setDateValueByString(event.target.value, this.dateFormat, this._param.dateType); } }; this.formControl = new FormControl(); controlDir.valueAccessor = this; this.caption = language.label; } set param(val) { this._param = JSON.parse(val); this.changeDateFormat(this._param.dateType, this._param.dateType === DateType.AD ? this._param.dateFormatAD : this._param.dateFormatBS); this.setValue(false, false); } get param() { return this._param; } // @Input() set dateType(val: DateType) { // this._dateType = val; // console.log(this._dateType, "datet") // this.changeDateFormat(val); // } get dateType(): DateType { // return this._dateType; // } // @Input() set dateFormatAD(val: DateFormat) { // this._dateFormatAD = val; // } get dateFormatAD(): DateFormat { // return this._dateFormatAD; // } // @Input() set dateFormatBS(val: DateFormat) { // this._dateFormatBS = val; // } get dateFormatBS(): DateFormat { // return this._dateFormatBS; // } set required(val) { this._required = coerceBooleanProperty(val); } get required() { return this._required; } pushTimeMask(mask) { mask.push(' '); mask.push(/\d/); mask.push(/\d/); mask.push(':'); mask.push(/\d/); mask.push(/\d/); return mask; } changeDateFormat(dType, val) { if (!val) { if (dType === DateType.AD) { val = this._param.dateFormatAD; } else { val = this._param.dateFormatBS; } } let mask; if (dType === DateType.AD) { if (val === DateFormat.MMddyyyy || val === DateFormat.ddMMyyyy) { mask = [/\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]; } else { mask = [/\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/]; } } else { if (val === DateFormat.MMddyyyy || val === DateFormat.ddMMyyyy) { mask = [/\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]; } else { mask = [/\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/]; } } if (this.withTime) { mask = this.pushTimeMask(mask); } if (this.isRange) { const mask1 = [...mask]; const mask2 = [...mask]; const seperator = [' ', '|', ' ']; this.datemask = [...mask1, ...seperator, ...mask2]; } else { this.datemask = [...mask]; } this.dateFormat = val; } set withTime(val) { this._withTime = coerceBooleanProperty(val); } get withTime() { return this._withTime; } set placeholder(val) { this._placeholder = val; } get placeholder() { return this._placeholder; } // @Input() set showCalendarOnFocus(val: boolean) { // this._showCalendarOnFocus = val; // } get showCalendarOnFocus(): boolean { // return this._showCalendarOnFocus; // } set readonly(val) { this._readonly = coerceBooleanProperty(val); } get readonly() { return this._readonly; } set closeOnClick(val) { this._closeOnClick = coerceBooleanProperty(val); } get closeOnClick() { return this._closeOnClick; } set disabled(val) { this.setDisabledState(coerceBooleanProperty(val)); } get disabled() { return this.formControl.disabled; } set isRange(val) { this._isRange = coerceBooleanProperty(val); this.changeDateFormat(this._param.dateType); } get isRange() { return this._isRange; } set language(val) { this._language = val; } get language() { return this._language; } // private _object: any; // @Input() set object(val: any) { // console.log(val) // this._object = val; // } get object(): any { // return this._object; // } // ngDoCheck() { // if(this.object){ // if(!this.object.equals(this._object)) { // // inputSettings changed // // some logic here to react to the change // this._object = this.object; // } // } // } //start controlValueAccsor registerOnChange(fn) { this.propagateChange = fn; } writeValue(value) { // const val = new Date(value); this.dateObject = []; this.manualChanged = true; this.setDateValueByDate(value); this.formControl.markAsUntouched(); } registerOnTouched(fn) { this.onTouched = fn; } setDisabledState(isDisabled) { if (isDisabled) { this.formControl.disable(); } else { this.formControl.enable(); } } //end controlValueAccsor setDateValueByDate(value) { // let date = value; if (!value) { this.setValue(true, true); return; } let timeString = ""; let h, m; const FORMAT_DATE = moment.defaultFormat; this.changeDateFormat(this._param.dateType); if (this.isRange) { let formatedStartDateAD = ''; let formatedStartDateBS = ''; let formatedEndDateAD = ''; let formatedEndDateBS = ''; if (value && value.start) { const startDate = moment(value.start, FORMAT_DATE); const endDate = moment(value.end, FORMAT_DATE); if (startDate.isValid()) { h = startDate.hour(); m = startDate.minute(); timeString = h > 9 ? `${h}:` : `0${h}:`; timeString = timeString + (m > 9 ? `${m}` : `0${m}`); formatedStartDateAD = this.dpService.GetFormatedDateAD(value.start, this._param.dateFormatAD); formatedStartDateBS = this.dpService.GetDateBS(value.start, this._param.dateFormatBS); if (this.withTime) { formatedStartDateAD = `${formatedStartDateAD} ${timeString}`; formatedStartDateBS = `${formatedStartDateBS} ${timeString}`; } } if (endDate.isValid()) { h = endDate.hour(); m = endDate.minute(); timeString = h > 9 ? `${h}:` : `0${h}:`; timeString = timeString + (m > 9 ? `${m}` : `0${m}`); formatedEndDateAD = this.dpService.GetFormatedDateAD(value.end, this._param.dateFormatAD); formatedEndDateBS = this.dpService.GetDateBS(value.end, this._param.dateFormatBS); if (this.withTime) { formatedEndDateAD = `${formatedStartDateAD} ${timeString}`; formatedEndDateBS = `${formatedStartDateBS} ${timeString}`; } } // if (initial === true) { // if (this.dateType === DateType.AD) { // this.formControl.setValue(`${formatedStartDateAD} | ${formatedEndDateAD}`); // } else { // this.formControl.setValue(`${formatedStartDateBS} | ${formatedEndDateBS}`); // } // } this.setDateObject(0, value.start, formatedStartDateBS, formatedStartDateAD, this._param.dateType); this.setDateObject(1, value.end, formatedEndDateBS, formatedEndDateAD, this._param.dateType); } } else { const date = moment(value, FORMAT_DATE); if (date.isValid()) { h = date.hour(); m = date.minute(); timeString = h > 9 ? `${h}:` : `0${h}:`; timeString = timeString + (m > 9 ? `${m}` : `0${m}`); const dtAD = this.withTime ? `${this.dpService.GetFormatedDateAD(value, this._param.dateFormatAD)} ${timeString}` : `${this.dpService.GetFormatedDateAD(value, this._param.dateFormatAD)}`; const dtBS = this.withTime ? `${this.dpService.GetDateBS(value, this._param.dateFormatBS)} ${timeString}` : `${this.dpService.GetDateBS(value, this._param.dateFormatBS)}`; this.setDateObject(0, value, dtBS, dtAD, this._param.dateType); // if (initial === true) { // if (this.dateType === DateType.AD) { // this.formControl.setValue(dtAD) // } else { // this.formControl.setValue(dtBS) // } // } } } this.setValue(true, true); // this.execPropagateChange(date); } setDateValueByString(dtValue, dtFormat, dtType) { if ((dtValue.toString().includes("_")) || (dtValue.toString() === "")) { this.dateObject = []; this.execPropagateChange(null); return; } const givenArray = dtValue.split(' | '); let loop = 0; givenArray.forEach(element => { const lineArray = element.split(" "); const dateString = lineArray[0]; const splitedDate = dateString.split("-"); let timeString = ""; let yr; let mn; let dy; let hr = 0; let mu = 0; if (dtFormat === DateFormat.MMddyyyy) { yr = +splitedDate[2]; mn = +splitedDate[0]; dy = +splitedDate[1]; } else if (dtFormat === DateFormat.ddMMyyyy) { yr = +splitedDate[2]; mn = +splitedDate[1]; dy = +splitedDate[0]; } else if (dtFormat === DateFormat.yyyyddMM) { yr = +splitedDate[0]; mn = +splitedDate[2]; dy = +splitedDate[1]; } else if (dtFormat === DateFormat.yyyyMMdd) { yr = +splitedDate[0]; mn = +splitedDate[1]; dy = +splitedDate[2]; } if (mn <= 0 || mn > 12) { this.execPropagateChange(null); return; } if (dy <= 0 || dy > 32) { this.execPropagateChange(null); return; } if (lineArray.length > 1) { const splitedTime = lineArray[1].split(":"); hr = +splitedTime[0]; mu = +splitedTime[1]; if (hr > 23 || mu > 59) { this.execPropagateChange(null); if (hr > 23) { this.errorMessage = "Hour is invalid."; } if (mu > 59) { this.errorMessage = "Minute is invalid."; } return; } const strHr = (hr < 10) ? '0' + hr : hr.toString(); const strMn = (mu < 10) ? '0' + mu : mu.toString(); timeString = ` ${strHr}:${strMn}`; } if (dtType === DateType.AD) { const newDate = new Date(yr, mn - 1, dy, hr, mu); const dtAD = `${this.dpService.GetFormatedDateAD(newDate, this._param.dateFormatAD)}${timeString}`; const dtBS = this.dpService.GetDateBS(newDate, this._param.dateFormatBS); this.setDateObject(loop, newDate, dtBS ? `${dtBS}${timeString}` : '', dtAD, dtType); } else { let newDate = this.dpService.GetDateAD(yr, mn, dy); if (newDate === null) { this.execPropagateChange(null); this.errorMessage = this.language === 0 ? 'BS Calendar not match!' : 'नेपाली क्यालेन्डर अनुसार गते मिलेन।'; return; } else { const dtAD = `${this.dpService.GetFormatedDateAD(newDate, this._param.dateFormatAD)}${timeString}`; const dtBS = `${this.dpService.GetDateBS(newDate, this._param.dateFormatBS)}`; newDate = new Date(newDate.getFullYear(), newDate.getMonth(), newDate.getDate(), hr, mu); this.setDateObject(loop, newDate, dtBS ? `${dtBS}${timeString}` : '', dtAD, dtType); } } loop++; }); if (this.dateObject && this.dateObject.length >= 1) { if (this.isRange) { this.execPropagateChange({ start: this.dateObject[0].date, end: this.dateObject[1].date }); } else { this.execPropagateChange(this.dateObject[0].date); } } else { this.execPropagateChange(null); } } setDateObject(index, dt, dtBS, dtAD, dtType) { if (index === 0) { this.dateObject = []; } this.dateObject.push({ date: dt, dateAD: dtAD, dateBS: dtBS, selectedDateType: dtType }); } onManualChange(event) { // if(this.readonly){ // return // } let newValue; if (event.type === 'change' || event.type === 'paste') { if (event.type === 'change') { newValue = event.target.value; } else { newValue = event.clipboardData.getData('Text'); } this.setDateValueByString(newValue, this.dateFormat, this._param.dateType); } else if (event.type === 'keyup') { if (event.target.value.toString().trim() === "") { this.execPropagateChange(null); } else if (!event.target.value.toString().includes("_")) { this.setDateValueByString(event.target.value, this.dateFormat, this._param.dateType); } else { this.execPropagateChange(null); } if ((event.keyCode >= 48 && event.keyCode <= 57) || event.keyCode === 8 || event.keyCode === 46 || event.keyCode === 32) { newValue = event.target.value; if (this.controlDir.control.valid && this.dateObject.length > 0) { if (!this.isRange) { if (newValue !== (this._param.dateType === DateType.AD ? this.dateObject[0].dateAD : this.dateObject[0].dateBS)) { this.setDateValueByString(newValue, this.dateFormat, this._param.dateType); } } else { if (newValue !== (this._param.dateType === DateType.AD ? `${this.dateObject[0].dateAD} | ${this.dateObject[1].dateAD}` : `${this.dateObject[0].dateBS} | ${this.dateObject[1].dateBS}`)) { this.setDateValueByString(newValue, this.dateFormat, this._param.dateType); } } } } } else if (event.type === "keydown") { if (event.code === "Space") { event.stopPropagation(); event.preventDefault(); this.showPicker(); } } } emitChange(withToolTip) { //console.log(withToolTip) if (this.formControl.value !== this.lastEmitted) { let dateToEmit = null; if (this.dateObject.length > 0) { if (this.isRange) { dateToEmit = { start: this.dateObject[0], end: this.dateObject[1] }; } else { dateToEmit = this.dateObject[0]; } } else { dateToEmit = null; } this.setTooltip(); if (this.manualChanged === false && withToolTip) { this.elTooltip ? this.elTooltip.show() : undefined; } else { this.manualChanged = false; } // this.onDateChanged.emit(dateToEmit); this.lastEmitted = this.formControl.value; } } execPropagateChange(obj, isDateTypeChanged = false, withToolTip = true) { if (obj === null) { this.dateObject = []; } if (this.lastChanged !== obj) { this.propagateChange(obj); this.emitChange(withToolTip); } else { if (isDateTypeChanged) { this.emitChange(withToolTip); } } this.lastChanged = obj; if (this.controlDir.errors) { if (this.controlDir.errors["date-maximum"]) { this.errorMessage = "Maximum date is invalid."; } if (this.controlDir.errors["date-minimum"]) { this.errorMessage = "Minimum date is invalid."; } if (this.controlDir.errors["date-between"]) { if (this._param.dateType === DateType.BS) { this.errorMessage = `Date must between ${this.dpService.GetDateBS(this.controlDir.control["minDate"], this._param.dateFormatBS)} and ${this.dpService.GetDateBS(this.controlDir.control["maxDate"], this._param.dateFormatBS)} `; } else { this.errorMessage = `Date must between ${this.controlDir.errors["date-between"]["date-minimum"]} and ${this.controlDir.errors["date-between"]["date-maximum"]}`; } } if (this.controlDir.errors["required"]) { if (this.formControl.value === "") { this.errorMessage = `Date is required`; } else { this.errorMessage = `Date is Invalid`; } } if (this.errorMessage) { this.formControl.setErrors(this.controlDir.errors); } } else { this.formControl.setErrors(null); } } ngOnInit() { } ngOnDestroy() { this.stateChanges.complete(); } clearText() { this.formControl.setValue(''); this.dateObject = []; this.execPropagateChange(null); } setValue(initial, withToolTip) { // if(this.readonly){return} if (this.dateObject.length > 0) { const startDate = this._param.dateType === DateType.AD ? `${this.dateObject[0].dateAD}` : `${this.dateObject[0].dateBS}`; let endDate = ''; this.dateObject[0].selectedDateType = this._param.dateType; if (!this.isRange) { this.formControl.setValue(startDate); } else { if (this.dateObject.length > 1) { endDate = this._param.dateType === DateType.AD ? `${this.dateObject[1].dateAD}` : `${this.dateObject[1].dateBS}`; this.dateObject[1].selectedDateType = this._param.dateType; } this.formControl.setValue(`${startDate} | ${endDate}`); } } else { this.formControl.setValue(""); } if (this.dateObject && this.dateObject.length >= 1) { if (this.isRange) { this.execPropagateChange({ start: this.dateObject[0].date, end: this.dateObject[1].date }, true, withToolTip); } else { this.execPropagateChange(this.dateObject[0].date, true, withToolTip); } } else { if (initial) { this.formControl.setValue(""); } this.execPropagateChange(null); } } changeDateType() { if (this._param.dateType === DateType.AD) { this._param.dateType = DateType.BS; } else { this._param.dateType = DateType.AD; } this.changeDateFormat(this._param.dateType, this._param.dateType === DateType.AD ? this._param.dateFormatAD : this._param.dateFormatBS); this.setValue(false, false); } showPicker() { if (this.isPickerVisible) { return; } this.isPickerVisible = true; const currentDate = this.dateObject.length > 0 ? this.dateObject[0].date : new Date(); if (this.withTime) { this.closeOnClick = false; } this.calPopUp.dateRange = this.isRange; this.calPopUp.showCalendar(this._param.dateType, this._param.dateFormatAD, this._param.dateFormatBS, this.withTime, this.controlDir.control["minDate"], this.controlDir.control["maxDate"], this.closeOnClick, currentDate, this.language); this.menuTrigger.openMenu(); } setTooltip() { let result = ''; if (this.dateObject && this.dateObject.length > 0) { if (this.isRange) { const ad = `AD: ${this.dpService.getFormatedDateLong(this.dateObject[0].dateAD, this._param.dateFormatAD, DateType.AD)} to ${this.dpService.getFormatedDateLong(this.dateObject[1].dateAD, this._param.dateFormatAD, DateType.AD)} \n`; const bs = `BS: ${this.dpService.getFormatedDateLong(this.dateObject[0].dateBS, this._param.dateFormatBS, DateType.BS)} to ${this.dpService.getFormatedDateLong(this.dateObject[1].dateBS, this._param.dateFormatBS, DateType.BS)} \n`; if (this._param.dateType === DateType.AD) { result = `${ad} ${bs}`; } else { result = `${bs} ${ad}`; } } else { const ad = `AD: ${this.dpService.getFormatedDateLong(this.dateObject[0].dateAD, this._param.dateFormatAD, DateType.AD)} \n`; const bs = `BS: ${this.dpService.getFormatedDateLong(this.dateObject[0].dateBS, this._param.dateFormatBS, DateType.BS)} \n`; const longDateString = (new Date(this.dateObject[0].date)).toString().replace("00:00:00", ""); // this.dateObject[0].date.toString().replace("00:00:00",""); if (this._param.dateType === DateType.AD) { result = `${ad} ${bs} \n Date: ${longDateString}`; } else { result = `${bs} ${ad} \n Date: ${longDateString}`; } } } else { result = `Display Type: ${this._param.dateType === DateType.AD ? this.caption.AD[this.language] + ', ' : this.caption.BS[this.language]}`; result = `${result} \n Format: ${this.dateFormat}`; } this.tooltipText = result; } dateChangedFromPopUp(result) { this.menuTrigger.closeMenu(); this.isPickerVisible = false; if (this.disabled || this.readonly) { this.snackbar.open("Date Is Readonly!", "Cancel", { duration: 3000 }); return; } if (result === undefined) { return; } else if (result !== -1) { if (result.length >= 1) { // console.log(this._param.dateType, result[0].selectedDateType) if (this._param.dateType !== result[0].selectedDateType) { this._param.dateType = result[0].selectedDateType; this.changeDateFormat(this._param.dateType); } let index = 0; if (!this.isRange) { if (this._param.dateType === DateType.AD) { this.formControl.setValue(result[0].dateAD); } else { this.formControl.setValue(result[0].dateBS); } } else { if (this._param.dateType === DateType.AD) { this.formControl.setValue(`${result[0].dateAD} | ${result[1].dateAD}`); } else { this.formControl.setValue(`${result[0].dateBS} | ${result[1].dateBS}`); } } result.forEach((el) => { this.setDateObject(index, el.date, el.dateBS, el.dateAD, el.selectedDateType); index++; }); if (this.isRange) { this.execPropagateChange({ start: this.dateObject[0].date, end: this.dateObject[1].date }); } else { this.execPropagateChange(this.dateObject[0].date); } this.dateInput.nativeElement.focus(); } } } onMenuClosed() { this.isPickerVisible = false; this.dateInput.nativeElement.focus(); } } DateComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-date', template: "<mat-form-field class=\"full-width\" style=\"max-width: fit-content;\">\r\n <input matInput #dateInput [textMask]=\"{mask: datemask}\" [formControl]=\"formControl\" [placeholder]=\"placeholder\"\r\n [matTooltip]=\"tooltipText\" matTooltipPosition=\"above\" matTooltipClass=\"date-tooltip\" #tooltip=\"matTooltip\"\r\n (change)=\"onManualChange($event)\" (paste)=\"onManualChange($event)\" (keyup)=\"onManualChange($event)\"\r\n (keydown)=\"onManualChange($event)\" (blur)=\"onBlur($event)\"\r\n (focus)=\"(!isPickerVisible && readonly)? tooltip.hide():tooltip.show()\" [errorStateMatcher]=\"matcher\"\r\n [required]=\"required\" autocomplete=\"off\" [readonly]=\"readonly\">\r\n\r\n <button *ngIf=\"!readonly && formControl.value\" mat-button type=\"button\" [matTooltip]=\"clearTooltip\" tabindex=\"-1\"\r\n matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearText()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <div *ngIf=\"readonly || !formControl.value\" class=\"icon-placement\" matSuffix>\r\n\r\n </div>\r\n\r\n <button mat-button [matTooltip]=\"changeDateTooltip\" type=\"button\" matTooltipPosition=\"above\" matSuffix\r\n mat-icon-button aria-label=\"Calendar\" tabindex=\"-1\" (click)=\"changeDateType()\">\r\n <mat-icon>repeat</mat-icon>\r\n </button>\r\n <button mat-button [matTooltip]=\"showCalendarTooltip\" tabindex=\"-1\" type=\"button\" matSuffix mat-icon-button\r\n aria-label=\"Calendar\" (click)=\"$event.stopPropagation();$event.preventDefault(); showPicker()\">\r\n <mat-icon>date_range</mat-icon>\r\n </button>\r\n\r\n <div [matMenuTriggerFor]=\"calendarPopUp\" #menu style=\"background-color: transparent; width: 0px; \"></div>\r\n\r\n <mat-hint>\r\n {{param.dateType===1? caption.AD[language]+', ': caption.BS[language] +', '}}\r\n Format: {{dateFormat}} {{withTime==true? 'hh:mm':''}}\r\n </mat-hint>\r\n <mat-error>\r\n {{errorMessage}} </mat-error>\r\n</mat-form-field>\r\n\r\n\r\n<mat-menu #calendarPopUp=\"matMenu\" class=\"popup\" x-position=\"before\" yPosition=\"below\" [overlapTrigger]=\"false\"\r\n (close)=\"onMenuClosed()\">\r\n <div (click)=\"$event.stopPropagation()\">\r\n <app-calendar-popup #calPopUp [dateRange]=\"false\" (DateTimeChanged)=\"dateChangedFromPopUp($event)\">\r\n </app-calendar-popup>\r\n </div>\r\n</mat-menu>\r\n\r\n<!-- <div class=\"date-tooltip\" style=\"width: 500px; height: 100px;\"></div> -->", encapsulation: ViewEncapsulation.None, styles: [".date-tooltip{background:#f0eec9;border-bottom:3px solid #a9a6a6;border-left:2px solid #726c6c;color:navy!important;font-size:14px;line-height:20px;max-width:250px!important;min-width:150px!important;text-align:center;white-space:pre-line}.mat-menu-content:not(:empty){padding-bottom:0!important;padding-top:0!important}.full-width{width:100%}.icon-placement{border-right:21px solid transparent;display:inline}"] },] } ]; DateComponent.ctorParameters = () => [ { type: CalendarService }, { type: MatSnackBar }, { type: NgControl, decorators: [{ type: Self }, { type: Optional }] } ]; DateComponent.propDecorators = { calPopUp: [{ type: ViewChild, args: ['calPopUp', { static: false },] }], menuTrigger: [{ type: ViewChild, args: [MatMenuTrigger, { static: false },] }], dateInput: [{ type: ViewChild, args: ["dateInput", { static: true },] }], elTooltip: [{ type: ViewChild, args: ["tooltip",] }], onDateChanged: [{ type: Output }], param: [{ type: Input }], required: [{ type: Input }], withTime: [{ type: Input }], placeholder: [{ type: Input }], readonly: [{ type: Input }], closeOnClick: [{ type: Input }], disabled: [{ type: Input }], isRange: [{ type: Input }], language: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovbGlicmFyeS9NYXRDYWxlbmRhci9wcm9qZWN0cy9uZ3gtbWF0LWNhbGVuZGFyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2RhdGUvZGF0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEosT0FBTyxFQUF3QixXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFpQixNQUFNLDRCQUE0QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sS0FBSyxRQUFRLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQztBQWN2QixNQUFNLE9BQU8sYUFBYTtJQWlpQnRCLFlBQ1ksU0FBMEIsRUFDMUIsUUFBcUIsRUFDRixVQUFxQjtRQUZ4QyxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ0YsZUFBVSxHQUFW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