ng-devui
Version:
DevUI components based on Angular
462 lines • 88.8 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, forwardRef, HostBinding, Input, Output, TemplateRef, ViewChild, } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { EN_US, I18nFormat, I18nService } from 'ng-devui/i18n';
import { DefaultDateConverter, DevConfigService, WithConfig } from 'ng-devui/utils';
import { fromEvent, Subject } from 'rxjs';
import { debounceTime, map, takeUntil } from 'rxjs/operators';
import { DatepickerProService } from './datepicker-pro.service';
import * as i0 from "@angular/core";
import * as i1 from "ng-devui/i18n";
import * as i2 from "./datepicker-pro.service";
import * as i3 from "ng-devui/utils";
import * as i4 from "@angular/common";
import * as i5 from "@angular/forms";
import * as i6 from "ng-devui/dropdown";
import * as i7 from "./datepicker-panel.component";
export class RangeDatepickerProComponent {
set calenderRange(value) {
this.pickerSrv.calendarRange = value || [1970, 2099];
}
set minDate(value) {
if (!value) {
this.pickerSrv.resetMin();
return;
}
this.pickerSrv.minDate = value;
}
set maxDate(value) {
if (!value) {
this.pickerSrv.resetMax();
return;
}
this.pickerSrv.maxDate = value;
}
set markedRangeDateList(value) {
this.pickerSrv.markedRangeDateList = value;
}
set markedDateList(value) {
this.pickerSrv.markedDateList = value;
}
get hasGlowStyle() {
return this.showGlowStyle;
}
set markDateInfoTemplate(tmp) {
this.pickerSrv.markDateInfoTemplate = tmp;
}
get dateValue() {
return this._dateValue;
}
set dateValue(value) {
this._dateValue = value;
this.getStrWidth();
}
set currentActiveInput(value) {
this.pickerSrv.currentActiveInput = value;
}
get currentActiveInput() {
return this.pickerSrv.currentActiveInput;
}
get dateConfig() {
return {
dateConverter: this.datepickerConvert,
min: this.pickerSrv.minDate || new Date(this.pickerSrv.calendarRange[0] + '/01/01'),
max: this.pickerSrv.maxDate || new Date(this.pickerSrv.calendarRange[1] + '/12/31'),
format: {
date: this.format || this.i18nFormat.short,
time: this.format || this.i18nFormat.long,
month: this.format || (this.i18nLocale === EN_US ? 'MMM dd' : this.i18nFormat.ultraShort),
year: 'y',
},
};
}
get curFormat() {
if (this.mode === 'year') {
return this.dateConfig.format.year;
}
else if (this.mode === 'month') {
return this.dateConfig.format.month;
}
else {
return this.showTime ? this.dateConfig.format.time : this.dateConfig.format.date;
}
}
get curActiveDate() {
if (this.pickerSrv.currentActiveInput === 'start') {
return this.pickerSrv.curRangeDate[0] || this.pickerSrv.curRangeDate[1] || new Date();
}
else {
return this.pickerSrv.curRangeDate[1] || this.pickerSrv.curRangeDate[0] || new Date();
}
}
constructor(i18n, pickerSrv, cdr, devConfigService) {
this.i18n = i18n;
this.pickerSrv = pickerSrv;
this.cdr = cdr;
this.devConfigService = devConfigService;
this.mode = 'date';
this.showTime = false;
this.disabled = false;
this.autoOpen = false;
this.splitter = '-';
this.startIndexOfWeek = 0;
this.appendToBody = true;
this.allowClear = true;
this.showGlowStyle = true;
this.dropdownToggle = new EventEmitter();
this.confirmEvent = new EventEmitter();
this._dateValue = [];
this.unsubscribe$ = new Subject();
this.isOpen = false;
this.strWidth = 0;
this.onChange = (_) => null;
this.onTouched = () => null;
this.inputChangeCallback = (type) => {
const targetValue = type === 'start' ? this.dateValue[0] : this.dateValue[1];
if (!targetValue) {
return;
}
const inputDate = this.datepickerConvert.parse(targetValue, this.curFormat);
const curDate = type === 'start' ? this.pickerSrv.curRangeDate[0] : this.pickerSrv.curRangeDate[1];
if (inputDate instanceof Date && inputDate.getTime() === curDate?.getTime()) {
return;
}
if (this.validateDate(targetValue)) {
if (type === 'start') {
this.pickerSrv.curRangeDate[0] = inputDate;
}
else {
this.pickerSrv.curRangeDate[1] = inputDate;
}
this.pickerSrv.updateDateValue.next({
type: 'range',
value: this.pickerSrv.curRangeDate,
});
this.onChange(this.pickerSrv.curRangeDate);
if (this.showTime) {
this.pickerSrv.updateTimeChange.next({
activeInput: type,
hour: inputDate.getHours(),
min: inputDate.getMinutes(),
seconds: inputDate.getSeconds(),
});
}
}
};
this.inputBlurCallback = (type) => {
const targetValue = type === 'start' ? this.dateValue[0] : this.dateValue[1];
if (this.dateValue.length !== this.pickerSrv.curRangeDate.length) {
this.onChange(this.pickerSrv.curRangeDate);
}
if (!this.validateDate(targetValue)) {
if (type === 'start' && this.pickerSrv.curRangeDate[0]) {
this.dateValue[0] = this.datepickerConvert.format(this.pickerSrv.curRangeDate[0], this.curFormat, this.locale || this.i18nLocale);
}
else if (type === 'end' && this.pickerSrv.curRangeDate[1]) {
this.dateValue[1] = this.datepickerConvert.format(this.pickerSrv.curRangeDate[1], this.curFormat, this.locale || this.i18nLocale);
}
}
this.getStrWidth();
};
this.i18nText = this.i18n.getI18nText().datePickerPro;
this.datepickerConvert = new DefaultDateConverter();
}
ngOnInit() {
this.initSrvStatus();
this.setI18nText();
setTimeout(() => {
this.isOpen = this.autoOpen;
});
}
ngAfterViewInit() {
this.initObservable();
}
initSrvStatus() {
this.pickerSrv.showTime = this.showTime;
this.pickerSrv.isRange = true;
this.pickerSrv.startIndexOfWeek = this.startIndexOfWeek;
}
initObservable() {
this.pickerSrv.selectedDateChange.pipe(takeUntil(this.unsubscribe$)).subscribe((change) => {
this.pickerSrv.curRangeDate = change.value;
this.dateValue = change.value.map((d) => this.formatDateToString(d));
this.onChange(change.value);
});
this.pickerSrv.closeDropdownEvent.pipe(takeUntil(this.unsubscribe$)).subscribe((isConfirm) => {
this.isOpen = false;
this.dropdownToggle.emit(false);
if (isConfirm) {
this.confirmEvent.emit(this.pickerSrv.curRangeDate);
if (this.dateValue.length !== this.pickerSrv.curRangeDate.length) {
this.onChange(this.pickerSrv.curRangeDate);
}
this.dateValue = this.pickerSrv.curRangeDate.map((d) => this.formatDateToString(d));
}
});
this.pickerSrv.activeInputChange.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
this.getStrWidth();
});
if (!this.hostTemplate) {
fromEvent(this.datepickerInputStart.nativeElement, 'input')
.pipe(takeUntil(this.unsubscribe$), map((t) => {
this.getStrWidth();
return 'start';
}), debounceTime(300))
.subscribe(this.inputChangeCallback);
fromEvent(this.datepickerInputEnd.nativeElement, 'input')
.pipe(takeUntil(this.unsubscribe$), map((t) => {
this.getStrWidth();
return 'end';
}), debounceTime(300))
.subscribe(this.inputChangeCallback);
fromEvent(this.datepickerInputStart.nativeElement, 'blur')
.pipe(takeUntil(this.unsubscribe$), map((t) => 'start'))
.subscribe(this.inputBlurCallback);
fromEvent(this.datepickerInputEnd.nativeElement, 'blur')
.pipe(takeUntil(this.unsubscribe$), map((t) => 'end'))
.subscribe(this.inputBlurCallback);
}
if (this.showTime) {
this.pickerSrv.selectedTimeChange.pipe(takeUntil(this.unsubscribe$)).subscribe((change) => {
const curTime = new Date(this.curActiveDate.getTime()).setHours(change.hour, change.min, change.seconds);
const curDate = new Date(curTime);
if (change.activeInput === 'start') {
this.pickerSrv.curRangeDate[0] = curDate;
if (this.isSameDateAndTimeWrong()) {
this.pickerSrv.curRangeDate[1] = curDate;
this.dateValue[1] = this.formatDateToString(curDate);
}
this.dateValue = [this.formatDateToString(curDate), this.dateValue[1]];
}
else {
this.pickerSrv.curRangeDate[1] = curDate;
if (this.isSameDateAndTimeWrong()) {
this.pickerSrv.curRangeDate[0] = curDate;
this.dateValue[0] = this.formatDateToString(curDate);
}
this.dateValue = [this.dateValue[0], this.formatDateToString(curDate)];
}
this.onChange(this.pickerSrv.curRangeDate);
});
}
}
isSameDateAndTimeWrong() {
if (this.pickerSrv.curRangeDate[0]?.toDateString() === this.pickerSrv.curRangeDate[1]?.toDateString()) {
return this.pickerSrv.curRangeDate[0].getTime() > this.pickerSrv.curRangeDate[1].getTime();
}
return false;
}
getStrWidth() {
let str = this.pickerSrv.currentActiveInput === 'start' ? this.dateValue[0] : this.dateValue[1];
if (!str || !str.length) {
str = this.pickerSrv.currentActiveInput === 'start' ? this.i18nText.startPlaceholder : this.i18nText.endPlaceholder;
}
this.strWidth = this.pickerSrv.mearsureStrWidth(str);
}
formatDateToString(date) {
if (!date) {
return '';
}
return this.datepickerConvert.format(date, this.curFormat);
}
setI18nText() {
this.setI18nTextDetail(this.i18n.getI18nText());
this.i18n
.langChange()
.pipe(takeUntil(this.unsubscribe$))
.subscribe((data) => {
this.setI18nTextDetail(data);
this.dateValue = this.pickerSrv.curRangeDate.map((d) => this.formatDateToString(d));
});
}
setI18nTextDetail(data) {
this.i18nText = data.datePickerPro;
this.i18nLocale = data.locale;
this.i18nFormat = I18nFormat.localFormat[this.i18nLocale];
}
focusChange(type) {
if (this.disabled) {
return;
}
if (!this.isOpen) {
type = 'start';
}
this.currentActiveInput = type;
this.pickerSrv.activeInputChange.next(type);
if (type === 'start') {
setTimeout(() => {
if (this.datepickerInputStart?.nativeElement) {
this.datepickerInputStart.nativeElement.focus();
}
});
}
else {
setTimeout(() => {
if (this.datepickerInputEnd?.nativeElement) {
this.datepickerInputEnd.nativeElement.focus();
}
});
}
}
validateDate(value) {
const valueDate = this.datepickerConvert.parse(value, this.curFormat);
const valueFormat = valueDate && !isNaN(valueDate.getTime()) && this.datepickerConvert.format(valueDate, this.curFormat, this.locale || this.i18nLocale);
if (!valueDate || value !== valueFormat || (value === valueFormat && !this.pickerSrv.dateInRange(valueDate))) {
return false;
}
else {
return true;
}
}
onToggle(isOpen) {
if (isOpen !== this.isOpen || isOpen) {
this.dropdownToggle.emit(isOpen);
}
this.isOpen = isOpen;
this.pickerSrv.toggleEvent.next(isOpen);
}
openDropdown(event) {
if (this.isOpen) {
event.stopPropagation();
}
if (this.disabled) {
return;
}
this.isOpen = true;
}
clear(event, isHandle) {
if (event) {
event.stopPropagation();
}
if (this.disabled && isHandle) {
return;
}
this.pickerSrv.updateDateValue.next({
type: 'range',
value: [],
});
this.pickerSrv.updateTimeChange.next({
hour: null,
min: null,
seconds: null,
});
this.dateValue = [];
this.pickerSrv.curRangeDate = [];
this.currentActiveInput = 'start';
if (event) {
this.onChange(this.pickerSrv.curRangeDate);
}
}
writeValue(value) {
if (!value || !value.length) {
this.clear();
return;
}
this.dateValue = value.map((d) => {
return d ? this.datepickerConvert.format(d, this.curFormat) : '';
});
this.pickerSrv.curRangeDate = value;
this.pickerSrv.updateDateValue.next({
type: 'range',
value,
});
}
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched(fn) {
this.onTouched = fn;
}
ngOnDestroy() {
this.unsubscribe$.next();
this.unsubscribe$.complete();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RangeDatepickerProComponent, deps: [{ token: i1.I18nService }, { token: i2.DatepickerProService }, { token: i0.ChangeDetectorRef }, { token: i3.DevConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RangeDatepickerProComponent, selector: "d-range-datepicker-pro", inputs: { mode: "mode", showTime: "showTime", disabled: "disabled", autoOpen: "autoOpen", format: "format", locale: "locale", cssClass: "cssClass", splitter: "splitter", width: "width", startIndexOfWeek: "startIndexOfWeek", appendToBody: "appendToBody", placeholder: "placeholder", allowClear: "allowClear", calenderRange: "calenderRange", minDate: "minDate", maxDate: "maxDate", markedRangeDateList: "markedRangeDateList", markedDateList: "markedDateList", showGlowStyle: "showGlowStyle" }, outputs: { dropdownToggle: "dropdownToggle", confirmEvent: "confirmEvent" }, host: { properties: { "class.devui-glow-style": "this.hasGlowStyle" } }, providers: [
DatepickerProService,
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => RangeDatepickerProComponent),
multi: true,
},
], queries: [{ propertyName: "customTemplate", first: true, predicate: ["customTemplate"], descendants: true }, { propertyName: "footerTemplate", first: true, predicate: ["footerTemplate"], descendants: true }, { propertyName: "hostTemplate", first: true, predicate: ["hostTemplate"], descendants: true }, { propertyName: "markDateInfoTemplate", first: true, predicate: ["markDateInfoTemplate"], descendants: true }], viewQueries: [{ propertyName: "datepickerInputStart", first: true, predicate: ["dateInputStart"], descendants: true }, { propertyName: "datepickerInputEnd", first: true, predicate: ["dateInputEnd"], descendants: true }], ngImport: i0, template: "<div\r\n class=\"devui-datepicker-pro-wrapper {{ cssClass }}\"\r\n *ngIf=\"appendToBody; else normal\"\r\n dDropDown\r\n appendToBody\r\n [disabled]=\"disabled\"\r\n [isOpen]=\"isOpen\"\r\n [trigger]=\"'manually'\"\r\n (toggleEvent)=\"onToggle($event)\"\r\n (click)=\"openDropdown($event)\"\r\n [closeScope]=\"'blank'\"\r\n [ngStyle]=\"{ width: width || (showTime ? '380px' : '300px') }\"\r\n>\r\n <div dDropDownToggle>\r\n <ng-template [ngTemplateOutlet]=\"hostTemplate || default\" [ngTemplateOutletContext]=\"{ values: dateValue }\"></ng-template>\r\n </div>\r\n\r\n <div class=\"devui-datepicker-pro-dropdown-panel\" [ngStyle]=\"{ paddingBottom: !showTime && !footerTemplate ? 0 : '4px' }\" dDropDownMenu>\r\n <d-datepicker-panel\r\n [isRangeType]=\"true\"\r\n [showTime]=\"showTime\"\r\n [customTemplate]=\"customTemplate\"\r\n [footerTemplate]=\"footerTemplate\"\r\n [mode]=\"mode\"\r\n >\r\n </d-datepicker-panel>\r\n </div>\r\n</div>\r\n\r\n<ng-template #normal>\r\n <div\r\n class=\"devui-datepicker-pro-wrapper {{ cssClass }}\"\r\n dDropDown\r\n [disabled]=\"disabled\"\r\n [isOpen]=\"isOpen\"\r\n [trigger]=\"'manually'\"\r\n (toggleEvent)=\"onToggle($event)\"\r\n (click)=\"openDropdown($event)\"\r\n [closeScope]=\"'blank'\"\r\n [ngStyle]=\"{ width: width || (showTime ? '380px' : '300px') }\"\r\n >\r\n <div dDropDownToggle>\r\n <ng-template [ngTemplateOutlet]=\"hostTemplate || default\" [ngTemplateOutletContext]=\"{ values: dateValue }\"></ng-template>\r\n </div>\r\n\r\n <div class=\"devui-datepicker-pro-dropdown-panel\" [ngStyle]=\"{ paddingBottom: !showTime && !footerTemplate ? 0 : '4px' }\" dDropDownMenu>\r\n <d-datepicker-panel\r\n [isRangeType]=\"true\"\r\n [showTime]=\"showTime\"\r\n [customTemplate]=\"customTemplate\"\r\n [footerTemplate]=\"footerTemplate\"\r\n [mode]=\"mode\"\r\n >\r\n </d-datepicker-panel>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #default>\r\n <div\r\n class=\"devui-range-picker devui-input-group devui-dropdown-origin\"\r\n [ngClass]=\"{\r\n 'devui-disabled': disabled,\r\n 'devui-has-value': dateValue[0] || dateValue[1],\r\n 'devui-allow-clear': allowClear\r\n }\"\r\n >\r\n <input\r\n #dateInputStart\r\n class=\"devui-input devui-form-control devui-date-start\"\r\n [ngClass]=\"{ 'devui-active-input': currentActiveInput === 'start' && isOpen }\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"(placeholder && placeholder[0]) || i18nText.startPlaceholder\"\r\n [(ngModel)]=\"dateValue[0]\"\r\n (click)=\"focusChange('start')\"\r\n autocomplete=\"off\"\r\n />\r\n <span style=\"margin: 0 4px\"> {{ splitter }} </span>\r\n <input\r\n #dateInputEnd\r\n class=\"devui-input devui-form-control devui-date-end\"\r\n [ngClass]=\"{ 'devui-active-input': currentActiveInput === 'end' && isOpen }\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"(placeholder && placeholder[1]) || i18nText.endPlaceholder\"\r\n [(ngModel)]=\"dateValue[1]\"\r\n (click)=\"focusChange('end')\"\r\n autocomplete=\"off\"\r\n />\r\n <div\r\n class=\"devui-date-input-active-bar\"\r\n *ngIf=\"isOpen\"\r\n [style.width.px]=\"strWidth\"\r\n [ngClass]=\"{\r\n 'devui-start-side': currentActiveInput === 'start',\r\n 'devui-end-side': currentActiveInput === 'end'\r\n }\"\r\n ></div>\r\n <div *ngIf=\"allowClear\" class=\"devui-input-group-addon close-icon-wrapper\" (click)=\"clear($event, true)\">\r\n <div class=\"close-icon\">\r\n <svg\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path\r\n d=\"M8,1 C11.8659932,1 15,4.13400675 15,8 C15,11.8659932 11.8659932,15 8,15 C4.13400675,15 1,11.8659932 1,8 C1,4.13400675 4.13400675,1 8,1 Z M5.87867966,5.17157288 C5.68341751,4.97631073 5.36683502,4.97631073 5.17157288,5.17157288 C4.99800652,5.34513923 4.97872137,5.61456363 5.11371742,5.80943177 L5.17157288,5.87867966 L7.29218611,7.99929289 L5.17157288,10.1213203 C4.97631073,10.3165825 4.97631073,10.633165 5.17157288,10.8284271 C5.34513923,11.0019935 5.61456363,11.0212786 5.80943177,10.8862826 L5.87867966,10.8284271 L7.99929289,8.70639967 L10.1213203,10.8284271 C10.3165825,11.0236893 10.633165,11.0236893 10.8284271,10.8284271 C11.0019935,10.6548608 11.0212786,10.3854364 10.8862826,10.1905682 L10.8284271,10.1213203 L8.70710678,8 L10.8284271,5.87867966 C11.0236893,5.68341751 11.0236893,5.36683502 10.8284271,5.17157288 C10.6548608,4.99800652 10.3854364,4.97872137 10.1905682,5.11371742 L10.1213203,5.17157288 L8,7.29289322 L5.87867966,5.17157288 Z\"\r\n fill-rule=\"nonzero\"\r\n ></path>\r\n </g>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"date-icon-wrapper\">\r\n <svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\" version=\"1.1\" class=\"devui-range-picker-icon\">\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path\r\n d=\"M5,0 L5,1 L11,1 L11,0 L12,0 L12,1 L14,1 C15.1045695,1 16,1.8954305 16,3 L16,14 C16,15.1045695 15.1045695,16 14,16 L2,16 C0.8954305,16 0,15.1045695 0,14 L0,3 C0,1.8954305 0.8954305,1 2,1 L4,1 L4,0 L5,0 Z M15,5 L1,5 L1,14 C1,14.5522847 1.44771525,15 2,15 L14,15 C14.5522847,15 15,14.5522847 15,14 L15,5 Z M6,7 C6.55228475,7 7,7.44771525 7,8 L7,10 C7,10.5522847 6.55228475,11 6,11 L4,11 C3.44771525,11 3,10.5522847 3,10 L3,8 C3,7.44771525 3.44771525,7 4,7 L6,7 Z M6,8 L4,8 L4,10 L6,10 L6,8 Z M4,2 L2,2 C1.44771525,2 1,2.44771525 1,3 L1,4 L15,4 L15,3 C15,2.44771525 14.5522847,2 14,2 L12,2 L12,3 L11,3 L11,2 L5,2 L5,3 L4,3 L4,2 Z\"\r\n fill=\"var(--devui-icon-fill-weak, #BABBC0)\"\r\n ></path>\r\n </g>\r\n </svg>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".devui-datepicker-pro-wrapper{display:inline-block;background-color:var(--devui-base-bg, #ffffff)}.devui-datepicker-pro-wrapper .devui-range-picker{padding-right:8px;position:relative;box-sizing:border-box;width:100%;min-height:24px;display:flex;align-items:center}.devui-datepicker-pro-wrapper .devui-range-picker .devui-input{padding:4px 8px;width:calc(50% - 14px)}.devui-datepicker-pro-wrapper .devui-range-picker .devui-input.devui-active-input{color:var(--devui-brand, #0a59f7)}.devui-datepicker-pro-wrapper .devui-range-picker .devui-date-input-active-bar{display:block;max-width:calc(50% - 48px);height:1px;background-color:var(--devui-brand, #0a59f7);position:absolute;bottom:0}.devui-datepicker-pro-wrapper .devui-range-picker .devui-date-input-active-bar.devui-start-side{left:9px}.devui-datepicker-pro-wrapper .devui-range-picker .devui-date-input-active-bar.devui-end-side{left:calc(50% + 4px)}.devui-datepicker-pro-wrapper .devui-range-picker-icon{vertical-align:text-bottom;height:16px}.devui-datepicker-pro-wrapper .devui-range-picker .close-icon-wrapper{padding:0 8px;display:none;position:absolute;right:0;top:0;line-height:25px}.devui-datepicker-pro-wrapper .devui-range-picker .close-icon-wrapper .close-icon{width:16px;height:16px;display:inline-block;line-height:16px}.devui-datepicker-pro-wrapper .devui-range-picker .close-icon-wrapper .close-icon svg{vertical-align:middle;position:relative;top:-.1em}.devui-datepicker-pro-wrapper .devui-range-picker .close-icon-wrapper .close-icon svg path{fill:var(--devui-shape-icon-fill, #c2c2c2)}.devui-datepicker-pro-wrapper .devui-range-picker .close-icon-wrapper .close-icon:hover svg path{fill:var(--devui-shape-icon-fill-active, #808080)}.devui-datepicker-pro-wrapper .devui-range-picker .date-icon-wrapper{padding:0 8px;display:block;position:absolute;right:0;top:0;line-height:25px}.devui-datepicker-pro-wrapper .devui-range-picker .date-icon-wrapper path{fill:var(--devui-icon-fill-weak, #808080)}.devui-datepicker-pro-wrapper .devui-range-picker.devui-has-value.devui-allow-clear:hover .close-icon-wrapper{display:block}.devui-datepicker-pro-wrapper .devui-range-picker.devui-has-value.devui-allow-clear:hover .date-icon-wrapper{display:none}.devui-datepicker-pro-wrapper .devui-range-picker:not(.devui-disabled) .close-icon-wrapper{cursor:pointer}.devui-datepicker-pro-wrapper .devui-input-group>.devui-input{display:inline-block}.devui-datepicker-pro-wrapper .devui-input-group>.devui-input::-ms-clear{display:none}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.DropDownDirective, selector: "[dDropDown]", inputs: ["isOpen", "disabled", "showAnimation", "trigger", "closeScope", "closeOnMouseLeaveMenu", "autofocusToggleElement"], outputs: ["toggleEvent"], exportAs: ["d-dropdown"] }, { kind: "directive", type: i6.DropDownMenuDirective, selector: "[dDropDownMenu]", exportAs: ["d-dropdown-menu"] }, { kind: "directive", type: i6.DropDownToggleDirective, selector: "[dDropDownToggle]", inputs: ["toggleOnFocus", "autoFocus"], exportAs: ["d-dropdown-toggle"] }, { kind: "component", type: i6.DropDownAppendToBodyComponent, selector: "[dDropDown][appendToBody]", inputs: ["alignOrigin", "appendToBodyDirections", "appendToBodyScrollStrategy"], exportAs: ["d-dropdown-append-to-body"] }, { kind: "component", type: i7.DatepickerPanelComponent, selector: "d-datepicker-panel", inputs: ["isRangeType", "showTime", "showCustom", "customTemplate", "footerTemplate", "mode"] }] }); }
}
__decorate([
WithConfig(),
__metadata("design:type", Object)
], RangeDatepickerProComponent.prototype, "showGlowStyle", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RangeDatepickerProComponent, decorators: [{
type: Component,
args: [{ selector: 'd-range-datepicker-pro', providers: [
DatepickerProService,
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => RangeDatepickerProComponent),
multi: true,
},
], preserveWhitespaces: false, template: "<div\r\n class=\"devui-datepicker-pro-wrapper {{ cssClass }}\"\r\n *ngIf=\"appendToBody; else normal\"\r\n dDropDown\r\n appendToBody\r\n [disabled]=\"disabled\"\r\n [isOpen]=\"isOpen\"\r\n [trigger]=\"'manually'\"\r\n (toggleEvent)=\"onToggle($event)\"\r\n (click)=\"openDropdown($event)\"\r\n [closeScope]=\"'blank'\"\r\n [ngStyle]=\"{ width: width || (showTime ? '380px' : '300px') }\"\r\n>\r\n <div dDropDownToggle>\r\n <ng-template [ngTemplateOutlet]=\"hostTemplate || default\" [ngTemplateOutletContext]=\"{ values: dateValue }\"></ng-template>\r\n </div>\r\n\r\n <div class=\"devui-datepicker-pro-dropdown-panel\" [ngStyle]=\"{ paddingBottom: !showTime && !footerTemplate ? 0 : '4px' }\" dDropDownMenu>\r\n <d-datepicker-panel\r\n [isRangeType]=\"true\"\r\n [showTime]=\"showTime\"\r\n [customTemplate]=\"customTemplate\"\r\n [footerTemplate]=\"footerTemplate\"\r\n [mode]=\"mode\"\r\n >\r\n </d-datepicker-panel>\r\n </div>\r\n</div>\r\n\r\n<ng-template #normal>\r\n <div\r\n class=\"devui-datepicker-pro-wrapper {{ cssClass }}\"\r\n dDropDown\r\n [disabled]=\"disabled\"\r\n [isOpen]=\"isOpen\"\r\n [trigger]=\"'manually'\"\r\n (toggleEvent)=\"onToggle($event)\"\r\n (click)=\"openDropdown($event)\"\r\n [closeScope]=\"'blank'\"\r\n [ngStyle]=\"{ width: width || (showTime ? '380px' : '300px') }\"\r\n >\r\n <div dDropDownToggle>\r\n <ng-template [ngTemplateOutlet]=\"hostTemplate || default\" [ngTemplateOutletContext]=\"{ values: dateValue }\"></ng-template>\r\n </div>\r\n\r\n <div class=\"devui-datepicker-pro-dropdown-panel\" [ngStyle]=\"{ paddingBottom: !showTime && !footerTemplate ? 0 : '4px' }\" dDropDownMenu>\r\n <d-datepicker-panel\r\n [isRangeType]=\"true\"\r\n [showTime]=\"showTime\"\r\n [customTemplate]=\"customTemplate\"\r\n [footerTemplate]=\"footerTemplate\"\r\n [mode]=\"mode\"\r\n >\r\n </d-datepicker-panel>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #default>\r\n <div\r\n class=\"devui-range-picker devui-input-group devui-dropdown-origin\"\r\n [ngClass]=\"{\r\n 'devui-disabled': disabled,\r\n 'devui-has-value': dateValue[0] || dateValue[1],\r\n 'devui-allow-clear': allowClear\r\n }\"\r\n >\r\n <input\r\n #dateInputStart\r\n class=\"devui-input devui-form-control devui-date-start\"\r\n [ngClass]=\"{ 'devui-active-input': currentActiveInput === 'start' && isOpen }\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"(placeholder && placeholder[0]) || i18nText.startPlaceholder\"\r\n [(ngModel)]=\"dateValue[0]\"\r\n (click)=\"focusChange('start')\"\r\n autocomplete=\"off\"\r\n />\r\n <span style=\"margin: 0 4px\"> {{ splitter }} </span>\r\n <input\r\n #dateInputEnd\r\n class=\"devui-input devui-form-control devui-date-end\"\r\n [ngClass]=\"{ 'devui-active-input': currentActiveInput === 'end' && isOpen }\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"(placeholder && placeholder[1]) || i18nText.endPlaceholder\"\r\n [(ngModel)]=\"dateValue[1]\"\r\n (click)=\"focusChange('end')\"\r\n autocomplete=\"off\"\r\n />\r\n <div\r\n class=\"devui-date-input-active-bar\"\r\n *ngIf=\"isOpen\"\r\n [style.width.px]=\"strWidth\"\r\n [ngClass]=\"{\r\n 'devui-start-side': currentActiveInput === 'start',\r\n 'devui-end-side': currentActiveInput === 'end'\r\n }\"\r\n ></div>\r\n <div *ngIf=\"allowClear\" class=\"devui-input-group-addon close-icon-wrapper\" (click)=\"clear($event, true)\">\r\n <div class=\"close-icon\">\r\n <svg\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path\r\n d=\"M8,1 C11.8659932,1 15,4.13400675 15,8 C15,11.8659932 11.8659932,15 8,15 C4.13400675,15 1,11.8659932 1,8 C1,4.13400675 4.13400675,1 8,1 Z M5.87867966,5.17157288 C5.68341751,4.97631073 5.36683502,4.97631073 5.17157288,5.17157288 C4.99800652,5.34513923 4.97872137,5.61456363 5.11371742,5.80943177 L5.17157288,5.87867966 L7.29218611,7.99929289 L5.17157288,10.1213203 C4.97631073,10.3165825 4.97631073,10.633165 5.17157288,10.8284271 C5.34513923,11.0019935 5.61456363,11.0212786 5.80943177,10.8862826 L5.87867966,10.8284271 L7.99929289,8.70639967 L10.1213203,10.8284271 C10.3165825,11.0236893 10.633165,11.0236893 10.8284271,10.8284271 C11.0019935,10.6548608 11.0212786,10.3854364 10.8862826,10.1905682 L10.8284271,10.1213203 L8.70710678,8 L10.8284271,5.87867966 C11.0236893,5.68341751 11.0236893,5.36683502 10.8284271,5.17157288 C10.6548608,4.99800652 10.3854364,4.97872137 10.1905682,5.11371742 L10.1213203,5.17157288 L8,7.29289322 L5.87867966,5.17157288 Z\"\r\n fill-rule=\"nonzero\"\r\n ></path>\r\n </g>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"date-icon-wrapper\">\r\n <svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\" version=\"1.1\" class=\"devui-range-picker-icon\">\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path\r\n d=\"M5,0 L5,1 L11,1 L11,0 L12,0 L12,1 L14,1 C15.1045695,1 16,1.8954305 16,3 L16,14 C16,15.1045695 15.1045695,16 14,16 L2,16 C0.8954305,16 0,15.1045695 0,14 L0,3 C0,1.8954305 0.8954305,1 2,1 L4,1 L4,0 L5,0 Z M15,5 L1,5 L1,14 C1,14.5522847 1.44771525,15 2,15 L14,15 C14.5522847,15 15,14.5522847 15,14 L15,5 Z M6,7 C6.55228475,7 7,7.44771525 7,8 L7,10 C7,10.5522847 6.55228475,11 6,11 L4,11 C3.44771525,11 3,10.5522847 3,10 L3,8 C3,7.44771525 3.44771525,7 4,7 L6,7 Z M6,8 L4,8 L4,10 L6,10 L6,8 Z M4,2 L2,2 C1.44771525,2 1,2.44771525 1,3 L1,4 L15,4 L15,3 C15,2.44771525 14.5522847,2 14,2 L12,2 L12,3 L11,3 L11,2 L5,2 L5,3 L4,3 L4,2 Z\"\r\n fill=\"var(--devui-icon-fill-weak, #BABBC0)\"\r\n ></path>\r\n </g>\r\n </svg>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".devui-datepicker-pro-wrapper{display:inline-block;background-color:var(--devui-base-bg, #ffffff)}.devui-datepicker-pro-wrapper .devui-range-picker{padding-right:8px;position:relative;box-sizing:border-box;width:100%;min-height:24px;display:flex;align-items:center}.devui-datepicker-pro-wrapper .devui-range-picker .devui-input{padding:4px 8px;width:calc(50% - 14px)}.devui-datepicker-pro-wrapper .devui-range-picker .devui-input.devui-active-input{color:var(--devui-brand, #0a59f7)}.devui-datepicker-pro-wrapper .devui-range-picker .devui-date-input-active-bar{display:block;max-width:calc(50% - 48px);height:1px;background-color:var(--devui-brand, #0a59f7);position:absolute;bottom:0}.devui-datepicker-pro-wrapper .devui-range-picker .devui-date-input-active-bar.devui-start-side{left:9px}.devui-datepicker-pro-wrapper .devui-range-picker .devui-date-input-active-bar.devui-end-side{left:calc(50% + 4px)}.devui-datepicker-pro-wrapper .devui-range-picker-icon{vertical-align:text-bottom;height:16px}.devui-datepicker-pro-wrapper .devui-range-picker .close-icon-wrapper{padding:0 8px;display:none;position:absolute;right:0;top:0;line-height:25px}.devui-datepicker-pro-wrapper .devui-range-picker .close-icon-wrapper .close-icon{width:16px;height:16px;display:inline-block;line-height:16px}.devui-datepicker-pro-wrapper .devui-range-picker .close-icon-wrapper .close-icon svg{vertical-align:middle;position:relative;top:-.1em}.devui-datepicker-pro-wrapper .devui-range-picker .close-icon-wrapper .close-icon svg path{fill:var(--devui-shape-icon-fill, #c2c2c2)}.devui-datepicker-pro-wrapper .devui-range-picker .close-icon-wrapper .close-icon:hover svg path{fill:var(--devui-shape-icon-fill-active, #808080)}.devui-datepicker-pro-wrapper .devui-range-picker .date-icon-wrapper{padding:0 8px;display:block;position:absolute;right:0;top:0;line-height:25px}.devui-datepicker-pro-wrapper .devui-range-picker .date-icon-wrapper path{fill:var(--devui-icon-fill-weak, #808080)}.devui-datepicker-pro-wrapper .devui-range-picker.devui-has-value.devui-allow-clear:hover .close-icon-wrapper{display:block}.devui-datepicker-pro-wrapper .devui-range-picker.devui-has-value.devui-allow-clear:hover .date-icon-wrapper{display:none}.devui-datepicker-pro-wrapper .devui-range-picker:not(.devui-disabled) .close-icon-wrapper{cursor:pointer}.devui-datepicker-pro-wrapper .devui-input-group>.devui-input{display:inline-block}.devui-datepicker-pro-wrapper .devui-input-group>.devui-input::-ms-clear{display:none}\n"] }]
}], ctorParameters: () => [{ type: i1.I18nService }, { type: i2.DatepickerProService }, { type: i0.ChangeDetectorRef }, { type: i3.DevConfigService }], propDecorators: { mode: [{
type: Input
}], showTime: [{
type: Input
}], disabled: [{
type: Input
}], autoOpen: [{
type: Input
}], format: [{
type: Input
}], locale: [{
type: Input
}], cssClass: [{
type: Input
}], splitter: [{
type: Input
}], width: [{
type: Input
}], startIndexOfWeek: [{
type: Input
}], appendToBody: [{
type: Input
}], placeholder: [{
type: Input
}], allowClear: [{
type: Input
}], calenderRange: [{
type: Input
}], minDate: [{
type: Input
}], maxDate: [{
type: Input
}], markedRangeDateList: [{
type: Input
}], markedDateList: [{
type: Input
}], showGlowStyle: [{
type: Input
}], hasGlowStyle: [{
type: HostBinding,
args: ['class.devui-glow-style']
}], dropdownToggle: [{
type: Output
}], confirmEvent: [{
type: Output
}], customTemplate: [{
type: ContentChild,
args: ['customTemplate']
}], footerTemplate: [{
type: ContentChild,
args: ['footerTemplate']
}], hostTemplate: [{
type: ContentChild,
args: ['hostTemplate']
}], markDateInfoTemplate: [{
type: ContentChild,
args: ['markDateInfoTemplate']
}], datepickerInputStart: [{
type: ViewChild,
args: ['dateInputStart']
}], datepickerInputEnd: [{
type: ViewChild,
args: ['dateInputEnd']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtZGF0ZXBpY2tlci1wcm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvZGF0ZXBpY2tlci1wcm8vcmFuZ2UtZGF0ZXBpY2tlci1wcm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2dWkvZGF0ZXBpY2tlci1wcm8vcmFuZ2UtZGF0ZXBpY2tlci1wcm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUdMLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBaUIsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7O0FBaUJoRSxNQUFNLE9BQU8sMkJBQTJCO0lBY3RDLElBQWEsYUFBYSxDQUFDLEtBQUs7UUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDRCxJQUFhLE9BQU8sQ0FBQyxLQUFXO1FBQzlCLElBQUks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